子查询,即嵌套在其他查询中的查询
SELECT cust_name, cust_contact FROM customer WHERE cust_id IN (
SELECT cust_id FROM Orders WHERE order_num IN (
SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01'));
DBMS 执行了三条 SELECT 语句
最里边的子查询,返回 prod_id 为 RGAN01 的数据,并将结果传递到第二条子查询中,作用于 WHERE 过滤条件中
第二条子查询,返回 cust_id 的数据,并将结果传递到最外层的查询中,作用于 WHERE 过滤条件中
最外层查询,返回最后的结果
因此,执行顺序是从里到外,一层一层返回
SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customer.cust_id) AS orders
FROM Customers
ORDER BY cust_name;
返回三列:cust_name, cust_state, orders,其中 orders 是计算字段,从子查询中获得数据
子查询对检索出的每个顾客执行一次
类似 Orders.cust_id, Customer.cust_id,形如 表名.列名
,叫做完全限定列名,避免列名混淆冲突
作为子查询的 SELECT 语句,只能查询单个列,即只能返回单个列,否则出错