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