PostgreSQL - JOINS
Xin chào, những người đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị qua thế giới của PostgreSQL JOINs. Là người giáo viên máy tính hàng xóm thân thiện của bạn, tôi ở đây để hướng dẫn bạn qua chuyến phiêu lưu này, từng bước một. Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - chúng ta sẽ bắt đầu từ những điều cơ bản nhất và dần dần nâng cao. Vậy, hãy mang theo mũ bảo hiểm ảo của bạn, và chúng ta cùng nhảy vào!
JOIN là gì?
Trước khi chúng ta nhảy vào các loại JOIN khác nhau, hãy hiểu xem JOIN thực sự là gì. Hãy tưởng tượng bạn đang lên kế hoạch cho một bữa tiệc lớn (vì ai lại không yêu thích một buổi tiệc cơ sở dữ liệu phải không?). Bạn có hai danh sách: một danh sách với tên bạn bè và một danh sách với đồ uống yêu thích của họ. JOIN giống như những người tổ chức tiệc ma thuật giúp bạn kết hợp hai danh sách này theo nhiều cách khác nhau để tạo ra danh sách khách hoàn hảo với đồ uống yêu thích của mỗi người.
Trong thuật ngữ cơ sở dữ liệu, JOIN cho phép chúng ta kết hợp các hàng từ hai hoặc nhiều bảng dựa trên một cột liên quan giữa chúng. Bây giờ, hãy khám phá các loại JOIN mà PostgreSQL cung cấp cho chúng ta.
The CROSS JOIN
CROSS JOIN là gì?
A CROSS JOIN giống như mời tất cả mọi người trong cả hai danh sách của bạn đến tiệc, không quan tâm bạn có biết sở thích đồ uống của họ hay không. Nó kết hợp mỗi hàng từ bảng đầu tiên với mỗi hàng từ bảng thứ hai.
Ví dụ CROSS JOIN
Hãy tạo hai bảng đơn giản cho ví dụ của chúng ta:
CREATE TABLE friends (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE drinks (
id SERIAL PRIMARY KEY,
drink VARCHAR(50)
);
INSERT INTO friends (name) VALUES ('Alice'), ('Bob'), ('Charlie');
INSERT INTO drinks (drink) VALUES ('Cola'), ('Juice'), ('Water');
Bây giờ, hãy thực hiện một CROSS JOIN:
SELECT f.name, d.drink
FROM friends f
CROSS JOIN drinks d;
Kết quả:
name | drink |
---|---|
Alice | Cola |
Alice | Juice |
Alice | Water |
Bob | Cola |
Bob | Juice |
Bob | Water |
Charlie | Cola |
Charlie | Juice |
Charlie | Water |
Như bạn có thể thấy, mỗi bạn bè được ghép với mỗi đồ uống. Điều này có thể không всегда thực tế, nhưng nó là một cách tuyệt vời để tạo ra tất cả các kết hợp có thể.
The INNER JOIN
INNER JOIN là gì?
An INNER JOIN chọn lọc hơn. Nó giống như ghép bạn bè với đồ uống yêu thích của họ, nhưng chỉ bao gồm những bạn bè có sở thích đồ uống已知.
Ví dụ INNER JOIN
Hãy thay đổi một chút các bảng của chúng ta:
CREATE TABLE friends (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE favorite_drinks (
id SERIAL PRIMARY KEY,
friend_id INTEGER,
drink VARCHAR(50)
);
INSERT INTO friends (name) VALUES ('Alice'), ('Bob'), ('Charlie'), ('David');
INSERT INTO favorite_drinks (friend_id, drink) VALUES (1, 'Cola'), (2, 'Juice'), (3, 'Water');
Bây giờ, hãy thực hiện một INNER JOIN:
SELECT f.name, fd.drink
FROM friends f
INNER JOIN favorite_drinks fd ON f.id = fd.friend_id;
Kết quả:
name | drink |
---|---|
Alice | Cola |
Bob | Juice |
Charlie | Water |
Chú ý rằng David không xuất hiện trong kết quả vì anh ấy không có đồ uống yêu thích được liệt kê.
The LEFT OUTER JOIN
LEFT OUTER JOIN là gì?
A LEFT OUTER JOIN giống như đảm bảo tất cả bạn bè của bạn đều có trong danh sách khách mời, ngay cả khi bạn không biết sở thích đồ uống của họ. Những người không có sở thích已知 có thể nhận được đồ uống mặc định hoặc không có đồ uống.
Ví dụ LEFT OUTER JOIN
Sử dụng cùng các bảng như trong ví dụ INNER JOIN:
SELECT f.name, fd.drink
FROM friends f
LEFT OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;
Kết quả:
name | drink |
---|---|
Alice | Cola |
Bob | Juice |
Charlie | Water |
David | NULL |
Thấy như thế nào David được bao gồm bây giờ, nhưng với đồ uống là NULL? Đó là phép màu của LEFT OUTER JOIN!
The RIGHT OUTER JOIN
RIGHT OUTER JOIN là gì?
A RIGHT OUTER JOIN là ngược lại với LEFT OUTER JOIN. Nó giống như đảm bảo tất cả đồ uống đều có trong thực đơn, ngay cả khi không ai chọn chúng là đồ uống yêu thích.
Ví dụ RIGHT OUTER JOIN
Hãy thêm một đồ uống mà không ai chọn là đồ uống yêu thích:
INSERT INTO favorite_drinks (drink) VALUES ('Lemonade');
SELECT f.name, fd.drink
FROM friends f
RIGHT OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;
Kết quả:
name | drink |
---|---|
Alice | Cola |
Bob | Juice |
Charlie | Water |
NULL | Lemonade |
Lemonade xuất hiện trong danh sách ngay cả khi không có bạn bè nào chọn nó là đồ uống yêu thích.
The FULL OUTER JOIN
FULL OUTER JOIN là gì?
A FULL OUTER JOIN là giấc mơ của người tổ chức tiệc. Nó bao gồm tất cả bạn bè và tất cả đồ uống, ghép chúng khi có thể và sử dụng NULL khi không có ghép nào.
Ví dụ FULL OUTER JOIN
SELECT f.name, fd.drink
FROM friends f
FULL OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;
Kết quả:
name | drink |
---|---|
Alice | Cola |
Bob | Juice |
Charlie | Water |
David | NULL |
NULL | Lemonade |
Điều này cho chúng ta bức tranh hoàn chỉnh: tất cả bạn bè ( ngay cả David không có đồ uống yêu thích) và tất cả đồ uống (ngay cả Lemonade không có bạn bè nào yêu thích).
Kết luận
Và đây bạn có nó, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới của PostgreSQL JOINs, từ CROSS JOIN tất cả đến FULL OUTER JOIN toàn diện. Nhớ rằng việc chọn đúng JOIN giống như chọn hỗn hợp hoàn hảo cho tiệc của bạn - nó phụ thuộc vào thông tin bạn cần và cách bạn muốn kết hợp dữ liệu của mình.
Thực hành các JOIN này, chơi với các kịch bản khác nhau, và sớm bạn sẽ trở thành linh hồn của tiệc cơ sở dữ liệu! Ai lại biết quản lý dữ liệu có thể vui vẻ đến thế, phải không? Hẹn gặp lại các bạn vào lần sau, chúc các bạn vui vẻ khi truy vấn!
Credits: Image by storyset