השווה בין שתי טבלאות ב-SQL

Hswwh Byn Sty Tbl Wt B Sql



השוואת נתונים ב-SQL היא משימה נפוצה שכל מפתח מסדי נתונים יתקל בה מדי פעם. למרבה המזל, השוואת נתונים מגיעה במגוון רחב של פורמטים כמו השוואה מילולית, השוואה בוליאנית וכו'.

עם זאת, אחד מתרחישי השוואת הנתונים בעולם האמיתי שאתה עלול להיתקל בהם הוא השוואה בין שתי טבלאות. הוא ממלא תפקיד מכריע במשימות כגון אימות נתונים, זיהוי שגיאות, שכפול או הבטחת שלמות הנתונים.







במדריך זה, נחקור את כל השיטות והטכניקות השונות שאנו יכולים להשתמש כדי להשוות בין שתי טבלאות מסד נתונים ב-SQL.



הגדרת נתונים לדוגמה

לפני שנצלול לתוך כל אחת מהשיטות, הרשו לנו להגדיר מערך נתונים בסיסי למטרות הדגמה.



יש לנו שתי טבלאות עם נתונים לדוגמה כפי שמוצג בדוגמה.





טבלה 1 לדוגמה:

להלן השאילתות ליצירת הטבלה הראשונה והכנסת הנתונים לדוגמה לטבלה:



CREATE TABLE sample_tb1 (
עובד_מזהה INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR ( חמישים ) ,
last_name VARCHAR ( חמישים ) ,
מחלקה VARCHAR ( חמישים ) ,
שכר דצימל ( 10 , 2 )
) ;

INSERT INTO sample_tb1 ( first_name, last_name, מחלקה, משכורת )
ערכים
( 'פנלופה' , 'מִרדָף' , 'HR' , 55000.00 ) ,
( 'מתי' , 'כְּלוּב' , 'זה' , 60000.00 ) ,
( 'ג'ניפר' , 'דייוויס' , 'לְמַמֵן' , 50000.00 ) ,
( 'קירסטן' , 'פאוסט' , 'זה' , 62000.00 ) ,
( 'קמרון' , 'מחיר' , 'לְמַמֵן' , 48000.00 ) ;

זה אמור ליצור טבלה חדשה בשם 'sample_tb1' עם מידע שונה כגון שמות, מחלקה ומשכורת.

הטבלה המתקבלת היא כדלקמן:

טבלה 2 לדוגמה:

הבה נמשיך וניצור שתי טבלאות לדוגמה. נניח שזהו עותק גיבוי של הטבלה הראשונה. אנו יכולים ליצור את הטבלה ולהוסיף נתונים לדוגמה כפי שמוצג בקטע הבא:

CREATE TABLE sample_tb2 (
עובד_מזהה INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR ( חמישים ) ,
last_name VARCHAR ( חמישים ) ,
מחלקה VARCHAR ( חמישים ) ,
שכר דצימל ( 10 , 2 )
) ;
INSERT INTO sample_tb2 ( first_name, last_name, מחלקה, משכורת )
ערכים
( 'פנלופה' , 'מִרדָף' , 'HR' , 55000.00 ) ,
( 'מתי' , 'כְּלוּב' , 'זה' , 60000.00 ) ,
( 'ג'ניפר' , 'דייוויס' , 'לְמַמֵן' , 50000.00 ) ,
( 'קירסטן' , 'פאוסט' , 'זה' , 62000.00 ) ,
( 'אודרי' , 'דֵיקָן' , 'לְמַמֵן' , 48000.00 ) ;

זה אמור ליצור טבלה ולהוסיף את הנתונים לדוגמה כפי שצוין בשאילתה הקודמת. הטבלה המתקבלת היא כדלקמן:

השווה שתי טבלאות באמצעות Except

אחת הדרכים הנפוצות ביותר להשוות בין שתי טבלאות ב-SQL היא שימוש באופרטור EXCEPT. זה מוצא את השורות הקיימות בטבלה הראשונה אך לא בטבלה השנייה.

אנו יכולים להשתמש בו כדי לבצע השוואה עם הטבלאות לדוגמה באופן הבא:

בחר *
FROM sample_tb1
מלבד
בחר *
FROM sample_tb2;

בדוגמה זו, האופרטור EXCEPT מחזיר את כל השורות הנבדלות מהשאילתה הראשונה (sample_tb1) שאינן מופיעות בשאילתה השנייה (sample_tb2).

השווה בין שני טבלאות באמצעות Union

השיטה השנייה שבה אנו יכולים להשתמש היא האופרטור UNION בשילוב עם פסקת GROUP BY. זה עוזר לזהות את הרשומות הקיימות בטבלה אחת, לא בטבלה השנייה, תוך שמירה על הרשומות הכפולות.

קח את השאילתה המודגם בקטע הבא:

בחר
כרטיס עובד,
שם פרטי,
שם משפחה,
מַחלָקָה,
שכר
מ
(
בחר
כרטיס עובד,
שם פרטי,
שם משפחה,
מַחלָקָה,
שכר
מ
sample_tb1
איחוד הכל
בחר
כרטיס עובד,
שם פרטי,
שם משפחה,
מַחלָקָה,
שכר
מ
sample_tb2
) AS combined_data
GROUP BY
כרטיס עובד,
שם פרטי,
שם משפחה,
מַחלָקָה,
שכר
יש
לספור ( * ) = 1 ;

בדוגמה הנתונה, אנו משתמשים באופרטור UNION ALL כדי לשלב את הנתונים משתי הטבלאות תוך שמירה על הכפילויות.

לאחר מכן אנו משתמשים בסעיף GROUP BY כדי לקבץ את הנתונים המשולבים לפי כל העמודות. לבסוף, אנו משתמשים בסעיף HAVING כדי להבטיח שרק הרשומות עם ספירה של אחד (ללא כפילויות) נבחרות.

תְפוּקָה:

שיטה זו היא קצת יותר מורכבת אך היא מספקת תובנה הרבה יותר טובה מכיוון שאתה מקבל את הנתונים בפועל שחסרים בשתי הטבלאות.

השווה בין שתי טבלאות באמצעות INNER JOIN

אם חשבתם, למה שלא תשתמשו ב-INNER JOIN? היית בנקודה. אנו יכולים להשתמש ב-INNER JOIN כדי להשוות את הטבלאות ולמצוא את הרשומות הנפוצות.

קחו למשל את השאילתה הבאה:

בחר
sample_tb1. *
מ
sample_tb1
INNER JOIN sample_tb2 פועל
sample_tb1.employee_id = sample_tb2.employee_id;

בדוגמה זו, אנו משתמשים ב-SQL INNER JOIN כדי למצוא את הרשומות הקיימות בשתי הטבלאות בהתבסס על עמודה נתונה. למרות שזה עובד, זה לפעמים יכול להיות מטעה מכיוון שאינך בטוח אם הנתונים באמת חסרים או קיימים בשתי הטבלאות או רק באחת.

סיכום

במדריך זה, למדנו על כל השיטות והטכניקות שאנו יכולים להשתמש כדי להשוות בין שתי טבלאות ב-SQL.