關聯子查詢和普通子查詢的區別在於: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 )