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.
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ả:
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ả:
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ả:
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ả:
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 city
và state
để đá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ả:
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ả:
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 đề DISTINCT
và GROUP 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.