MySQL必知必會——第14章 使用子查詢 讀書筆記

1 子查詢是什麼?
嵌套在其他查詢中的查詢。
舉例:
前提:orders表存儲訂單信息,orderitems存儲訂單中物品的信息,customers表存儲客戶信息。
step1:檢索包含物品TNT2的所有訂單的編號

select order_num from orderitems where prod_id ='TNT2';

step2:檢索具有前一步驟訂單編號的所有客戶ID

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

由上可以看出:一次查詢的結果作爲另一次查詢的判定條件。子查詢總是由內向外
注意事項:在使用子查詢的時候,列必須匹配:應該保證select語句具有與where子句中相同數目的列。通常情況下,子查詢返回單個列並與單個列匹配,如果需要也可以使用多個列。
子查詢一般與IN操作符結合使用,也可以用於測試等於、不等於。
2 作爲計算字段使用子查詢
舉例:前提:同上三張表
①customers表:描述客戶信息
在這裏插入圖片描述
②orderitems表:描述商品信息
在這裏插入圖片描述
③orders表:描述訂單信息
在這裏插入圖片描述
目標:顯示customers表中每個客戶的訂單總數
分解步驟:
step1:從customers表中檢索客戶列表
step2:對於檢索出的每個客戶,統計其在orders表中的訂單數目
過濾某個特定的客戶ID對應的訂單數:

select COUNT(*) AS orders from orders WHERE cust_id=100001;

爲了對每個客戶執行COUNT(*)計算,應該將COUNT(*)作爲一個子查詢。

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

該子查詢對檢索出的每個客戶執行一次。
完全限定列名:表名.列名,例如上述sql語句中的customers.cust_id
相關子查詢:涉及外部查詢的子查詢
用子查詢建立查詢最可靠的方法是逐漸進行。首先建立和測試最內層的查詢,然後建立和測試外層查詢,然後嵌入子查詢,這樣做提高了查詢一開始就正常工作的可能性。

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