ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ
ข้อผิดพลาดในการกรองที่พบบ่อยที่สุด ซึ่งผู้สัมภาษณ์มักแฝงไว้ในคำถาม
ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding 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เป็น falsestatus = 'pending'เป็น falsefalse AND falseเป็น falsefalse 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) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ”
ข้อผิดพลาดในการกรองที่พบบ่อยที่สุด ซึ่งผู้สัมภาษณ์มักแฝงไว้ในคำถาม คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ลำดับความสำคัญของ AND/OR และการใส่วงเล็บ
- BETWEEN, IN และขอบเขตแบบรวมปลาย
- LIKE อักขระแทนที่ และการหลีกอักขระ
- กรองด้วยค่าที่คำนวณแล้ว