Xử lý bản sao – HANDLING DUPLICATE trong SQL

Có tình huống dữ liệu có nhiều bản ghi trùng lặp trong một bảng và bạn muốn lấy ra bản ghi duy nhất chứ không phải lấy ra tất cả các bản ghi trùng lặp. Để xử lý tình huống này, hãy sử dụng từ khoá DISTINCT trong SQL kết hợp với câu lệnh SELECT, bạn sẽ loại bỏ được tất cả các bản ghi trùng lặp và chỉ lấy ra bản ghi duy nhất.

Cú pháp

Cú pháp cơ bản của từ khóa DISTINCT để loại bỏ các bản sao là như sau:

SELECT DISTINCT cot1, cot2... cotN  FROM ten_bang WHERE [dieu_kien]

Ví dụ minh họa cách xử lý Duplicate trong SQL

Xét bảng NHANVIEN có các bản ghi sau:

 +----+----------+-----+-----------+----------+
 | ID | TEN      |TUOI | DIACHI    | LUONG    |
 +----+----------+-----+-----------+----------+
 |  1 | Thanh    |  32 | Haiphong  |  2000.00 |
 |  2 | Loan     |  25 | Hanoi     |  1500.00 |
 |  3 | Nga      |  23 | Hanam     |  2000.00 |
 |  4 | Manh     |  25 | Hue       |  6500.00 |
 |  5 | Huy      |  27 | Hatinh    |  8500.00 |
 |  6 | Cao      |  22 | HCM       |  4500.00 |
 |  7 | Lam      |  24 | Hanoi     | 10000.00 |
 +----+----------+-----+-----------+----------+

Đầu tiên, chúng ta xem cách truy vấn SELECT trả về bản sao của LUONG:

SQL> SELECT SALARY FROM CUSTOMERS  ORDER BY SALARY;

Trong kết quả thu được, LUONG 2000 xuất hiện hai lần, và là một bản sao từ bảng ban đầu.

 +----------+
 | LUONG    |
 +----------+
 |  1500.00 |
 |  2000.00 |
 |  2000.00 |
 |  4500.00 |
 |  6500.00 |
 |  8500.00 |
 | 10000.00 |
 +----------+

Bây giờ, sử dụng từ khóa DISTINCT với truy vấn SELECT trên và xem kết quả:

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS  ORDER BY SALARY;

Trong kết quả thu được, bạn sẽ không thấy bất kỳ bản sao nào.

+----------+
 | LUONG    |
 +----------+
 |  1500.00 |
 |  2000.00 |
 |  4500.00 |
 |  6500.00 |
 |  8500.00 |
 | 10000.00 |
 +----------+