Câu lệnh CASE trong SQL Server
Case when trong SQL Server là gì? Cách dùng Case trong SQL Server như thế nào? Hãy cùng Quantrimang.com tìm hiểu nhé!
Nếu học lập trình, nhất định đừng bỏ qua SQL Server. Đây là một lĩnh vực nhất định bạn nên biết nếu muốn phát triển trong ngành này. Thực chất, học SQL Server không khó. Bạn chỉ cần nắm vững các câu lệnh cơ bản. Ở bài viết này, chúng ta sẽ cùng nhau tìm hiểu về CASE trong SQL Server.
Case SQL Server là một phần của hàm luồng điều khiển, đánh giá danh sách điều kiện và cung cấp kết quả khi điều kiện đầu tiên đáp ứng. Nó chủ yếu được dùng để xử lý các lệnh điều kiện, tương tự như lệnh IF-THEN-ELSE ở ngôn ngữ lập trình khác. Một lệnh CASE đánh giá điều kiện này, và khi tìm thấy true, nó sẽ dừng chạy và trả về kết quả. Nếu nó không tìm thấy điều kiện true, nó đánh giá phần ELSE để trả về giá trị và kết thúc. Nó sẽ cung cấp giá trị NULL khi không tìm thấy khối ELSE và điều kiện đáp ứng.
Câu lệnh CASE trong SQL Server có thể được dùng ở bất kỳ đâu mà một chương trình hay truy vấn hợp lệ được dùng như mệnh đề SELECT, WHERE và ORDER BY. Chức năng chính của nó là quản lý nhiều lệnh IF trong lệnh SELECT. Ở MS SQL Server, lệnh CASE cho phép người dùng thêm một số điều kiện để thực hiện các nhóm tác vụ khác nhau.
Trong SQL Server, bạn có hai kiểu lệnh CASE cơ bản:
- SIMPLE CASE - Lệnh CASE đơn giản
- Searched CASE - Lệnh CASE đã tìm kiếm
Trong đó:
- Simple CASE là so sánh một biểu thức với một bộ các biểu thức đơn giản để xác định kết quả.
- Searched CASE là đánh giá một bộ các biểu thức Boolean để xác định kết quả.
- Cả 2 định dạng trên đều hỗ trợ đối số ELSE (nhưng không bắt buộc).
Cú pháp
Để sử dụng câu lệnh CASE trong SQL Server, ta dùng cú pháp như sau:
Simple CASE
CASE bieuthuc_dauvao
WHEN bieuthuc_1 THEN ketqua_1
WHEN bieuthuc_2 THEN ketqua_2
...
WHEN bieuthuc_n THEN ketqua_n
ELSE ketqua_khac
END
Hoặc Searched CASE
CASE
WHEN dieukien_1 THEN ketqua_1
WHEN dieukien_2 THEN ketqua_2
...
WHEN dieukien_n THEN ketqua_n
ELSE ketqua_khac
END
Tham số:
- bieuthuc_dauvao: biểu thức sẽ được so sánh với từng giá trị được cung cấp.
- bieuthuc_1, bieuthuc_2, bieuthuc_n: các biểu thức sẽ được sử dụng để so sánh lần lượt với biểu thức đầu vào. Khi một biểu thức khớp với bieuthu_dauvao, CASE sẽ thực thi các câu lệnh tiếp đó và không so sánh thêm nữa.
- dieukien_1, dieukien_2, dieukien_n: các điều kiện được xét, duyệt theo thứ tự liệt kê. Khi một điều kiện được xác định là đúng, CASE sẽ trả về kết quả và không đánh giá các điều kiện tiếp theo nữa. Tất cả các điều kiện phải là cùng một kiểu dữ liệu.
- ketqua_1, ketqua_2, ketqua_n: kết quả trả về sau khi xét điều kiện là đúng. Tất cả các giá trị phải là cùng một kiểu dữ liệu.
Lưu ý:
- Nếu không tìm thấy bieuthuc hoặc dieukien nào là TRUE thì câu lệnh CASE sẽ trả về kết quả trong mệnh đề ELSE.
- Nếu không có mệnh đề ELSE đồng thời không có điều kiện nào là TRUE thì câu lệnh CASE sẽ trả về NULL.
- Điều kiện được đánh giá theo thứ tự được liệt kê. Khi một điều kiện được xác định là đúng, câu lệnh CASE sẽ trả về kết quả và không đánh giá các điều kiện tiếp theo nữa.
- CASE có thể được sử dụng trong các phiên bản sau của SQL Server: SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005.
Ví dụ
Hãy xem và khám phá một số ví dụ về câu lệnh CASE trong SQL Server.
Ví dụ 1: Simple CASE
Giả sử bạn cần kiểm tra chuyên mục của website Quantrimang.com, dựa vào cột Code (mã) của bảng chuyenmuc:
- Nếu Code = ‘01’ là ‘Laptrinh-Quantrimang.com’.
- Nếu Code = ‘02’ là ‘Congnghe-Quantrimang.com’.
- Nếu Code = ‘03’ là ‘Cuocsong-Quantrimang.com’.
- Ngược lại, tức là không thuộc từ 1 đến 3 thì ở chuyên mục ‘Khoahoc-Quantrimang.com’.
SELECT tenchuyenmuc, Code
(CASE code
WHEN 01 THEN 'Laptrinh-Quantrimang.com'
WHEN 02 THEN 'Congnghe-Quantrimang.com'
WHEN 03 THEN 'Cuocsong-Quantrimang.com'
ELSE 'Khoahoc-Quantrimang.com'
END) AS Chuyenmuc
FROM chuyenmuc
ORDER BY Code
Kết quả trả về:
tenchuyenmuc | Code | Chuyenmuc |
SQL Server | 01 | Laptrinh-Quantrimang.com |
Linux | 02 | Congnghe-Quantrimang.com |
Python | 01 | Laptrinh-Quantrimang.com |
JavaScript | 01 | Laptrinh-Quantrimang.com |
Android | 02 | Congnghe-Quantrimang.com |
Giai tri | 03 | Cuocsong-Quantrimang.com |
Ky nang | 03 | Cuocsong-Quantrimang.com |
Khoa hoc Cong nghe | 04 | Khoahoc-Quantrimang.com |
Kham pha Khoa hoc | 05 | Khoahoc-Quantrimang.com |
Ví dụ 2: Searched CASE
SELECT tenchuyenmuc,
CASE
WHEN code = 01 THEN 'Laptrinh-Quantrimang.com'
WHEN code = 02 THEN 'Congnghe-Quantrimang.com'
WHEN code = 03 THEN 'Cuocsong-Quantrimang.com'
ELSE 'Khoahoc-Quantrimang.com'
END
FROM chuyenmuc;
Bạn cũng có thể không sử dụng điều kiện ELSE như này:
SELECT tenchuyenmuc, Code
(CASE code
WHEN 01 THEN 'Laptrinh-Quantrimang.com'
WHEN 02 THEN 'Congnghe-Quantrimang.com'
WHEN 03 THEN 'Cuocsong-Quantrimang.com'
END) AS Chuyenmuc
FROM chuyenmuc
ORDER BY Code
Hoặc:
SELECT tenchuyenmuc,
CASE
WHEN code = 01 THEN 'Laptrinh-Quantrimang.com'
WHEN code = 02 THEN 'Congnghe-Quantrimang.com'
WHEN code = 03 THEN 'Cuocsong-Quantrimang.com'
END
FROM chuyenmuc;
Khi mệnh đề ELSE được bỏ qua, nếu không có điều kiện nào là đúng, câu lệnh CASE sẽ trả về NULL.
Ví dụ 3: So sánh 2 điều kiện
Dưới đây là một ví dụ minh họa cách sử dụng câu lệnh CASE để so sánh các điều kiện khác nhau:
SELECT
CASE
WHEN code < 2 THEN 'Laptrinh-Quantrimang.com'
WHEN code = 2 THEN 'Congnghe-Quantrimang.com'
END
FROM chuyenmuc;
Hãy nhớ rằng các điều kiện được so sánh lần lượt theo thứ tự được liệt kê. Khi một điều kiện được xác định là đúng, câu lệnh CASE sẽ trả về kết quả ngay và không đánh giá các điều kiện khác nữa. Vì vậy, bạn cần cẩn thận khi chọn thứ tự liệt kê các điều kiện của mình.
Lệnh UPDATE với lệnh CASE
SQL Server cũng cho phép lập trình viên dùng lệnh CASE với lệnh UPDATE. Giả sử bạn muốn update tuổi của học sinh dựa trên các điều kiện lệnh CASE. Bạn có thể làm việc này bằng điều kiện sau:
- Nếu tuổi học sinh là 22, update lên 33.
- Nếu tuổi học sinh là 17, update lên 18.
Hãy cùng phân tích chi tiết hơn về ví dụ này ở bảng STUDENT. Bạn có thể đáp ứng đầy đủ điều kiện bằng cách dùng lệnh update sau bằng một lệnh CASE:
UPDATE STUDENT
SET age = CASE age
WHEN 22 THEN 23
WHEN 17 THEN 18
WHEN 29 THEN 30
WHEN 16 THEN 15
ELSE 25
END
Kết quả:
Kiểu trả về
Biểu thức CASE trả về kết quả phụ thuộc vào ngữ cảnh mà nó được sử dụng. Ví dụ:
- Nếu nó được dùng trong ngữ cảnh chuỗi, kết quả trả về sẽ là một chuỗi.
- Nếu nó được dùng trong ngữ cảnh số, kết quả trả về sẽ là giá trị số nguyên, float và thập phân.
Sự khác biệt giữa Simpe Case và Searched CASE
Simple CASE | Searched CASE |
Có một biểu thức giữa từ khóa CASE và mệnh đề WHEN. Ví dụ, CASE. | WHEN Điều kiện 1 THEN Lệnh 1. Không có biểu thức giữa từ CASE và mệnh đề WHEN. Ví dụ, |
Câu lệnh này được sử dụng để kiểm tra đẳng thức đơn giản và xác định kết quả bằng cách so sánh một biểu thức với một tập hợp nhiều giá trị. | Lệnh này kiểm tra điều kiện cho từng lệnh "when". Nó giúp giải quyết nhiều điều kiện phức tạp hơn simple CASE. |
Lệnh CASE đơn giản chỉ hỗ trợ kiểm tra đẳng thức. | Lệnh searched CASE hỗ trợ mọi quá trình trả về giá trị Boolean bằng Boolean_Expression. Nó bao gồm các toán tử ngang bằng hoặc không. |
Hạn chế của lệnh CASE trong SQL Server
- Lệnh CASE không cho phép chúng ta kiểm soát luồng thực thi của các thủ tục và hàm trong SQL Server.
- Lệnh CASE có thể bao gồm một số điều kiện, nhưng nó chỉ hoạt động trong một mô hình tuần tự. Khi một trong số các điều kiện là true, nó dừng kiểm tra các câu lệnh tiếp theo.
- Lệnh CASE không cho phép bao gồm giá trị NULL trong một bảng.
Xem thêm các ví dụ cụ thể về hàm CASE trong SQL Server
Bạn nên đọc
-
Mệnh đề GROUP BY trong SQL Server
-
Microsoft tạm dừng SQL Server trên Windows Containers Beta, đề xuất Linux thay thế
-
Cách khởi động và dừng các dịch vụ trong MS SQL Server
-
Lệnh IF...ELSE trong SQL Server
-
Hàm ROUND trong SQL Server
-
Toán tử UNION ALL trong SQL Server
-
Tất cả các lệnh cmd, lệnh dos trên Windows
-
Khóa ngoại Foreign Key trong SQL Server
-
Các kiểu dữ liệu trong SQL Server
Cũ vẫn chất
-
90+ phím tắt Google Docs cho Windows và Mac
Hôm qua -
Last Name, First Name là gì? Cách điền chúng chính xác nhất
Hôm qua -
Code Mobile Legends mới nhất 12/2024
Hôm qua -
Những tấm gương điển hình của tinh thần vượt lên số phận
Hôm qua -
Tổng hợp code Đại Chiến Tam Quốc mới nhất
Hôm qua -
Code Kiếm Vương 1 - ADNX Mobile mới nhất
Hôm qua -
Cách dùng hàm IMPORTRANGE trong Google Sheets
Hôm qua -
Cách đổi màu phông nền trong Photoshop
Hôm qua -
Game ‘Khủng long mất mạng’ trên Google Chrome được 3D hóa tuyệt đẹp, mời trải nghiệm
Hôm qua -
Cách gán địa chỉ IP tĩnh trong Windows 11, 10, 8, 7, XP hoặc Vista
Hôm qua