SQL - Sử dụng Joins: Hướng dẫn Tổng quát cho Người mới bắt đầu

Xin chào các bạn đam mê cơ sở dữ liệu! Là một giáo viên khoa học máy tính với nhiều năm kinh nghiệm, tôi rất vui được hướng dẫn các bạn vào thế giới thú vị của SQL joins. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ những kiến thức cơ bản và dần dần nâng cao. Cuối cùng của bài hướng dẫn này, bạn sẽ có thể kết hợp các bảng như một chuyên gia!

SQL - Using Joins

SQL Joins là gì?

Hãy tưởng tượng bạn đang tổ chức một buổi gặp mặt gia đình lớn. Bạn có một danh sách với tên và tuổi, và một danh sách khác với tên và món ăn yêu thích. Liệu có tốt nếu bạn có thể kết hợp hai danh sách này để có được hình ảnh hoàn chỉnh của mỗi thành viên gia đình? Đó chính xác là điều SQL joins làm cho các bảng dữ liệu!

Trong SQL, một điều khoản join được sử dụng để 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. Nó giống như tạo một bảng siêu với thông tin từ nhiều nguồn.

Điều khoản JOIN trong SQL

Cú pháp cơ bản cho một JOIN SQL trông như thế này:

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name = table2.column_name;

Hãy phân tích nó:

  • Chúng ta SELECT các cột mà chúng ta muốn thấy trong kết quả.
  • Chúng ta chỉ định bảng đầu tiên (table1) trong từ khóa FROM.
  • Chúng ta sử dụng JOIN để chỉ ra rằng chúng ta muốn kết hợp với một bảng khác (table2).
  • Điều khoản ON chỉ định cách các bảng nên được ghép nối.

Các loại Joins trong SQL

Bây giờ, hãy cùng khám phá các loại joins khác nhau có sẵn trong SQL. Tôi thích nghĩ về chúng như những cách khác nhau để kết hợp danh sách khách cho buổi gặp mặt gia đình!

1. INNER JOIN

INNER JOIN giống như việc mời chỉ những cousin xuất hiện trong cả danh sách của bạn và danh sách của chị bạn. Nó trả về các bản ghi có giá trị khớp trong cả hai bảng.

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

Truy vấn này sẽ trả về tất cả các đơn hàng cùng với tên khách hàng, nhưng chỉ cho những khách hàng đã đặt hàng.

2. LEFT (OUTER) JOIN

LEFT JOIN giống như việc bao gồm tất cả mọi người trong danh sách của bạn, ngay cả khi họ không có trong danh sách của chị bạn. Nó trả về tất cả các bản ghi từ bảng trái và các bản ghi khớp từ bảng phải.

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

Truy vấn này sẽ hiển thị tất cả các khách hàng, ngay cả những người không đặt hàng (OrderID sẽ là NULL).

3. RIGHT (OUTER) JOIN

RIGHT JOIN là ngược lại với LEFT JOIN. Nó giống như việc sử dụng danh sách của chị bạn làm danh sách chính. Nó trả về tất cả các bản ghi từ bảng phải và các bản ghi khớp từ bảng trái.

SELECT Orders.OrderID, Employees.LastName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID;

Truy vấn này sẽ hiển thị tất cả các nhân viên, ngay cả những người không xử lý bất kỳ đơn hàng nào.

4. FULL (OUTER) JOIN

FULL JOIN giống như việc kết hợp cả hai danh sách của bạn và chị bạn, bao gồm mọi người từ cả hai bên. Nó trả về tất cả các bản ghi khi có khớp trong bảng trái hoặc phải.

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

Truy vấn này sẽ hiển thị tất cả các khách hàng và tất cả các đơn hàng, với giá trị NULL nơi không có khớp.

Ví dụ Thực tế

Hãy áp dụng kiến thức của chúng ta vào một số tình huống thực tế!

Ví dụ 1: Kết hợp Thông tin Khách hàng và Đơn hàng

Giả sử chúng ta có hai bảng: CustomersOrders. Chúng ta muốn xem tất cả các khách hàng và đơn hàng của họ (nếu có).

SELECT Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

Truy vấn này sẽ:

  1. Liệt kê tất cả các khách hàng, ngay cả những người không có đơn hàng.
  2. Hiển thị OrderID và OrderDate cho khách hàng đã đặt hàng.
  3. Hiển thị NULL cho OrderID và OrderDate cho khách hàng không có đơn hàng.
  4. Sắp xếp kết quả theo CustomerName.

Ví dụ 2: Tìm Nhân viên Chưa Đặt Đơn hàng

Giả sử chúng ta muốn xác định các nhân viên chưa xử lý bất kỳ đơn hàng nào.

SELECT Employees.EmployeeID, Employees.LastName, Employees.FirstName
FROM Employees
LEFT JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID
WHERE Orders.OrderID IS NULL;

Truy vấn này sẽ:

  1. Kết hợp bảng Employees và Orders.
  2. Sử dụng điều khoản WHERE để lọc các nhân viên không có đơn hàng khớp.
  3. Trả về chỉ các nhân viên chưa xử lý bất kỳ đơn hàng nào.

Mẹo và Kỹ thuật

  1. Luôn bắt đầu với một join đơn giản và dần dần tăng độ phức tạp.
  2. Sử dụng别名 bảng để dễ đọc, đặc biệt là với các tên bảng dài:
    SELECT c.CustomerName, o.OrderID
    FROM Customers c
    LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
  3. Chú ý đến hiệu suất với các bộ dữ liệu lớn. Joins có thể tiêu tốn nhiều tài nguyên.

Các Phương pháp Join Thường gặp

Dưới đây là bảng tóm tắt các phương pháp join chúng ta đã thảo luận:

Loại Join Mô tả
INNER JOIN Trả về các bản ghi có giá trị khớp trong cả hai bảng
LEFT JOIN Trả về tất cả các bản ghi từ bảng trái và các bản ghi khớp từ bảng phải
RIGHT JOIN Trả về tất cả các bản ghi từ bảng phải và các bản ghi khớp từ bảng trái
FULL JOIN Trả về tất cả các bản ghi khi có khớp trong bảng trái hoặc phải

Nhớ rằng, thực hành làm nên完美! Thử các join này với các bộ dữ liệu khác nhau, và sớm bạn sẽ kết hợp bảng như một phù thủy cơ sở dữ liệu. Chúc các bạn mã hóa vui vẻ, và hy vọng các join của bạn luôn thành công!

Credits: Image by storyset