Lệnh HAVING trong SQL

Spread the love

Như bạn đã biết, SQL là ngôn ngữ máy tính mang tính truy vấn cấu trúc, được sử dụng để tạo lạp, xử lý trên một hệ CSDL quan hệ, trong đó có nhiều lệnh như Select, Insert, Update, Merge, Delete, Truncate, Join. Trong đó Select là lệnh thường xuyên được sử dụng để thao tác với dữ liệu trên bảng nhất. Select bao gồm các từ khoá liên quan như From, Where, Group By, Having, Order by, cùng phối hợp để xử lý CSDL cho người dùng. Trong bài viết này, chúng ta sẽ đề cập đến câu lệnh having trong sql – mệnh đề cho phép xác định các điều kiện lọc nhóm kết quả nào sẽ xuất hiện trong kết quả cuối cùng. Hầu hết các câu lệnh, mệnh đề trong SQL rất dễ sử dụng, người dùng không cần nhớ kỹ từng chi tiết mà vẫn có thể thao tác trên dữ liệu một cách dễ dàng.

Hàm Having trong SQL.

Như đã đề cập, having trong sql cho phép lọc nhóm kết quả nào sẽ xuất hiện trong kết quả cuối cùng của bảng ghi, mệnh đề Where đặt điều kiện trên các cột đã lựa chọn trong khi having sql lại đặt các điều kiện trên các nhóm đã được tạo ra từ mệnh đề Group By. Điều này đồng nghĩa với việc Having luôn đi sau Group By trong một truy vấn SQL, sau đó Order by mới sắp xếp dữ liệu theo thứ tự như người dùng mong muốn.

sql having

Vì vậy, cú pháp hàm having trong sql sẽ có cấu trúc như sau:

SELECT cot1, cot2

FROM bang1, bang2

WHERE [ cac_dieu_kien ]

GROUP BY cot1, cot2

HAVING [ cac_dieu_kien ]

ORDER BY cot1, cot2

 

Ví dụ ta có bảng “HOCPHI” được diễn giải như sau:

IDTENTUOIMONHOCHOCPHI
01VIET20CNTT5.000.000
02HUY21TC4.500.000
03UYEN19KT3.000.000
04KHANH22QTKD3.500.000
05NHUNG23TCNK4.000.000
06QUYNH21TCDN3.500.000

 

Muốn lọc ra học viên có TUOI >20, HOCPHI > 3.000.000 và sắp xếp ID theo thứ tự tăng dần thì ta sử dụng cú pháp sau:

SELECT ID, TEN, TUOI, MONHOC, HOCPHI

FROM HOCPHI

WHERE TUOI>20

GROUP BY SUM(HOCPHI)

HAVING SUM(HOCPHI)>3000000

ORDER BY ID ASC

Khi đó, ta có bảng kết quả sau:

IDTENTUOIMONHOCHOCPHI
02HUY21TC4.500.000
04KHANH22QTKD3.500.000
05NHUNG23TCNK4.000.000
06QUYNH21TCDN3.500.000

 

Tuy nhiên, để có được bảng kết quả này buộc chúng ta phải sử dụng group by having để cho ra cột SUM(HOCPHI) để có thể thực hiện đầy đủ cú pháp trên. Bảng HOCPHI không có học viên nào học 2 môn nên dùng Group by vẫn cho ra kết quả học phí như ban đầu, sau khi Group by, ta sẽ có bảng trung gian:

IDTENTUOIMONHOCSUM(HOCPHI)
01VIET20CNTT5.000.000
02HUY21TC4.500.000
03UYEN19KT3.000.000
04KHANH22QTKD3.500.000
05NHUNG23TCNK4.000.000
06QUYNH21TCDN3.500.000

Sức mạnh của câu lệnh Having.

Câu lệnh having trong mysql là một trong những chức năng quan trọng trong một hệ truy vấn SQL, nó chính là chìa khoá để người dùng có thể hiểu hơn về hệ ngôn ngữ truy vấn cấu trúc quan trọng đối với công tác và quản lý dữ liệu. Cấu trúc having đóng vai trò là mũi nhọn trong việc tìm kiếm lỗ hổng dữ liệu và phân biệt rõ đặc trưng của hệ thống file và ngôn ngữ lập trình thủ tục.

Có thể hiểu như thế này, Record của file mang thứ tự, để có thể dùng thì buộc ngôn ngữ phải sort ra, tuy nhiên nếu hàng trong bảng không mang thứ tự và SQL không mang phép tính của sort, thay vào đó SQL thu lại những dòng phức tạp và xử lý như một tập hợp, suy ra bảng sẽ trình bày như một tập hợp, như vậy ta sẽ phát hiện được có lỗ hổng dữ liệu hay không.

Ngoài ra, sql having còn nhiều sức mạnh khác khá phức tạp, đóng vai trò quan trọng trong công tác xử lý, quản lý và sử dụng CSDL, hỗ trợ thao tác cặn kẽ cho người dùng. Chúng ta cũng có thể dùng câu lệnh left join trong sql để sử dụng những chức năng tuyệt vời của nó trong việc xử lý, thao tác dữ liệu. Nếu có thể nắm vững cách sử dụng Having, người dùng sẽ không phải lo lắng với hàng tá CSDL quan hệ trên máy tính.