WHERE子句:此时子查询返回的结果一般都是单行单列、单行多列、多行单列;
HAVING子句:此时子查询返回的都是单行单列数据,同时必须使用统计函数操作;
FROM子句:此时子查询返回的结果一般都是多行多列,可以按照一张数据表(临时表)的形式操作;
在使用多行子查询时,主要使用三种操作符:
IN() --主要设置范围,定义一个数据的查询范围
在IN的子查询返回数据有NULL,没有影响,但是在NOT IN的子查询返回数据有NULL,则不会有任何的数据返回
ANY() --表示有任何一个满足就返回,select 字段 from 表名 where 字段 判断符 ANY (子查询)
字段=ANY:表示与子查询中的每个元素进行比较,功能与IN类似(<>ANY不等价于NOT IN)
字段>ANY:比子查询中返回结果的最小的要大(包含>=ANY)
字段<ANY:比子查询中返回结果的最大的要小(包含<=ANY)
ALL() --表示全部都满足才返回,select 字段 from 表名 where 字段 判断符 ALL (子查询)
字段<>ALL:等价于NOT IN(但是=ALL并不等价于IN)
字段>ALL:比子查询中返回结果的最大的要大(包含>=ALL)
字段<ALL:比子查询中返回结果的最小的要小(包含<=ALL)
EXISTS() --空数据判断,子查询中有数据返回则exists结构返回true,反之返回false
select * from dual where exists(子查询) 类似 select * from dual where 字段 in (子查询) 两个查询结果一致
WITH --构成临时表:WITH e AS(select * from dual),select * from dual 返回的结果构成一张临时表e
WITH 表名1 AS (返回多行多列结果) select 列名 from 表名1,表名2 where 条件