-
子查询可以写的位置:select、from、where
-
子查询可以返回一个值:一个列的一些值,一个结果集(表)
-
子查询的作用:可以作为条件判断的范围,作为判断条件,可以返回特定结果值,
-
与子查询相关:
-
in 运算符;
- in (子查询),其中子查询返回的结果是一个结果集
sqlselect * from clients where client_id in ( select client_id from invoices group by client_id having count(*)>2)
-
子查询 vs 连接;
- 子查询和连接,都能用来查询信息,比较的是可读性和查询效率
sqlselect * from clients where client_id not in ( select distinct client_id from invoices) -- 同一个问题,连接和子查询的比较 select * from clients left join invoices using (client_id) where invoice_id is null
-
all 关键字
- 表示一个值要比all修饰的子查询返回的一列值都大,或都小等;同理可得,any关键字和some关键字都是类似的含义。
sqlselect * from invoices where invoice_total > all( select invoice_total from invoices where client_id=3) -- 等价于 -- select * -- from invoices -- where invoice_total > ( -- select max(invoice_total) -- from invoices -- where client_id=3)
-
相关子查询
- 子查询和外查询存在相关性,子查询的返回结果集和外查询存在联系,但是相关子查询经常执行得很慢
sqlselect * from employees e where salary >( select avg(salary) from employees where office_id=e.office_id) -- 也可以写这样,但是体现不了相关子查询的特点 -- select * -- from employees -- join (select office_id,avg(salary) as aaa -- from employees -- group by office_id) o -- on o.office_id=employees.office_id -- where salary>aaa
-
exists 运算符(存在)
- where exists (子查询)
- 能够提高效率,在子查询的过程中,找到一行符合条件的记录就返回true
sql-- exists select * from clients c where exists ( select client_id from clients where client_id=c.client_id)
- select 子句中的子查询
sqlselect invoice_id, invoice_total, (select avg(invoice_total) from invoices) as invoice_avg, invoice_total- (select invoice_avg) as defference from invoices; select client_id,name,sum(invoice_total), (select avg(invoice_total) from invoices) as average, sum(invoice_total)-(select average) as difference from clients left join invoices using (client_id) group by client_id,name
-
from 子句中的子查询
- 子查询的结果可以作为一张真实的表使用
sqlselect * from employees join (select office_id,avg(salary) as aaa from employees group by office_id) o on o.office_id=employees.office_id where salary>aaa
-
SQL - 子查询
OLDERHARD2024-08-19 9:58
相关推荐
tatasix16 分钟前
MySQL UPDATE语句执行链路解析南城花随雪。29 分钟前
硬盘(HDD)与固态硬盘(SSD)详细解读儿时可乖了30 分钟前
使用 Java 操作 SQLite 数据库懒是一种态度32 分钟前
Golang 调用 mongodb 的函数天海华兮34 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程gma9991 小时前
Etcd 框架爱吃青椒不爱吃西红柿️2 小时前
华为ASP与CSP是什么?Yz98762 小时前
hive的存储格式武子康2 小时前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结武子康2 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本