0Pricing
SQL Interview Prep · บทเรียน

ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ

ข้อผิดพลาดในการกรองที่พบบ่อยที่สุด ซึ่งผู้สัมภาษณ์มักแฝงไว้ในคำถาม

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

กับดักที่ผู้สัมภาษณ์เตรียมไว้

ข้อผิดพลาดในการกรองที่พบบ่อยที่สุดในการสัมภาษณ์มองเผิน ๆ เหมือนถูกต้อง คุณได้รับโจทย์ว่า: ค้นหาคำสั่งซื้อจากลูกค้า 5 ที่มีสถานะรอดำเนินการหรือจัดส่งแล้ว ผู้สมัครเขียน WHERE ที่ผสม AND กับ OR เข้าด้วยกัน และได้ แถวเพิ่มเติมกลับมา

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

ลำดับความสำคัญของตัวดำเนินการในประโยคเดียว

ในไวยากรณ์ SQL ทุกแบบ ตัวดำเนินการเชิงตรรกะจะผูกกันตามลำดับนี้: NOT ก่อน ตามด้วย AND และ OR เป็นลำดับสุดท้าย

  • NOT มีลำดับความสำคัญสูงสุด
  • AND อยู่ตรงกลาง
  • OR มีลำดับความสำคัญต่ำสุด

ดังนั้น A OR B AND C จะถูกอ่านเป็น A OR (B AND C) และไม่มีวันเป็น (A OR B) AND C ผู้สัมภาษณ์กำลังคาดหวังให้คุณลืมกฎข้อนี้

คำสั่งที่มีข้อผิดพลาด

นี่คือคำสั่งที่ผู้สมัครเขียนสำหรับ ลูกค้า 5 ที่มีสถานะรอดำเนินการหรือจัดส่งแล้ว คำสั่งนี้ดูถูกต้องแต่จริง ๆ แล้วผิด

เนื่องจาก AND มีลำดับการผูกแน่นกว่า SQL จึงอ่านคำสั่งนี้เป็น (customer_id = 5 AND status = 'pending') OR status = 'shipped' แขนงที่สอง ไม่มีตัวกรองลูกค้าเลย ดังนั้นจึงคืนคำสั่งซื้อที่จัดส่งแล้วจากลูกค้าทุกคน

SELECT *
FROM orders
WHERE customer_id = 5
  AND status = 'pending'
  OR status = 'shipped';

วิธีแก้: วงเล็บ

ครอบแขนง OR ด้วยวงเล็บ เพื่อให้ตัวกรองลูกค้ามีผลกับทั้งสองสถานะ วงเล็บจะอยู่เหนือกฎลำดับความสำคัญและทำให้เจตนาของคำสั่งชัดเจน

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

SELECT *
FROM orders
WHERE customer_id = 5
  AND (status = 'pending' OR status = 'shipped');

ไล่ดูตารางค่าความจริง

ลองใช้คำสั่งซื้อที่จัดส่งแล้วจากลูกค้า 9 แล้วไล่ดูรุ่นที่มีข้อผิดพลาด:

  • customer_id = 5 เป็น false
  • status = 'pending' เป็น false
  • false AND false เป็น false
  • false OR (status = 'shipped' is true) เป็น true

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

NOT มีลำดับการผูกแน่นที่สุด

NOT มีผลเฉพาะกับเงื่อนไขที่อยู่ถัดจากมันโดยตรง ดังนั้น NOT status = 'open' AND priority = 'high' จึงหมายถึง (NOT status = 'open') AND priority = 'high'

หากคุณต้องการปฏิเสธเงื่อนไขทั้งหมด ต้องใส่วงเล็บ: NOT (status = 'open' AND priority = 'high') ตามกฎของ De Morgan นิพจน์นี้เท่ากับ status <> 'open' OR priority <> 'high'

SELECT *
FROM tickets
WHERE NOT (status = 'open' AND priority = 'high');

ตัวอย่างที่มีสามเงื่อนไข

ค้นหาผลิตภัณฑ์ที่เป็น (อุปกรณ์อิเล็กทรอนิกส์หรือเครื่องใช้ไฟฟ้า) และ มีสินค้าในสต็อก หากไม่มีวงเล็บ ตัวกรองสินค้าที่มีในสต็อกจะไปผูกกับเครื่องใช้ไฟฟ้าเท่านั้น

คำสั่งที่จัดกลุ่มไว้ด้านล่างอ่านเข้าใจง่าย: เลือกหนึ่งในสองหมวดหมู่ แล้วจึงกำหนดให้มีสินค้าในสต็อก กฎจำง่ายคือ เมื่อใดก็ตามที่คำสั่งผสม AND กับ OR คุณแทบจะต้องใส่วงเล็บครอบกลุ่ม OR เสมอ

SELECT *
FROM products
WHERE (category = 'electronics' OR category = 'appliances')
  AND in_stock = true;

IN เป็นทางเลือกที่อ่านง่ายกว่า

การต่อ OR ยาว ๆ บนคอลัมน์เดียวกันทั้งเสี่ยงเกิดข้อผิดพลาดและเยิ่นเย้อ เปลี่ยนเป็น IN ซึ่งไม่กำกวมและไม่ต้องใช้วงเล็บ

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

SELECT *
FROM products
WHERE category IN ('electronics', 'appliances')
  AND in_stock = true;

ลำดับการประเมินในตัวกรองที่คำนวณ

ลำดับการประเมินยังใช้เมื่อเลขคณิตและตรรกะผสมกันด้วย ใน price * 1.2 > 100 OR discount = 0 AND active = true การเปรียบเทียบและเลขคณิตจะถูกประเมินก่อน จากนั้นจึงเป็น AND แล้วจึงเป็น OR

ดังนั้นจึงอ่านได้ว่า (price * 1.2 > 100) OR ((discount = 0) AND (active = true)) หากไม่แน่ใจ อย่าพยายามจำตารางขณะอยู่ภายใต้ความกดดัน เพียงใส่วงเล็บให้ทุกกลุ่ม

วิธีตอบเมื่อถูกถามต่อหน้า

เมื่อผู้สัมภาษณ์แสดงตัวกรอง AND/OR ที่ผสมกันและถามว่า คำสั่งนี้ส่งคืนอะไร ให้ทำสามสิ่งต่อไปนี้:

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

จากนั้นจึงเสนอฉบับที่แก้ไขและใส่วงเล็บแล้ว ลำดับนี้แสดงถึงความรอบคอบในระดับผู้มีประสบการณ์

นิสัยการเขียนโค้ดเชิงป้องกัน

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

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

SELECT order_id, status
FROM orders
WHERE customer_id = 5
  AND (status = 'pending' OR status = 'shipped');

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

พิจารณากฎลำดับการประเมินก่อนตอบ

สรุป

ประเด็นสำคัญ:

  • ลำดับความสำคัญทางตรรกะคือ NOT จากนั้น AND แล้วจึง OR
  • ตัวกรองที่ผสม AND/OR แทบจะต้องใส่วงเล็บครอบกลุ่ม OR เสมอ
  • วงเล็บที่หายไปทำให้ผลลัพธ์กว้างขึ้นโดยไม่ส่งสัญญาณเตือน และมักทำให้ตัวกรองหนึ่งรายการหลุดไปทั้งหมด
  • เปลี่ยนชุด OR ที่ต่อกันยาว ๆ บนคอลัมน์เดียวเป็น IN
  • เมื่อต้องตอบต่อหน้า: บอกกฎ ใส่วงเล็บใหม่ ไล่ตรวจหนึ่งแถว แล้วจึงแก้ไข

ใส่วงเล็บให้กลุ่ม OR เสมอ แม้ว่าลำดับการประเมินจะให้ผลตรงกันอยู่แล้ว

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

บทเรียน “ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ”

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

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

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

บทเรียน “ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ
  2. BETWEEN, IN และขอบเขตแบบรวมปลาย
  3. LIKE อักขระแทนที่ และการหลีกอักขระ
  4. กรองด้วยค่าที่คำนวณแล้ว
← กลับไปที่ SQL Interview Prep