Liệt kê dữ liệu chỉ có ở bảng table1 mà không có ở bảng table2 trong SQL
Bài viết này hướng dẫn bạn cách truy vấn dữ liệu chỉ có ở bảng `table1` mà không có ở bảng `table2` trong SQL. Chúng ta sẽ tìm hiểu các phương pháp khác nhau như `LEFT JOIN`, `NOT EXISTS`, và `NOT IN`.
Cách 1 -
Cách 2 -
Cách 3 -
Trong SQL, để lấy ra dữ liệu chỉ có trong một bảng mà không có trong bảng khác, bạn có thể sử dụng các phương pháp như LEFT JOIN
, NOT EXISTS
, hoặc NOT IN
. Dưới đây là một số cách để thực hiện điều này.
Cách 1: Sử dụng LEFT JOIN
SELECT t1.*
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE t2.id IS NULL;
Cách 2: Sử dụng NOT EXISTS
SELECT *
FROM table1 t1
WHERE NOT EXISTS (
SELECT 1
FROM table2 t2
WHERE t1.id = t2.id
);
Cách 3: Sử dụng NOT IN
SELECT *
FROM table1
WHERE id NOT IN (
SELECT id FROM table2
);
Giải thích chi tiết từng dòng code
Cách 1 - LEFT JOIN
:
-
LEFT JOIN
: Kết hợptable1
vớitable2
dựa trên điều kiện, trả về tất cả dữ liệu từtable1
và dữ liệu tương ứng từtable2
. -
WHERE t2.id IS NULL
: Lọc ra những dòng từtable1
mà không có tương ứng trongtable2
.
Cách 2 - NOT EXISTS
:
-
NOT EXISTS
: Kiểm tra xem có dòng nào trongtable2
mà cóid
trùng khớp vớitable1
hay không. Nếu không có, dòng đó sẽ được chọn.
Cách 3 - NOT IN
:
-
NOT IN
: Chọn tất cả dòng từtable1
màid
không nằm trong danh sáchid
từtable2
.
Yêu cầu hệ thống:
- Cơ sở dữ liệu SQL (MySQL, PostgreSQL, SQL Server, Oracle, etc.)
Cách cài đặt các thư viện để chạy được đoạn mã SQL trên:
Không cần cài đặt thư viện bổ sung, chỉ cần một cơ sở dữ liệu SQL để chạy truy vấn.
Lời khuyên:
- Hãy chọn phương pháp phù hợp với tình huống cụ thể của bạn, mỗi phương pháp có ưu nhược điểm riêng. Ví dụ,
LEFT JOIN
có thể dễ hiểu hơn nhưng có thể chậm hơn khi làm việc với bảng lớn.