Các câu lệnh được minh họa bằng bảng đơn giản với dữ liệu về các loại trái cây: táo, dưa và nho. Có 4 cột dữ liệu: type, name, ripeness và weight, với 3 kiểu dữ liệu quan trọng nhất: dữ liệu chuỗi – cột type và name, dữ liệu số (nguyên/thập phân) – cột trọng lượng, dữ liệu ngày – cột ripeness.Hình 1

DISTINCT – đếm không trùng

Vì chỉ có 3 loại trái cây, câu lệnh DISTINCT(type) trả về kết quả là 3 dòng: dưa, táo, và nho được mô tả như hình minh họa.

Hình 2

ORDER BY – sắp xếp

SELECT * là 1 cách nhanh để truy vấn tất cả các cột có trong bảng dữ liệu thay vì phải viết ra tên các cột.

Câu lệnh ORDER BY thường được viết ở cuối đoạn code để sắp xếp kết quả truy vấn. DESC là sắp xếp từ lớn đến nhỏ hoặc sắp xếp theo thứ tự A-Z. ASC là sắp xếp từ nhỏ đến lớn hoặc theo thứ tự Z-A. Nếu sắp xếp theo 2 cột (type và ripeness), các dòng sẽ được sắp xếp theo cột thứ 1 – type, sau đó nếu còn các giá trị trùng lặp của cột type, các dòng này sẽ được sắp xếp theo cột thứ 2 – ripeness

Hình 3

WHERE

WHERE dùng để lọc ra các giá trị không thỏa mãn yêu cầu. Trong ví dụ này, cần chọn ra những quả có ngày thu hoạch lớn hơn ngày hiện tại, nghĩa là những quả có chất lượng không tốt. Vì vậy, cần loại bỏ những dòng này ra khỏi kết quả truy vấn.

 

Hình 4

ALIAS – bí danh

Sử dụng bí danh cho các cột hoặc tên bảng trong câu lệnh có thể dễ gây nhầm lẫn khi viết code. Tên bí danh không thể sử dụng trong các câu lệnh WHERE và JOIN, mà bắt buộc phải sử dụng tên gốc của cột dữ liệu. Còn đối với bảng dữ liệu, sau khi đặt bí danh, thì bí danh phải được sử dụng để gọi tên bảng đó.

 

Hình 5

GROUP BY và HAVING

Nếu không có lệnh Having trong truy vấn này, kết quả sẽ hiện 3 dòng giống như câu lệnh DISTINCT. Câu lệnh COUNT(name) dùng để đếm số lượng mỗi loại trái cây. Câu lệnh WHERE không thể được sử dụng trong trường hợp này vì câu lệnh WHERE chỉ áp dụng lọc từng dòng dữ liệu riêng lẻ, không áp dụng lọc theo dữ liệu đã được GROUP BY. Vì thế, câu lệnh HAVING được sử dụng để lọc ra các kết quả thỏa mãn điều kiện loại trái cây nào có số lượng nhỏ hơn 3.

 

Hình 6

CASE WHEN và DECLARE

Để câu lệnh CASE dễ hiểu, lệnh DECLARE được thêm vào để xác định ngày today là ngày Current_Date. Kiểu dữ liệu của biến (date) bắt buộc phải được khai báo cùng với tên biến.

Trong câu lệnh CASE, ngày thu hoạch – cột ripeness được so sánh với ngày hôm nay. Nếu ngày thu hoạch nhỏ hơn ngày hôm nay, có nghĩa là trái cây không còn tốt, nếu ngày thu hoặch bằng ngày hôm nay, trái cây nên được tiêu thụ ngay và nếu ngày thu hoạch lớn hơn ngày hôm nay, nghĩa là vẫn còn thời gian để tiêu thụ.

Hình 7

JOINsHình 8

Bảng dữ liệu mới calories_table có dữ liệu về calories của các loại trải cây gồm táo, nho và chuối, nhưng không có dưa trong dữ liệu. Có nhiều cách để gộp dữ liệu từ fruits table và calories table, mỗi cách sẽ cho kết quả truy vấn khác nhau

  • Left join: kết quả truy vấn gồm có táo, nho, dưa, không có chuối
  • Right join: kết quả truy vấn gồm có táo, nho, chuối, không có dưa
  • Full outer: kết quả truy vấn gồm có táo, nho, chuối, và dưa
  • Inner join: kết quả truy vấn gồm có táo và nho

Hình 9

UNION và WITH … AS

Nếu 2 bảng có cùng cấu trúc cột dữ liệu, có thể dùng câu lệnh UNION để gộp 2 bảng này với nhau. Có 2 loại gộp bảng, UNION dùng để gộp toán bộ dòng dữ liệu của 2 bảng. Ngoài ra có thể dùng lệnh UNION DISTINCT để các dòng trùng không bị lặp lại sau khi gộp bảng.

Để lưu trữ bảng kết quả, lệnh WITH…AS dùng để xác định bảng mới, đặt tên là fresh_stuff.

Hình 10

Nguồn: Jadwiga Wilkens

Xem thêm

Khóa học Ứng dụng SQL trong xử lý dữ liệu

10 cuốn sách từ siêu dễ đến khó nhằn dành cho người học MYSQL

[Download tài liệu] Data Science with Microsoft SQL Server 2016