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

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 years

EXCEPT ให้ผลลัพธ์อะไร

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 แต่ไม่อยู่ใน B
  • B 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. UNION เทียบกับ UNION ALL
  2. จำนวนคอลัมน์และความเข้ากันได้ของชนิดข้อมูล
  3. INTERSECT และ EXCEPT สำหรับการเปรียบเทียบ
  4. จำลองการดำเนินการกับชุดข้อมูลด้วยการเชื่อมตาราง
← กลับไปที่ Coding Interview Prep