คำสั่งเงื่อนไข IF…ELSE ใน SQL Server: ตัวอย่างคำสั่ง Select ใน T-SQL

⚡ สรุปอย่างชาญฉลาด

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

  • 🧭 ตรรกะเงื่อนไข: คำสั่งเงื่อนไขช่วยให้ SQL Server สามารถเรียกใช้คำสั่ง T-SQL ที่แตกต่างกันได้ ขึ้นอยู่กับว่าเงื่อนไขนั้นเป็นจริงหรือเท็จ
  • เงื่อนไข IF และ ELSE: เมื่อเงื่อนไขบูลีนเป็นจริง บล็อก IF จะทำงาน เมื่อเป็นเท็จ บล็อก ELSE (ซึ่งเป็นตัวเลือกเสริม) จะทำงานแทน
  • 🔢 นิพจน์บูลีน: เงื่อนไขต้องเป็นนิพจน์บูลีนที่ประเมินค่าได้เป็นจริงหรือเท็จ เช่น (1=1) หรือการเปรียบเทียบตัวแปร
  • 🧱 บล็อก BEGIN…END: เงื่อนไขในการแบ่งสาขาที่รันคำสั่งมากกว่าหนึ่งคำสั่ง จะต้องครอบคำสั่งเหล่านั้นด้วยคำว่า BEGIN และ END
  • ELSE เป็นตัวเลือกเสริม: คำสั่ง IF สามารถทำงานได้โดยลำพังโดยไม่ต้องมีส่วน ELSE ดังนั้นเงื่อนไขที่เป็นเท็จจึงไม่มีการกระทำใดๆ เกิดขึ้น
  • 🔁 เงื่อนไขแบบซ้อนกัน: SQL Server ไม่มีคีย์เวิร์ด ELSE IF ดังนั้นคุณต้องใช้คำสั่ง IF…ELSE ซ้อนกันเพื่อทดสอบค่าเกณฑ์หลายค่า

ตัวอย่างการใช้คำสั่งเงื่อนไข IF…ELSE ใน SQL Server ร่วมกับคำสั่ง SELECT ใน 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:

ผังงานแสดงการทำงานของคำสั่ง IF…ELSE ใน SQL Server โดยแสดงส่วนที่เป็นจริงของ IF และส่วนที่เป็นเท็จของ ELSE

  • หากเงื่อนไขเป็นจริง ระบบจะดำเนินการคำสั่ง 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 ดังนี้:

ผลลัพธ์ของเงื่อนไข IF ที่เป็นตัวเลขจริง จะพิมพ์ข้อความคำสั่ง IF ออกมา

เงื่อนไข: FALSE

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

เมื่อเงื่อนไขเป็นเท็จ (1=2) ส่วน ELSE จะทำงานแทน:

ผลลัพธ์ของเงื่อนไข IF ที่เป็นตัวเลขเท็จ คือการพิมพ์ข้อความคำสั่ง ELSE

สมมติว่าคุณมีตารางชื่อ 'Guruตาราง 99 ที่มีสองคอลัมน์และสี่แถว ดังแสดงด้านล่าง เราจะใช้ตารางนี้ 'Guruตาราง 99 ในตัวอย่างต่อไปนี้

ตัวอย่าง Guruตารางที่ 99 ประกอบด้วยคอลัมน์ Tutorial_ID และข้อมูลสี่แถว

เงื่อนไข 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:

ผลลัพธ์การค้นหาจะส่งคืนแถว 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:

ผลลัพธ์การค้นหาจากส่วน 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:

ผลลัพธ์ของบล็อก IF ที่รันคำสั่ง SELECT สองคำสั่งสำหรับ Tutorial_ID 1 และ 2

เงื่อนไข: 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 สองคำสั่ง:

ผลลัพธ์ของบล็อก ELSE ที่เรียกใช้คำสั่ง SELECT สองคำสั่งสำหรับ Tutorial_ID 3 และ 4

คำสั่ง IF ที่ไม่มี ELSE

คุณสามารถใช้คำสั่ง IF ใน SQL โดยไม่ต้องมีส่วน ELSE เพราะส่วน ELSE นั้นเป็นส่วนเสริมที่ไม่จำเป็น ตัวอย่างเช่น:

DECLARE @Course_ID INT = 2

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

โปรแกรมจะพิมพ์ข้อมูลแถวเดียวดังต่อไปนี้:

ผลลัพธ์แถวเดียวที่พิมพ์โดยคำสั่ง IF ที่ไม่มีส่วน ELSE

การดำเนินการตามเงื่อนไขที่เป็นเท็จจะไม่ให้ผลลัพธ์ใดๆ พิจารณาคำสั่งต่อไปนี้:

DECLARE @Course_ID INT = 2

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

ผลลัพธ์ที่ได้ว่างเปล่า ดังแสดงด้านล่าง:

จะได้ชุดผลลัพธ์ว่างเปล่าเมื่อเงื่อนไข IF ที่ไม่มี ELSE เป็นเท็จ

คำสั่ง 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 ที่ซ้อนกันจะแสดงผลลัพธ์ดังต่อไปนี้:

ผลลัพธ์ของการใช้คำสั่ง IF…ELSE ซ้อนกัน พิมพ์คำว่า Senior สำหรับอายุ 60 ปี

  • โค้ดจะพิมพ์คำว่า 'underage' หากค่าของ @age ต่ำกว่า 18
  • ถ้าไม่เป็นเช่นนั้น ส่วน ELSE จะถูกดำเนินการ ส่วน ELSE ประกอบด้วยคำสั่ง IF…ELSE ซ้อนกันอยู่
  • ถ้าค่าของ @age ต่ำกว่า 50 โค้ดจะพิมพ์ 'คุณอายุต่ำกว่า 50 ปี' หากไม่มีเงื่อนไขใดเป็นจริง โค้ดจะพิมพ์ 'ผู้สูงอายุ'

คำถามที่พบบ่อย

คำสั่ง IF…ELSE ควบคุมลำดับการทำงานของโปรแกรม โดยเลือกคำสั่งหรือบล็อก T-SQL ที่จะเรียกใช้ ส่วนคำสั่ง CASE เป็นนิพจน์ที่ส่งคืนค่าเดียวภายในคำสั่งค้นหา เช่น ในส่วน SELECT หรือ WHERE คำสั่ง CASE ไม่สามารถเรียกใช้คำสั่งแยกกันได้

ฟังก์ชัน IIF() เป็นตัวย่อของนิพจน์ CASE ไม่ใช่คำสั่งควบคุมการไหลของโปรแกรม IF…ELSE มันจะส่งค่ากลับหนึ่งในสองค่าโดยขึ้นอยู่กับการทดสอบแบบบูลีน และใช้ภายในคำสั่ง SQL แตกต่างจาก IF…ELSE ตรงที่ IIF() ไม่สามารถเรียกใช้คำสั่งหรือบล็อก T-SQL แยกต่างหากได้

ไม่ IF…ELSE เป็นคำสั่งควบคุมการไหลของโปรแกรม ดังนั้นจึงไม่สามารถปรากฏภายในรายการ SELECT หรือเงื่อนไข WHERE ได้ หากต้องการส่งคืนค่าแบบมีเงื่อนไขภายในคำสั่ง SQL ให้ใช้คำสั่ง CASE หรือฟังก์ชัน IIF() แทน

เขียน IF EXISTS (SELECT 1 FROM table WHERE condition) ตามด้วยคำสั่งที่จะรัน EXISTS จะคืนค่า true เมื่อซับควอรีพบอย่างน้อยหนึ่งแถวที่ตรงกัน ดังนั้นเงื่อนไข IF จะทำงานก็ต่อเมื่อมีข้อมูลอยู่เท่านั้น

ใช่แล้ว คำสั่ง IF…ELSE ถูกใช้ภายใน stored procedure, trigger, functions และ batch เพื่อแยกการทำงานของโปรแกรม เมื่อใช้ร่วมกับบล็อก BEGIN…END จะทำให้ procedure สามารถรันคำสั่ง SQL ที่แตกต่างกันได้ ขึ้นอยู่กับพารามิเตอร์หรือผลลัพธ์จากการค้นหา

คำสั่ง IF…ELSE จะตรวจสอบเงื่อนไขเพียงครั้งเดียวและเรียกใช้ส่วนที่ตรงกับเงื่อนไขนั้นเพียงครั้งเดียว ในขณะที่ลูป WHILE จะทำซ้ำบล็อกคำสั่งไปเรื่อยๆ ตราบใดที่เงื่อนไขยังเป็นจริง ใช้ IF…ELSE สำหรับการแยกเงื่อนไข และใช้ WHILE สำหรับการวนซ้ำ

ใช่. นักบิน GitHub สามารถสร้างบล็อก IF…ELSE, ตัวห่อ BEGIN…END และเงื่อนไขซ้อนกันได้จากข้อความภาษาธรรมชาติ ตรวจสอบเงื่อนไขบูลีนและตรรกะการแยกสาขาที่สร้างขึ้นก่อนเรียกใช้สคริปต์กับฐานข้อมูลของคุณเสมอ

ปัญญาประดิษฐ์ (AI) และผู้ช่วยการเรียนรู้ของเครื่องจะแปลงกฎภาษาอังกฤษธรรมดาให้เป็นตรรกะ IF…ELSE หรือ CASE แนะนำเงื่อนไขที่ขาดหายไป และระบุเงื่อนไขที่ไม่สามารถเป็นจริงได้ นักพัฒนาจะตรวจสอบความถูกต้องของแต่ละข้อเสนอแนะก่อนนำไปใช้งาน

สรุปโพสต์นี้ด้วย: