×

Kết hợp bảng theo điều kiện với USING trong MySQL

Ghép nối bảng là một trong những thao tác cơ bản và quan trọng trong hệ quản trị cơ sở dữ liệu. Khi làm việc với MySQL, việc ghép nối hai hoặc nhiều bảng theo điều kiện nhất định giúp bạn thu thập dữ liệu từ nhiều nguồn khác nhau một cách hiệu quả và chính xác. Câu lệnh JOIN là một công cụ mạnh mẽ giúp thực hiện việc này. Đặc biệt, từ khóa USING giúp tăng độ rõ ràng và dễ bảo trì của các truy vấn ghép nối.

Các loại ghép nối cơ bản

  1. INNER JOIN: Chỉ lấy các hàng có điều kiện trùng khớp trong cả hai bảng.

    SELECT * 
    FROM tableA 
    INNER JOIN tableB 
    ON tableA.common_column = tableB.common_column;
    
  2. LEFT JOIN (LEFT OUTER JOIN): Bao gồm tất cả các hàng từ bảng bên trái và các hàng khớp từ bảng bên phải. Nếu không có giá trị khớp, NULL sẽ được trả về cho các cột từ bảng bên phải.

    SELECT * 
    FROM tableA 
    LEFT JOIN tableB 
    ON tableA.common_column = tableB.common_column;
    
  3. RIGHT JOIN (RIGHT OUTER JOIN): Tương tự như LEFT JOIN, nhưng bao gồm tất cả các hàng từ bảng bên phải.

    SELECT * 
    FROM tableA 
    RIGHT JOIN tableB 
    ON tableA.common_column = tableB.common_column;
    
  4. FULL JOIN (FULL OUTER JOIN): Kết hợp LEFT JOIN và RIGHT JOIN nhưng MySQL không hỗ trợ trực tiếp câu lệnh này, bạn có thể sử dụng UNION ALL để giải quyết.

    SELECT * 
    FROM tableA 
    LEFT JOIN tableB 
    ON tableA.common_column = tableB.common_column
    UNION ALL
    SELECT * 
    FROM tableA 
    RIGHT JOIN tableB 
    ON tableA.common_column = tableB.common_column
    WHERE tableA.common_column IS NULL;
    

Sử dụng từ khóa USING

Khi bạn cần ghép nối trên một cột có cùng tên trong cả hai bảng, câu lệnh USING giúp đơn giản hóa mã lệnh và tăng tính minh bạch.

Cú pháp

SELECT *
FROM tableA
INNER JOIN tableB
USING (common_column);

Với USING, bạn không cần viết rõ bảng nào chứa cột nào, điều này làm cho truy vấn dễ đọc hơn nếu bạn quen thuộc với cấu trúc bảng. Tuy nhiên, nhớ rằng common_column phải tồn tại trong cả hai bảng và phải có cùng tên.

Ví dụ cụ thể

Giả sử bạn có hai bảng employeesdepartments, và đều có cột department_id:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(50),
    department_id INT
);

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(50)
);

Để lấy thông tin về tên nhân viên và tên phòng ban, bạn có thể sử dụng:

SELECT name, department_name
FROM employees
INNER JOIN departments
USING (department_id);

Phép ghép này sẽ trả về bảng kết hợp của các cột name từ bảng employeesdepartment_name từ bảng departments nơi department_id là cùng một giá trị.

Lợi ích và hạn chế của USING

Lợi ích

  1. Dễ đọc hơn: Giảm thiểu sự lặp lại và tăng tính rõ ràng.
  2. Giảm lỗi đánh máy: Bởi vì bạn không cần chỉ định bảng trong từng điều kiện ghép nối.

Hạn chế

  1. Sử dụng có điều kiện: Chỉ sử dụng được khi cột ghép nối có cùng tên.
  2. Giới hạn trong MySQL: Đối với các phép nối phức tạp, bạn có thể cần sử dụng ON để chỉ rõ các điều kiện ghép nối.

Kết luận

Ghép nối bảng bằng cách sử dụng từ khóa USING trong MySQL là một phương pháp tiện dụng và hiệu quả khi làm việc với các cột có cùng tên. Điều này không chỉ giảm thiểu mã lệnh mà còn tăng tính đọc và bảo trì của truy vấn. Hãy tận dụng phương pháp này để tạo ra các truy vấn rõ ràng và hiệu quả hơn trong công việc của bạn.

Comments