Subquery tương quan · products

Truy vấn con tương quan chạy lại cho từng dòng

Subquery tương quan chạy theo từng dòng của products Với mỗi dòng của products, truy vấn con AVG(price) được tính lại với category_id của dòng đó: ASUS ROG (danh mục 3, 32.990.000 > 28.323.333) được giữ, Acer Nitro V 15 (21.990.000 < 28.323.333) bị bỏ, iPhone 15 (danh mục 7, 19.990.000 > 11.140.000) được giữ; còn truy vấn con không tương quan chỉ tính một lần. SELECT sku, price FROM products p WHERE p.price > (SELECT AVG(p2.price) FROM products p2 WHERE p2.category_id = p.category_id) 1 · DÒNG CỦA TRUY VẤN NGOÀI 2 · TRUY VẤN CON CHẠY LẠI VỚI GIÁ TRỊ CỦA DÒNG ĐÓ 3 · WHERE SO SÁNH LAP-001 · ASUS ROG Strix G16 category_id = 3 · price 32.990.000 SELECT AVG(p2.price) … WHERE p2.category_id = 3 → 28.323.333 32.990.000 > 28.323.333 TRUE → giữ dòng LAP-003 · Acer Nitro V 15 category_id = 3 · price 21.990.000 SELECT AVG(p2.price) … WHERE p2.category_id = 3 → 28.323.333 21.990.000 < 28.323.333 FALSE → bỏ dòng PHN-001 · iPhone 15 128GB category_id = 7 · price 19.990.000 SELECT AVG(p2.price) … WHERE p2.category_id = 7 → 11.140.000 19.990.000 > 11.140.000 TRUE → giữ dòng … và cứ thế cho cả 24 dòng của products: mỗi dòng ngoài, truy vấn con được tính lại một lần (về mặt logic). So sánh: WHERE price > (SELECT AVG(price) FROM products) không nhắc tới cột nào của dòng ngoài, nên chỉ cần tính một lần (10.832.875) rồi dùng cho mọi dòng. © tiennhm