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 UTAnsatt 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 UTsample_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.