เปรียบเทียบสองตารางใน SQL

Periyb Theiyb Sxng Tarang Ni Sql



การเปรียบเทียบข้อมูลใน SQL เป็นงานทั่วไปที่นักพัฒนาฐานข้อมูลทุกคนจะต้องพบเจอเป็นครั้งคราว โชคดีที่การเปรียบเทียบข้อมูลมีหลากหลายรูปแบบ เช่น การเปรียบเทียบตามตัวอักษร การเปรียบเทียบบูลีน เป็นต้น

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







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



การตั้งค่าข้อมูลตัวอย่าง

ก่อนที่เราจะเจาะลึกแต่ละวิธี ให้เราตั้งค่าข้อมูลพื้นฐานเพื่อวัตถุประสงค์ในการสาธิตก่อน



เรามีสองตารางพร้อมข้อมูลตัวอย่างตามที่แสดงในตัวอย่าง





ตารางตัวอย่างที่ 1:

ต่อไปนี้ประกอบด้วยแบบสอบถามสำหรับการสร้างตารางแรกและการแทรกข้อมูลตัวอย่างในตาราง:



สร้างตาราง example_tb1 -
Employee_id INT คีย์หลัก AUTO_INCREMENT,
first_name วาร์ชาร์ - ห้าสิบ - -
นามสกุล วาร์ชาร์ - ห้าสิบ - -
แผนก วาร์ชาร์ - ห้าสิบ - -
เงินเดือนทศนิยม - 10 - 2 -
- -

แทรกลงในsample_tb1 - first_name, Last_name, แผนก, เงินเดือน -
ค่านิยม
- 'เพเนโลพี' - 'ไล่ล่า' - 'ทรัพยากรบุคคล' - 55000.00 - -
- 'แมทธิว' - 'กรง' - 'มัน' - 60000.00 - -
- 'เจนนิเฟอร์' - 'เดวิส' - 'การเงิน' - 50000.00 - -
- 'เคิร์สเตน' - 'ฟอว์เซ็ต' - 'มัน' - 62000.00 - -
- 'คาเมรอน' - 'คอสเนอร์' - 'การเงิน' - 48000.00 - -

สิ่งนี้ควรสร้างตารางใหม่ชื่อ “sample_tb1” พร้อมข้อมูลต่างๆ เช่น ชื่อ แผนก และเงินเดือน

ตารางผลลัพธ์จะเป็นดังนี้:

ตารางตัวอย่างที่ 2:

ให้เราดำเนินการและสร้างตารางตัวอย่างสองตาราง สมมติว่า นี่เป็นสำเนาสำรองของตารางแรก เราสามารถสร้างตารางและแทรกข้อมูลตัวอย่างได้ดังต่อไปนี้:

สร้างตาราง example_tb2 -
Employee_id INT คีย์หลัก AUTO_INCREMENT,
first_name วาร์ชาร์ - ห้าสิบ - -
นามสกุล วาร์ชาร์ - ห้าสิบ - -
แผนก วาร์ชาร์ - ห้าสิบ - -
เงินเดือนทศนิยม - 10 - 2 -
- -
ใส่ลงใน Sample_tb2 - first_name, Last_name, แผนก, เงินเดือน -
ค่านิยม
- 'เพเนโลพี' - 'ไล่ล่า' - 'ทรัพยากรบุคคล' - 55000.00 - -
- 'แมทธิว' - 'กรง' - 'มัน' - 60000.00 - -
- 'เจนนิเฟอร์' - 'เดวิส' - 'การเงิน' - 50000.00 - -
- 'เคิร์สเตน' - 'ฟอว์เซ็ต' - 'มัน' - 62000.00 - -
- 'ออเดรย์' - 'คณบดี' - 'การเงิน' - 48000.00 - -

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

เปรียบเทียบสองตารางโดยใช้ยกเว้น

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

เราสามารถใช้เพื่อทำการเปรียบเทียบกับตารางตัวอย่างได้ดังนี้:

เลือก -
จาก sample_tb1
ยกเว้น
เลือก -
จาก sample_tb2;

ในตัวอย่างนี้ ตัวดำเนินการ EXCEPT จะส่งกลับแถวที่แตกต่างกันทั้งหมดจากแบบสอบถามแรก (sample_tb1) ที่ไม่ปรากฏในแบบสอบถามที่สอง (sample_tb2)

เปรียบเทียบสองตารางโดยใช้ Union

วิธีที่สองที่เราสามารถใช้ได้คือตัวดำเนินการ UNION ร่วมกับ GROUP BY clause ซึ่งจะช่วยระบุระเบียนที่มีอยู่ในตารางหนึ่ง ไม่ใช่ในตารางอื่น ในขณะที่ยังคงรักษาระเบียนที่ซ้ำกันไว้

ใช้แบบสอบถามที่แสดงให้เห็นดังต่อไปนี้:

เลือก
พนักงาน_id,
ชื่อจริง,
นามสกุล,
แผนก,
เงินเดือน
จาก
-
เลือก
พนักงาน_id,
ชื่อจริง,
นามสกุล,
แผนก,
เงินเดือน
จาก
ตัวอย่าง_tb1
ยูเนี่ยนทั้งหมด
เลือก
พนักงาน_id,
ชื่อจริง,
นามสกุล,
แผนก,
เงินเดือน
จาก
ตัวอย่าง_tb2
- AS รวม_ข้อมูล
จัดกลุ่มตาม
พนักงาน_id,
ชื่อจริง,
นามสกุล,
แผนก,
เงินเดือน
มี
นับ - - - - 1 -

ในตัวอย่างที่กำหนด เราใช้ตัวดำเนินการ UNION ALL เพื่อรวมข้อมูลจากทั้งสองตารางโดยยังคงเก็บข้อมูลที่ซ้ำกันไว้

จากนั้นเราใช้ GROUP BY clause เพื่อจัดกลุ่มข้อมูลที่รวมกันตามคอลัมน์ทั้งหมด สุดท้ายนี้ เราใช้ส่วนคำสั่ง HAVING เพื่อให้แน่ใจว่าเลือกเฉพาะระเบียนที่มีการนับหนึ่ง (ไม่มีรายการซ้ำ) เท่านั้น

เอาท์พุท:

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

เปรียบเทียบสองตารางโดยใช้ INNER JOIN

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

ใช้แบบสอบถามต่อไปนี้เป็นตัวอย่าง:

เลือก
ตัวอย่าง_tb1. -
จาก
ตัวอย่าง_tb1
เข้าร่วมภายใน Sample_tb2 เปิด
Sample_tb1.employee_id = ตัวอย่าง_tb2.employee_id;

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

บทสรุป

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