Trong SQL có rất nhiều câu lệnh hỗ trợ người dùng trong việc truy vấn dữ liệu. Có lẽ bạn đã từng biết tới Order by, Group by nhưng chưa thực sự biết tới Distinct. Đây cũng là một dạng câu lệnh trả về các giá trị chỉ định riêng biệt trong bảng.
Vậy việc sử dụng Distinct trong SQL có ý nghĩa và kết quả như thế nào?
Hãy cùng chúng tôi khám phá cách truy vấn bằng câu lệnh này trong bài viết dưới đây.
Giới thiệu về mệnh đề Select Distinct trong SQL
Trước khi nói về cách sử dụng Distinct trong SQL, bạn cần biết ý nghĩa thực sự của mệnh đề này. Đây là một dạng truy vấn được dùng để loại bỏ các dữ liệu trùng lặp. Điều này có nghĩa nó sẽ chỉ lấy các giá trị riêng biệt khác nhau trong một bảng
Cú pháp mệnh đề DISTINCT
như sau:
{{EJS0}}
Câu lệnh truy vấn này cũng có thể sử dụng trong trường hợp nhiều cột. Lúc này cú pháp sẽ như sau:
{{EJS1}}
Đối với các cột đã được chỉ định sau DISTINCT
, lệnh sẽ quét qua và chỉ lấy các giá trị khác nhau, không lấy giá trị trùng lặp. Điều này cực kỳ tốt trong trường hợp muốn truy vấn các giá trị duy nhất của một thuộc tính. Trong trường hợp cột bạn truy vấn chứa giá trị NULL, nó sẽ chỉ lấy một kết quả NULL duy nhất. Có thể nói, DISTINCT coi tất cả giá trị NULL trong cột là cùng một giá trị.
Ví dụ về DISTINCT trong SQL
Để có thể hiểu rõ hơn về việc sử dụng Distinct trong SQL, hãy cùng nhìn qua những ví dụ dưới đây: Ví dụ bảng dữ liệu Student chứa các trường sau:
Student_ID |
First_Name |
Last_Name |
Province |
District |
Phone_Number |
Birth_Day |
Truy vấn Distinct ở một cột của bảng
Bạn muốn truy vấn tất cả các họ của học sinh trong bảng Student thường sử dụng lệnh sau:
{{EJS2}}
Câu lệnh ORDER BY
sẽ sắp xếp tất cả giá trị First_Name
trong bảng theo thứ tự. Tuy nhiên bạn sẽ gặp phải sự trùng lặp các giá trị giống nhau khi học sinh có cùng một First_Name
.
Vậy nếu bạn muốn truy vấn các họ riêng biệt khác nhau không trùng lặp thì chỉ cần thêm DISTRINCT
sau SELECT
, ví dụ như sau:
{{EJS3}}
Kết quả trả về sẽ bao gồm tất cả giá trị First_Name không trùng nhau mà trong bảng Student có. Chúng được sắp xếp theo thứ tự tăng dần.
Truy vấn Distinct ở nhiều cột
Nếu bạn muốn hiển thị tất cả các Huyện và Tỉnh của học sinh sẽ sử dụng câu lệnh sau:
{{EJS4}}
Tuy nhiên khi thêm mệnh đề DISTRINCT, kết quả trả về sẽ bao gồm các thành phố và huyện khác nhau không trùng lặp. Ví dụ:
{{EJS5}}
Câu lệnh truy vấn trên đã kết hợp giá trị khác nhau ở cả hai cột Province và District để lọc.
Truy vấn Distinct khi có giá trị NULL
Trong bảng ví dụ, cột Phone_Number có thể điền hoặc để trống, vậy nên các giá trị để trống mặc định là NULL. Câu lệnh Distinct sau đây sẽ trả về tất cả các số điện thoại không trùng ở trong bảng:
{{EJS6}}
Vậy nên các giá trị NULL giống nhau sẽ chỉ giữ lại một giá trị duy nhất ở kết quả trả về.
So sánh giữa DISTINCT và GROUP BY
Mọi người thường biết đến Group By
và Order by
là hai mệnh đề đi với nhau. Kết quả trả về của truy vấn này cũng bao gồm những giá trị khác nhau không trùng của cột. Ví dụ trong trường hợp lấy các giá trị Tỉnh và Huyện không trùng trong bảng trên bằng Group By
sẽ như sau:
SELECT Province, District FROM Student GROUP BY Province, District ORDER BY Province, District;
Câu lệnh trả về kết quả tương tự như khi dùng Distinct:
{{EJS7}}
Vậy nên cả Distinct
và Group By
đều thực hiện loại bỏ các giá trị trùng lặp. Có thể nói Group By là một trường hợp đặc biệt của Distinct.
Tuy nhiên người dùng chỉ nên sử dụng Group By trong trường hợp có các hàm tổng hợp (SUM(), MAX(), MIN(), COUNT(),…). Lúc này truy vấn sẽ trả về các giá trị được sắp xếp rất dễ nhìn. Vì Group By thường đi cùng Order By, tuy nhiên Distinct có thể dùng Order By hoặc không.
Tổng kết
Trên đây là cách sử dụng Distinct trong SQL mà chúng tôi muốn giới thiệu đến bạn. Việc truy vấn thông qua mệnh đề này thực sự rất cần thiết trong nhiều trường hợp. Người dùng có thể sử dụng Distinct cho một hoặc nhiều biểu thức, trường giá trị khác nhau.
Nếu bạn còn bất kỳ câu hỏi nào về nội dung trong bài viết trên, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.
- select distinct trong sql
- distinct sql là gì