Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL

กรณี SQL

เมื่อคุณทำงานกับฐานข้อมูล คุณอาจต้องการเรียกใช้ if/then การดำเนินการในแบบสอบถามของคุณ ตัวอย่างเช่น คุณอาจต้องการดูรายชื่อพนักงานและเปลี่ยนสถานะการคุมประพฤติหากพวกเขาทำงานร่วมกับคุณมานานกว่าหนึ่งปี หรือคุณอาจต้องการดูรายชื่อผู้เล่นบนกระดานผู้นำและทำเครื่องหมายว่าเป็นผู้ชนะหากพวกเขาอยู่ในสามอันดับแรก

เพื่อเรียกใช้การดำเนินการเหล่านี้ใน SQL คุณต้องใช้ CASE คำแถลง. SQL CASE คำสั่งอนุญาตให้คุณเรียกใช้ if/then คล้ายกับวิธีการเรียกใช้ if/then ขั้นตอนใน Microsoft Excel

ในคู่มือนี้ เราจะอธิบายพื้นฐานของ SQL CASE คำชี้แจง และอภิปรายว่าคุณจะนำไปใช้อย่างไรในการสืบค้นข้อมูลของคุณ เราจะพูดถึงวิธีใช้ SQL CASE หลายรายการ และสำรวจว่า CASE สามารถใช้กับฟังก์ชันรวมได้

ทบทวนแบบสอบถาม

ในการดึงข้อมูลจากฐานข้อมูล คุณต้องเขียนแบบสอบถาม แบบสอบถามมักจะเริ่มต้นด้วย SELECT คำสั่ง ซึ่งใช้เพื่อบอกฐานข้อมูลว่าคอลัมน์ใดควรส่งคืนโดยแบบสอบถาม แบบสอบถามมักจะมี FROM ข้อ ซึ่งบอกฐานข้อมูลว่าตารางใดที่การดำเนินการจะค้นหา

นี่คือไวยากรณ์สำหรับข้อความค้นหาใน SQL :

SELECT column_name FROM table_name WHERE conditions_are_met;

ลองใช้ตัวอย่างเพื่อแสดงสิ่งนี้ในการดำเนินการ นี่คือข้อความค้นหาที่จะส่งคืนชื่อพนักงานทั้งหมดใน employees . ของเรา ตาราง:

SELECT name FROM employees;

แบบสอบถามของเราส่งคืนผลลัพธ์:

ชื่อ
ลุค
ไมค์
ฮันนาห์
เจฟฟ์
อเล็กซิส
เอ็มม่า
โยนาห์
อดัม

(8 แถว)

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

หากเราต้องการดึงข้อมูลหลายคอลัมน์ เราสามารถทำได้โดยแยกชื่อกับคอลัมน์ หรือถ้าเราต้องการรวบรวมข้อมูลของทุกคอลัมน์ เราก็สามารถใช้ดอกจัน (* ) ตัวดำเนินการซึ่งแทนคอลัมน์ทั้งหมดใน SQL ตาราง

นอกจากนี้ หากเราต้องการกรองเรคคอร์ดตามเงื่อนไขที่กำหนด เราสามารถใช้ WHERE ข้อ ต่อไปนี้คือตัวอย่างการสืบค้นที่ค้นหาชื่อพนักงานทั้งหมดที่อยู่ในสาขาของบริษัท Albany:

SELECT name FROM employees WHERE branch = 'Albany';

นี่คือผลลัพธ์ของการสืบค้นของเรา:

ชื่อ
เอ็มม่า
โยนาห์

(2 แถว)

ทั้งหมดนี้เป็นคำค้นหาที่ค่อนข้างง่าย แต่ถ้าเราต้องการดำเนินการ if/then เมื่อเราเรียกใช้แบบสอบถาม? นั่นคือสิ่งที่ SQL CASE คำชี้แจงจะเป็นประโยชน์

กรณี SQL

CASE สามารถใช้คำสั่งใน SQL เพื่อกำหนด if/then ตรรกะในรหัสของเรา ตัวอย่างเช่น หากเราต้องการให้เงินเพิ่มแก่พนักงานทุกคนที่ทำงานกับธุรกิจของเรามาแล้วห้าปีขึ้นไป เราอาจต้องการใช้ CASE คำสั่ง

นี่คือไวยากรณ์สำหรับ SQL CASE คำสั่ง:

SELECT column1_name
	CASE WHEN column2_name = 'X' THEN 'Y'
		ELSE NULL END AS column3_name
	FROM table_name;

มีหลายสิ่งที่เกิดขึ้นในแบบสอบถามนี้ ลองใช้ตัวอย่างเพื่อแสดงวิธีการทำงาน สมมติว่าเราต้องการให้พนักงานทุกคนมีemployee of the monthมากกว่าห้าคน ให้รางวัลเพิ่มขึ้น $200 นี่คือ SQL คำกล่าวที่สามารถบรรลุเป้าหมายนั้นได้:

SELECT name,
	CASE WHEN employee_month_awards > 5 THEN 200
		ELSE NULL END AS pending_raise
	FROM employees;

ข้อความค้นหาของเราส่งคืนค่าต่อไปนี้จากนิพจน์กรณีการค้นหาของเรา:

ชื่อ รอดำเนินการ_raise
ลุค
ไมค์
ฮันนาห์
เจฟฟ์
อเล็กซิส
เอ็มม่า 200
โจนาห์
อดัม 200

(8 แถว)

มาทำลายสิ่งนี้กันเถอะ CASE คำสั่งตรวจสอบแต่ละระเบียนและประเมินว่าคำสั่งแบบมีเงื่อนไข employee month awards > 5 , เป็นความจริง. ถ้าเงื่อนไขเงื่อนไขเป็นจริง ค่า 200 จะถูกพิมพ์ใน pending_raise คอลัมน์. ในกรณีที่คำสั่งแบบมีเงื่อนไขเป็นเท็จ ค่า null จะยังคงอยู่

สุดท้าย แบบสอบถามของเราส่งคืนรายชื่อพนักงาน เช่นเดียวกับการเพิ่มที่รอดำเนินการของพนักงานเหล่านั้น

สิ่งสำคัญคือต้องสังเกตว่า SQL CASE คำสั่งไม่ได้เพิ่มคอลัมน์ใหม่ในตารางของเรา แต่จะสร้างคอลัมน์ใน SELECT . ของเรา แบบสอบถาม ผลลัพธ์ เพื่อให้เราเห็นว่าใครมีสิทธิ์ได้รับเงินเพิ่ม

นอกจากนี้ หากเราต้องการให้ทุกคนที่ไม่มีสิทธิ์ได้รับเงินเพิ่มได้รับ รอการเพิ่ม เราสามารถระบุ แทน NULL ใน ELSE . ของเรา คำแถลง. นอกจากนี้เรายังสามารถใช้ ORDER BY คำสั่งคำสั่งถ้าเราต้องการดูข้อมูลของเราในลำดับเฉพาะ

SQL CASE และหลายเงื่อนไข

CASE คำสั่งสามารถใช้ได้หลายครั้งในแบบสอบถามเดียวกัน หากเราต้องการให้เงินเพิ่ม $50 แก่พนักงานทุกคนที่มีสามรางวัลขึ้นไป และทุกคนที่มีห้ารางวัลขึ้นไปเพิ่ม $200 เราสามารถใช้คำกล่าวต่อไปนี้:

SELECT name,
	CASE WHEN employee_month_awards > 5 THEN 200
		WHEN employee_month_awards > 3 THEN 50
		ELSE 0 END AS pending_raise
	FROM employees;

ผลลัพธ์จากการสืบค้นของเรามีดังนี้:

ชื่อ รอดำเนินการ_raise
ลุค 50
ไมค์
ฮันนาห์
เจฟฟ์
อเล็กซิส
เอ็มม่า 200
โจนาห์ 50
อดัม 200

(8 แถว)

ในตัวอย่างของเรา CASE งบจะได้รับการประเมินในลำดับที่เขียน

ดังนั้น อันดับแรก แบบสอบถามของเราจะตรวจสอบผู้ที่ได้รับรางวัลมากกว่าห้ารางวัล และตั้งค่าการเพิ่มที่รอดำเนินการเป็น 200 . จากนั้น แบบสอบถามของเราจะตรวจสอบผู้ที่ได้รับรางวัลมากกว่าสามรางวัล และตั้งค่าการเพิ่มที่รอดำเนินการเป็น 50 . สุดท้าย หากพนักงานไม่ตรงตามเกณฑ์ใด ๆ การเพิ่มที่รอดำเนินการจะถูกตั้งค่าเป็น .

อย่างไรก็ตาม รหัสนี้อาจมีประสิทธิภาพมากกว่า แทนที่จะเขียนข้อความตามลำดับเพื่อให้โปรแกรมของเราทำงาน เราควรเขียนข้อความที่ไม่ทับซ้อนกัน ต่อไปนี้คือตัวอย่างการสืบค้นที่ทำงานในลักษณะเดียวกับด้านบน แต่ใช้ AND คำชี้แจงเพื่อตรวจสอบจำนวนรางวัลที่พนักงานได้รับ:

SELECT name,
	CASE WHEN employee_month_awards >= 3 AND employee_month_awards <= 5 THEN 50
		WHEN employee_month_awards > 5 THEN 200
		ELSE 0 END AS pending_raise
	FROM employees;

ข้อความค้นหาของเราส่งคืนเหมือนกับข้อความค้นหาด้านบนของเรา อย่างไรก็ตาม สิ่งนี้ไม่ได้ขึ้นอยู่กับลำดับของ CASE ซึ่งหมายความว่าเรามีโอกาสน้อยที่จะทำผิดพลาดกับข้อความที่ใส่ผิด

SQL CASE และฟังก์ชันรวม

คุณยังสามารถใช้ CASE ด้วยฟังก์ชันรวม ซึ่งจะมีประโยชน์หากคุณต้องการนับเฉพาะแถวที่ตรงตามเงื่อนไขที่กำหนดเท่านั้น ตัวอย่างเช่น หากคุณต้องการทราบจำนวนพนักงานที่ได้รับโบนัส $200 คุณสามารถใช้ CASE ด้วยฟังก์ชันการรวม

นี่คือรูปแบบการใช้ CASE ด้วยฟังก์ชันการรวม:

SELECT column1_name
	CASE WHEN column2_name = 'X' THEN 'Y'
		ELSE NULL END AS column3_name,
		COUNT(1) AS count
	FROM table_name
GROUP BY column3_name;

ลองใช้ตัวอย่างเพื่ออธิบายวิธีการทำงาน สมมติว่าเราต้องการทราบจำนวนพนักงานที่มีสิทธิ์ได้รับโบนัสตั้งแต่ $50 ขึ้นไป เราสามารถใช้แบบสอบถามต่อไปนี้เพื่อรับข้อมูลนี้:

SELECT 
	CASE WHEN employee_month_awards >= 3 AND employee_month_awards <= 5 THEN 50
		WHEN employee_month_awards > 5 THEN 200
		ELSE 0 END AS pending_raise,
		COUNT(1) AS count
	FROM employees
GROUP BY pending_raise;

แบบสอบถามของเราส่งคืนต่อไปนี้:

รอดำเนินการ นับ
50 3
3
200 2

ดังที่คุณเห็น การสอบถามของเราได้ส่งคืนรายการการเพิ่มที่รอดำเนินการที่ได้รับจากพนักงาน ตลอดจนจำนวนการเพิ่มขึ้นแต่ละประเภทที่พนักงานถึงกำหนดชำระ ในกรณีนี้ พนักงานสามคนจะได้รับเงินเพิ่ม $50 พนักงานสามคนไม่ต้องขึ้นเงินเดือน และพนักงานสองคนมีกำหนดขึ้นเงิน $200

บทสรุป

ในบทช่วยสอนนี้ เราได้แจกแจงพื้นฐานของ SQL เซิฟเวอร์ CASE และพูดคุยถึงวิธีการใช้ if/then ตรรกะในแบบสอบถามของเรา เรายังคุยกันถึงวิธีการ CASE ใช้ได้กับหลายเงื่อนไขและฟังก์ชันรวม

โปรดทราบว่าทุก CASE นิพจน์ควรเป็นไปตามกฎเหล่านี้:

  • The CASE คำสั่งควรอยู่ใน SELECT ประโยค;
  • The CASE คำสั่งควรมี WHEN , THEN และ END ส่วนประกอบ
  • หลาย WHEN คำสั่งและ ELSE สามารถใช้ประโยคเป็นทางเลือกได้
  • ข้อความแจ้งเงื่อนไข เช่น AND หรือ OR สามารถใช้ได้ใน CASE แบบสอบถามระหว่าง WHEN และ THEN อนุประโยค

ตอนนี้คุณมีความรู้ที่จำเป็นในการใช้ CASE . แล้ว คำสั่งเช่น SQL มืออาชีพ!