Bài 10: Sử dụng MySQL DISTINCT để loại bỏ trùng lặp

Học Mysql 17/01/2017 08:03 2005
Tiếp tục thì trong bài này mình sẽ hướng dẫn các bạn sử dụng mệnh đề DISTINCT để lại bỏ các hàng trung lặp trong tập kết quả trả về từ câu lệnh SELECT.

Trong bài trước tôi đã trình bày về Lệnh SELECT truy vấn dữ liệu MySQL thì trong bài viết này, bạn sẽ học cách sử dụng mệnh đề MySQL DISTINCT với câu lệnh SELECT để loại bỏ các hàng trùng lặp trong một tập kết quả của câu truy vấn.

Khi truy vấn dữ liệu từ một bảng, bạn có thể nhận được hàng trùng lặp. Để loại bỏ các hàng trùng lặp, bạn phải sử dụng mệnh đề DISTINCT trong câu lệnh SELECT để loại bỏ các hàng trung lặp đó.

Cú pháp của việc sử dụng mệnh đề DISTINCT là như sau:

SELECT DISTINCT
    columns[,column1,column2]
FROM
    table_name
WHERE
    conditions

Ví dụ: Tronng truy vấn dưới đây sẽ lấy danh sách các nhân viên từ bảng employees.

SELECT 
    lastname
FROM
    employees;

Try In Out

Trong ví dụ trên bạn thấy có hai người có tên là Firrelli và bạn chỉ muốn có duy nhất một người có tên là Firrelli xuất hiện ở kết quả của câu truy vấn.

SELECT DISTINCT
    lastname
FROM
    employees
ORDER BY lastname;

Try In Out

 

2.MySQL DISTINCT với nhiều cột.

Bạn có thể sử dụng mệnh đề DISTINCT với nhiều hơn một cột. Trong trường hợp này, MySQL sử dụng sự kết hợp của tất cả các cột để xác định sự độc đáo của các hàng trong tập kết quả.

Ví dụ: Để có được sự kết hợp của city và state từ bảng customers, bạn sử dụng các truy vấn sau đây:

SELECT DISTINCT
    state, city
FROM
    customers
WHERE
    state IS NOT NULL
ORDER BY state , city;

Try In Out

 

3. Mệnh đề DISTINCT với GROUP BY

Nếu bạn sử dụng mệnh đề GROUP BY trong câu lệnh SELECT mà không sử dụng hàm tập hợp, mệnh đề GROUP BY hoạt động như mệnh đề DISTINCT.

Ví du: Kết quả sau sử dụng mệnh đề GROUP BY để lựa chọn duy nhất state của customers trong bảng customers.

SELECT 
    state
FROM
    customers
GROUP BY state;

Try In Out

Bạn cũng nhận được một kết quả tương tự bằng cách sử dụng mện đề DISTINCT

SELECT DISTINCT
    state
FROM
    customers;

Try In Out

Tóm lại điều đó nói nên gì. Mệnh đề DISTINCT là một trường hợp đặc biệt của mện đề GROUP BY. Điểm khác nhau giữa DISTINCTGROUP BY là thiết lập một kết quả được sắp xếp ngược lại DISTINCT thì không.

Nếu bạn thêm mệnh đề ORDER BY vào câu lệnh sử dụng mệnh đề DISTINCT thì nó cũng trả về một tập các kết quả được sắp xếp giông như kết quả trả về từ câu lệnh sử dụng mệnh đề GROUP BY.

SELECT DISTINCT
    state
FROM
    customers
ORDER BY state;

Try In Out

 

4. MySQL DISTINCT và một số hàm tổng hợp.

Bạn có thể sử dụng mệnh đề DISTINCT cùng với một số hàm tổng hợp. Nhằm loại bỏ các kết quả(hàng) bị trùng lặp trước khi MySQL áp dụng các hàm nên tập kết quả của câu lệnh.

Một số hàm tổng hợp trong MySQL.

  • COUNT: Hàm COUNT được sử dụng để đếm các bản ghi trong tập kết quả trả về trong cậu lệnh SELECT.
  • AVG: Hàm AVG được sử dụng để tính giá trị trung bình của một trường của các bản ghi trong tập kết quả.
  • SUM. Hàm SUM được sử dụng để tính tổng của một trường trong các bản ghi.

Ví dụ:

SELECT 
    COUNT(DISTINCT state) as totalState
FROM
    customers
WHERE
    country = 'USA';

Try In Out

5. MySQL DISTINCT với mệnh đề LIMIT.

Trong trường hợp bạn sử dụng mệnh đề DISTINCT với mện đề LIMIT, MySQL ngừng tìm kiếm ngay khi nó có được đẩy đủ các kết quả không trùng lặp được giới hạn trong mệnh đề LIMIT.

Ví dụ: Lấy 5 kết quả duy nhất đầu tiên không NULL của states trong bảng customers.

SELECT DISTINCT
    state
FROM
    customers
WHERE
    state IS NOT NULL
LIMIT 5;

Try In Out

 

6. Tổng kết.

Trong bài viết này mình đã chỉ cho các cho bạn một số cách sử dụng mệnh đề DISTINCT trong MySQL để loại bỏ các hàng trùng lặp trong tập kết quả trả về từ câu lệnh truy vấn. Các bài viết tiếp mình sẽ nói rõ hơn về câu lệnh SELECT trong MySQL. Câu lệnh quan trọng và được sử dụng nhiều nhất của HQTCSDL này.

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.