SQL---關聯子查詢(correlated subquery)


關聯子查詢和普通子查詢的區別在於:1,關聯子查詢引用了外部查詢的列。

                                                             2,執行順序不同。對於普通子查詢,先執行普通子查詢,再執行外層查詢;而對於關聯子查詢,先執行外層查詢,然后對所有通過過濾條件的記錄執行內層查詢。

 

語法:

SELECT column1, column2
FROM table1 AS outer
WHERE column1 operator
      (SELECT column1, column2
       FROM table2
       WHERE expr1 = outer.expr2);

 

在關聯子查詢中,對於外部查詢返回的每一行數據,內部查詢都要執行一次。另外,在關聯子查詢中是信息流是雙向的,外部查詢的每行數據傳遞一個值給子查詢,然后子查詢為每一行數據執行一次並返回它的記錄。然后,外部查詢根據返回的記錄做出決策。

 

關聯子查詢的用途:

1,在細分的組內進行比較

例子:查詢各個商品種類中高於該商品種類平均銷售價格的商品信息

SELECT * 
FROM t_commodity AS t1
WHERE sell_unit_price > (
       SELECT AVG(sell_unit_price) 
       FROM t_commodity
       WHERE category = t1.category
)

 

2,和EXISTS或NOT EXISTS配合使用,查詢存在或不存在的記錄

例子:查詢沒有下過訂單的所有顧客的信息

SELECT customer_id
FROM customers AS c
WHERE NOT EXISTS (
      SELECT customer_id
      FROM orders
      WHERE customer_id = c.customer_id
)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM