目录
前言
哈喽大家好,你们的tutu又来了,这次博客的内容呢是将的MySQL的DQL语言中的连接查询、子查询、分页查询、联合查询,而我们对DQL语言的学习也到这里就结束了。DQL是共同组成数据库的完整语言中的一个,我们后续还会学习另外几种语言,从而对数据库进行更多的了解,如果想要一起学习的小伙伴们,期待你的关注哦!如果觉得博主写的还不错的,记得一键三连哦!蟹蟹~
连接查询
(一)概述
定义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
(二)分类
按年代分类:
- sql92标准 : 仅仅支持 内连接
- sql99标准【推荐】:支持 内连接 + 外连接(左外和右外)+ 交叉连接
按功能分类:
- 内连接 :等值连接、非等值连接、自连接
- 外连接 :左外连接、右外连接、全外连接
- 交叉连接
(1)sql92标准
-
等值连接
① 多表等值连接的结果为多表的交集部分 ② n表连接,至少需要n-1个连接条件 ③ 多表的顺序没有要求 ④ 一般需要为表起别名 1)区分多个重名的字段 2)提高语句的简洁度 注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定 ⑤ 可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
-
非等值连接
条件一定不为等号,但是可以是其他任意情况
-
自连接
一张表重复使用
(2)sql99标准
语法:
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
分类:
-
内连接(★):inner
-
外连接 :
左外(★):left 【outer】 右外(★):right 【outer】 全外:full【outer】
-
交叉连接:cross
给大家推荐一篇博客,主要讲的就是连接查询的概念,可以很好地区分其中地几种连接:Mysql 多表连接查询
内连接特点:
1、添加排序、分组、筛选
2、inner可以省略
3、筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
4、inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
外连接特点:
1、外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值 如果从表中没有和它匹配的,则显示null 外连接查询结果=内连接结果+主表中有而从表没有的记录
2、左外连接,left join左边的是主表; 右外连接,right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
5、应用场景:用于查询一个表中有,另一个表没有的记录
(3)sql92和sql99 PK
功能:sql99支持的较多
可读性:sql99实现连接条件和筛选条件的分离,可读性较高
子查询
(一)概述
定义:
出现在其他语句中的select语句,称为 子查询 或 内查询
外部的查询语句,称为 主查询 或 外查询
(二)分类
按子查询出现的位置:
-
select后面 :仅仅支持标量子查询
-
from后面 :支持表子查询
-
where或having后面 :(★)
标量子查询(单行) √ 列子查询 (多行) √ 行子查询
-
exists后面(相关子查询):表子查询
按结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)
(1)where或having后面
支持的查询有:
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多列多行)
特点:
-
子查询放在小括号内
-
子查询一般放在条件的右侧
-
标量子查询,一般搭配着单行操作符使用
单行操作符:> < >= <= = <>
-
列子查询,一般搭配着多行操作符使用
多行操作符:in、any/some、all
-
子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
(2)select后面
仅仅支持标量子查询
(3)from后面
将子查询结果充当一张表,要求必须起别名
(4)exists后面(相关子查询)
语法:
exists(完整的查询语句)
结果:1或0
分页查询
(一)概述
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表
from 表
【join type】 join 表
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
注意:
offset显示条目的起始索引(起始索引从0开始)
size 显示的条目个数
(二)特点
- limit语句放在查询语句的最后
- 公式 : 要显示的页数 page,每页的条目数size,示例如下:
select 查询列表
from 表
limit (page-1)*size,size;
size=10
page 需要输入的数
1 0
2 10
3 20
联合查询
(一)概述
定义:将多条查询语句的结果合并成一个结果
语法:
查询语句1
union
查询语句2
union
...
应用场景:要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时
(二)特点
- 要求多条查询语句的 查询列数 是一致的!
- 要求多条查询语句的查询的 每一列的类型和顺序最好一致
- union 关键字 默认去重,如果使用 union all 可以包含重复项
学无止境 |