目录
十、连接查询
1、基本概念
当查询结果来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的结果返回。
连接查询可以通过连接运算符(连接条件)实现多表查询。
2、内连接:inner join
内连接(INNER JOIN):展示两个表中同时存在的数据。
内连接最重要的是找对 两个表要关联的字段/
1️⃣语法1:标准语法
-- 语法一
select * from 表1
inner join 表2 on 表1.字段=表2.字段;
如果不约束显示的字段,那么连成功的表的列是之前两个表的列之和。
2️⃣语法2:隐式内连接
了解可以这样写,但是一般不用这种语法
-- 语法二
select * from 表1,表2
where 表1.字段=表2.字段;
3️⃣显示部分字段
select name,courseNo,score
from students
inner join scores on students.studentNo = scores.studentNo;
4️⃣表的别名在查询中使用
-- 给student和scores两个表起别名
select name,courseNo,score
from students st
inner join scores sc on st.studentNo = sc.studentNo;
这种情况给两个表起别名并不影响查询显示的结果,只不过让后面的sql语句短一些,写的方便。
5️⃣带where条件的内连接
-- 查询王昭君的信息,要求只显示姓名、课程号、成绩
select name,courseNo,score
from students stu
inner join scores sc on stu.studentNo=sc.studentNo
where stu.name='王昭君';
6️⃣带and逻辑运算符的内连接
-- 查询姓名为王昭君,并且成绩小于90的信息,要求只显示姓名、成绩
select name,score
from students stu
inner join scores sc on stu.studentNo=sc.studentNo
where stu.name='王昭君' and score < 90;
7️⃣多表内连接
-- 查询学生信息和成绩,以及成绩对应的课程名称
select *
from students stu
inner join scores sc on stu.studentNO=sc.studentNO -- 已经连成了一个综合的表
inner join courses cs on sc.courseNo=cs.courseNo; -- 和上面连成功的综合的表 再连接
8️⃣带有order by的内连接
order by语句写最后即可
9️⃣写SQL三步法
- 搭框架:基本的select语句,如果有多表,则把相应的多表也联合进来
- 看条件:决定where后面的具体条件
- 显示的字段:select后面到底要显示什么字段
3、左连接:left join
左连接(LEFT JOIN):左连接以左表为基础,展示左表特有的数据,加上左右两个表同时存在的数据(内连接内容)。对于右表中不存在的数据使用null填充。
-- 语法
select * from 表1
left join 表2 on 表1.字段=表2.字段;
4、右连接:right join
右连接(RIGHT JOIN):右连接以右表为基础,展示右表特有的数据,加上左右两个表同时存在的数据(内连接内容)。对于左表中不存在的数据使用null填充。
-- 语法
select * from 表1
right join 表2 on 表1.字段=表2.字段;
十一、自关联
表与自身进行连接操作。它实际上将一个表视为两个独立的表,通过表的别名来区分不同的引用,允许在单张表中进行连接查询。
1、自关联的典型用途
- 树形结构数据的查询(如全国包含各省市区县乡的结构、公司组织架构、目录层级结构)。
- 查找特殊关系(如朋友关系、上级与下级等)。
- 比较同一表中的不同记录(如找出比某人年纪大的人)
2、语法
SELECT *
FROM 表名 AS A
JOIN 表名 AS B -- A和B是同一张表
ON A.条件 = B.条件
WHERE 筛选条件;
十二、子查询
1、定义
在一个select语句中,嵌入了另外一个select语句,那么嵌入的select语句称之为子查询语句
2、主查询
外层的第一条select语句为主查询
3、主查询和子查询的关系
- 子查询是嵌入到主查询中的;
- 子查询是辅助主查询的,要么充当条件,要么充当数据;
- 子查询是可以独立运行的语句,是一条完整的select语句;
- 主查询不能独立运行,依赖子查询的结果;
1️⃣标量子查询
子查询的返回结果只有一行一列

2️⃣列子查询
子查询返回一列多行,用到in

3️⃣表级子查询
子查询返回结果是多行多列(一个表)

全部内容:
MySQL数据库02|去重、条件查询、排序、聚合函数、分组、分页显示-优快云博客