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 @ 2021-03-28 16:05  HuZihu  阅读(755)  评论(0编辑  收藏  举报