مقارنة جدولين في SQL

Mqarnt Jdwlyn Fy Sql



تعد مقارنة البيانات في SQL مهمة شائعة سيواجهها كل مطور قاعدة بيانات من حين لآخر. لحسن الحظ، تأتي مقارنة البيانات في مجموعة واسعة من التنسيقات مثل المقارنة الحرفية، والمقارنة المنطقية، وما إلى ذلك.

ومع ذلك، أحد سيناريوهات مقارنة البيانات الواقعية التي قد تواجهها هو المقارنة بين جدولين. إنه يلعب دورًا حاسمًا في مهام مثل التحقق من صحة البيانات أو تحديد الأخطاء أو الازدواجية أو ضمان سلامة البيانات.







في هذا البرنامج التعليمي، سوف نستكشف جميع الأساليب والتقنيات المختلفة التي يمكننا استخدامها لمقارنة جدولي قاعدة بيانات في SQL.



إعداد بيانات العينة

قبل أن نتعمق في كل طريقة من الطرق، دعونا نقوم بإعداد إعداد أساسي للبيانات لأغراض العرض التوضيحي.



لدينا جدولان يحتويان على بيانات نموذجية كما هو موضح في المثال.





نموذج الجدول 1:

يحتوي ما يلي على الاستعلامات الخاصة بإنشاء الجدول الأول وإدراج البيانات النموذجية في الجدول:



إنشاء جدول Sample_tb1 (
user_id INT المفتاح الأساسي AUTO_INCREMENT،
الاسم الأول VARCHAR ( خمسون ) ,
اسم العائلة VARCHAR ( خمسون ) ,
قسم فارتشار ( خمسون ) ,
الراتب العشري ( 10 , 2 )
) ;

أدخل في Sample_tb1 ( الاسم الأول، الاسم الأخير، القسم، الراتب )
قيم
( 'بينيلوبي' , 'يطارد' , 'الموارد البشرية' , 55000.00 ) ,
( 'ماثيو' , 'قفص' , 'هو - هي' , 60000.00 ) ,
( 'جينيفر' , 'ديفيس' , 'تمويل' , 50000.00 ) ,
( 'كيرستن' , 'صنبور' , 'هو - هي' , 62000.00 ) ,
( 'كاميرون' , 'كوستنر' , 'تمويل' , 48000.00 ) ;

من المفترض أن يؤدي ذلك إلى إنشاء جدول جديد يسمى 'sample_tb1' يحتوي على معلومات متنوعة مثل الأسماء والقسم والراتب.

الجدول الناتج هو كما يلي:

نموذج الجدول 2:

دعونا نمضي قدمًا وننشئ جدولين نموذجيين. افترض أن هذه نسخة احتياطية من الجدول الأول. يمكننا إنشاء الجدول وإدراج نموذج بيانات كما هو موضح في الشكل التالي:

إنشاء جدول Sample_tb2 (
user_id INT المفتاح الأساسي AUTO_INCREMENT،
الاسم الأول VARCHAR ( خمسون ) ,
اسم العائلة VARCHAR ( خمسون ) ,
قسم فارتشار ( خمسون ) ,
الراتب العشري ( 10 , 2 )
) ;
أدخل في Sample_tb2 ( الاسم الأول، الاسم الأخير، القسم، الراتب )
قيم
( 'بينيلوبي' , 'يطارد' , 'الموارد البشرية' , 55000.00 ) ,
( 'ماثيو' , 'قفص' , 'هو - هي' , 60000.00 ) ,
( 'جينيفر' , 'ديفيس' , 'تمويل' , 50000.00 ) ,
( 'كيرستن' , 'صنبور' , 'هو - هي' , 62000.00 ) ,
( 'أودري' , 'عميد' , 'تمويل' , 48000.00 ) ;

يجب أن يؤدي ذلك إلى إنشاء جدول وإدراج بيانات العينة كما هو محدد في الاستعلام السابق. الجدول الناتج هو كما يلي:

مقارنة جدولين باستخدام باستثناء

إحدى الطرق الأكثر شيوعًا لمقارنة جدولين في SQL هي استخدام عامل التشغيل EXCEPT. يؤدي هذا إلى البحث عن الصفوف الموجودة في الجدول الأول ولكن ليس في الجدول الثاني.

ويمكننا استخدامه لإجراء مقارنة مع نماذج الجداول كما يلي:

يختار *
من النموذج_tb1
يستثني
يختار *
من Sample_tb2;

في هذا المثال، يقوم عامل التشغيل EXCEPT بإرجاع كافة الصفوف المميزة من الاستعلام الأول (sample_tb1) التي لا تظهر في الاستعلام الثاني (sample_tb2).

مقارنة جدولين باستخدام Union

الطريقة الثانية التي يمكننا استخدامها هي عامل التشغيل UNION بالتزامن مع جملة GROUP BY. ويساعد ذلك في تحديد السجلات الموجودة في جدول واحد، وليس في الجدول الآخر، مع الحفاظ على السجلات المكررة.

خذ الاستعلام الموضح في ما يلي:

يختار
هوية الموظف،
الاسم الأول،
اسم العائلة،
قسم،
مرتب
من
(
يختار
هوية الموظف،
الاسم الأول،
اسم العائلة،
قسم،
مرتب
من
Sample_tb1
الاتحاد الكل
يختار
هوية الموظف،
الاسم الأول،
اسم العائلة،
قسم،
مرتب
من
Sample_tb2
) AS Combined_data
مجموعة من
هوية الموظف،
الاسم الأول،
اسم العائلة،
قسم،
مرتب
نأخذ
عدد ( * ) = 1 ;

في المثال الموضح، نستخدم عامل التشغيل UNION ALL لدمج البيانات من كلا الجدولين مع الاحتفاظ بالتكرارات.

نستخدم بعد ذلك جملة GROUP BY لتجميع البيانات المجمعة حسب جميع الأعمدة. وأخيرًا، نستخدم جملة HAVING لضمان تحديد السجلات التي تحتوي على عدد واحد فقط (بدون تكرارات).

انتاج:

هذه الطريقة أكثر تعقيدًا بعض الشيء ولكنها توفر رؤية أفضل بكثير حيث تحصل على البيانات الفعلية المفقودة من كلا الجدولين.

مقارنة جدولين باستخدام INNER JOIN

إذا كنت تفكر، لماذا لا تستخدم INNER JOIN؟ سوف تكون على النقطة. يمكننا استخدام INNER JOIN لمقارنة الجداول والعثور على السجلات المشتركة.

خذ الاستعلام التالي على سبيل المثال:

يختار
Sample_tb1. *
من
Sample_tb1
الانضمام الداخلي Sample_tb2 ON
Sample_tb1.employee_id = Sample_tb2.employee_id;

في هذا المثال، نستخدم SQL INNER JOIN للعثور على السجلات الموجودة في كلا الجدولين بناءً على عمود معين. على الرغم من نجاح ذلك، إلا أنه قد يكون مضللاً في بعض الأحيان لأنك غير متأكد مما إذا كانت البيانات مفقودة بالفعل أو موجودة في كلا الجدولين أو في جدول واحد فقط.

خاتمة

في هذا البرنامج التعليمي، تعلمنا عن جميع الأساليب والتقنيات التي يمكننا استخدامها لمقارنة جدولين في SQL.