1. Câu lệnh CASE

Trong các ngôn ngữ lập trình, thường sẽ có các cấu trúc rẽ nhánh (hay cấu trúc điều kiện). Vì SQL cũng là một ngôn ngữ lập trình nên cũng tồn tại một dạng câu lệnh để kiểm tra một điều kiện nhất định nào đó và trả về một kết quả khi điều kiện đó đúng. Trong SQL câu lệnh này được sử dụng là CASE

Cú pháp của câu lệnh CASE như sau:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

Trong đó:

  • CASE và END được sử dụng như hai từ khóa bắt đầu và kết thúc để tạo ra các câu lệnh ở trong
  • WHEN condition1 THEN result1 là câu lệnh kiểm tra điều kiện condition1 và nếu điều kiện là đúng thì sẽ thực hiện result1
  • WHEN condition2 THEN result2 là câu lệnh kiểm tra điều kiện condition2 và nếu điều kiện là đúng thì sẽ thực hiện result2
  • WHEN conditionN THEN resultN là câu lệnh kiểm tra điều kiện conditionN và nếu điều kiện là đúng thì sẽ thực hiện resultN
  • ELSE result là câu lệnh cho trường hợp ngược lại, chúng sẽ được thực hiện khi tất cả điều kiện condition1, condition2, conditionN là sai

Chú ý: Nếu tất cả điều kiện condition1, condition2, conditionN là sai và không có câu lệnh ELSE thì kết quả trả về sẽ là NULL.

2.Ví dụ câu lệnh CASE

Bảng dưới đây có tên là ChiTietDatHang bao gồm các cột như sau: MaCTDH, MaDH, MaSP, SoLuong

MaCTDH MaDH MaSP SoLuong
1 3 5 20
2 2 1 10.5
3 4 5 8
4 2 3 20
5 1 2 18
6 1 4 40
7 1 4 20

Câu lệnh SQL dưới đây sẽ kiểm tra các bản ghi có cột số lượng bằng 20 (SoLuong = 20) và các số lượng lớn hơn 20 (SoLuong > 20), nếu số cột lượng bằng 20 sẽ hiển thị ra “So luong nay = 20” và nếu cột số lượng lớn hơn 20 thì sẽ hiển thị ra “So luong nay > 20”.  Để làm việc này, sẽ sử dụng CASE như sau:

SELECT MaDH, SoLuong,
CASE
    WHEN SoLuong > 20 THEN 'So luong nay > 20'
    WHEN SoLuong = 20 THEN 'So luong nay = 20'
    ELSE 'So luong nay < 20'
END AS KiemTraSL
FROM ChiTietDatHang;

Kết quả:

MaDH SoLuong KiemTraSL
3 20 So luong nay = 20
2 10.5 So luong nay < 20
4 8 So luong nay < 20
2 20 So luong nay = 20
1 18 So luong nay < 20
1 40 So luong nay > 20
1 20 So luong nay = 20

Bảng tiếp theo dưới đây là bảng có tên KhachHang bao gồm các cột: ID, TenKH, DiaChi, ThanhPho, SoDienThoai

ID TenKH DiaChi ThanhPho SoDienThoai
1 Nguyen Van A Tay Ho Ha Noi 0888999888
2 Nguyen Van B Quan 5 Ho Chi Minh 0988988988
3 Nguyen Van C Quan 7 Ho Chi Minh 0899899899
4 Nguyen Van D Bac Tu Liem Ha Noi 0788788788
5 Nguyen Van E Ngo Quen Hai Phong 0858585858
6 Nguyen Van F Ngu Hanh Son Da Nang 0969696969
7 Nguyen Van G Tay Ho Ha Noi 0838383838

Câu lệnh SQL dưới đây được sử dụng để chọn ra TenKH, DiaChi, ThanhPho của khách hàng và sắp xếp chúng theo cột ThanhPho nếu cột ThanhPho là NULL thì các kết quả sẽ được sắp xếp theo cột DiaChi bằng cách sử dụng câu lệnh CASE như sau:

SELECT TenKH, ThanhPho, DiaChi
FROM KhachHang
ORDER BY
(CASE
    WHEN ThanhPho IS NULL THEN DiaChi
    ELSE ThanhPho
END);