Với câu lệnh SELECT DISTINCT trong SQL, chúng ta có thể lọc ra các giá trị duy nhất từ một hoặc nhiều cột trong bảng, từ đó thuận tiện trong việc thống kê, phân tích dữ liệu và đưa ra các quyết định đúng đắn. Vậy cụ thể SELECT DISTINCT trong SQL là gì? Trong bài viết hôm nay, Tino Group sẽ hướng dẫn bạn cách sử dụng SELECT DISTINCT trong SQL hiệu quả.
Tổng quan về câu lệnh SELECT DISTINCT trong SQL
SELECT DISTINCT trong SQL là gì?
SELECT DISTINCT trong SQL là một câu lệnh được sử dụng để truy vấn và lấy các giá trị duy nhất từ một hoặc nhiều cột trong bảng. Khi thực hiện truy vấn bằng câu lệnh SELECT DISTINCT, kết quả trả về chỉ chứa các giá trị duy nhất, loại bỏ các giá trị trùng lặp. Điều này giúp bạn làm sạch và tổ chức dữ liệu một cách hiệu quả, đồng thời cho phép thực hiện các phân tích và thống kê dễ dàng hơn.
SELECT DISTINCT là một công cụ mạnh mẽ trong SQL để tìm ra các giá trị duy nhất từ cơ sở dữ liệu và áp dụng trong nhiều tình huống khác nhau như lấy danh sách các mục trong một cột, đếm số lượng giá trị duy nhất, …
Các chức năng của câu lệnh SELECT DISTINCT trong SQL
Lấy danh sách các giá trị duy nhất
SELECT DISTINCT được sử dụng để truy vấn và lấy danh sách các giá trị duy nhất từ một hoặc nhiều cột trong bảng. Ví dụ, nếu có một bảng chứa thông tin về các khách hàng đến từ nhiều quốc gia và bạn muốn lấy danh sách một quốc gia duy nhất, bạn có thể sử dụng lệnh SELECT DISTINCT để làm điều này.
Đếm số lượng giá trị duy nhất
Bằng cách sử dụng câu lệnh SELECT DISTINCT kết hợp với hàm COUNT, bạn có thể đếm số lượng giá trị duy nhất trong một cột. Điều này hữu ích khi chúng ta muốn biết số lượng các mục tiêu, danh mục hoặc loại dữ liệu duy nhất có trong cơ sở dữ liệu.
Lọc dữ liệu
Bạn có thể thông qua câu lệnh SELECT DISTINCT để tìm kiếm các bản ghi duy nhất dựa trên một hoặc nhiều cột. Nhờ vậy, bạn sẽ dễ dàng truy xuất và hiển thị chỉ những dữ liệu cần thiết và phù hợp với yêu cầu của mình.
Ví dụ, nếu muốn lấy danh sách các sản phẩm duy nhất có số lượng tồn kho lớn hơn 100, bạn có thể sử dụng SELECT DISTINCT để lọc dữ liệu.
Liên kết dữ liệu từ các bảng khác nhau
Khi liên kết dữ liệu từ các bảng khác nhau, bạn có thể sử dụng câu lệnh SELECT DISTINCT để lấy các giá trị duy nhất từ các cột liên quan. Điều này giúp bạn dễ dàng kết hợp thông tin từ nhiều nguồn, đồng thời tạo ra kết quả truy vấn tổng thể và toàn diện.
Ví dụ, nếu có hai bảng, một bảng chứa thông tin về đơn hàng và một bảng chứa thông tin về sản phẩm, bạn có thể sử dụng lệnh này để lấy danh sách các sản phẩm duy nhất được đặt hàng.
Tạo báo cáo và thống kê
SELECT DISTINCT là một lệnh tuyệt vời để thống kê và phân tích dữ liệu. Bằng cách lấy các giá trị duy nhất từ cột, bạn có thể thu thập thông tin quan trọng về các mục tiêu, xu hướng và thuộc tính trong cơ sở dữ liệu. Điều này giúp bạn hiểu rõ hơn về dữ liệu đó và đưa ra quyết định dựa trên thông tin đáng tin cậy.
Xử lý dữ liệu trùng lặp
Khi thực hiện các truy vấn phức tạp hoặc kết hợp nhiều bảng, đôi khi sẽ xuất hiện dữ liệu trùng lặp trong kết quả trả về. Việc chỉ lấy các giá trị duy nhất giúp làm sạch và tổ chức dữ liệu một cách hiệu quả, từ đó tạo ra kết quả truy vấn rõ ràng và chính xác hơn.
Cú pháp của câu lệnh SELECT DISTINCT trong SQL
Cú pháp của câu lệnh SELECT DISTINCT trong SQL như sau:
SELECT DISTINCT cột1, cột2, ...
FROM bảng
WHERE điều_kiện
GROUP BY cột1, cột2, ...
HAVING điều_kiện_having
ORDER BY cột1, cột2, ...
Trong đó:
- SELECT DISTINCT: Chọn các giá trị duy nhất từ các cột được chỉ định.
- cột1, cột2, …: Là tên của các cột mà bạn muốn lấy các giá trị duy nhất từ đó.
- FROM bảng: Chỉ định bảng trong cơ sở dữ liệu mà bạn muốn truy vấn.
- WHERE điều_kiện: Điều kiện để lọc dữ liệu trước khi lấy các giá trị duy nhất (tùy chọn).
- GROUP BY cột1, cột2, …: Chia nhóm dữ liệu dựa trên các cột được chỉ định. Đây cũng là phần tùy chọn (tùy chọn).
- HAVING điều_kiện_having: Điều kiện áp dụng cho các nhóm dữ liệu đã được tạo bởi GROUP BY (tùy chọn).
- ORDER BY cột1, cột2, …: Sắp xếp kết quả theo thứ tự của các cột được chỉ định. Đây cũng là phần tùy chọn (tùy chọn).
Lưu ý rằng các phần WHERE, GROUP BY, HAVING và ORDER BY là tùy chọn và có thể bỏ qua tùy thuộc vào yêu cầu của truy vấn của bạn.
Ví dụ về một số cách dùng SELECT DISTINCT trong SQL
Sử dụng SELECT DISTINCT để lọc giá trị nhiều cột
Giả sử có một bảng tên Customer gồm có 4 cột: Customer Name, Customer City, Customer State và Customer Source.
Bạn sẽ sử dụng câu lệnh SELECT DISTINCT để lọc ra các giá trị duy nhất trong từng cột như sau:
SELECT DISTINCT Customer Name, Customer Source
FROM Customer
Kết quả trả về sẽ là giá trị duy nhất của mỗi cột.
Sử dụng SELECT DISTINCT để lọc giá trị cho 1 cột
Bạn sẽ sử dụng cú pháp sau cho bảng dữ liệu trên:
Cú pháp:
SELECT DISTINCT Customer Source
FROM Customer
Sử dụng câu lệnh SELECT DISTINCT kết hợp ORDER BY
ORDER BY cũng là một câu lệnh được sử dụng phổ biến trong SQL. Cũng lấy bảng trên làm ví dụ, ta có cú pháp DISTINCT kết hợp với ORDER BY như sau.
SELECT DISTINCT Customer Name, Customer Source
FROM Customer
ORDER BY Customer Name ASC
Trong kết quả trên, các giá trị ở cột Customer Source đã được sắp xếp theo thứ tự tăng dần. Nếu muốn sắp xếp từ Z – A, bạn có thể thay DESC vào vị trí ASC trong câu lệnh.
Sử dụng câu lệnh SELECT DISTINCT kết hợp COUNT
Nếu như cú pháp dưới đây trả về kết quả là các Customer Source duy nhất.
SELECT DISTINCT Customer Source
FROM Customer
thì khi kết hợp với hàm COUNT, kết quả trả về sẽ là giá trị tổng sau khi đếm được có bao nhiêu Customer Source. Cú pháp như sau:
SELECT COUNT (DISTINCT Customer Source)
FROM Customer
Hạn chế của câu lệnh SELECT DISTINCT
Hiệu suất truy vấn
Khi sử dụng SELECT DISTINCT, cơ sở dữ liệu phải thực hiện so sánh và loại bỏ các giá trị trùng lặp trong kết quả truy vấn. Điều này có thể tốn nhiều tài nguyên và thời gian xử lý, đặc biệt là khi làm việc với các bảng lớn hoặc có dữ liệu phức tạp. Do đó, việc sử dụng SELECT DISTINCT có thể ảnh hưởng đến hiệu suất và tốc độ truy vấn.
Mất thông tin chi tiết
SELECT DISTINCT chỉ trả về các giá trị duy nhất từ cột được chỉ định. Điều này có nghĩa là các giá trị khác có thể bị loại bỏ và chúng ta chỉ nhìn thấy một phần nhỏ của dữ liệu ban đầu. Trong một số trường hợp, việc loại bỏ các giá trị trùng lặp có thể làm mất đi thông tin chi tiết về sự phân bố và mối quan hệ giữa các giá trị.
Không áp dụng cho các trường hợp phức tạp
SELECT DISTINCT thường được sử dụng hiệu quả trong các trường hợp đơn giản khi lấy các giá trị duy nhất từ một hoặc nhiều cột. Tuy nhiên, trong các trường hợp phức tạp hơn, nơi cần liên kết nhiều bảng hoặc thực hiện các phép tính phức tạp, câu lệnh SELECT DISTINCT có thể không đáp ứng được yêu cầu và cần sử dụng các phương pháp hoặc công cụ khác.
Không đảm bảo thứ tự kết quả
SELECT DISTINCT không đảm bảo thứ tự của các giá trị duy nhất trong kết quả truy vấn. Kết quả trả về có thể được sắp xếp theo thứ tự mặc định của cơ sở dữ liệu hoặc không theo bất kỳ thứ tự nào.
Do đó, nếu cần duy trì thứ tự hoặc sắp xếp kết quả theo một cách cụ thể, bạn cần sử dụng các câu lệnh khác như ORDER BY.
Những lưu ý khi sử dụng câu lệnh SELECT DISTINCT trong SQL
Hiểu rõ dữ liệu và yêu cầu của bạn
Trước khi sử dụng SELECT DISTINCT, hãy đảm bảo bạn hiểu rõ dữ liệu và yêu cầu của mình. Xác định cột mà bạn muốn lấy các giá trị duy nhất từ đó. Điều này giúp tránh lấy nhầm hoặc thiếu các giá trị quan trọng và đảm bảo rằng kết quả truy vấn đáp ứng đúng yêu cầu của bạn.
Tối ưu hóa truy vấn
Nếu có thể, hãy tối ưu hóa truy vấn để giảm thiểu việc sử dụng SELECT DISTINCT. Vì khi so sánh và loại bỏ các giá trị trùng lặp trong cơ sở dữ liệu có thể tốn nhiều tài nguyên và thời gian. Hay xem xét cách cấu trúc truy vấn, sử dụng các điều kiện WHERE hoặc GROUP BY phù hợp để giới hạn dữ liệu trước khi sử dụng SELECT DISTINCT.
Cân nhắc hiệu suất
Khi làm việc với các bảng lớn hoặc có dữ liệu phức tạp, việc loại bỏ các giá trị trùng lặp có thể tốn nhiều thời gian và tài nguyên. Hãy đánh giá hiệu suất và xem xét các phương pháp tối ưu hóa khác để đạt được kết quả truy vấn nhanh chóng và hiệu quả.
Sử dụng kết hợp với các câu lệnh khác
SELECT DISTINCT có thể được sử dụng kết hợp với các câu lệnh khác như ORDER BY, WHERE, GROUP BY để xử lý và lọc dữ liệu một cách linh hoạt. Việc sử dụng các câu lệnh này cùng nhau để đạt được kết quả truy vấn chính xác và phù hợp với yêu cầu của bạn.
Lưu ý đến loại dữ liệu
SELECT DISTINCT cũng có thể ảnh hưởng đến kết quả truy vấn dựa trên loại dữ liệu của cột. Các cột có giá trị kiểu văn bản (text) có thể được so sánh dựa trên các quy tắc so sánh chuỗi, trong khi các cột kiểu số (numeric) có thể được so sánh dựa trên các quy tắc so sánh số học. Hãy đảm bảo rằng các giá trị trong cột được chuyển đúng định dạng và tuân thủ các quy tắc so sánh phù hợp để đạt được kết quả truy vấn chính xác.
Thận trọng với dữ liệu NULL
SELECT DISTINCT cũng có thể ảnh hưởng đến xử lý giá trị NULL. Khi sử dụng SELECT DISTINCT trên các cột chứa giá trị NULL, các giá trị này sẽ được coi là duy nhất và được trả về trong kết quả truy vấn. Điều này có thể gây nhầm lẫn và ảnh hưởng đến các tính toán hoặc phân tích dựa của bạn.
Với cú pháp SELECT DISTINCT, bạn có thể lựa chọn các cột cần lấy giá trị duy nhất, áp dụng các điều kiện để lọc dữ liệu, nhóm các giá trị và sắp xếp kết quả theo thứ tự mong muốn. Hy vọng bài viết đã giúp bạn hiểu rõ hơn về câu lệnh SELECT DISTINCT trong SQL để có thể áp dụng một cách linh hoạt và chính xác trong công việc. Chúc bạn thành công!
Những câu hỏi thường gặp
SELECT DISTINCT có thể được sử dụng với bao nhiêu cột?
Câu lệnh SELECT DISTINCT có thể được sử dụng với một hoặc nhiều cột. Bạn chỉ cần liệt kê tên các cột mà bạn muốn lấy các giá trị duy nhất từ đó.
SELECT DISTINCT hỗ trợ trong những hệ quản trị cơ sở dữ liệu nào?
Câu lệnh SELECT DISTINCT là một phần của ngôn ngữ SQL (Structured Query Language) và được hỗ trợ trong hầu hết các hệ quản trị cơ sở dữ liệu phổ biến như MySQL, PostgreSQL, Oracle, Microsoft SQL Server, SQLite và nhiều hệ thống quản lý cơ sở dữ liệu khác.
SELECT DISTINCT có thể được sử dụng với nhiều bảng không?
Có, SELECT DISTINCT có thể được sử dụng với nhiều bảng thông qua câu lệnh JOIN. Khi kết hợp các bảng, bạn cần chỉ định các cột từ các bảng khác nhau để lấy các giá trị duy nhất.
Lệnh SELECT và SELECT DISTINCT trong SQL khác nhau như thế nào?
Kết quả truy vấn SELECT sẽ chứa tất cả các dữ liệu phù hợp với những điều kiện đã chỉ định và sẽ bao gồm tất cả các giá trị trùng lặp trong cột.
Còn khi sử dụng lệnh SELECT DISTINCT, các giá trị trùng lặp trong cột sẽ bị loại bỏ và chỉ một giá trị duy nhất được trả về. Điều này có nghĩa là kết quả truy vấn SELECT DISTINCT sẽ không chứa bất kỳ giá trị trùng lặp nào trong cột đã chỉ định.