SQL Interview Prep · บทเรียน

ลำดับการประมวลผลคิวรีเชิงตรรกะ

เหตุใด FROM จึงทำงานก่อน SELECT และการรู้ลำดับการประมวลผลที่แท้จริงช่วยตอบคำถามหลอกได้มากมายอย่างไร

บทเรียน 2 จาก 413 ขั้นตอน

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

คำถามที่เปิดทางไปสู่คำถามอื่นอีกนับสิบ

ผู้สัมภาษณ์ถามว่า “คำสั่งสอบถามทำงานจริงตามลำดับใด?” เพราะคำตอบนี้ช่วยอธิบายได้หลายเรื่อง เช่น เหตุใดชื่อแทนของ SELECT จึงใช้ใน WHERE ไม่ได้ เหตุใด WHERE จึงกรองค่ารวมไม่ได้ และเรื่องอื่น ๆ อีกมาก

ลำดับการเขียนเทียบกับลำดับตรรกะ

คุณเขียนคำสั่งสอบถามโดยเริ่มจาก SELECT แต่กลไกประมวลผลจะดำเนินการโดยเริ่มจาก FROM ความไม่ตรงกันนี้ รวมถึงการที่ SELECT ถูกประเมินเกือบเป็นลำดับสุดท้าย เป็นสาเหตุของความสับสนส่วนใหญ่

ลำดับตรรกะทั้งหมด

ลำดับตรรกะทั้งหมดคือ FROM ตามด้วย WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY และสุดท้ายคือ LIMIT จุดที่มักทำให้สับสนทั้งหมดด้านล่างอธิบายได้จากรายการนี้

เหตุใด FROM จึงทำงานก่อน

FROM ทำงานก่อน เพราะกลไกประมวลผลต้องมีแถวสำหรับดำเนินการก่อนจึงจะทำอย่างอื่นได้ ระบบจะสร้างแถวต้นทางขึ้นมาก่อน แล้ว WHERE จึงจะตัดสินใจได้ว่าแถวใดควรเก็บไว้

SELECT e.name, d.name AS dept
FROM employees e
JOIN departments d ON d.id = e.department_id
WHERE e.salary > 50000;

จุดที่มักพลาด: ใช้ชื่อแทนใน WHERE ไม่ได้

ผลที่ผู้สัมภาษณ์ถามถึงบ่อยที่สุดคือ ไม่สามารถใช้ชื่อแทนของ SELECT ใน WHERE ได้ เพราะ WHERE ทำงานก่อน SELECT โค้ดด้านล่างแสดงข้อผิดพลาดและวิธีแก้ โดยเขียนนิพจน์ซ้ำ

-- FAILS: alias 'annual' unknown in WHERE
SELECT salary * 12 AS annual
FROM employees
WHERE annual > 600000;

-- FIX: repeat the expression
SELECT salary * 12 AS annual
FROM employees
WHERE salary * 12 > 600000;

จุดที่มักพลาด: WHERE มองไม่เห็นค่ารวม

WHERE ทำงานก่อนการจัดกลุ่ม จึงมองไม่เห็นค่ารวมอย่าง COUNT() หน้าที่นี้เป็นของ HAVING โดย WHERE ใช้กรองแถว ส่วน HAVING ใช้กรองกลุ่มหลังจากรวมค่าแล้ว

-- WHERE cannot use COUNT(*)
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;

เหตุใด ORDER BY จึงใช้ชื่อแทนได้

ในทางกลับกัน ORDER BY ทำงานหลัง SELECT จึงสามารถใช้ชื่อแทนของ SELECT ได้ ชื่อแทนเดียวกันแต่ช่วงเวลาต่างกัน จึงใช้ได้ในกรณีนี้แต่ใช้ใน WHERE ไม่ได้

SELECT name, salary * 12 AS annual
FROM employees
ORDER BY annual DESC;

DISTINCT อยู่ตรงไหนในลำดับ

DISTINCT ทำงานหลัง SELECT แต่ก่อน ORDER BY เนื่องจากใช้คอลัมน์ผลลัพธ์ในการกำจัดค่าซ้ำ คุณจึงเรียงลำดับได้เฉพาะสิ่งที่ยังอยู่ในรายการคอลัมน์ที่เลือก

-- ERROR in many engines:
-- ORDER BY column not in the DISTINCT select list
SELECT DISTINCT department
FROM employees
ORDER BY hire_date;

ตัวอย่างการไล่ลำดับคำสั่งสอบถามทั้งหมด

ลองไล่คำสั่งสอบถามจริงผ่านแต่ละขั้นตอน: FROM อ่านแถว WHERE กรองแถว GROUP BY จัดกลุ่ม HAVING เก็บกลุ่ม SELECT คำนวณ ORDER BY เรียงลำดับ และ LIMIT ตัดผลลัพธ์ให้เหลือจำนวนที่กำหนด

SELECT customer_id, SUM(amount) AS total
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(amount) > 1000
ORDER BY total DESC
LIMIT 10;

การประมวลผลเชิงตรรกะเทียบกับการประมวลผลจริง

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

เทคนิคช่วยจำลำดับ

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

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

ใช้ลำดับการประมวลผลเพื่อค้นหาข้อผิดพลาด

สรุปทบทวน

สรุปทบทวน: ลำดับตรรกะคือ FROM, WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY, LIMIT โดย WHERE ทำงานก่อน SELECT จึงใช้ชื่อแทนไม่ได้ ส่วน ORDER BY ทำงานหลัง SELECT จึงใช้ชื่อแทนได้

เริ่มต้นได้ฟรี

เรียนรู้ SQL ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

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

บทเรียน “ลำดับการประมวลผลคิวรีเชิงตรรกะ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ลำดับการประมวลผลคิวรีเชิงตรรกะ”

เหตุใด FROM จึงทำงานก่อน SELECT และการรู้ลำดับการประมวลผลที่แท้จริงช่วยตอบคำถามหลอกได้มากมายอย่างไร คุณปฏิบัติ SQL Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “ลำดับการประมวลผลคิวรีเชิงตรรกะ” ใช้เวลานานแค่ไหน

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

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

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

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

  1. SQL คืออะไร และเหตุใดผู้สัมภาษณ์จึงถามถึง SQL
  2. ลำดับการประมวลผลคิวรีเชิงตรรกะ
  3. คีย์หลัก คีย์นอก และข้อจำกัด
  4. อ่านสคีมาภายใต้ความกดดัน
← กลับไปที่ SQL Interview Prep