Để tìm tất cả người dùng có ít nhất một bài đăng có xếp hạng trên 10, hãy sử dụng:
SELECT u.*
FROM USERS u
WHERE EXISTS(SELECT NULL
FROM POSTS p
WHERE p.user_id = u.id
AND p.rating > 10)
EXISTS không quan tâm đến câu lệnh SELECT bên trong nó - bạn có thể thay thế NULL bằng 1/0, điều này sẽ dẫn đến lỗi toán học khi chia cho 0 ... Nhưng nó sẽ không, bởi vì EXISTS chỉ quan tâm đến việc lọc trong mệnh đề WHERE.
Mối tương quan (WHERE p.user_id =u.id) là lý do tại sao điều này được gọi là truy vấn con tương quan và sẽ chỉ trả về các hàng từ bảng USERS nơi các giá trị id khớp, ngoài so sánh xếp hạng.
EXISTS cũng nhanh hơn, tùy thuộc vào tình huống, vì nó trả về true ngay sau khi tiêu chí được đáp ứng - các bản sao không quan trọng.