数据库(MySQL)基础:多表查询(一)

一、多表关系

概述

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)
  • 多对多
  • 一对一
1.1一对多(多对一)
  • 案例:部门与员工的关系
  • 关系:一个部门对应多个员工,一个员工对应一个部门
  • 实现:在多的一方建立外键,指向一的一方的主键 

 具体的实例可以参考我的上一篇博客(数据库(MySQL)基础:约束-CSDN博客),我在这里就不进行赘述了。

1.2多对多
  • 案例:学生与课程之间的关系
  • 关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择
  • 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

实例:

在开始之前,我先来进行表结构的创建,代码如下,大家可以自行参考

create table if not exists student(id int auto_increment comment 'ID' primary key,name varchar(50) not null comment '姓名',no varchar(10) comment '学号'
)comment '学生表';
insert into student(name,no) values('黛绮丝','2000100101'),('谢逊','2000100102'),('殷天正','2000100103'),('韦一笑','2000100104');create table if not exists course(id int auto_increment comment 'ID' primary key,name varchar(50) not null comment '课程'
)comment '课程表';insert into course(name) values('Java'),('PHP'),('MySQL'),('Hadoop');

此时,我们发现学生表和课程表没有关系,那么我们再建立一张学生课程中间表

  create table student_course(id int auto_increment comment '主键' primary key,studentid int not null comment '学生ID',-- 关联学生表主键courseid int not null comment '课程ID', -- 关联课程表主键constraint fk_studentid foreign key(studentid) references student(id),constraint fk_courseid foreign key(courseid) references course(id))comment '学生课程中间表';insert into student_course(studentid,courseid) values (1,1),(1,2),(1,3),(2,2),(2,3),(3,4);

三表关系如下图:

 1.3一对一 
  • 案例:用户 与 用户详情的关系
  • 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
  • 实现:在任意一方加入外键,关联另外一方的外键,并且设置外键为唯一的(unique)

简单示例如下,如有不懂,欢迎来评论区我们一起探讨

create table if not exists tb_user(id int auto_increment comment 'ID' primary key,name varchar(50) not null comment '姓名',age int comment '年龄',gender char(1) comment '1:男,2:女',phone char(11) comment '手机号码'
)comment '用户基本信息表';insert into tb_user(name,age,gender,phone) values('黄渤',45,'1','18800001111'),('冰冰',35,'1','18800002222'),('码云',55,'1','18800008888'),('李彦宏',50,'1','18800009999');create table if not exists tb_user_edu(id int auto_increment comment 'ID' primary key,degree varchar(5) not null comment '学历',major varchar(5) not null comment '专业',primaryschool varchar(50) comment '小学学校',middleschool varchar(50) comment '中学学校',university varchar(50) comment '大学学校',userid int unique comment '用户ID'
)comment '用户教育信息表';insert into tb_user_edu(degree,major,primaryschool,middleschool,university,userid) values('本科','舞蹈','静安区第一小学','静安区第一中学','北京舞蹈学院','1'),('硕士','表演','朝阳区第一小学','朝阳区第一中学','北京电影学院','2'),('本科','英语','杭州市第一小学','杭州市第一中学','杭州师范大学','3'),('本科','应用数学','阳泉第一小学','阳泉区第一中学','清华大学 ','4');

二、多表查询概述

  • 概述:指从多表中查询数据
  • 笛卡尔积:笛卡尔积是指在数学中,两个集合A 和 B 集合的所有组合情况。(在多表查询中,需要消除笛卡尔积)。

 即

select * from emp,dept where emp.dept_id = dept.id;
  • 多表查询分类

1.连接查询

内连接:相当于查询A、B 交集部分数据

外连接:

            左外连接:查询左表所有数据,以及两张表交集部分数据

            右外连接:查询右表所有数据,以及两张表交集部分数据

自连接:当前表与自身的连接查询,自连接必须使用表别名

2.子查询

本期知识点就分享到这里了,我们下期再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OceanBase开发者大会实录-陈文光:AI时代需要怎样的数据处理技术?

本文来自2024 OceanBase开发者大会,清华大学教授、蚂蚁技术研究院院长陈文光的演讲实录—《AI 时代的数据处理技术》。完整视频回看,请点击这里>> 大家好,我是清华大学、蚂蚁技术研究院陈文光,今天为大家带来《AI 时…

【C语言】atoi和atof函数的使用

人生应该树立目标,否则你的精力会白白浪费。💓💓💓 目录 •🌙知识回顾 🍋知识点一:atoi函数的使用和实现 • 🌰1.函数介绍 • 🌰2.代码演示 • 🌰3.atoi函数的…

Flask框架进阶-Flask流式输出和受访配置--纯净详解版

Flask流式输出🚀 在工作的项目当中遇到了一种情况,当前端页面需要对某个展示信息进行批量更新,如果直接将全部的数据算完之后,再返回更新,则会导致,前端点击刷新之后等待时间过长,开始考虑到用进…

liceo靶机复现

liceo-hackmyvm 靶机地址:https://hackmyvm.eu/machines/machine.php?vmLiceo 本机环境:NAT模式下,使用VirtualBox 信息收集: 首先局域网内探测靶机IP 发现IP为10.0.2.4 开启nmap扫描一下看看开了什么端口 扫描期间看一下web页…

[蓝桥杯2024]-PWN:fd解析(命令符转义,标准输出重定向,利用system(‘$0‘)获取shell权限)

查看保护 查看ida 这里有一次栈溢出,并且题目给了我们system函数。 这里的知识点没有那么复杂 方法一(命令转义): 完整exp: from pwn import* pprocess(./pwn) pop_rdi0x400933 info0x601090 system0x400778payloa…

78、贪心-跳跃游戏

思路 方法1: canJump01 - 使用递归(回溯法) 这个方法是通过递归实现的,它从数组的第一个位置开始,尝试所有可能的跳跃步数,直到达到数组的最后一个位置或遍历完所有的可能性。 思路: 如果数组为空或者长…

【docker】docker compose 搭建私服

安装 Docker Registry 创建目录 mkdir -pv /usr/local/docker/registrymkdir -pv /usr/local/docker/data 创建 docker-compose.yml文件 进入目录创建docker-compose.yml cd /usr/local/docker/registrytouch docker-compose.yml 编辑docker-compose.yml vim docker-compo…

2024年【起重机械安全管理】考试内容及起重机械安全管理操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 起重机械安全管理考试内容根据新起重机械安全管理考试大纲要求,安全生产模拟考试一点通将起重机械安全管理模拟考试试题进行汇编,组成一套起重机械安全管理全真模拟考试试题,学员可…

52.HarmonyOS鸿蒙系统 App(ArkTS)配置文件添加多个权限方法

52.HarmonyOS鸿蒙系统 App(ArkTS)配置文件添加多个权限方法 module.json5

VS2022 嘿嘿

还是大二的时候就开始用这个,但居然是为了用PB,-_-|| 用了段时间换成了C#,依稀还记得大佬们纠正我的读法,别读C井,应该读C夏普。。。 安装过程其实也没啥,就是关键Key得花时间找,我好不容易搞…

Concise CoT(CCoT)提示词工程

原文地址:concise-chain-of-thought-ccot-prompting 2024 年 1 月 24 日 传统的 CoT 是以增加输出令牌使用为代价的,CCoT 提示是一种提示工程技术,旨在减少 LLM 响应的冗长和推理时间。 基于LLMs的生成式人工智能应用程序必须使用多管齐下的方…

php使用Canal监听msyql

canal需要java8 去官网下载java8 安装JAVA #创建目录 mkdir -p /usr/local/java/ #解压到目录 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/配置环境变量在 /etc/profile 最后加入 export JAVA_HOME/usr/local/java/jdk1.8.0_411 export CLASSPATH.:$JAVA_HOM…

牛客NC320 装箱问题【中等 动态规划,背包问题 C++/Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/d195a735f05b46cf8f210c4ad250681c 几乎完全相同的题目: https://www.lintcode.com/problem/92/description 思路 动态规划都是递归递推而来。php答案是动态规划版本,递归版本有 测试用…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt+hadoop + redis 医院就诊系统 设计与实现

一.项目介绍 前端:患者注册 、登录、查看首页、医生排班、药品信息、预约挂号、就诊记录、电子病历、处方开药、我的收藏 后端分为: 医生登录:查看当前排班信息、查看患者的挂号情况、设置患者就诊记录、电子病历、给患者开药和个人信息维护 …

公共交通无障碍设施:科技翅膀助力盲人出行新飞跃

在城市的脉络中,公共交通扮演着连接每一个角落的重要角色。然而,对于视力受限的盲人朋友而言,这幅繁忙而复杂的交通网络往往隐藏着诸多不易察觉的障碍。值得庆幸的是,随着公共交通无障碍设施的不断完善,以及高科技辅助…

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM 2024/5/2 16:29 1、默认编译为AMD64/INTEL的x64架构的可执行文件: rootrootrootroot-ThinkBook-16-G5-IRH:~$ rootrootrootroot-ThinkBook-16-G5-IRH:~$ unzip Quectel_QConnectManager_Lin…

CSS-复合选择器

作用&#xff1a; 后代选择器&#xff1a; 子代选择器 并集选择器 用逗号隔开&#xff0c;在style里面写的时候&#xff0c;每一个标签空一行。 <title>Document</title><style>p,div,span{color: aqua;}</style> </head> <body><p>…

C语言——队列的实现

队列按照先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则管理数据。这意味着最先进入队列的元素会被最先移出&#xff0c;类似于排队等候服务的情况。队列通常有两个主要操作&#xff1a;入队&#xff08;enqueue&#xff09;&#xff0c;将元素添加…

python - 3D图表绘制

Pyecharts 和 3D 图表绘制 Pyecharts 是一个用于生成各种图表的 Python 库&#xff0c;它基于 Echarts&#xff0c;支持大量的图表类型&#xff0c;非常适合用于数据分析和可视化。Pyecharts 主要优点是易于使用&#xff0c;可以直接在 Python 环境中绘制富有交互性的图表&…

ES练习项目-酒店搜索

目录 1 需求分析2 酒店搜索和分页2.1 请求和响应分析2.2 定义实体类&#xff0c;接收请求参数的JSON对象2.3 编写controller&#xff0c;接收页面的请求2.4 编写业务实现&#xff0c;利用RestHighLevelClient实现搜索、分页 3. 酒店结果过滤3.1 请求和响应分析3.2 修改请求参数…