Câu lệnh điều kiện IF…ELSE trong SQL Server: Ví dụ về câu lệnh SELECT trong T-SQL.

⚡ Tóm tắt thông minh

Câu lệnh IF…ELSE là một câu lệnh điều khiển luồng trong SQL Server, thực thi một khối mã T-SQL khi điều kiện Boolean được đánh giá là đúng, và một khối mã thay thế tùy chọn khi điều kiện tương tự được đánh giá là sai.

  • 🧭 Logic có điều kiện: Câu lệnh điều kiện cho phép SQL Server thực thi các hành động T-SQL khác nhau tùy thuộc vào việc điều kiện đó đúng hay sai.
  • Các nhánh IF và ELSE: Khi điều kiện Boolean đúng, khối IF sẽ được thực thi; khi điều kiện sai, khối ELSE tùy chọn sẽ được thực thi thay thế.
  • 🔢 Biểu thức Boolean: Điều kiện phải là một biểu thức Boolean có giá trị là đúng hoặc sai, chẳng hạn như (1=1) hoặc phép so sánh biến.
  • 🧱 Khối BẮT ĐẦU…KẾT THÚC: Một nhánh thực thi nhiều hơn một câu lệnh phải bao bọc các câu lệnh đó giữa từ khóa BEGIN và END.
  • ELSE là tùy chọn: Câu lệnh IF có thể đứng độc lập mà không cần phần ELSE, vì vậy điều kiện sai đơn giản là không tạo ra hành động nào.
  • 🔁 Các điều kiện lồng nhau: SQL Server không có từ khóa ELSE IF, vì vậy bạn phải lồng một câu lệnh IF…ELSE bên trong một câu lệnh IF…ELSE khác để kiểm tra nhiều ngưỡng.

Ví dụ về câu lệnh điều kiện IF…ELSE trong SQL Server kết hợp với truy vấn SELECT trong T-SQL.

Tại sao bạn cần câu lệnh có điều kiện?

Câu lệnh điều kiện trong SQL Server giúp bạn định nghĩa các logic và hành động khác nhau cho các điều kiện khác nhau. Chúng cho phép bạn thực hiện các hành động khác nhau dựa trên các điều kiện được định nghĩa trong câu lệnh. Trong thực tế, bạn thực hiện nhiều hành động phụ thuộc vào kết quả của một hoạt động hoặc tình huống khác.

Một số ví dụ thực tế về câu lệnh điều kiện là:

  • Nếu ngày mai trời mưa, tôi sẽ lên kế hoạch cho một chuyến đi đường dài.
  • Nếu giá vé máy bay từ thành phố của tôi dưới 400 đô la, tôi sẽ đi nghỉ ở châu Âu; nếu không, tôi sẽ chọn một địa điểm du lịch gần đó.

Ở đây, bạn có thể thấy rằng một hành động, như chuyến đi đường dài ở trên, phụ thuộc có điều kiện vào kết quả của một hoạt động khác, đó là "ngày mai trời có mưa hay không". Tương tự như vậy, MS SQL server Ngoài ra, nó còn cung cấp khả năng thực thi câu lệnh T-SQL một cách có điều kiện.

Câu lệnh IF…ELSE trong SQL Server

Trong MS SQL, IF…ELSE là một loại câu lệnh điều kiện. Bất kỳ câu lệnh T-SQL nào cũng có thể được thực thi có điều kiện bằng cách sử dụng IF…ELSE. Hình dưới đây giải thích cách hoạt động của các nhánh IF và ELSE trong SQL Server:

Sơ đồ khối của câu lệnh IF…ELSE trong SQL Server thể hiện nhánh IF đúng và nhánh ELSE sai.

  • Nếu điều kiện được đánh giá là True, thì các câu lệnh T-SQL theo sau điều kiện IF trong SQL Server sẽ được thực thi.
  • Nếu điều kiện được đánh giá là Sai, thì các câu lệnh T-SQL theo sau từ khóa ELSE sẽ được thực thi.
  • Sau khi câu lệnh IF T-SQL hoặc câu lệnh ELSE T-SQL được thực thi, các câu lệnh T-SQL không điều kiện khác sẽ tiếp tục được thực thi.

Cú pháp và quy tắc của câu lệnh IF…ELSE trong SQL

Cú pháp:

IF <Condition>
     {Statement | Block_of_statement}   
[ ELSE   
     {Statement | Block_of_statement}]

Quy tắc:

  • Điều kiện phải là một biểu thức Boolean, tức là điều kiện đó sẽ trả về một giá trị Boolean khi được đánh giá.
  • Câu lệnh IF…ELSE trong SQL có thể xử lý có điều kiện một câu lệnh T-SQL đơn lẻ hoặc một khối các câu lệnh T-SQL.
  • Một khối câu lệnh nên bắt đầu bằng từ khóa BEGIN và kết thúc bằng từ khóa END.
  • Việc sử dụng BEGIN và END giúp SQL Server xác định khối lệnh cần được thực thi và tách nó ra khỏi phần còn lại của các câu lệnh T-SQL không thuộc khối T-SQL IF…ELSE.
  • ELSE là tùy chọn.

Câu lệnh IF…ELSE chỉ với giá trị số trong biểu thức Boolean.

Trong ví dụ đầu tiên này, biểu thức Boolean chỉ sử dụng các giá trị số. Hãy xem xét điều kiện bên dưới, điều kiện này luôn đúng vì 1 bằng 1.

Điều kiện: ĐÚNG

IF (1=1)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

Chạy truy vấn với điều kiện đúng (1=1) sẽ in ra thông báo của nhánh IF:

Kết quả của điều kiện IF số thực sẽ in ra thông báo IF STATEMENT.

Điều kiện: SAI

IF (1=2)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

Với điều kiện sai (1=2), nhánh ELSE sẽ được thực thi thay thế:

Kết quả của điều kiện IF số sai sẽ in ra thông báo ELSE STATEMENT.

Giả sử bạn có một bảng tên là 'GuruBảng '99' với hai cột và bốn hàng, như hiển thị bên dưới. Chúng ta sẽ sử dụng bảng này.GuruBảng '99' trong các ví dụ sau đây.

Mâu GuruBảng 99 chứa cột Tutorial_ID và bốn hàng dữ liệu.

Câu lệnh IF…ELSE với biến trong biểu thức Boolean

Thay vì các số cố định, biểu thức Boolean có thể so sánh một biếnVí dụ sau đây khai báo một biến kiểu số nguyên và kiểm tra giá trị của nó.

Điều kiện: ĐÚNG

DECLARE @Course_ID INT = 4

IF (@Course_ID = 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

Vì @Course_ID bằng 4, nhánh IF sẽ chạy và trả về hàng có Tutorial_ID bằng 4:

Kết quả truy vấn trả về hàng Tutorial_ID 4 khi điều kiện biến là đúng.

Điều kiện: SAI

DECLARE @Course_ID INT = 4

IF (@Course_ID != 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

Ở đây điều kiện là sai, vì vậy nhánh ELSE sẽ chạy và trả về mọi hàng có Tutorial_ID khác 4:

Kết quả truy vấn từ nhánh ELSE trả về tất cả các hàng ngoại trừ Tutorial_ID 4

IF…ELSE với BEGIN…END

Khi một nhánh cần thực thi nhiều hơn một câu lệnh, hãy đặt các câu lệnh đó trong khối BEGIN…END. Ví dụ dưới đây thực thi hai câu lệnh SELECT trong mỗi nhánh.

Điều kiện: ĐÚNG

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

Vì @Course_ID nhỏ hơn hoặc bằng 2, nên khối IF sẽ chạy cả hai câu lệnh SELECT bên trong BEGIN…END:

Kết quả của khối IF thực thi hai câu lệnh SELECT cho Tutorial_ID 1 và 2

Điều kiện: SAI

DECLARE @Course_ID INT = 2

IF (@Course_ID >=3)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

Lần này điều kiện không đúng, vì vậy khối ELSE thực thi hai câu lệnh SELECT của nó:

Kết quả của khối ELSE khi thực thi hai câu lệnh SELECT cho Tutorial_ID 3 và 4

Câu lệnh IF không có ELSE

Bạn có thể sử dụng câu lệnh IF trong SQL mà không cần phần ELSE, vì phần ELSE là tùy chọn. Ví dụ:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	Select * from Guru99 where Tutorial_ID = 1

Nó in ra một dòng duy nhất như sau:

Kết quả một hàng được in ra bởi câu lệnh IF không có phần ELSE.

Việc thực thi điều kiện sai sẽ không cho ra kết quả nào. Hãy xem xét truy vấn sau:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=0)
	Select * from Guru99 where Tutorial_ID = 1

Kết quả trống, như hiển thị bên dưới:

Tập kết quả rỗng được tạo ra khi điều kiện IF không có ELSE là sai.

Câu lệnh IF…ELSE lồng nhau

Không giống như một số khác ngôn ngữ lập trìnhSQL Server không cung cấp câu lệnh ELSE IF bên trong điều kiện IF…ELSE. Thay vào đó, bạn có thể lồng một điều kiện IF…ELSE bên trong một điều kiện IF…ELSE khác, như minh họa bên dưới:

 DECLARE @age INT;
SET @age = 60;

IF @age < 18
   PRINT 'underage';
ELSE
BEGIN
   IF @age < 50
      PRINT 'You are below 50';
   ELSE
      PRINT 'Senior';
END;

Với @age là 60, câu lệnh IF…ELSE lồng nhau sẽ in ra kết quả sau:

Kết quả của câu lệnh IF…ELSE lồng nhau in ra "Senior" (Người cao tuổi) cho độ tuổi 60.

  • Đoạn mã sẽ in ra 'underage' nếu giá trị của @age nhỏ hơn 18.
  • Nếu không, phần ELSE sẽ được thực thi. Phần ELSE chứa một câu lệnh IF…ELSE lồng nhau.
  • Nếu giá trị của @age nhỏ hơn 50, chương trình sẽ in ra 'Bạn dưới 50 tuổi'. Nếu không có điều kiện nào đúng, chương trình sẽ in ra 'Người cao tuổi'.

Câu Hỏi Thường Gặp

Cấu trúc IF…ELSE kiểm soát luồng thực thi, lựa chọn các câu lệnh hoặc khối T-SQL nào sẽ được chạy. CASE là một biểu thức trả về một giá trị duy nhất bên trong một truy vấn, chẳng hạn như trong mệnh đề SELECT hoặc WHERE. CASE không thể chạy các câu lệnh riêng biệt.

IIF() là viết tắt của biểu thức CASE, chứ không phải câu lệnh điều khiển luồng IF…ELSE. Nó trả về một trong hai giá trị dựa trên một phép thử Boolean và được sử dụng bên trong các truy vấn. Không giống như IF…ELSE, IIF() không thể thực thi các câu lệnh hoặc khối T-SQL riêng biệt.

Không. IF…ELSE là một câu lệnh điều khiển luồng, vì vậy nó không thể xuất hiện bên trong danh sách SELECT hoặc mệnh đề WHERE. Để trả về các giá trị có điều kiện trong một truy vấn, hãy sử dụng biểu thức CASE hoặc hàm IIF() thay thế.

Viết IF EXISTS (SELECT 1 FROM table WHERE condition) theo sau là câu lệnh cần thực thi. EXISTS trả về true khi truy vấn con tìm thấy ít nhất một hàng khớp, vì vậy nhánh IF chỉ được thực thi khi dữ liệu tồn tại.

Đúng vậy. Câu lệnh IF…ELSE được sử dụng bên trong các thủ tục lưu trữ, trình kích hoạt, hàm và các tập lệnh xử lý hàng loạt để phân nhánh logic. Kết hợp với các khối BEGIN…END, nó cho phép một thủ tục chạy các câu lệnh SQL khác nhau tùy thuộc vào tham số hoặc kết quả truy vấn.

Câu lệnh IF…ELSE đánh giá điều kiện một lần và thực thi nhánh tương ứng một lần duy nhất. Vòng lặp WHILE tiếp tục lặp lại khối lệnh của nó miễn là điều kiện vẫn đúng. Sử dụng IF…ELSE để rẽ nhánh và WHILE để lặp lại.

Vâng. Trợ lý GitHub Bạn có thể soạn thảo các khối IF…ELSE, các câu lệnh BEGIN…END và các điều kiện lồng nhau từ lời nhắc bằng ngôn ngữ tự nhiên. Luôn luôn xem lại các điều kiện Boolean và logic phân nhánh được tạo ra trước khi chạy tập lệnh trên cơ sở dữ liệu của bạn.

Các trợ lý AI và máy học dịch các quy tắc bằng tiếng Anh thông thường thành logic IF…ELSE hoặc CASE, đề xuất các nhánh bị thiếu và đánh dấu các điều kiện không bao giờ đúng. Nhà phát triển xem xét tính chính xác của từng đề xuất trước khi triển khai.

Tóm tắt bài viết này với: