SQLite - JOINS: Chinh phục nghệ thuật kết hợp bảng

Xin chào các bạn tương lai của các chuyên gia cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng nhau khám phá một trong những khía cạnh thú vị nhất (và đôi khi là đáng sợ) của SQLite: JOINS. Đừng lo lắng nếu bạn là người mới; vào cuối bài hướng dẫn này, bạn sẽ có thể kết hợp bảng một cách chuyên nghiệp!

SQLite - JOINS

Giới thiệu về JOINS

Trước khi chúng ta nhảy vào phần sâu, hãy nói về lý do chúng ta cần JOINS. Hãy tưởng tượng bạn đang tổ chức một buổi tiệc sinh nhật hoành tráng (vì ai lại không thích một buổi tiệc vui vẻ, phải không?). Bạn có một danh sách với tên khách và một danh sách khác với mùi vị bánh yêu thích của họ. Liệu có tốt hơn nếu bạn có thể kết hợp hai danh sách này để đảm bảo rằng mỗi người đều nhận được mùi vị bánh yêu thích của họ? Đó chính xác là điều mà JOINS làm trong cơ sở dữ liệu - chúng giúp chúng ta kết hợp thông tin từ các bảng khác nhau theo những cách có ý nghĩa.

Bây giờ, hãy cùng nhau khám phá ba loại JOINS chính trong SQLite:

  1. CROSS JOIN
  2. INNER JOIN
  3. OUTER JOIN

The CROSS JOIN: Trộn lẫn tiệc tùng

CROSS JOIN là gì?

A CROSS JOIN giống như mời mọi người đến giao tiếp với mọi người khác trong buổi tiệc của bạn. Nó kết hợp mỗi hàng từ một bảng với mỗi hàng từ bảng khác. Đây là tương đương trong cơ sở dữ liệu của việc nói, "Hey, mọi người, gặp mọi người!"

Cú pháp CROSS JOIN

SELECT * FROM table1 CROSS JOIN table2;

Ví dụ CROSS JOIN

Hãy tạo hai bảng đơn giản cho kế hoạch tổ chức tiệc của chúng ta:

CREATE TABLE guests (
guest_id INTEGER PRIMARY KEY,
guest_name TEXT
);

CREATE TABLE cakes (
cake_id INTEGER PRIMARY KEY,
cake_flavor TEXT
);

INSERT INTO guests (guest_name) VALUES ('Alice'), ('Bob'), ('Charlie');
INSERT INTO cakes (cake_flavor) VALUES ('Chocolate'), ('Vanilla'), ('Strawberry');

Bây giờ, hãy sử dụng CROSS JOIN:

SELECT guests.guest_name, cakes.cake_flavor
FROM guests CROSS JOIN cakes;

Truy vấn này sẽ tạo ra:

guest_name cake_flavor
Alice Chocolate
Alice Vanilla
Alice Strawberry
Bob Chocolate
Bob Vanilla
Bob Strawberry
Charlie Chocolate
Charlie Vanilla
Charlie Strawberry

Như bạn có thể thấy, mỗi khách được ghép với mỗi mùi vị bánh. Đó như thể cho mọi người một hương vị của tất cả các loại bánh!

Khi nào nên sử dụng CROSS JOIN

CROSS JOIN hiếm khi được sử dụng trong các tình huống thực tế vì chúng có thể tạo ra rất nhiều tập kết quả. Tuy nhiên, chúng rất hữu ích cho việc tạo ra các tổ hợp hoặc dữ liệu kiểm thử.

The INNER JOIN: Cặp đôi hoàn hảo

INNER JOIN là gì?

An INNER JOIN giống như ghép cặp các vũ công biết cùng một điệu nhảy. Nó kết hợp các hàng từ hai bảng dựa trên một cột liên quan giữa chúng.

Cú pháp INNER JOIN

SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;

Ví dụ INNER JOIN

Hãy thay đổi kịch bản tổ chức tiệc của chúng ta. Bây giờ chúng ta có khách và sở thích bánh của họ:

CREATE TABLE guests (
guest_id INTEGER PRIMARY KEY,
guest_name TEXT,
preferred_cake_id INTEGER
);

CREATE TABLE cakes (
cake_id INTEGER PRIMARY KEY,
cake_flavor TEXT
);

INSERT INTO guests (guest_name, preferred_cake_id) VALUES
('Alice', 1), ('Bob', 2), ('Charlie', 3), ('David', 1);
INSERT INTO cakes (cake_flavor) VALUES
('Chocolate'), ('Vanilla'), ('Strawberry');

Bây giờ, hãy sử dụng INNER JOIN để ghép khách với bánh yêu thích của họ:

SELECT guests.guest_name, cakes.cake_flavor
FROM guests INNER JOIN cakes ON guests.preferred_cake_id = cakes.cake_id;

Truy vấn này sẽ tạo ra:

guest_name cake_flavor
Alice Chocolate
Bob Vanilla
Charlie Strawberry
David Chocolate

Hoàn hảo! Mỗi khách được ghép với mùi vị bánh yêu thích của họ.

Khi nào nên sử dụng INNER JOIN

INNER JOIN là loại JOIN phổ biến nhất. Sử dụng chúng khi bạn muốn lấy dữ liệu có giá trị khớp trong cả hai bảng.

The OUTER JOIN: Không để ai bị bỏ lại sau

OUTER JOIN là gì?

An OUTER JOIN giống như đảm bảo không ai cảm thấy bị bỏ lại sau buổi tiệc. Nó trả về tất cả các hàng từ một hoặc cả hai bảng, ngay cả khi không có khớp trong bảng khác.

Có ba loại OUTER JOIN:

  1. LEFT OUTER JOIN
  2. RIGHT OUTER JOIN (không được hỗ trợ trong SQLite)
  3. FULL OUTER JOIN (không được hỗ trợ trực tiếp trong SQLite)

Chúng ta sẽ tập trung vào LEFT OUTER JOIN, vì nó là loại được sử dụng phổ biến nhất trong SQLite.

Cú pháp LEFT OUTER JOIN

SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column;

Ví dụ LEFT OUTER JOIN

Hãy thêm một khách không có sở thích bánh:

INSERT INTO guests (guest_name, preferred_cake_id) VALUES ('Eve', NULL);

Bây giờ, hãy sử dụng LEFT OUTER JOIN:

SELECT guests.guest_name, cakes.cake_flavor
FROM guests LEFT OUTER JOIN cakes ON guests.preferred_cake_id = cakes.cake_id;

Truy vấn này sẽ tạo ra:

guest_name cake_flavor
Alice Chocolate
Bob Vanilla
Charlie Strawberry
David Chocolate
Eve NULL

Như bạn có thể thấy, Eve được bao gồm trong kết quả, ngay cả khi cô không có sở thích bánh. Đó là phép màu của LEFT OUTER JOIN!

Khi nào nên sử dụng OUTER JOIN

Sử dụng OUTER JOIN khi bạn muốn bao gồm tất cả các bản ghi từ một bảng, bất kể chúng có khớp với bảng khác hay không.

Kết luận

Và thế là bạn đã có nó, các bạn! Bạn vừa bước vào thế giới kỳ diệu của SQLite JOINS. Nhớ rằng, thực hành là cách tốt nhất để trở nên hoàn hảo, vì vậy đừng ngần ngại thử nghiệm với các truy vấn này.

Dưới đây là bảng tham khảo nhanh các loại JOIN chúng ta đã覆盖:

Loại JOIN Tình huống sử dụng
CROSS JOIN Kết hợp mỗi hàng với mỗi hàng khác
INNER JOIN Ghép hàng dựa trên một điều kiện
LEFT JOIN Bao gồm tất cả các hàng từ bảng bên trái, ghép nếu có thể

Tiếp tục kết hợp các bảng, và sớm bạn sẽ trở thành linh hồn của buổi tiệc cơ sở dữ liệu! Chúc các bạn vui vẻ khi truy vấn!

Credits: Image by storyset