Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询

一.关联查询:

定义:关联查询又叫连接查询

常见:内连接/外连接/自连接

1.内连接(无存在主从表)

语法:inner join ...on

定义:组合两个表的记录,返回关联字段相符的记录,也就是返回表的交集(红色部分)

复制代码
# 查出学生表中学生们所在班级对应的班级名
SELECT * FROM student as s INNER JOIN classroom c on s.class_id = c.class_id

2.右连接(前从后主)

语法:right join ...on

定义:返回右表(B)所有的数据(主表),以及左表(A)与右表(B)对应的数据,没有则返回null(红色部分)

复制代码
select * from student s right join classroom c on s.class_id = c.class_id

3.左连接(前主后从)

语法:left join ...on

定义:返回左表(A)所有的数据(主表),以及右表(B)与左表(A)对应的数据,没有则返回null(红色部分)

复制代码
select * from student s left join classroom c on s.class_id = c.class_id

4.自连接

定义:一张表共用

语法:inner join ...on

复制代码
例子:
select * from 员工表 表1 inner join 员工表 表2;
# 找到员工表的上级领导姓名
select * from 员工表 表1 inner join 员工表 表2 on 表1.领导id =表1.员工id ; # 没有上级领导的员工会不显示
select * from 员工表 表1 left join 员工表 表2 on 表1.领导id =表1.员工id ;# left才能把没有领导的也显示出来null

二.子查询:

定义:子查询也叫嵌套查询,将一个查询结果当作另一个查询的条件或结果集。子查询最接近思考方式,最自然的查询。

分类:单行子查询(=),多行子查询(in)

复制代码
# 找到xx所在班级的班级名称(单行子查询)
SELECT * FROM classroom WHERE class_id = (SELECT class_id FROM student where `name` = 'xx')
# 查询薪资与x部门员工薪资相等但是不在x部门的员工信息
select * from emp where sal in (select sal from emp where 部门 = 'x') and 部门 != 'x'
相关推荐
小白男神5 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶5 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G5 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备5 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远5 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
漂着的圆木5 天前
Agent 功能参与度:Copilot 怎么算
sql·数据分析·agent·githubcopilot·度量
kybs19915 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218615 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客5 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren5 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github