SELECT DISTINCT trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề SELECT DISTINCT trong SQL Server để truy xuất các giá trị riêng biệt duy nhất trong danh sách các cột được chỉ định.

Giới thiệu về mệnh đề SELECT DISTINCT trong SQL Server

Đôi khi, bạn có thể chỉ muốn nhận các giá trị riêng biệt trong một cột được chỉ định của bảng. Để làm điều này, bạn sử dụng mệnh đề SELECT DISTINCT như sau:

SELECT DISTINCT
    column_name
FROM
    table_name;

Truy vấn chỉ trả về các giá trị riêng biệt trong cột được chỉ định. Nói cách khác, nó loại bỏ các giá trị trùng lặp trong cột khỏi tập kết quả.

Nếu bạn sử dụng nhiều cột như sau:

SELECT DISTINCT
    column_name1,
    column_name2 ,
    ...
FROM
    table_name;

Truy vấn sử dụng kết hợp các giá trị trong tất cả các cột được chỉ định trong mệnh đề SELECT để đánh giá tính duy nhất.

Nếu bạn áp dụng mệnh đề DISTINCT cho một cột NULL, mệnh đề DISTINCT sẽ chỉ giữ một giá trị NULL và loại bỏ những giá trị NULL khác. Nói cách khác, mệnh đề DISTINCT coi tất cả các giá trị NULL là cùng một giá trị.

Ví dụ về SELECT DISTINCT trong SQL Server

Chúng tôi sẽ sử dụng bảng customers từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho SELECT DISTINCT trong SQL Server.

Bảng customers trong cơ sở dữ liệu mẫu trong SQL Server

SELECT DISTINCT một cột

Câu lệnh sau trả về tất cả các thành phố của tất cả các khách hàng trong bảng customers:

SELECT
    city
FROM
    sales.customers
ORDER BY
    city;

Đây là kết quả:

SELECT DISTINCT một cột

Như bạn có thể thấy trong kết quả đầu ra, các thành phố bị trùng lặp.

Để có được các thành phố riêng biệt không bị trùng lặp, bạn thêm từ khóa DISTINCT như sau:

SELECT DISTINCT
    city
FROM
    sales.customers
ORDER BY
    city;

Đây là kết quả:

SELECT DISTINCT một cột

Bây giờ, truy vấn trả về một giá trị riêng cho từng thành phố. Nói cách khác, nó đã xóa tất cả các thành phố trùng lặp khỏi tập kết quả.

SELECT DISTINCT nhiều cột

Câu lệnh này trả về tất cả các thành phố và tiểu bang của tất cả các khách hàng:

SELECT
    city,
    state
FROM
    sales.customers
ORDER BY 
    city, 
    state;

Đây là kết quả:

SELECT DISTINCT nhiều cột

Câu lệnh sau đây trả về thành phố và tiểu bang riêng biệt không trùng lặp của tất cả các khách hàng.

SELECT DISTINCT
    city,
    state
FROM
    sales.customers

Đây là kết quả:

SELECT DISTINCT nhiều cột

Trong ví dụ này, câu lệnh đã sử dụng kết hợp các giá trị trong cả hai cột citystate để đánh giá trùng lặp.

SELECT DISTINCT với giá trị null

Ví dụ sau đây trả về các số điện thoại riêng biệt không trùng lắp của khách hàng:

SELECT DISTINCT
    phone
FROM
    sales.customers
ORDER BY
    phone;

Đây là kết quả:

SELECT DISTINCT với giá trị null

Trong ví dụ này, mệnh đề DISTINCT chỉ giữ một giá trị NULL trong cột phone và loại bỏ các giá trị NULL khác.

SELECT DISTINCT với GROUP BY

Câu lệnh sau sử dụng mệnh đề GROUP BY để trả về các thành phố riêng biệt cùng với mã trạng thái và mã zip từ bảng sales.customers:

SELECT 
    city, 
    state, 
    zip_code
FROM 
    sales.customers
GROUP BY 
    city, state, zip_code
ORDER BY
    city, state, zip_code

Đây là kết quả:

DISTINCT với GROUP BY

Nó tương đương với truy vấn sau sử dụng toán tử DISTINCT:

SELECT DISTINCT 
    city, 
    state, 
    zip_code
FROM 
    sales.customers;

Cả hai mệnh đề DISTINCTGROUP BY làm giảm số lượng bản ghi trả về trong tập kết quả bằng cách loại bỏ các bản ghi trùng lặp.

Tuy nhiên, bạn nên sử dụng mệnh đề GROUP BY khi bạn muốn áp dụng các hàm tập hợp trên một hoặc nhiều cột.

Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề SELECT DISTINCT trong SQL Server để truy xuất các giá trị riêng biệt trong danh sách các cột được chỉ định.

SQL Server
Bài Viết Liên Quan:
INTERSECT trong SQL Server
Trung Nguyen 22/11/2020
INTERSECT trong SQL Server

Tìm hiểu cách sử dụng toán tử INTERSECT trong SQL Server để trả về phần giao nhau của các tập kết quả của hai truy vấn.

EXCEPT trong SQL Server
Trung Nguyen 22/11/2020
EXCEPT trong SQL Server

Tìm hiểu cách sử dụng EXCEPT trong SQL Server để loại trừ tập kết quả của một truy vấn ra khỏi tập kết quả của một truy vấn khác.

SQL Server: Hướng dẫn subquery trong SQL Server từ A-Z
Trung Nguyen 22/11/2020
SQL Server: Hướng dẫn subquery trong SQL Server từ A-Z

Tìm hiểu về subquery, toán tử EXISTS, ANY, ALL trong SQL Server và cách sử dụng truy vấn con để truy vấn dữ liệu.

UNION trong SQL Server
Trung Nguyen 22/11/2020
UNION trong SQL Server

Tìm hiểu cách sử dụng UNION trong SQL Server để kết hợp kết quả của hai hoặc nhiều truy vấn thành một tập kết quả duy nhất.