Liệt kê dữ liệu chỉ có ở bảng table1 mà không có ở bảng table2 trong PostgreSQL
Hướng dẫn cách liệt kê dữ liệu chỉ có ở bảng `table1` mà không có ở bảng `table2` trong PostgreSQL, sử dụng phương pháp `LEFT JOIN` và `WHERE`.
Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng PostgreSQL để liệt kê dữ liệu chỉ có ở bảng table1
mà không có ở bảng table2
. Chúng ta sẽ sử dụng LEFT JOIN
kết hợp với điều kiện WHERE
để thực hiện các truy vấn cần thiết.
Mã SQL:
-- Giả sử chúng ta có hai bảng: 'table1' và 'table2'
-- Dữ liệu trong bảng 'table1'
CREATE TABLE table1 (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO table1 (name) VALUES
('Alice'),
('Bob'),
('Charlie');
-- Dữ liệu trong bảng 'table2'
CREATE TABLE table2 (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO table2 (name) VALUES
('Alice'),
('David');
-- Truy vấn để liệt kê dữ liệu chỉ có ở table1
SELECT table1.id, table1.name
FROM table1
LEFT JOIN table2 ON table1.name = table2.name
WHERE table2.name IS NULL;
Giải thích chi tiết từng dòng code
-
Tạo bảng
table1
: Sử dụngCREATE TABLE
để tạo bảngtable1
với trườngid
vàname
. -
Chèn dữ liệu vào bảng
table1
: Sử dụngINSERT INTO
để thêm các bản ghi vào bảngtable1
. -
Tạo bảng
table2
: Tương tự, sử dụngCREATE TABLE
để tạo bảngtable2
. -
Chèn dữ liệu vào bảng
table2
: Sử dụngINSERT INTO
để thêm các bản ghi vào bảngtable2
. -
Truy vấn
SELECT
:-
LEFT JOIN
: Kết nối bảngtable1
với bảngtable2
dựa trên trườngname
. Điều này cho phép chúng ta lấy tất cả các bản ghi từtable1
và chỉ những bản ghi tương ứng từtable2
. -
WHERE table2.name IS NULL
: Lọc ra những bản ghi mà không có trongtable2
, tức là chỉ lấy các bản ghi củatable1
mà không có sự trùng khớp trongtable2
.
-
Yêu cầu hệ thống:
- PostgreSQL 9.6 trở lên
Cách cài đặt PostgreSQL:
Có thể cài đặt PostgreSQL từ trang web chính thức PostgreSQL hoặc sử dụng các công cụ quản lý như pgAdmin.
Lời khuyên:
- Nên tạo chỉ mục trên các trường được sử dụng trong truy vấn để tăng tốc độ truy vấn.
- Sử dụng
LEFT JOIN
để lấy tất cả các bản ghi từ bảng chính và lọc các bản ghi không có trong bảng phụ.