Trong MySQL, từ khóa DISTINCT được sử dụng để loại bỏ các bản sao và chỉ trả về các hàng duy nhất trong kết quả truy vấn. Dưới đây là hướng dẫn chi tiết về cách sử dụng DISTINCT để lọc dữ liệu trùng lặp.

1. Câu lệnh cơ bản với DISTINCT

Câu lệnh cơ bản để sử dụng DISTINCT trong MySQL như sau:

SELECT DISTINCT column1, column2, ...
FROM table_name;

2. Ví dụ cụ thể

Giả sử bạn có bảng employees với các cột id, name, và department. Bạn muốn lấy danh sách các phòng ban duy nhất mà không bị trùng lặp.

Dữ liệu ví dụ:

CREATE TABLE employees (
    id INT,
    name VARCHAR(100),
    department VARCHAR(50)
);

INSERT INTO employees (id, name, department) VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'Finance'),
(3, 'Charlie', 'HR'),
(4, 'David', 'IT'),
(5, 'Eve', 'Finance');

Truy vấn sử dụng DISTINCT:

SELECT DISTINCT department
FROM employees;

Kết quả sẽ là:

HR Finance IT

3. DISTINCT với nhiều cột

Khi bạn sử dụng DISTINCT với nhiều cột, MySQL sẽ trả về các hàng duy nhất dựa trên sự kết hợp của các giá trị trong các cột được chỉ định.

Ví dụ:

Nếu bạn muốn lấy danh sách các tổ hợp duy nhất của namedepartment:

SELECT DISTINCT name, department
FROM employees;

Kết quả sẽ là:

Alice, HR Bob, Finance Charlie, HR David, IT Eve, Finance

4. Sử dụng DISTINCT với COUNT

Nếu bạn muốn đếm số lượng giá trị duy nhất trong một cột, bạn có thể kết hợp DISTINCT với hàm COUNT().

Ví dụ:

Đếm số lượng phòng ban duy nhất:

SELECT COUNT(DISTINCT department) AS unique_departments
FROM employees;

Kết quả sẽ là:

3

5. Lưu ý khi sử dụng DISTINCT

  • DISTINCT hoạt động trên toàn bộ các cột được chỉ định trong câu lệnh SELECT. Điều này có nghĩa là nếu bạn chỉ định nhiều cột, các hàng được trả về sẽ duy nhất dựa trên sự kết hợp của các giá trị trong tất cả các cột đó.
  • DISTINCT có thể làm giảm hiệu suất của truy vấn nếu bạn làm việc với các bảng lớn hoặc khi bạn áp dụng nó trên nhiều cột.

6. DISTINCT và ORDER BY

Khi sử dụng DISTINCT kết hợp với ORDER BY, bạn có thể sắp xếp các hàng duy nhất theo một thứ tự cụ thể.

Ví dụ:

Lấy danh sách các phòng ban duy nhất và sắp xếp theo tên phòng ban:

SELECT DISTINCT department
FROM employees
ORDER BY department;

Kết quả sẽ là:

Finance HR IT

7. DISTINCT với JOIN

Khi sử dụng DISTINCT với các truy vấn kết hợp (JOIN), bạn có thể loại bỏ các bản sao từ kết quả kết hợp.

Ví dụ:

Giả sử bạn có hai bảng employeesdepartments, và bạn muốn lấy danh sách các phòng ban duy nhất từ kết quả kết hợp.

SELECT DISTINCT e.department
FROM employees e
JOIN departments d ON e.department = d.department_name;

Kết quả sẽ là danh sách các phòng ban duy nhất từ kết quả kết hợp.

Tổng Kết

  • DISTINCT là một công cụ mạnh mẽ trong MySQL để loại bỏ các bản sao và chỉ trả về các giá trị duy nhất.
  • Có thể sử dụng DISTINCT với một hoặc nhiều cột, và kết hợp với các hàm như COUNT()ORDER BY.
  • Lưu ý đến hiệu suất khi làm việc với các bảng lớn và nhiều cột.