子查询(subquery),即嵌套在其他查询中的查询。
1. 利用子查询进行过滤
SELECT 语句中,子查询总是从内向外处理。示例:
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Order
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01'));
注意:只能是单列
作为子查询的SELECT 语句只能查询单个列。企图检索多个列将返回错误
提示:格式化SQL
包含子查询的SELECT 语句难以阅读和调试,它们在较为复杂时更是 如此。如上所示,把子查询分解为多行并进行适当的缩进,能极大地 简化子查询的使用。
提示:谨慎使用子查询
在WHERE 子句中使用子查询能够编写出功能很强且很灵活的SQL 语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性 能的限制,不能嵌套太多的子查询。
2. 作为计算字段使用子查询
示例:
SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id) AS orders
FROM Customers
ORDER BY cust_name;