Sammenlign to tabeller i SQL

Sammenlign To Tabeller I Sql



Datasammenligning i SQL er en vanlig oppgave som enhver databaseutvikler vil komme over av og til. Heldigvis kommer datasammenligning i en rekke formater som bokstavelig sammenligning, boolsk sammenligning, etc.

Et av scenariene for datasammenligning i den virkelige verden du kan støte på, er sammenligning mellom to tabeller. Den spiller en avgjørende rolle i oppgaver som datavalidering, feilidentifikasjon, duplisering eller sikring av dataintegritet.







I denne opplæringen vil vi utforske alle de forskjellige metodene og teknikkene vi kan bruke for å sammenligne to databasetabeller i SQL.



Eksempel på dataoppsett

Før vi dykker inn i hver av metodene, la oss sette opp et grunnleggende dataoppsett for demonstrasjonsformål.



Vi har to tabeller med eksempeldata som vist i eksempelet.





Eksempeltabell 1:

Følgende inneholder spørringene for å lage den første tabellen og sette inn eksempeldataene i tabellen:



CREATE TABLE sample_tb1 (
ansatt_id INT PRIMARY KEY AUTO_INCREMENT,
fornavn VARCHAR ( femti ) ,
etternavn VARCHAR ( femti ) ,
avdeling VARCHAR ( femti ) ,
lønn DESIMAL ( 10 , 2 )
) ;

INSERT INTO sample_tb1 ( fornavn, etternavn, avdeling, lønn )
VERDIER
( 'Penelope' , 'Jage' , 'HR' , 55 000,00 ) ,
( 'Matthew' , 'Bur' , 'DEN' , 60 000,00 ) ,
( 'Jeniffer' , 'Davis' , 'Finansiere' , 50 000,00 ) ,
( 'Kirsten' , 'Fawcet' , 'DEN' , 62000,00 ) ,
( 'Cameron' , 'kostner' , 'Finansiere' , 48000,00 ) ;

Dette bør lage en ny tabell kalt 'sample_tb1' med forskjellig informasjon som navn, avdeling og lønn.

Den resulterende tabellen er som følger:

Eksempeltabell 2:

La oss fortsette og lage to eksempeltabeller. Anta at dette er en sikkerhetskopi av den første tabellen. Vi kan lage tabellen og sette inn eksempeldata som vist i følgende:

CREATE TABLE sample_tb2 (
ansatt_id INT PRIMARY KEY AUTO_INCREMENT,
fornavn VARCHAR ( femti ) ,
etternavn VARCHAR ( femti ) ,
avdeling VARCHAR ( femti ) ,
lønn DESIMAL ( 10 , 2 )
) ;
INSERT INTO sample_tb2 ( fornavn, etternavn, avdeling, lønn )
VERDIER
( 'Penelope' , 'Jage' , 'HR' , 55 000,00 ) ,
( 'Matthew' , 'Bur' , 'DEN' , 60 000,00 ) ,
( 'Jeniffer' , 'Davis' , 'Finansiere' , 50 000,00 ) ,
( 'Kirsten' , 'Fawcet' , 'DEN' , 62000,00 ) ,
( 'Audrey' , 'Dekanus' , 'Finansiere' , 48000,00 ) ;

Dette bør opprette en tabell og sette inn eksempeldataene som spesifisert i forrige spørring. Den resulterende tabellen er som følger:

Sammenlign to tabeller med Unntatt

En av de vanligste måtene å sammenligne to tabeller i SQL er å bruke EXCEPT-operatoren. Dette finner radene som finnes i den første tabellen, men ikke i den andre tabellen.

Vi kan bruke den til å utføre en sammenligning med eksempeltabellene som følger:

PLUKKE UT *
FRA sample_tb1
UNNTATT
PLUKKE UT *
FROM sample_tb2;

I dette eksemplet returnerer operatoren EXCEPT alle distinkte rader fra den første spørringen (sample_tb1) som ikke vises i den andre spørringen (sample_tb2).

Sammenlign to tabeller ved å bruke Union

Den andre metoden vi kan bruke er UNION-operatøren i forbindelse med GROUP BY-leddet. Dette hjelper til med å identifisere postene som finnes i den ene tabellen, ikke i den andre, samtidig som de dupliserte postene bevares.

Ta spørringen som vises i følgende:

PLUKKE UT
Ansatt ID,
fornavn,
etternavn,
avdeling,
lønn
FRA
(
PLUKKE UT
Ansatt ID,
fornavn,
etternavn,
avdeling,
lønn
FRA
sample_tb1
UNION ALLE
PLUKKE UT
Ansatt ID,
fornavn,
etternavn,
avdeling,
lønn
FRA
sample_tb2
) AS kombinert_data
GRUPPE AV
Ansatt ID,
fornavn,
etternavn,
avdeling,
lønn
HA
TELLE ( * ) = 1 ;

I det gitte eksemplet bruker vi UNION ALL-operatoren til å kombinere dataene fra begge tabellene mens du beholder duplikatene.

Vi bruker deretter GROUP BY-leddet for å gruppere de kombinerte dataene etter alle kolonnene. Til slutt bruker vi HAVING-klausulen for å sikre at kun postene med et antall på én (ingen duplikater) velges.

Produksjon:

Denne metoden er litt mer kompleks, men den gir en mye bedre innsikt ettersom du får de faktiske dataene som mangler fra begge tabellene.

Sammenlign to tabeller ved å bruke INNER JOIN

Hvis du har tenkt, hvorfor ikke bruke en INNER JOIN? Du ville vært på punkt. Vi kan bruke en INNER JOIN for å sammenligne tabellene og finne de vanlige postene.

Ta for eksempel følgende spørring:

PLUKKE UT
sample_tb1. *
FRA
sample_tb1
INNER JOIN sample_tb2 PÅ
sample_tb1.employee_id = sample_tb2.employee_id;

I dette eksemplet bruker vi en SQL INNER JOIN for å finne postene som finnes i begge tabellene basert på en gitt kolonne. Selv om dette fungerer, kan det noen ganger være misvisende siden du ikke er sikker på om dataene faktisk mangler eller finnes i begge tabellene eller bare i den ene.

Konklusjon

I denne opplæringen lærte vi om alle metodene og teknikkene vi kan bruke for å sammenligne to tabeller i SQL.