数据库中的子查询

23 阅读2分钟

​本文已参与「新人创作礼」活动,一起开启掘金创作之路

子查询

背景:SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

 

第一节:单行子查询

 

实例:select * from info where score > (select score from info where name=’张三’);

 

规则:

 

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

--- 子查询的结果被主查询(外查询)使用 。

--- 子查询要包含在括号内。

--- 常用操作符:= | > |>= | < | <= | <>

 

第二节:多行子查询


多行子查询,是指执行查询语句获得的结果集中返回了多行数据的子查询。在子查询中可以使用in关键字、exists关键字和比较运算符来连接表。

 

2.1 in关键字

 

in关键字用来判断一个表中指定列的值是否包含在已定义的列表中,或在另一个表中

语法:select * from 表名称 where 列名称 in(select * from 表名称);

 

2.2 比较运算符

 

2.2.1 All 运算符

 

它将单个值与子查询返回的单列值集进行比较。

ALL运算符必须以比较运算符开头,例如:>,>=,<,<=,<>,=,后跟子查询。

 

语法:select * from 表名称 where 列名称 > all (select score from 表名称);

#大于子查询集合中score 最大的分数

 

  2.2.2 ANY运算符

ANY运算符是一个逻辑运算符,它将值与子查询返回的一组值进行比较。 ANY运算符必须以比较运算符:>,>=,<,<=,=,<>开头,后跟子查询。

2.3.3 EXISTS 和 NOT EXISTS关键字

将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否得以保留。

-- exist适合 子查询中表数据大于外查询表中数据的业务场景(in相反)

-- 先执行一次外部查询,遍历外部查询的每一次结果集时,各执行一次子查询。