คำสั่งเงื่อนไข IF…ELSE ใน SQL Server: ตัวอย่างคำสั่ง Select ใน T-SQL
⚡ สรุปอย่างชาญฉลาด
IF…ELSE เป็นคำสั่งควบคุมการไหลของโปรแกรมใน SQL Server ซึ่งจะรันบล็อก T-SQL หนึ่งบล็อกเมื่อเงื่อนไขแบบบูลีนเป็นจริง และจะรันบล็อกทางเลือกอีกบล็อกหนึ่งเมื่อเงื่อนไขเดียวกันนั้นเป็นเท็จ (ถ้ามี)

เหตุใดคุณจึงต้องมี Conditional Statements?
คำสั่งเงื่อนไขใน SQL Server ช่วยให้คุณกำหนดตรรกะและการกระทำที่แตกต่างกันสำหรับเงื่อนไขต่างๆ โดยจะช่วยให้คุณสามารถดำเนินการต่างๆ ได้ตามเงื่อนไขที่กำหนดไว้ในคำสั่ง ในชีวิตจริง คุณมักดำเนินการหลายอย่างที่ขึ้นอยู่กับผลลัพธ์ของกิจกรรมหรือสถานการณ์อื่นๆ
ตัวอย่างการใช้งานเงื่อนไขในชีวิตจริง ได้แก่:
- ถ้าพรุ่งนี้ฝนตก ฉันจะวางแผนขับรถเที่ยว
- ถ้าตั๋วเครื่องบินจากเมืองของฉันราคาต่ำกว่า 400 ดอลลาร์ ฉันก็จะไปเที่ยวพักผ่อนที่ยุโรป แต่ถ้าไม่เช่นนั้น ฉันก็จะเลือกไปเที่ยวสถานที่ท่องเที่ยวใกล้ๆ แทน
ในที่นี้ คุณจะเห็นว่าการกระทำหนึ่ง เช่น การเดินทางโดยรถยนต์ข้างต้น ขึ้นอยู่กับผลลัพธ์ของการกระทำอีกอย่างหนึ่ง ซึ่งก็คือ "พรุ่งนี้ฝนจะตกหรือไม่" ในทำนองเดียวกัน MS SQL Server นอกจากนี้ยังมีความสามารถในการเรียกใช้คำสั่ง T-SQL แบบมีเงื่อนไขได้อีกด้วย
คำสั่ง IF…ELSE ใน SQL Server
ใน MS SQL คำสั่ง IF…ELSE เป็นคำสั่งเงื่อนไขประเภทหนึ่ง คำสั่ง T-SQL ใดๆ ก็สามารถเรียกใช้ได้แบบมีเงื่อนไขโดยใช้ IF…ELSE รูปด้านล่างอธิบายวิธีการทำงานของส่วน IF และ ELSE ใน SQL Server:
- หากเงื่อนไขเป็นจริง ระบบจะดำเนินการคำสั่ง T-SQL ที่อยู่หลังเงื่อนไข IF ใน SQL Server
- หากเงื่อนไขประเมินค่าเป็นเท็จ คำสั่ง T-SQL ที่อยู่หลังคำว่า ELSE จะถูกดำเนินการ
- เมื่อคำสั่ง T-SQL IF หรือคำสั่ง T-SQL ELSE ใดคำสั่งหนึ่งทำงานเสร็จแล้ว คำสั่ง T-SQL อื่นๆ ที่ไม่มีเงื่อนไขจะยังคงทำงานต่อไป
ไวยากรณ์และกฎของคำสั่ง IF…ELSE ใน SQL
ไวยากรณ์:
IF <Condition> {Statement | Block_of_statement} [ ELSE {Statement | Block_of_statement}]
กฎ:
- เงื่อนไขควรเป็นนิพจน์บูลีน กล่าวคือ เงื่อนไขนั้นจะต้องให้ค่าบูลีนเมื่อถูกประเมิน
- คำสั่ง IF…ELSE ใน SQL สามารถใช้จัดการเงื่อนไขกับคำสั่ง T-SQL เดี่ยวๆ หรือกลุ่มคำสั่ง T-SQL ได้
- กลุ่มคำสั่งควรเริ่มต้นด้วยคำว่า BEGIN และจบด้วยคำว่า END
- การใช้ BEGIN และ END ช่วยให้ SQL Server ระบุบล็อกคำสั่งที่ต้องดำเนินการและแยกออกจากคำสั่ง T-SQL ส่วนที่เหลือที่ไม่ใช่ส่วนหนึ่งของบล็อก T-SQL IF…ELSE
- ELSE เป็นทางเลือก
เงื่อนไข IF…ELSE ที่ใช้เฉพาะค่าตัวเลขในนิพจน์บูลีน
ในตัวอย่างแรกนี้ นิพจน์บูลีนใช้เฉพาะค่าตัวเลขเท่านั้น พิจารณาเงื่อนไขด้านล่าง ซึ่งเป็นจริงเสมอเพราะ 1 เท่ากับ 1
เงื่อนไข: จริง
IF (1=1) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
การเรียกใช้คิวรีด้วยเงื่อนไขที่เป็นจริง (1=1) จะแสดงข้อความของสาขา IF ดังนี้:
เงื่อนไข: FALSE
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
เมื่อเงื่อนไขเป็นเท็จ (1=2) ส่วน ELSE จะทำงานแทน:
สมมติว่าคุณมีตารางชื่อ 'Guruตาราง 99 ที่มีสองคอลัมน์และสี่แถว ดังแสดงด้านล่าง เราจะใช้ตารางนี้ 'Guruตาราง 99 ในตัวอย่างต่อไปนี้
เงื่อนไข IF…ELSE กับตัวแปรในนิพจน์บูลีน
แทนที่จะใช้ตัวเลขคงที่ นิพจน์บูลีนสามารถเปรียบเทียบค่าได้ ตัวแปรตัวอย่างต่อไปนี้ประกาศตัวแปรจำนวนเต็มและทดสอบค่าของตัวแปรนั้น
เงื่อนไข: จริง
DECLARE @Course_ID INT = 4 IF (@Course_ID = 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
เนื่องจาก @Course_ID เท่ากับ 4 ดังนั้นเงื่อนไข IF จึงทำงานและส่งคืนแถวที่ Tutorial_ID เท่ากับ 4:
เงื่อนไข: FALSE
DECLARE @Course_ID INT = 4 IF (@Course_ID != 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
เงื่อนไขในที่นี้เป็นเท็จ ดังนั้นส่วน ELSE จึงทำงานและส่งคืนทุกแถวที่ Tutorial_ID ไม่เท่ากับ 4:
IF…ELSE ร่วมกับ BEGIN…END
เมื่อต้องการรันคำสั่งมากกว่าหนึ่งคำสั่งในแต่ละสาขา ให้ครอบคำสั่งเหล่านั้นด้วยบล็อก BEGIN…END ตัวอย่างด้านล่างแสดงการรันคำสั่ง SELECT สองคำสั่งในแต่ละสาขา
เงื่อนไข: จริง
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
เนื่องจาก @Course_ID มีค่าน้อยกว่าหรือเท่ากับ 2 บล็อก IF จึงรันคำสั่ง SELECT ทั้งสองคำสั่งภายใน BEGIN…END:
เงื่อนไข: FALSE
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
คราวนี้เงื่อนไขเป็นเท็จ ดังนั้นบล็อก ELSE จึงดำเนินการคำสั่ง SELECT สองคำสั่ง:
คำสั่ง IF ที่ไม่มี ELSE
คุณสามารถใช้คำสั่ง IF ใน SQL โดยไม่ต้องมีส่วน ELSE เพราะส่วน ELSE นั้นเป็นส่วนเสริมที่ไม่จำเป็น ตัวอย่างเช่น:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) Select * from Guru99 where Tutorial_ID = 1
โปรแกรมจะพิมพ์ข้อมูลแถวเดียวดังต่อไปนี้:
การดำเนินการตามเงื่อนไขที่เป็นเท็จจะไม่ให้ผลลัพธ์ใดๆ พิจารณาคำสั่งต่อไปนี้:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=0) Select * from Guru99 where Tutorial_ID = 1
ผลลัพธ์ที่ได้ว่างเปล่า ดังแสดงด้านล่าง:
คำสั่ง IF…ELSE ซ้อนกัน
ไม่เหมือนใคร การเขียนโปรแกรมภาษาSQL Server ไม่รองรับการใช้คำสั่ง ELSE IF ภายในเงื่อนไข IF…ELSE แต่คุณสามารถใช้ IF…ELSE ซ้อนกันได้ ดังตัวอย่างด้านล่าง:
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;
สำหรับค่า @age เท่ากับ 60 คำสั่ง IF…ELSE ที่ซ้อนกันจะแสดงผลลัพธ์ดังต่อไปนี้:
- โค้ดจะพิมพ์คำว่า 'underage' หากค่าของ @age ต่ำกว่า 18
- ถ้าไม่เป็นเช่นนั้น ส่วน ELSE จะถูกดำเนินการ ส่วน ELSE ประกอบด้วยคำสั่ง IF…ELSE ซ้อนกันอยู่
- ถ้าค่าของ @age ต่ำกว่า 50 โค้ดจะพิมพ์ 'คุณอายุต่ำกว่า 50 ปี' หากไม่มีเงื่อนไขใดเป็นจริง โค้ดจะพิมพ์ 'ผู้สูงอายุ'











