子查询

使用

1、一个查询语句嵌套在另一个查询语句内部的查询

2、子查询(内查询)在主查询之前一次执行完成

3、子查询的结果被主查询(外查询)使用

4、事项

(1)子查询要包含在括号内

(2)将子查询放在比较条件的右侧

(3)单行操作符对应单行子查询,多行操作符对应多行子查询

 

分类

1、方式一

(1)单行子查询:只返回一行数据的子查询语句

(2)多行子查询:返回多行数据的子查询,使用关键字 IN、DISTINCT 去重

2、方式二

(1)相关(关联)子查询:子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部

(2)不相关(非关联)子查询:子查询只执行一次

 

单行子查询

1、单行比较操作符

操作符 含义
= 等于
>= 大于等于
> 大于
<= 小于等于
< 小于
<> 不等于

2、类型

(1)WHERE 中的子查询

(2)HAVING 中的子查询

(3)CASE 中的子查询

3、顺序

(1)首先执行子查询

(2)向主查询中的 HAVING 子句返回结果

(3)把内层查询作外层查询的比较条件

4、事项

(1)空值情况:子查询不返回任何行

(2)非法使用子查询:多行子查询使用单行比较符

 

多行 / 集合比较子查询

1、内查询返回多行

2、多行比较操作符

操作符 含义
IN 等于列表中的任意一个
ANY 需要和单行比较操作符一起使用,和子查询返回的某一个值比较
ALL 需要和单行比较操作符一起使用,和子查询返回的所有值比较
SOME 实际上是 ANY 的别名,作用相同,一般常使用 ANY

3、事项

(1)空值情况:子查询不返回任何行

(2)非法使用子查询:多行子查询使用单行比较符

 

相关 / 关联子查询

1、如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次

2、相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询

(1)从主查询中获取候选列

(2)子查询使用主查询的数据

(3)若满足子查询的条件,则返回该行

3、FROM 中的子查询

(1)内层查询结果作为临时表,供外层再次查询

(2)临时表必须定义别名

(3)子查询要用 () 引起来

(4)外层查询结果、WHERE 子句中,区分不同表的重名列:表名.列名,

4、ORDER BY 中的子查询

5、关联子查询通常和 EXISTS 操作符一起使用

(1)检查在子查询中是否存在满足条件的行

(2)如果在子查询中不存在满足条件的行:条件返回 FALSE,继续在子查询中查找

(3)如果在子查询中存在满足条件的行:不在子查询中继续查找,条件返回 TRUE

6、NOT EXISTS:表示如果不存在某种条件,则返回 TRUE,否则返回 FALSE;EXISTS:若存在某种条件,则返回 TRUE,否则返回 FALSE

7、应用

(1)相关更新:使用相关子查询,依据一个表中的数据,更新另一个表的数据

(2)相关删除:使用相关子查询,依据一个表中的数据,删除另一个表的数据

 

自连接、子查询

1、一般情况,建议使用自连接,在许多 DBMS 的处理过程中,对于自连接的处理速度,要比子查询快得多

2、理解

(1)子查询实际上是通过未知表进行查询后的条件判断

(2)自连接是通过已知的自身数据表进行条件判断,因此在大部分 DBMS 中都对自连接处理进行优化

posted @   半条咸鱼  阅读(479)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示