14.1 子查询
子查询即嵌套在其他查询中的查询
SELECT cust_name, cust_contact
FROM customers
WHERE cust_id IN (SELECT cust_id
FROM orders
WHERE order_num IN (SELECT order_num
FROM orderitems
WHERE prod_id = 'TNT2'));
- 在WHERE子句中使用子查询能够编写出功能很强并且很灵活的SQL语句。
- 对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。
14.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;
- 要注意的是,这里使用到了完全限定列名「order.」以便数据库能快速的定位字段
- 如果不使用完全限定列名,当数据其他表中存在类似cust_id的命名相同的情况,就会容易检索出其他结果