เมื่อคุณทำงานกับฐานข้อมูล คุณอาจต้องการเรียกใช้ 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
มืออาชีพ!