INTERSECT และ EXCEPT สำหรับการเปรียบเทียบ
ค้นหาแถวที่เหมือนกันและแตกต่างกันระหว่างชุดข้อมูลสองชุด
INTERSECT และ EXCEPT สำหรับการเปรียบเทียบ เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
ตัวดำเนินการสำหรับเปรียบเทียบ
INTERSECT และ EXCEPT เป็นตัวดำเนินการเซตสำหรับ เปรียบเทียบ ชุดผลลัพธ์สองชุด แทนที่จะรวมเข้าด้วยกัน ผู้สัมภาษณ์มักใช้ตัวดำเนินการเหล่านี้กับคำถาม เช่น "ลูกค้ารายใดอยู่ในทั้งสองรายการ" หรือ "แถวใดอยู่ใน A แต่ไม่อยู่ใน B"
INTERSECT= แถวที่อยู่ในคิวรี ทั้งสอง คิวรีEXCEPT= แถวที่อยู่ในคิวรี แรก แต่ไม่อยู่ในคิวรีที่สอง
INTERSECT ให้ผลลัพธ์อะไร
INTERSECT จะคืนเฉพาะแถวที่ไม่ซ้ำซึ่งปรากฏอยู่ในชุดผลลัพธ์ ทั้งสอง ชุด แถวหนึ่งจะถือว่าเป็นแถวร่วมได้ก็ต่อเมื่อทุกคอลัมน์ตรงกัน
เช่นเดียวกับ UNION การใช้ INTERSECT โดยไม่มีตัวเลือกเพิ่มเติมจะลบแถวซ้ำ และคืนแถวร่วมแต่ละแถวเพียงครั้งเดียว
SELECT customer_id FROM orders_2023
INTERSECT
SELECT customer_id FROM orders_2024;
-- customers who ordered in BOTH yearsEXCEPT ให้ผลลัพธ์อะไร
EXCEPT (เรียกว่า MINUS ในออราเคิล) จะคืนแถวที่ไม่ซ้ำจากคิวรี แรก ซึ่ง ไม่ ปรากฏในคิวรีที่สอง ตัวดำเนินการนี้มีทิศทาง ดังนั้น A EXCEPT B จึงต่างจาก B EXCEPT A
นี่เป็นวิธีตามธรรมชาติในการค้นหาระเบียนที่หายไปจากชุดข้อมูลที่สอง
SELECT customer_id FROM orders_2023
EXCEPT
SELECT customer_id FROM orders_2024;
-- ordered in 2023 but NOT in 2024 (churned)EXCEPT ไม่ใช่ตัวดำเนินการสมมาตร
ประเด็นที่ผู้สัมภาษณ์ชอบถามคือ EXCEPT มีทิศทาง การสลับคิวรีสองรายการจะทำให้ได้คำตอบของคำถามคนละข้อ
A EXCEPT B= อยู่ใน A แต่ไม่อยู่ใน BB EXCEPT A= อยู่ใน B แต่ไม่อยู่ใน A
ในทางกลับกัน INTERSECT เป็นตัวดำเนินการสมมาตร ดังนั้น A INTERSECT B จึงเท่ากับ B INTERSECT A
-- new customers in 2024 (not seen in 2023):
SELECT customer_id FROM orders_2024
EXCEPT
SELECT customer_id FROM orders_2023;แถวซ้ำและค่าเริ่มต้นแบบ DISTINCT
INTERSECT และ EXCEPT มาตรฐานจะทำงานกับแถวที่ ไม่ซ้ำ เช่นเดียวกับ UNION แถวซ้ำในข้อมูลเข้าจะถูกรวมให้เหลือแถวเดียวก่อนการเปรียบเทียบ
ฐานข้อมูลบางระบบรองรับ INTERSECT ALL และ EXCEPT ALL ซึ่งคงจำนวนครั้งที่ปรากฏของแถวไว้ แต่การใช้งานรูปแบบนี้พบได้น้อยกว่า หากผู้สัมภาษณ์ไม่ได้ระบุ ALL ให้ถือว่าใช้ความหมายแบบไม่ซ้ำ
SELECT city FROM a
INTERSECT ALL
SELECT city FROM b;
-- multiplicity-aware (Postgres supports this; MySQL 8+ too)เปรียบเทียบทั้งแถวเพื่อดูความเท่ากัน
ตัวดำเนินการทั้งสองจะเปรียบเทียบ ทั้งแถว ของคอลัมน์ที่เลือกไว้ทั้งหมด แถวสองแถวจะเท่ากันก็ต่อเมื่อทุกคอลัมน์ตรงกัน จึงเหมาะอย่างยิ่งสำหรับตรวจสอบว่าตารางสองตารางมีข้อมูลเหมือนกันหรือไม่
เลือกคอลัมน์ทั้งหมดที่ต้องการนำมาเปรียบเทียบ เพื่อให้ผลการเปรียบเทียบมีความหมาย
SELECT id, name, email FROM prod_users
EXCEPT
SELECT id, name, email FROM staging_users;
-- rows in prod that differ from / are missing in stagingรูปแบบตรวจความแตกต่างของตารางสองทาง
หากต้องการตรวจสอบว่าตารางสองตาราง เหมือนกันทุกประการ ให้เรียกใช้ EXCEPT ทั้งสองทิศทาง แล้วรวมผลต่างเข้าด้วยกัน หากผลลัพธ์ที่รวมกันว่างเปล่า แสดงว่าตารางทั้งสองตรงกันทุกประการ
นี่เป็นคำตอบคลาสสิกในการสัมภาษณ์ด้านการตรวจสอบความถูกต้องของข้อมูล สำหรับการตรวจสอบการย้ายข้อมูลและการกระทบยอด
(SELECT * FROM table_a EXCEPT SELECT * FROM table_b)
UNION ALL
(SELECT * FROM table_b EXCEPT SELECT * FROM table_a);
-- empty result => tables are identicalการปฏิบัติต่อค่า NULL
ภายในการดำเนินการเซต ค่า NULL สองค่าจะถูกถือว่า เท่ากัน เพื่อใช้จับคู่ ซึ่งแตกต่างจากกรณีปกติที่ NULL = NULL ให้ผลเป็น UNKNOWN
ดังนั้น แถวที่มีค่า NULL ในคอลัมน์หนึ่งจะจับคู่กับอีกแถวที่มีค่า NULL ในตำแหน่งเดียวกัน ผู้สัมภาษณ์มักทดสอบเรื่องนี้เพราะขัดกับกฎการเปรียบเทียบทั่วไป
-- (1, NULL) INTERSECT (1, NULL) -> returns (1, NULL)
SELECT id, region FROM a
INTERSECT
SELECT id, region FROM b;ลำดับความสำคัญของตัวดำเนินการระหว่างการดำเนินการเซต
เมื่อใช้ตัวดำเนินการหลายชนิดร่วมกัน โดยทั่วไป INTERSECT จะมีลำดับความสำคัญ สูงกว่า UNION และ EXCEPT ตามมาตรฐานเอสคิวแอล เพื่อหลีกเลี่ยงความกำกวม ให้ใส่วงเล็บครอบแต่ละแขนง
การระบุว่าใส่วงเล็บเพื่อทำให้ลำดับการประเมินชัดเจน จะแสดงให้เห็นวุฒิภาวะในการตอบคำถามสัมภาษณ์
(SELECT id FROM a EXCEPT SELECT id FROM b)
UNION
(SELECT id FROM c);การเลือกใช้ INTERSECT/EXCEPT เทียบกับการเชื่อมตาราง
INTERSECT และ EXCEPT มีรูปแบบกระชับ และเปรียบเทียบทั้งแถวพร้อมกำจัดรายการซ้ำในตัว ส่วนการเชื่อมตารางมีความยืดหยุ่นมากกว่า (สามารถคืนคอลัมน์เพิ่มเติมและเลือกวิธีจัดการกับแถวซ้ำได้)
เลือกใช้ตัวดำเนินการเซตเมื่อคำถามมีเพียงว่า "แถวใดตรงกันหรือหายไป" เปลี่ยนไปใช้การเชื่อมตารางเมื่อต้องการคอลัมน์จากทั้งสองฝั่ง หรือเมื่อรูปแบบภาษาของฐานข้อมูลไม่มีตัวดำเนินการเหล่านี้
เชื่อมโยงแนวคิดทั้งหมด
สรุปที่สามารถกล่าวได้ในการสัมภาษณ์: "INTERSECT คืนแถวที่อยู่ในทั้งสองคิวรีและเป็นสมมาตร ส่วน EXCEPT คืนแถวที่อยู่ในคิวรีแรกแต่ไม่อยู่ในคิวรีที่สอง และมีทิศทาง ตัวดำเนินการทั้งสองเปรียบเทียบทั้งแถว ถือว่าค่า NULL เท่ากัน และโดยปริยายจะคืนผลลัพธ์ที่ไม่ซ้ำ"
เพิ่มเทคนิคการใช้ EXCEPT สองทิศทางเพื่อตรวจความแตกต่างสำหรับคำถามต่อยอดด้านการกระทบยอดข้อมูล เท่านี้ก็ครอบคลุมหัวข้อนี้ได้ครบถ้วน
ตรวจสอบความเข้าใจอย่างรวดเร็ว
คุณต้องการค้นหาลูกค้าที่สั่งซื้อในปี 2023 แต่ไม่ได้สั่งซื้อในปี 2024 (ลูกค้าที่เลิกใช้บริการ)
สรุปทบทวน
ประเด็นสำคัญ:
INTERSECT= แถวที่อยู่ใน ทั้งสอง คิวรี และเป็นสมมาตรEXCEPT(ออราเคิล: MINUS) = แถวที่อยู่ในคิวรี แรก แต่ไม่อยู่ในคิวรีที่สอง และมีทิศทาง- ตัวดำเนินการทั้งสองเปรียบเทียบ ทั้งแถว และโดยปริยายจะคืนผลลัพธ์ที่ ไม่ซ้ำ
- ค่า NULL จะถูกถือว่าเท่ากันเมื่อนำมาจับคู่
- การใช้
EXCEPTสองทิศทางจะให้ผลต่างของตารางอย่างครบถ้วน
คำถามที่พบบ่อย
บทเรียน “INTERSECT และ EXCEPT สำหรับการเปรียบเทียบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “INTERSECT และ EXCEPT สำหรับการเปรียบเทียบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “INTERSECT และ EXCEPT สำหรับการเปรียบเทียบ”
ค้นหาแถวที่เหมือนกันและแตกต่างกันระหว่างชุดข้อมูลสองชุด คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “INTERSECT และ EXCEPT สำหรับการเปรียบเทียบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- UNION เทียบกับ UNION ALL
- จำนวนคอลัมน์และความเข้ากันได้ของชนิดข้อมูล
- INTERSECT และ EXCEPT สำหรับการเปรียบเทียบ
- จำลองการดำเนินการกับชุดข้อมูลด้วยการเชื่อมตาราง