0Pricing
SQL Academy · บทเรียน

CASE แบบค้นหาเทียบกับแบบง่าย

สองวิธีในการเขียน CASE

CASE แบบค้นหาเทียบกับแบบง่าย เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

สองวิธีในการเขียน CASE

เอสคิวแอลมี CASE อยู่สองรูปแบบ: CASE แบบง่าย และ CASE แบบค้นหา ทั้งสองรูปแบบส่งคืนค่าตามเงื่อนไข แต่ต่างกันที่วิธีเขียนเงื่อนไขเหล่านั้น

เมื่อจบบทเรียนนี้ คุณจะทราบว่าควรเลือกใช้แต่ละรูปแบบเมื่อใด และจะหลีกเลี่ยงข้อผิดพลาดทั่วไปจากการใช้สลับกันได้อย่างไร

แนวคิดของ CASE แบบง่าย

CASE แบบง่าย จะเปรียบเทียบนิพจน์หนึ่งรายการกับรายการค่า ลองนึกภาพว่าเป็นตารางค้นหา: คุณเลือกคอลัมน์หรือค่าหนึ่งรายการทางด้านซ้าย จากนั้นระบุว่าแต่ละแขนง WHEN มีค่าใดที่เท่ากับค่านั้น

ไวยากรณ์: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END

SELECT
  product_name,
  category_id,
  CASE category_id
    WHEN 1 THEN 'Electronics'
    WHEN 2 THEN 'Clothing'
    WHEN 3 THEN 'Books'
    ELSE 'Other'
  END AS category_name
FROM products;

CASE แบบง่ายในทางปฏิบัติ

ในที่นี้ นิพจน์ CASE อยู่ถัดจากคีย์เวิร์ดทันที และคอลัมน์ status จะถูกเปรียบเทียบกับค่า WHEN แต่ละค่าด้วยการตรวจสอบความเท่ากัน สังเกตว่าคุณ ไม่ ต้องเขียน status = ในแขนง WHEN — การเปรียบเทียบนั้นเป็นสิ่งที่ CASE กำหนดไว้โดยนัย

SELECT
  order_id,
  status,
  CASE status
    WHEN 'pending'   THEN 'Awaiting payment'
    WHEN 'paid'      THEN 'Payment received'
    WHEN 'shipped'   THEN 'On its way'
    WHEN 'delivered' THEN 'Completed'
    ELSE 'Unknown status'
  END AS status_label
FROM orders;

แนวคิดของ CASE แบบค้นหา

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

ไวยากรณ์: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END

SELECT
  employee_name,
  salary,
  CASE
    WHEN salary < 30000  THEN 'Entry Level'
    WHEN salary < 60000  THEN 'Mid Level'
    WHEN salary < 100000 THEN 'Senior'
    ELSE 'Executive'
  END AS salary_band
FROM employees;

CASE แบบค้นหาในทางปฏิบัติ

เนื่องจาก WHEN แต่ละรายการยอมรับนิพจน์บูลีนใด ๆ คุณจึงรวมหลายคอลัมน์ไว้ในแขนงเดียวได้ ฐานข้อมูลจะประเมินส่วนคำสั่ง WHEN จากบนลงล่าง และส่งคืนผลลัพธ์ของแขนง แรก ที่เป็น TRUE

SELECT
  product_name,
  stock,
  price,
  CASE
    WHEN stock = 0              THEN 'Out of stock'
    WHEN stock < 10 AND price > 100 THEN 'Low stock — premium item'
    WHEN stock < 10             THEN 'Low stock'
    ELSE 'In stock'
  END AS availability
FROM products;

ความแตกต่างเชิงโครงสร้างที่สำคัญ

ตารางด้านล่างสรุปความแตกต่างสำคัญ:

CASE แบบง่าย — มีนิพจน์หนึ่งรายการหลัง CASE และ WHEN แต่ละรายการจะตรวจสอบความเท่ากันกับนิพจน์นั้น
CASE แบบค้นหา — ไม่มีนิพจน์หลัง CASE และ WHEN แต่ละรายการเป็นเงื่อนไขบูลีนแบบอิสระ

เนื่องจาก CASE แบบง่ายตรวจสอบได้เฉพาะความเท่ากัน จึงจัดการช่วงค่า, NULL หรือเงื่อนไขหลายคอลัมน์ไม่ได้ สำหรับกรณีใดก็ตามที่เกินกว่าการตรวจสอบค่าที่ตรงกันโดยตรง ให้ใช้ CASE แบบค้นหา

-- Simple CASE: equality only
SELECT CASE day_number
         WHEN 1 THEN 'Monday'
         WHEN 2 THEN 'Tuesday'
         ELSE 'Other'
       END AS day_name
FROM schedule;

-- Searched CASE: any condition
SELECT CASE
         WHEN day_number BETWEEN 1 AND 5 THEN 'Weekday'
         WHEN day_number IN (6, 7)        THEN 'Weekend'
       END AS day_type
FROM schedule;

การจัดการ NULL — เหตุใด CASE แบบค้นหาจึงเหนือกว่า

CASE แบบง่ายใช้ = ภายใน และ NULL = NULL จะไม่มีทางเป็น TRUE ในเอสคิวแอล ดังนั้น CASE แบบง่ายจึงไม่สามารถจับคู่กับคอลัมน์ที่เป็น NULL ได้ ส่วน CASE แบบค้นหาช่วยให้คุณเขียน WHEN column IS NULL THEN ... ซึ่งทำงานได้อย่างถูกต้อง

-- Simple CASE: NULL branch never matches
SELECT CASE manager_id
         WHEN NULL THEN 'No manager'   -- this will NEVER fire
         ELSE 'Has manager'
       END
FROM employees;

-- Searched CASE: correct NULL check
SELECT CASE
         WHEN manager_id IS NULL THEN 'No manager'
         ELSE 'Has manager'
       END AS manager_status
FROM employees;

การผสมคอลัมน์ใน CASE แบบค้นหา

จุดแข็งสำคัญของ CASE แบบค้นหาคือแขนง WHEN แต่ละรายการสามารถอ้างอิงคอลัมน์ที่แตกต่างกันโดยสิ้นเชิง หรือเรียกใช้ฟังก์ชันได้ ทำให้คุณเขียนกฎทางธุรกิจที่ซับซ้อน ซึ่ง CASE แบบง่ายจัดการไม่ได้เลย

SELECT
  customer_name,
  total_orders,
  total_spent,
  CASE
    WHEN total_spent > 10000 AND total_orders > 20 THEN 'VIP'
    WHEN total_spent > 5000                        THEN 'Gold'
    WHEN total_orders > 10                         THEN 'Silver'
    ELSE 'Standard'
  END AS tier
FROM customers;

การใช้ CASE ใน ORDER BY

CASE ทั้งสองรูปแบบสามารถอยู่ภายใน ORDER BY เพื่อสร้างลำดับการเรียงแบบกำหนดเองที่ไม่มีอยู่ในข้อมูลได้ ในที่นี้ CASE แบบง่ายจะแปลงชื่อระดับความสำคัญเป็นตัวเลข เพื่อให้แถวเรียงตามลำดับความสำคัญทางธุรกิจ ไม่ใช่ตามลำดับตัวอักษร

SELECT ticket_id, subject, priority
FROM support_tickets
ORDER BY
  CASE priority
    WHEN 'critical' THEN 1
    WHEN 'high'     THEN 2
    WHEN 'medium'   THEN 3
    WHEN 'low'      THEN 4
    ELSE 5
  END ASC;

CASE ภายในฟังก์ชันรวม

การครอบ CASE แบบค้นหาไว้ภายใน SUM หรือ COUNT เป็นรูปแบบคลาสสิกสำหรับการรวมแบบมีเงื่อนไข ซึ่งบางครั้งเรียกว่าการทำตารางไขว้ วิธีนี้ช่วยให้คุณสร้างยอดรวมหลายหมวดหมู่ในการอ่านข้อมูลรอบเดียว แทนการเรียกใช้หลายคำสั่งสอบถาม

SELECT
  department,
  COUNT(*) AS total_employees,
  SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count,
  SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,
  SUM(CASE WHEN salary > 70000 THEN salary ELSE 0 END) AS high_earner_payroll
FROM employees
GROUP BY department;

การเลือกรูปแบบที่เหมาะสม

หลักปฏิบัติง่าย ๆ:

ใช้ CASE แบบง่าย เมื่อคุณกำลังจับคู่คอลัมน์เดียวกับชุดค่าที่ทราบแน่นอน — รูปแบบนี้สั้นกว่าและอ่านง่ายกว่า
ใช้ CASE แบบค้นหา สำหรับกรณีอื่นทั้งหมด: ช่วงค่า การตรวจสอบ NULL ตรรกะหลายคอลัมน์ หรือการเรียกใช้ฟังก์ชันภายในเงื่อนไข

หากไม่แน่ใจ CASE แบบค้นหาใช้ได้เสมอ คุณสามารถเขียน CASE แบบง่ายใหม่เป็น CASE แบบค้นหาได้ทุกรูปแบบ แต่ทำกลับกันไม่ได้

-- These two queries return identical results

-- Simple CASE (concise for equality)
SELECT CASE region_code
         WHEN 'US' THEN 'United States'
         WHEN 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

-- Equivalent Searched CASE
SELECT CASE
         WHEN region_code = 'US' THEN 'United States'
         WHEN region_code = 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับ CASE แบบง่ายและ CASE แบบค้นหา

ทบทวนบทเรียน

นี่คือสิ่งที่คุณได้เรียนรู้ในบทเรียนนี้:

CASE แบบง่าย — วางนิพจน์หนึ่งรายการหลัง CASE โดย WHEN แต่ละรายการจะตรวจสอบว่านิพจน์นั้นเท่ากับค่าใดค่าหนึ่งหรือไม่ เหมาะที่สุดสำหรับการจับคู่คอลัมน์เดียวกับรายการป้ายกำกับที่กำหนดไว้

CASE แบบค้นหา — ไม่มีนิพจน์หลัง CASE โดย WHEN แต่ละรายการมีเงื่อนไขบูลีนแบบเต็มรูปแบบ รองรับช่วงค่า การตรวจสอบ NULL ตรรกะหลายคอลัมน์ และการเรียกใช้ฟังก์ชัน

ทั้งสองรูปแบบจะประเมินแขนงจากบนลงล่าง และส่งคืนผลลัพธ์ของแขนงแรกที่เป็น TRUE เมื่อไม่มีแขนงใดตรงกันและไม่มี ELSE ผลลัพธ์จะเป็น NULL หากต้องการความยืดหยุ่นสูงสุด CASE แบบค้นหาเป็นตัวเลือกที่ปลอดภัยเสมอ เพราะทำได้ทุกอย่างที่ CASE แบบง่ายทำได้ และยังทำได้มากกว่านั้น

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

บทเรียน “CASE แบบค้นหาเทียบกับแบบง่าย” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “CASE แบบค้นหาเทียบกับแบบง่าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “CASE แบบค้นหาเทียบกับแบบง่าย”

สองวิธีในการเขียน CASE คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “CASE แบบค้นหาเทียบกับแบบง่าย” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. นิพจน์ CASE
  2. CASE แบบค้นหาเทียบกับแบบง่าย
  3. การจัดกลุ่มช่วงและติดป้ายข้อมูล
  4. CASE ใน ORDER BY และการรวมค่า
← กลับไปที่ SQL Academy