子查询
除了单个数据库表中检索数据的单条语句外,SQL允许创建子查询,即嵌套在其他查询中的查询
利用子查询进行过滤
在SELECT语句中,自查询总是从内向外处理。对于嵌套的子查询的数目没有限制,在实际使用时由于性能的限制,不能嵌套太多的子查询。
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" ));
上述SQL语句表示列出订购物品TNT2的所有客户。
注意
- 格式化SQL
包含子查询的SELECT语句难以阅读和调试,特别是他们较为复杂时更是如此。应适当把子查询分解为多行并且适当地进行缩进 - 子查询和性能
使用子查询并不是检索数据的最有效方式
作为计算字段使用子查询
创建字段计算,将子查询到的结果作为一个字段使用
SELECT
cust_name,
cust_state,(
SELECT
COUNT(*)
FROM
orders
WHERE
orders.cust_id = customers.cust_id
) AS orders
FROM
customers
ORDER BY
cust_name;
注意
涉及到外部的子查询要使用表名.列名的语法,放置歧义
Comments | 0 条评论