1. 程式人生 > 其它 >【SQL必知必會】第11課 利用子查詢

【SQL必知必會】第11課 利用子查詢

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_id
FROM 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_id
                    
FROM 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;