Câu lệnh if trong SQL Server

Hướng dẫn chi tiết cách sử dụng câu lệnh if trong SQL Server

  1. Câu lệnh IF...ELSE trong T-SQL
  2. Hàm IIF()
  3. Biểu thức CASE (linh hoạt và mạnh mẽ nhất)
  4. So sánh 3 cách viết IF

1. Câu lệnh IF...ELSE trong T-SQL

    Dùng để điều khiển luồng chương trình (giống như trong C#, Python…)

Cú pháp câu lệnh if trong SQL Server

IF (điều kiện)
BEGIN
    -- Lệnh nếu đúng
END
ELSE
BEGIN
    -- Lệnh nếu sai
END

Ví dụ câu lệnh if

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.

Ví dụ câu lệnh if lồng if

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.

2. Hàm IIF()

Chú ý: Chỉ hỗ trợ từ SQL Server 2012

Hàm gọn gàng, dùng trong SELECT, WHERE,...

Cú pháp hàm iif trong SQL Server

IIF(điều kiện, giá_trị_nếu_đúng, giá_trị_nếu_sai)

Ví dụ hàm iif

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

3. Biểu thức CASE (linh hoạt và mạnh mẽ nhất)

    Có thể dùng được trong SELECT, WHERE, ORDER BY, GROUP BY,...

Cú pháp Case

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

Ví dụ sử dụng Case trong SQL Server

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;

4. So sánh 3 cách viết IF

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:

Bài viết liên quan:

Hướng dẫn chi tiết cách sử dụng câu lệnh if trong SQL Server