Dùng để điều khiển luồng chương trình (giống như trong C#, Python…)
IF (điều kiện)
BEGIN
-- Lệnh nếu đúng
END
ELSE
BEGIN
-- Lệnh nếu sai
END
DECLARE @Diem INT = 7;
IF @Diem >= 5
PRINT N'Đạt'
ELSE
PRINT N'Rớt'
✔️ Dùng được trong thủ tục, batch script, nhưng không đặt được trong câu SELECT.
✔️ Thêm N vì để hiển thị tiếng việt unicode.
Cú pháp chung của IF lồng IF trong SQL Server
IF (điều_kiện_1)
BEGIN
-- lệnh khi điều kiện 1 đúng
IF (điều_kiện_2)
BEGIN
-- lệnh khi cả điều kiện 1 và 2 đều đúng
END
ELSE
BEGIN
-- lệnh khi điều kiện 1 đúng nhưng điều kiện 2 sai
END
END
ELSE
BEGIN
-- lệnh khi điều kiện 1 sai
END
🧠 Ví dụ: Kiểm tra đăng ký thi lại
Bài toán:
Cho điểm của sinh viên:
Nếu điểm dưới 5
Nếu nhỏ hơn 3 → in "Phải học lại"
Nếu từ 3 đến dưới 5 → in "Được thi lại"
Ngược lại → in "Qua môn"
DECLARE @Diem FLOAT = 2.5
IF @Diem < 5
BEGIN
IF @Diem < 3
PRINT N'Phải học lại'
ELSE
PRINT N'Được thi lại'
END
ELSE
PRINT N'Qua môn'
Giải thích:
Lệnh IF @Diem < 5 là điều kiện chính.
Bên trong BEGIN...END là IF @Diem < 3 — điều kiện lồng.
Mỗi nhánh IF nên dùng BEGIN...END khi có nhiều lệnh.
🧠 Ví dụ: Đánh giá tình trạng kho hàng
Bài toán:
Cho số lượng hàng tồn kho:
Nếu tồn kho = 0 → in "Hết hàng"
Nếu tồn kho <= 10
Nếu hàng là hàng thiết yếu (@LaHangThietYeu = 1) → in "Cảnh báo khẩn"
Ngược lại → in "Cảnh báo nhẹ"
Nếu > 10 → in "Hàng ổn định"
DECLARE @SoLuong INT = 8
DECLARE @LaHangThietYeu BIT = 1
IF @SoLuong = 0
PRINT N'Hết hàng'
ELSE
BEGIN
IF @SoLuong <= 10
BEGIN
IF @LaHangThietYeu = 1
PRINT N'Cảnh báo khẩn'
ELSE
PRINT N'Cảnh báo nhẹ'
END
ELSE
PRINT N'Hàng ổn định'
END
Giải thích:
Sử dụng lồng nhiều cấp IF bên trong ELSE.
Phù hợp cho các tình huống cần đánh giá phức tạp.
✅ Lưu ý khi dùng IF lồng nhau trong SQL Server:
Luôn dùng BEGIN...END nếu có nhiều dòng bên trong một nhánh IF hoặc ELSE.
Có thể lồng nhiều cấp, nhưng nên giữ cấu trúc rõ ràng, dễ đọc.
Với điều kiện phức tạp, có thể dùng thêm AND, OR, hoặc tách điều kiện ra biến trung gian.
Chú ý: Chỉ hỗ trợ từ SQL Server 2012
Hàm gọn gàng, dùng trong SELECT, WHERE,...
IIF(điều kiện, giá_trị_nếu_đúng, giá_trị_nếu_sai)
SELECT
HoTen,
Toan,
IIF(Toan >= 5, 'Đạt', 'Rớt') AS KetQua
FROM HocSinh;
✔️ Gọn gàng hơn CASE, thích hợp cho điều kiện đơn giản
❌ Không lồng nhiều cấp phức tạp như CASE được tốt
Có thể dùng được trong SELECT, WHERE, ORDER BY, GROUP BY,...
CASE
WHEN điều_kiện_1 THEN kết_quả_1
WHEN điều_kiện_2 THEN kết_quả_2
...
ELSE kết_quả_mặc_định
END
SELECT
HoTen,
Toan,
CASE
WHEN Toan >= 8 THEN 'Giỏi'
WHEN Toan >= 6.5 THEN 'Khá'
WHEN Toan >= 5 THEN 'Trung Bình'
ELSE 'Yếu'
END AS XepLoai
FROM HocSinh;
Cách dùng | Ưu điểm | Nhược điểm | Dùng khi nào? |
---|---|---|---|
IF...ELSE |
Rõ ràng, dễ đọc | Không dùng trong SELECT |
Điều kiện điều khiển logic |
IIF() |
Gọn, dễ viết với điều kiện đơn | Không linh hoạt với nhiều nhánh | Dùng trong SELECT đơn giản |
CASE WHEN |
Linh hoạt, mạnh, dùng mọi nơi | Dài hơn chút | Khi nhiều điều kiện phân nhánh |
Tìm kiếm:
Hướng dẫn chi tiết cách sử dụng câu lệnh if trong SQL Server