MySQL数据库03|连接查询、自关联、子查询

目录

十、连接查询

1、基本概念

2、内连接:inner join

1️⃣语法1:标准语法

2️⃣语法2:隐式内连接

3️⃣显示部分字段

4️⃣表的别名在查询中使用

5️⃣带where条件的内连接

6️⃣带and逻辑运算符的内连接

7️⃣多表内连接

8️⃣带有order by的内连接

9️⃣写SQL三步法

3、左连接:left join

4、右连接:right join

十一、自关联

1、自关联的典型用途

2、语法

十二、子查询

1、定义

2、主查询

3、主查询和子查询的关系

1️⃣标量子查询

2️⃣列子查询

3️⃣表级子查询


十、连接查询

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数据库01|增删改查、字段的约束-优快云博客

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

MySQL数据库03|内置函数、存储过程、视图、事务、索引-优快云博客

MySQL数据库04|内置函数、存储过程、视图、事务、索引-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值