MySQL必知必會 —— 第十四章 使用子查詢

1. 子查詢

查詢(query) 任何SQL語句都是查詢。但此術語一般指SELECT語句。
子查詢(subquery) 即嵌套在其他查詢中的查詢

2. 利用子查詢進行過濾

select order_num from orderitems
where prod_id = 'TNT2';

在這裏插入圖片描述

select cust_id from orders
where order_num in (20005,20007);

在這裏插入圖片描述
利用子查詢將兩個上述兩個查詢合併

select cust_id from orders
where order_num in(select order_num from orderitems
	where prod_id = 'TNT2');

在這裏插入圖片描述
格式化SQL 包含子查詢的SELECT語句難以閱讀和調試,特別是它們較爲複雜時更是如此。如上所示把子查詢分解爲多行並且適當地進行縮進,能極大地簡化子查詢的使用。

列必須匹配 在WHERE子句中使用子查詢(如這裏所示),應該保證SELECT語句具有與WHERE子句中相同數目的列。通常,子查詢將返回單個列並且與單個列匹配,但如果需要也可以使用多個列。

子查詢和性能 這裏給出的代碼有效並獲得所需的結果。但是,使用子查詢並不總是執行這種類型的數據檢索的最有效的方法。更多的論述,請參閱第15章,其中將再次給出這個例子。

3.作爲計算字段使用子查詢

使用子查詢的另一方法是創建計算字段。假如需要顯示customers表中每個客戶的訂單總數。訂單與相應的客戶ID存儲在orders表中。爲了執行這個操作,遵循下面的步驟。
(1) 從customers表中檢索客戶列表。
(2) 對於檢索出的每個客戶,統計其在orders表中的訂單數目。
可使用SELECT COUNT(*)對錶中的行進行計數,並且通過提供一條WHERE子句來過濾某個特定的客戶ID,可僅對該客戶的訂單進行計數。例如,下面的代碼對客戶10001的訂單進行計數:

select count(*) as orders from orders
where cust_id = 10001;

爲了對每個客戶執行COUNT()計算,應該將COUNT()作爲一個子查詢。請看下面的代碼:

select cust_name,cust_state,
	(select count(*) from orders
	where order.cust_id = customers.cust_id) as orders
from customers
order by cust_name;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章