Nội dung bài viết
#

Cách sử dụng SELECT DISTINCT trong SQL để truy vấn

Nội dung bài viết

    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.

    Select Distinct trong SQL

    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
    Email

    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 ByOrder 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ả DistinctGroup 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ì

    Mua Hosting Linux tại BKHOST

    Giảm giá cực sâu, chất lượng hàng đầu. Đăng ký ngay hôm nay:

    cloud hosting linux

    Tôi là Trịnh Duy Thanh, CEO & Founder Công ty Cổ Phần Giải Pháp Mạng Trực Tuyến Việt Nam - BKHOST. Với sứ mệnh mang tới các dịch vụ trên Internet tốt nhất cho các cá nhân và doanh nghiệp trong nước và quốc tế, tôi luôn nỗ lực hết mình nâng cấp đầu tư hệ thống phần cứng, nâng cao chất lượng dịch vụ chăm sóc khách hàng để đem đến những sản phẩm hoàn hảo nhất cho người tiêu dùng. Vì vậy, tôi tin tưởng sẽ đem đến các giải pháp CNTT mới nhất, tối ưu nhất, hiệu quả nhất và chi phí hợp lý nhất cho tất cả các doanh nghiệp.
    Bình luận
    Trượt lên đầu trang
    Miễn phí cước gọi
    Bạn đã hài lòng với trải nghiệm trên Bkhost.vn?
    Cảm ơn lượt bình chọn của bạn, Chúc bạn 1 ngày tốt lành !