SQL---子查询(subquery)

子查询,是指在查询语句中嵌套查询语句。(这里指的是普通子查询,而非关联子查询)

 

以下是子查询出现的几种形式:

1,在WHERE子句中的子查询

这种是最常见的普通子查询。如果子查询返回的结果只有1个,那么就称为标量子查询。例如:

SELECT *
FROM sales_agents
WHERE agency_fee > 
(SELECT AVG(agency_fee)
 FROM sales_agents);

 

如果子查询返回的结果不止1个,那么可以用ALL,ANY关键字,或者用IN,NOT IN,EXISTS,NOT EXISTS关键字进行筛选。例如:

SELECT AVG(agency_fee)
FROM sales_agents
WHERE id NOT IN (SELECT id
                 FROM managers)
SELECT project_id
FROM project 
GROUP BY project_id
HAVING COUNT(employee_id) >= ALL(SELECT COUNT(employee_id) FROM project GROUP BY project_id)

 

2,在SELECT子句中的子查询

主要用于填充列。

SELECT 
     name,
     price,
     (SELECT AVG(price) FROM paintings) AS avg_price
FROM paintings

需要注意的是,必须给在SELECT子句中的子查询取别名。

 

3,在FROM子句中的子查询

也就是把子查询的结果当成一张表,然后在这张新表的基础上再进行后续操作。例如:

SELECT budget
FROM department,
     (SELECT max(budget) as val
      FROM department) AS max_budget
WHERE department.budget = max_budget.val

在这种情况下,更好的做法是把子查询做成一个视图(view),这样比较清晰,还可以复用,修改起来也方便。

 

posted @   HuZihu  阅读(851)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2019-03-28 偏差-方差均衡(Bias-Variance Tradeoff)
点击右上角即可分享
微信分享提示