×

Chọn các hàng khác biệt với DISTINCTROW trong MySQL

Trong nhánh lĩnh vực xử lý dữ liệu và truy vấn cơ sở dữ liệu, lựa chọn các hàng khác biệt là một bài toán thường gặp. Trong MySQL, có nhiều cách để thực hiện điều này, và một trong những phương pháp phổ biến nhất chính là sử dụng lệnh DISTINCT. Tuy nhiên, nhiều người thường nhầm lẫn giữa DISTINCTDISTINCTROW, hoặc thậm chí không biết rõ sự khác biệt giữa hai thuật ngữ này.

Phân Biệt DISTINCTDISTINCTROW

Cả DISTINCTDISTINCTROW đều được sử dụng để lọc ra các hàng trùng lặp từ kết quả truy vấn, nhưng vẫn có những điểm khác biệt quan trọng giữa chúng.

DISTINCT

Câu lệnh DISTINCT trong MySQL được sử dụng để trả về các hàng duy nhất dựa trên các cột được chọn. Khi sử dụng DISTINCT, MySQL sẽ kiểm tra tất cả các cột trong câu lệnh SELECT để xác định các hàng duy nhất. Ví dụ:

SELECT DISTINCT column1, column2
FROM table_name;

DISTINCTROW

DISTINCTROW thực ra là một phần của cú pháp mở rộng trong MySQL, có cách hoạt động tương tự như DISTINCT. Sự khác biệt chính nằm ở chỗ DISTINCTROW lọc ra các hàng duy nhất dựa trên toàn bộ giá trị của mỗi hàng (tất cả các cột trong bảng), thay vì chỉ các cột được chọn như khi sử dụng DISTINCT. Tuy nhiên, việc sử dụng DISTINCTROW chỉ thực sự cần thiết trong những tình huống rất đặc biệt. Ví dụ:

SELECT DISTINCTROW column1, column2
FROM table_name;

Khi Nào Nên Sử Dụng?

Sử Dụng DISTINCT

  • Khi cần lọc các hàng trùng lặp dựa trên một hoặc nhiều cột cụ thể: Nếu bạn chỉ quan tâm đến việc loại bỏ các hàng trùng lặp dựa trên một số cột cụ thể, thì DISTINCT là lựa chọn hợp lý nhất.
  • Ví dụ:
SELECT DISTINCT course_name
FROM students_courses;

Sử Dụng DISTINCTROW

  • Khi cần lọc các hàng dựa trên tất cả các cột: Nếu mục tiêu của bạn là đảm bảo rằng không có hàng trùng lặp hoàn toàn (tức là tất cả các cột phải khác nhau), thì DISTINCTROW là lựa chọn tốt.
  • Ví dụ:
SELECT DISTINCTROW *
FROM students_courses;

Ví Dụ Cụ Thể

Dữ Liệu Mẫu

Giả sử chúng ta có một bảng students_courses như sau:

student_id course_id enrollment_date
1 101 2023-01-15
1 102 2023-01-16
2 101 2023-01-15
2 102 2023-01-16
1 101 2023-01-15

Ví Dụ Sử Dụng DISTINCT

SELECT DISTINCT student_id, course_id
FROM students_courses;

Kết quả sẽ là:

student_id course_id
1 101
1 102
2 101
2 102
Ví Dụ Sử Dụng DISTINCTROW
SELECT DISTINCTROW student_id, course_id, enrollment_date
FROM students_courses;

Kết quả sẽ là:

student_id course_id enrollment_date
1 101 2023-01-15
1 102 2023-01-16
2 101 2023-01-15
2 102 2023-01-16

Kết Luận

Việc lựa chọn giữa DISTINCTDISTINCTROW trong MySQL phụ thuộc vào yêu cầu cụ thể của bạn đối với dữ liệu cần lọc. Hiểu rõ sự khác biệt giữa chúng sẽ giúp bạn viết các câu truy vấn hiệu quả hơn, từ đó tối ưu hóa được quá trình xử lý dữ liệu trong hệ thống của mình. Hy vọng rằng sau bài viết này, bạn sẽ có cái nhìn rõ ràng hơn về cách sử dụng hai tính năng này trong MySQL.

Comments