Khi làm việc với cơ sở dữ liệu, có lúc bạn muốn lấy tất cả giá trị duy nhất (unique) trong một tập dữ liệu cụ thể. Ví dụ: lấy danh sách tên sản phẩm đã bán, hoặc danh sách tất cả thể loại phim khác nhau trong cơ sở dữ liệu phim.
SQL có hàm tích hợp sẵn giúp lấy thông tin này: DISTINCT. Toán tử DISTINCT cho phép loại bỏ các bản ghi trùng lặp để truy xuất tất cả tổ hợp giá trị duy nhất trong tập dữ liệu.
Trong hướng dẫn này, chúng ta sẽ phân tích cơ bản của DISTINCT trong SQL và khi nào nên dùng toán tử này.
Ôn tập truy vấn SQL
Để lấy thông tin từ cơ sở dữ liệu, bạn phải viết truy vấn. Truy vấn SQL gần như luôn bắt đầu bằng câu lệnh SELECT và chỉ định thông tin bạn muốn lấy. Cú pháp cơ bản:
SELECT ten_cot FROM ten_bang WHERE dieu_kien_truy_van;
Ví dụ: truy vấn trả về tên và chức danh của tất cả nhân viên:
SELECT name, title FROM employees;
Kết quả:
| name | title |
|---|---|
| Luke | Sales Associate |
| Mike | Sales Associate |
| Hannah | Sales Associate |
| Geoff | Senior Sales Associate |
| Alexis | Sales Associate |
| Jonah | Vice President of Sales |
| Emma | Marketing Director |
Nếu muốn lấy nhiều cột, phân tách tên cột bằng dấu phẩy. Hoặc dùng dấu hoa thị (*) để lấy mọi cột.
Khi viết truy vấn, có thể dùng WHERE để lọc bản ghi đáp ứng điều kiện cụ thể. Ví dụ: lấy tất cả Sales Associate:
SELECT name, title FROM employees WHERE title = 'Sales Associate';
Kết quả:
| name | title |
|---|---|
| Luke | Sales Associate |
| Mike | Sales Associate |
| Hannah | Sales Associate |
| Alexis | Sales Associate |
(4 hàng)
Bây giờ đã nắm cơ bản truy vấn, hãy khám phá cách dùng DISTINCT trong SQL.
SQL DISTINCT
Khi thu thập dữ liệu từ cơ sở dữ liệu, kết quả có thể chứa các hàng hoặc giá trị trùng lặp. Giả sử muốn lấy danh sách tất cả chức danh do nhân viên đảm nhận. Nếu dùng truy vấn SELECT thông thường, sẽ nhận giá trị trùng lặp. Ví dụ:
SELECT title FROM employees;
Kết quả:
| title |
|---|
| Sales Associate Sales Associate Sales Associate Senior Sales Associate Sales Associate Vice President of Sales Marketing Director |
(7 hàng)
Chức danh Sales Associate xuất hiện 4 lần vì có 4 nhân viên giữ chức danh đó. Nhưng nếu chỉ muốn biết cơ sở dữ liệu có những chức danh nào, chứ không quan tâm số lượng người?
Đó là lúc toán tử SQL DISTINCT phát huy tác dụng. Bằng cách dùng mệnh đề SQL DISTINCT, chúng ta loại bỏ tất cả dữ liệu trùng lặp khỏi truy vấn.
Từ khóa DISTINCT dùng kết hợp với toán tử SELECT. Ví dụ chạy cùng truy vấn trên nhưng có DISTINCT:
SELECT DISTINCT title FROM employees;
Kết quả:
| title |
|---|
| Vice President of Sales Sales Associate Senior Sales Associate Marketing Director |
(4 hàng)
Truy vấn trả về danh sách tất cả chức danh nhân viên giữ. Tuy nhiên, không lặp lại chức danh nào được giữ bởi nhiều nhân viên. Không có giá trị trùng lặp trong đầu ra.
Toán tử DISTINCT đặc biệt hữu ích khi làm việc với tập dữ liệu lớn. Trong ví dụ trên chỉ có 7 nhân viên, nhưng nếu có 500 nhân viên, sẽ rất khó nhìn thấy người nào giữ chức danh gì nếu không dùng DISTINCT.
Kết luận
Bây giờ bạn đã biết cách dùng toán tử DISTINCT trên máy chủ SQL.
Như đã thảo luận, SQL SELECT DISTINCT cho phép lấy dữ liệu từ bảng và loại bỏ bất kỳ hàng hoặc giá trị trùng lặp nào khỏi kết quả. Ví dụ: nếu muốn danh sách tất cả chi nhánh của công ty, bạn có thể dùng DISTINCT để tạo danh sách. DISTINCT đặc biệt hữu ích khi làm việc với tập dữ liệu lớn nơi các bản sao có thể gây phân tâm.