子查询

除了单个数据库表中检索数据的单条语句外,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的所有客户。
image.png

注意

  • 格式化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;

image.png

注意

涉及到外部的子查询要使用表名.列名的语法,放置歧义


这个家伙很懒,啥也没有留下😋