MySQL DISTINCT (Loại bỏ các trường trùng lặp khi SELECT)

22/08/2022 - lượt xem
Chia sẻ
 
5/5 - (2 bình chọn)

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ả.

Giới thiệu về mệnh đề MySQL DISTINCT

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 đề  FROMWHERE,và  SELECT và trước mệnh đề  ORDER BY :

Ví dụ mệnh đề MySQL DISTINCT

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)

Giá trị MySQL DISTINCT và NULL

Khi bạn chỉ định một cột có giá trị  NULL  trong mệnh đề  DISTINCT, mệnh đề  DISTINCTsẽ 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)

MySQL DISTINCT với nhiều cột

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            |
...

Tổng kết

  • Sử dụng mệnh đề MySQL  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/

 

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    5/5 - (2 bình chọn)

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm