【SQL必知必會】第11課 利用子查詢
阿新 • • 發佈:2022-03-27
11.1 子查詢
簡單而言,子查詢就是迴圈巢狀查詢
11.2 利用子查詢進行過濾:
(1) 檢索包含物品“RGAN01”的所有訂單的編號。
(2) 檢索具有前一步驟列出的訂單編號的所有顧客的ID。
(3) 檢索前一步驟,返回的所有顧客ID 的顧客資訊。
SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01';
得到的中間結果是:20007,20008;
SELECT cust_id FROM Orders WHERE order_num IN (20007,20008);
等價於下面這段查詢
-- 利用子查詢進行巢狀插敘 SELECT cust_idFROM Orders WHERE order_num IN (SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01');
再次基礎上再加上一條查詢
SELECT cust_name, cust_contact FROM Customers WHERE cust_id IN ('1000000004','1000000005');
然後三次查詢巢狀後得到:
SELECT cust_name, cust_contact FROM Customers WHERE cust_id IN (SELECT cust_idFROM Orders WHERE order_num IN (SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01'));
注意:只能是單列
作為子查詢的SELECT語句只能查詢單個列。企圖檢索多個列將返回錯誤。
11.3 作為計算欄位使用子查詢
(1) 從Customers 表中檢索顧客列表;
(2) 對於檢索出的每個顧客,統計其在Orders 表中的訂單數目。
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM Orders WHERE Orders.cust_id = Customers.cust_id) AS orders -- 其中分別標註不同表的cust_id FROM Customers ORDER BY cust_name;