[MySQL--基础]多表查询

前言

在这里插入图片描述

⭐Hello!这里是欧_aita的博客。
⭐今日语录:生活中最大的挑战就是发现自己是谁。然后,坚定不移地成为那个人。
⭐个人主页:欧_aita
ψ(._. )>⭐个人专栏:
数据结构与算法
MySQL数据库

在这里插入图片描述

在这里插入图片描述

多表查询

  • 前言
  • 多表关系
    • 概述🚀
    • 一对多🚀
    • 多对多🚀
    • 一对一🚀
  • 多表查询概述
    • 连接查询🐍
      • 内连接🕷
        • 隐式内连接
          • 代码实战
          • 效果图
        • 显式内连接
          • 实战代码
          • 效果图
      • 外连接🕷
        • 左外连接
          • 实战代码
          • 效果图
        • 右外连接
          • 实战代码
          • 效果图
      • 自连接🕷
        • 实战代码
        • 效果图
    • 联合查询--union,union all🐍
      • 实战代码
      • 效果图
      • 注意点🕷
      • 子查询🕷
        • 标量子查询
          • 实战代码
          • 效果图
        • 列子查询
          • 实战代码
          • 效果图
        • 行子查询
          • 实战代码
          • 效果图
        • 表子查询
          • 实战代码
          • 效果图

多表关系

概述🚀

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

一对多🚀

一个部门对应多个员工,在多的一方建立外键,指向一的一方的主键。

多对多🚀

学生与课程之间的关系。建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

create table student(id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',no varchar(10) comment '学号'
)comment '学生表';
insert into student values (null,'黛绮丝','2000100101'),(null,'谢逊','2000100102'),(null,'殷天正','2000100103'),(null,'韦一笑','2000100104');create table course(id int auto_increment primary key comment '主键ID',name varchar(10) comment '课程名称'
)comment '课程表';
insert into course values (null,'Java'),(null,'PHP'),(null,'MySQL'),(null,'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_courseid foreign key (courseid)references course(id),constraint fk_studentid foreign key (studentid)references student(id)
)comment '学生课程中间表';
insert into student_course values (null,1,1),(null,1,2),(null,1,3),(null,2,2),(null,2,3),(null,3,4);

展示多对多关系图片

1.学生
在这里插入图片描述
2.课程
在这里插入图片描述

3.将同学与课程连接起来==(多对多的关系体现)==
在这里插入图片描述

一对一🚀

用户与用户详情的关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。
在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的

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

多表查询概述

设定两个集合A,B。
在这里插入图片描述

连接查询🐍

内连接🕷

相当于查询A、B交集部分数据

如下图即是绿色的交集部分。

隐式内连接
SELECT 字段列表 FROM1,2 WHERE 条件...;
代码实战

– 内连接演示
– 1.查询每一个员工的姓名,及关联的部门的名称(隐式内连接实现)
– 表结构:emp , dept
– 连接条件: emp.dept_id = dept.id

select emp.name , dept.name from emp , dept where emp.dept_id = dept.id order by emp.id ;

这里如果嫌字段列表名太长,可以选择起别名

-- 起别名,起别名之后只能使用别名去查询,因为DQL语句中先执行from语句--------------------
select e.name , d.name from emp e , dept d where e.dept_id = d.id ;
效果图

在这里插入图片描述

显式内连接
SELECT 字段列表 FROM1 [INNER] JOIN2 ON 连接条件...;
实战代码

– 2.查询每一个员工的姓名,及关联的部门的名称(显式内连接实现)
– 表结构:emp , dept
– 连接条件: emp.dept_id = dept.id

select e.name , d.name  from emp e inner join dept d on e.dept_id = d.id order by e.id;

同时inner可以选择忽略

select e.name , d.name  from emp e join dept d on e.dept_id = d.id order by e.id;
效果图

在这里插入图片描述

外连接🕷

在这里插入图片描述

左外连接

查询左表所有数据,以及两张表交集部分数据。

即是集合A左半边和集合A与集合B的交集。

SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件...;
实战代码

– 外连接演示--------------
– 1.查询emp表的所有数据,和对应的部门信息(左外连接)
– 表结构:emp,dept
– 连接方式:emp.dept_id = dept.id

select e.* , d.name from emp e left outer join dept d on e.dept_id = d.id ;

同样的 outer 可以选择忽略。

select e.* , d.name from emp e left join dept d on e.dept_id = d.id ;
效果图

在这里插入图片描述

右外连接

查询右表所有数据,以及两张表交集部分数据。

即是集合B右半边和集合A与集合B的交集。

SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件...;
实战代码

– 2.查询dept表的所有数据,和对应的员工信息表(右外连接)

select d.* , e.* from emp e right outer join dept d on e.dept_id = d.id ;
效果图

在这里插入图片描述

自连接🕷

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

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...; 
实战代码

– 自连接
– 1.查询员工 及其 所属领导的名字
– 表结构 :emp

select a.name '员工' , b.name '领导' from emp a left join emp b on a.managerid = b.managerid ;
效果图

在这里插入图片描述

在这里插入图片描述

联合查询–union,union all🐍

对于联合查询,就是把多次查询的结果合并起来,形成一个新的查询结果集

SELECT 字段列表 FROM 表A ...
UNION[ALL]
SELECT 字段列表 FROM 表B ...;

实战代码

– union all , union
– 1.将薪资低于 5000 的员工 , 和 年龄大于 50 岁的员工全部查询出来。

select * from emp where salary < 5000
union
select * from emp where age > 50 ;

效果图

在这里插入图片描述

注意点🕷

union all 是直接将查询的两个表合并,而union 是将和并后的表进行去重。

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

子查询🕷

1.概念 : SQL 语句中嵌套SELECT语句,称为嵌套语句,又称子查询

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

子查询外部的语句可以是INSERT / UPDATE / SELECT 的任何一个。

2.根据子查询结果不同,分为:

  • 标量子查询(子查询结果为单个值)
  • 列子查询(子查询结果为一列)
  • 行子查询(子查询结果为一行)
  • 表子查询(子查询结果为多行多列)

3.根据子查询位置,分为:WHERE 之后、FROM之后、SELECT之后。

标量子查询
  • 子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询
  • 常见的操作符:= <> > >= < <=
实战代码

– 标量子查询
– 1.查询“销售部”的所有员工信息
– 查询出销售部的部门ID

select * from emp where dept_id = (select id from dept where name = '销售部') ;
效果图

在这里插入图片描述

列子查询
  • 子查询返回的结果是一列(可以是多行),这种子查询称为列子查询
  • 常用的操作符:IN 、NOT IN、ANY、SOME、ALL
    在这里插入图片描述
实战代码

– 列子查询
– 1.查询“销售部”和“市场部”的所有员工信息
– a.查询“销售部”和“市场部”的部门ID
– b.根据部门ID,查询员工信息

select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');
效果图

在这里插入图片描述

行子查询
  • 子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
  • 常用操作符:= 、<> 、IN 、NOT IN
实战代码

– 行子查询
– 1.查询与 “张无忌” 的薪资及直属领导的员工信息

select * from emp where (salary,managerid)=( select salary ,managerid from emp where name = '张无忌');
效果图

在这里插入图片描述

表子查询
  • 子查询返回的结果是多行多列, 这种子查询称为表子查询。
  • 常用的操作符:IN 、
实战代码

– 表子查询
– 1. 查询与“宋远桥” , “鹿杖客” 的职位和薪资相同的员工信息

select * from emp where ( job , salary ) in (select job,salary from emp where name = '鹿杖客' or name = '宋远桥');
效果图

在这里插入图片描述
这篇文章就到此结束了,如果对你有所帮助就点个赞吧。
在这里插入图片描述

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

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

相关文章

为什么 SQL 不适合图数据库

背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言&#xff1f;” 过去&#xff0c;我们的一些客户经常问这个问题&#xff0c;但随着时间的推移&#xff0c;这个问题变得越来越少。 尽管一度被忽视&#xff0c;但图数据库拥有无缝设计并适应其底层数据结构的查询…

四层LVS与七层Nginx负载均衡的区别

一、四层负载均衡与七层负载均衡&#xff1a; &#xff08;1&#xff09;四层负载均衡&#xff1a; 四层负载均衡工作在 OSI 七层模型的第四层&#xff08;传输层&#xff09;&#xff0c;指的是负载均衡设备通过报文中的目标IP地址、端口和负载均衡算法&#xff0c;选择到达的…

赛事回顾 | 首届“智航杯“全国无人机智能算法竞赛落幕

11月28日&#xff0c;首届“智航杯”全国无人机智能算法竞赛实物赛在海南省三亚市成功落下帷幕。此次竞赛自2023年4月启动以来&#xff0c;共有来自全国145所高等院校和50多所企事业单位的1253支团队、3655人报名参赛&#xff0c;最终有6支队伍脱颖而出&#xff0c;入围了实物赛…

Elasticsearch:评估 RAG - 指标之旅

作者&#xff1a;Quentin Herreros&#xff0c;Thomas Veasey&#xff0c;Thanos Papaoikonomou 2020年&#xff0c;Meta发表了一篇题为 “知识密集型NLP任务的检索增强生成” 的论文。 本文介绍了一种通过利用外部数据库将语言模型 (LLM) 知识扩展到初始训练数据之外的方法。 …

11.9每日一题(无穷比无穷型的极限:提出并消去无穷因子、抓大头、拆多项式)

注&#xff1a;1、 为x的绝对值&#xff0c;因为x趋向负无穷&#xff0c;所以为 -x 2、用有理运算法则拆分式子时&#xff0c;注意判断极限是否存在

Python 网络爬虫(二):HTTP 基础知识

《Python入门核心技术》专栏总目录・点这里 文章目录 1. HTTP 协议简述2. HTTP 请求过程3. HTTP 的结构3.1 请求行3.2 请求头3.3 请求体3.4 状态行3.5 响应头3.6 响应体 4. Cookie 状态管理5. HTTP 请求示例6. 总结 大家好&#xff0c;我是水滴~~ 在准备学习网络爬虫之前&…

springboot慢性胃炎管理系统-计算机毕设 附源码 35541

SpringBoot慢性胃炎管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医疗行业当然也不例外。慢性胃炎管理系统是以实际运用为开发背景&#xff0c;运用软件工程…

PLC通过485Modbus转Profinet网关与温控表通讯在发酵罐的应用

前提&#xff1a;在自动化控制系统中&#xff0c;PLC通常需要和各种设备进行数据通讯&#xff0c;其中就包括温控表。而这些设备之间的通讯常常需要通过485Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;来实现。 方案&#xff1a;在一些应用场合中&#xff0c;Profi…

Spring Boot 3 整合 Spring Cache 与 Redis 缓存实战

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

2023/11/30JAVAweb学习(postman,各种参数,统一响应数据,三层架构,分层解耦,bean组件扫描,Bean注入及解决方式)

数组json形式 想切换实现类,只需要只在你需要的类上添加 Component 如果在同一层,可以更改扫描范围,但是不推荐这种方法 注入时存在多个同类型bean解决方式

C++不同平台下的RTTI实现

给定一个含有虚函数的对象的地址&#xff0c;找到对应的类名&#xff0c;不同平台下方法也不同&#xff0c;这是由于RTTI实现并没有统一的标准。 Linux&#xff1a; #include <iostream> #include <typeinfo>class Person { public:virtual void func(){std::cout…

正则表达式(3):入门

正则表达式&#xff08;3&#xff09;&#xff1a;入门 小结 本博文转载自 从这篇文章开始&#xff0c;我们将介绍怎样在Linux中使用”正则表达式”&#xff0c;如果你想要学习怎样在Linux中使用正则表达式&#xff0c;这些文章就是你所需要的。 在认识”正则表达式”之前&am…

ODN光纤链路全程衰减如何计算

在FTTH等宽带光纤接入工程设计中&#xff0c;需根据应用系统的相应波长计算ODN光纤链路的全程衰减&#xff0c;一方面验证是否满足系统的光功率预算指标要求&#xff0c;另一方面作为工程验收的参考指标。 1 计算方法 ODN光纤链路的全程衰减是指从OLT至ONU的光纤链路中&#xf…

LinuxBasicsForHackers笔记 -- 控制文件和目录权限

对于每个文件和目录&#xff0c;我们可以指定文件所有者、特定用户组以及所有其他用户的权限状态。 不同类型的用户 在Linux中&#xff0c;root用户是拥有一切权力的。 root 用户基本上可以在系统上执行任何操作。 系统上的其他用户具有有限的能力和权限&#xff0c;并且几乎…

PHP项目启动记录

PHP项目启动记录 1. 项目整体目录2. bash_profile3. nginx的conf配置4. vim /etc/hosts5. php -v6.修改nginx后重新加载nginx7. npm run watch-app --moduleattendance --platformmobile8. vim ~/.zshrc 1. 项目整体目录 2. bash_profile ~/.bash_profile是Mac系统中的一个配置…

JVM之垃圾回收与算法(四)

垃圾回收与算法 1.如何确定垃圾 1.1. 引用计数法 在 Java 中&#xff0c;引用和对象是有关联的。如果要操作对象则必须用引用进行。因此&#xff0c;很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说&#xff0c;即一个对象如果没有任何与之关联的引用…

网页文章采集工具-人工智能AI功能

简数采集器是一款支持人工智能AI功能的网页文章采集工具&#xff0c;它可以调用百度的文心一言AI对采集的数据进行分析&#xff0c;处理&#xff0c;内容创作等等&#xff0c;根据你的需求进行更加灵活的数据采集和处理。 文心一言人工智能AI功能使用方法&#xff1a; 1. 填写…

7、Qt延时的使用

一、说明 平时用到两种延时方式QThread::sleep()和QTimer::singleShot() 1、QThread::sleep() QThread类中如下三个静态函数&#xff1a; QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单&#xff0c;但是会阻…

OpenAI发布一周年,那些声称超过它的模型都怎么样了?

这篇报告详尽地回顾了自ChatGPT发布一年以来&#xff0c;各种声称与ChatGPT相当或更优的开源大语言模型在各种任务上的表现&#xff01;报告整合了各种评估基准&#xff0c;分析了开源LLMs与ChatGPT在不同任务上的比较。 包括一般能力、代理能力、逻辑推理能力、长文本建模能力…

Java生成word[doc格式转docx]

引入依赖 <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version></dependency> doc…