1 子查询分类
子查询可以分为 嵌套子查询 和 相关子查询 两类
1.1 嵌套子查询
1.1.1 执行顺序(由内至外)
(1)执行子查询道,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。
(2)执行外部查询,并显示整个结果。
1.1.2 实例说明
查询商品id为TNT2的订单号。
SELECT
order_num
FROM
orders
WHERE
order_num IN (
SELECT
order_num
FROM
orderitems
WHERE
prod_id = 'TNT2'
)
上面的查询分为两步:
(1)子查询
SELECT
order_num
FROM
orderitems
WHERE
prod_id = 'TNT2'
(2)外部查询
SELECT
order_num
FROM
orders
WHERE
order_num IN (20005, 20007)
1.2 相关子查询
1.2.1 执行顺序(由外至内)
(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。
(2)执行内层查询,得到子查询操作的值。
(3)外查询根据子查询返回的结果或结果集得到满足条件的行。
(4)然后外层查询取出下一个元组重答复做步骤1-3,直到外层的元组全部处理完毕。
1.1.2 实例说明
查询客户的订单总数
SELECT
cust_name,
cust_state,
(
SELECT
COUNT(*)
FROM
orders o
WHERE
o.cust_id = c.cust_id
) AS orders
FROM
customers c
GROUP BY
cust_name;
上面的查询分为两步:
(1)外部查询
SELECT
cust_name,
cust_state,
cust_id
FROM
customers
GROUP BY
cust_name;
(2)子查询
SELECT
COUNT(*)
FROM
orders o
WHERE
o.cust_id = c.cust_id