sql语法大全之子查询
所属分类:Database | 发布于 2022-10-18 10:44:33
前言
SQL中的子查询的使用大大增强了SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是hi某个标量,也可能是某个集合)进行比较。
子查询的定义
子查询是指一个查询语句嵌套在另外一个查询语句内部的查询。
子查询出现的位置
在SELECT语句中,除了GROUP BY和LIMIT之外,其它位置都可以声明子查询!
子查询的分类
分类角度一:按返回结果条目数分
- 单行子查询
- 多行子查询
分类角度二:按内部查询是否被执行多次分
- 相关(或关联)子查询:如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部,这种嵌套的执行方式就叫相关子查询。
- 不相关(或非相关)子查询:子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做不相关子查询。
称谓的规范
1. 外查询(或主查询)
2. 内查询(或主查询)
子查询的基本语法结构
SELECT <select_list>
FROM Table
WHERE expr operator (
SELECT <select_list>
FROM Table
)
相关子查询
解释
如果子查询的执行依赖于外部查询条件,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一遍,这样的子查询就称之为关联子查询。
相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。
基本语法示例
SELECT <select_list>
FROM table1 outer
WHERE col1 operator (
SELECT <select_list>
FROM table2
WHERE expr1 = outer.expr2
);
执行流程三步曲
1、GET,从主查询获取候选列(先从主查询获取一条数据)。
2、EXECUTE,子查询使用主查询的数据。
3、USE,主查询的数据如果满足子查询的条件,则返回该行。