Tiếp tục với seri MySQL cơ bản. Trong bài viết này, bạn sẽ học được cách sử dụng mệnh đề MySQL DISTINCT
trong câu lệnh SELECT
để loại bỏ các hàng trùng lặp trong tập kết quả.
Khi truy vấn dữ liệu từ một bảng, bạn có thể nhận được các bản ghi trùng lặp. Để loại bỏ các bản ghi trùng lặp này, bạn sử dụng mệnh đề DISTINCT
trong câu lệnh SELECT
.
Đây là cú pháp của mệnh đề DISTINCT
:
SELECT DISTINCT select_list FROM table_name WHERE search_condition ORDER BY sort_expression;
Trong cú pháp này, bạn chỉ định một hoặc nhiều cột mà bạn muốn chọn các giá trị riêng biệt sau các từ khóa SELECT DISTINCT
.
Nếu bạn chỉ định một cột, mệnh đề DISTINCT
sẽ đánh giá tính duy nhất của các hàng dựa trên các giá trị của cột đó.
Tuy nhiên, nếu bạn chỉ định hai hoặc nhiều cột, mệnh đề DISTINCT
sẽ sử dụng giá trị của các cột này để đánh giá tính duy nhất của các hàng.
Khi thực hiện câu lệnh SELECT
với mệnh đề DISTINCT
, MySQL đánh giá mệnh đề DISTINCT
sau mệnh đề FROM
, WHERE
,và SELECT
và trước mệnh đề ORDER BY
:
Chúng tôi sẽ sử dụng bảng employees
từ cơ sở dữ liệu mẫu:
Đầu tiên, chọn họ từ bảng employees
bằng cách sử dụng câu lệnh SELECT
sau:
SELECT lastname FROM employees ORDER BY lastname;
Kết quả:
+-----------+ | lastname | +-----------+ | Bondur | | Bondur | | Bott | | Bow | | Castillo | | Firrelli | | Firrelli | | Fixter | .... | Jones | | Patterson | | Patterson | | Patterson | | Thompson | ... +-----------+ 23 rows in set (0.00 sec)
Khi bạn chỉ định một cột có giá trị NULL
trong mệnh đề DISTINCT
, mệnh đề DISTINCT
sẽ chỉ giữ một giá trị NULL
vì nó coi tất cả các giá trị NULL
đều giống nhau.
Ví dụ, cột trạng thái trong bảng khách hàng có giá trị NULL
.
Khi bạn sử dụng mệnh đề DISTINCT
để truy vấn các trạng thái, bạn sẽ thấy các trạng thái riêng biệt và NULL
như sau:
SELECT DISTINCT state FROM customers;
Kết quả:
+---------------+ | state | +---------------+ | NULL | | NV | | Victoria | | CA | | NY | | PA | ... | Co. Cork | | Pretoria | | NH | | Tokyo | +---------------+ 19 rows in set (0.00 sec)
Khi bạn chỉ định nhiều cột trong mệnh đề DISTINCT
, mệnh đề DISTINCT
sẽ sử dụng kết hợp các giá trị trong các cột này để xác định tính duy nhất của bản ghi trong tập kết quả.
Ví dụ: để có được sự kết hợp duy nhất giữa thành phố và tiểu bang từ bảng khách hàng, bạn sử dụng truy vấn sau:
SELECT DISTINCT state, city FROM customers WHERE state IS NOT NULL ORDER BY state, city;
Kết quả:
+---------------+----------------+ | state | city | +---------------+----------------+ | BC | Tsawassen | | BC | Vancouver | | CA | Brisbane | | CA | Burbank | | CA | Burlingame | | CA | Glendale | | CA | Los Angeles | | CA | Pasadena | | CA | San Diego | ...
Nếu không có mệnh đề DISTINCT
, bạn sẽ nhận được kết hợp trùng lặp giữa tiểu bang và thành phố như sau:
SELECT state, city FROM customers WHERE state IS NOT NULL ORDER BY state , city;
Kết quả:
+---------------+----------------+ | state | city | +---------------+----------------+ | BC | Tsawassen | | BC | Vancouver | | CA | Brisbane | | CA | Burbank | .. | CA | San Francisco | | CA | San Francisco | ... | MA | Boston | | MA | Boston | | MA | Brickhaven | | MA | Brickhaven | | MA | Brickhaven | ... | NY | NYC | | NY | NYC | | NY | NYC | | NY | NYC | | NY | NYC | ...
DISTINCT
để loại bỏ các hàng trùng lặp khỏi tập kết quả được trả về bởi mệnh đề SELECT
.Bài viết liên quan:
Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-order-by/
Bình luận: