Võrrelge kahte tabelit SQL-is

Vorrelge Kahte Tabelit Sql Is



Andmete võrdlemine SQL-is on tavaline ülesanne, millega iga andmebaasi arendaja aeg-ajalt kokku puutub. Õnneks on andmete võrdlus väga erinevates vormingutes, näiteks sõnasõnaline võrdlus, Boole'i ​​võrdlus jne.

Üks reaalse maailma andmete võrdlemise stsenaariume, millega võite kokku puutuda, on aga kahe tabeli võrdlemine. See mängib olulist rolli sellistes ülesannetes nagu andmete valideerimine, vigade tuvastamine, dubleerimine või andmete terviklikkuse tagamine.







Selles õpetuses uurime kõiki erinevaid meetodeid ja tehnikaid, mida saame kasutada kahe andmebaasi tabeli võrdlemiseks SQL-is.



Näidisandmete seadistus

Enne igasse meetodisse sukeldumist seadistame tutvustamise eesmärgil põhiandmete seadistus.



Meil on kaks tabelit näidisandmetega, nagu on näidatud näites.





Näidistabel 1:

Järgmine sisaldab päringuid esimese tabeli loomiseks ja näidisandmete tabelisse lisamiseks:



LOO TABEL sample_tb1 (
töötaja_id INT PRIMARY KEY AUTO_INCREMENT,
eesnimi VARCHAR ( viiskümmend ) ,
perekonnanimi VARCHAR ( viiskümmend ) ,
osakond VARCHAR ( viiskümmend ) ,
palk KOMNEMAALNE ( 10 , 2 )
) ;

INSERT INTO sample_tb1 ( eesnimi, perekonnanimi, osakond, palk )
VÄÄRTUSED
( 'Penelope' , 'Chase' , 'HR' , 55000.00 ) ,
( 'Matthew' , 'Puur' , 'IT' , 60000.00 ) ,
( 'Jeniffer' , 'Davis' , 'Finants' , 50000.00 ) ,
( 'Kirsten' , 'Fawcet' , 'IT' , 62000.00 ) ,
( 'Cameron' , 'kuluraha' , 'Finants' , 48000.00 ) ;

See peaks looma uue tabeli nimega 'sample_tb1', mis sisaldab erinevat teavet, nagu nimed, osakond ja palk.

Saadud tabel on järgmine:

Näidistabel 2:

Jätkame ja loome kaks näidistabelit. Oletame, et see on esimese tabeli varukoopia. Saame luua tabeli ja sisestada näidisandmed, nagu on näidatud järgmiselt:

LOO TABEL sample_tb2 (
töötaja_id INT PRIMARY KEY AUTO_INCREMENT,
eesnimi VARCHAR ( viiskümmend ) ,
perekonnanimi VARCHAR ( viiskümmend ) ,
osakond VARCHAR ( viiskümmend ) ,
palk KOMNEMAALNE ( 10 , 2 )
) ;
INSERT INTO sample_tb2 ( eesnimi, perekonnanimi, osakond, palk )
VÄÄRTUSED
( 'Penelope' , 'Chase' , 'HR' , 55000.00 ) ,
( 'Matthew' , 'Puur' , 'IT' , 60000.00 ) ,
( 'Jeniffer' , 'Davis' , 'Finants' , 50000.00 ) ,
( 'Kirsten' , 'Fawcet' , 'IT' , 62000.00 ) ,
( 'Audrey' , 'Dekaan' , 'Finants' , 48000.00 ) ;

See peaks looma tabeli ja sisestama näidisandmed, nagu on kirjeldatud eelmises päringus. Saadud tabel on järgmine:

Võrrelge kahte tabelit, kasutades va

Üks levinumaid viise kahe tabeli võrdlemiseks SQL-is on operaatori EXCEPT kasutamine. See otsib read, mis on esimeses tabelis olemas, kuid mitte teises tabelis.

Saame seda kasutada proovitabelitega võrdlemiseks järgmiselt.

VALI *
FROM sample_tb1
va
VALI *
FROM sample_tb2;

Selles näites tagastab operaator EXCEPT kõik esimese päringu (näidis_tb1) erinevad read, mida teises päringus (proovi_tb2) ei kuvata.

Võrrelge kahte tabelit, kasutades Unioni

Teine meetod, mida saame kasutada, on UNION operaator koos klausliga GROUP BY. See aitab tuvastada ühes tabelis olevaid kirjeid, mitte teises, säilitades samas topeltkirjed.

Võtke päring, mida on näidatud järgmises:

VALI
töötaja ID,
eesnimi,
perekonnanimi,
osakond,
palk
FROM
(
VALI
töötaja ID,
eesnimi,
perekonnanimi,
osakond,
palk
FROM
näidis_tb1
LIIT KÕIK
VALI
töötaja ID,
eesnimi,
perekonnanimi,
osakond,
palk
FROM
proovi_tb2
) AS kombineeritud_andmed
GROUP BY
töötaja ID,
eesnimi,
perekonnanimi,
osakond,
palk
OMAMINE
COUNT ( * ) = 1 ;

Antud näites kasutame mõlema tabeli andmete kombineerimiseks operaatorit UNION ALL, säilitades samal ajal duplikaadid.

Seejärel kasutame klauslit GROUP BY, et rühmitada kombineeritud andmed kõigi veergude järgi. Lõpuks kasutame HAVING-klauslit tagamaks, et valitud on ainult kirjed, mille arv on üks (duplikaate pole).

Väljund:

See meetod on veidi keerulisem, kuid see annab palju parema ülevaate, kuna saate tegelikud andmed, mis mõlemast tabelist puuduvad.

Võrrelge kahte tabelit kasutades INNER JOIN

Kui olete mõelnud, siis miks mitte kasutada INNER JOIN'i? Oleksid asja juures. Tabelite võrdlemiseks ja tavaliste kirjete leidmiseks saame kasutada INNER JOIN-i.

Võtke näiteks järgmine päring:

VALI
proovi_tb1. *
FROM
proovi_tb1
INNER JOIN sample_tb2 ON
proovi_tb1.töötaja_id = proovi_tb2.töötaja_id;

Selles näites kasutame SQL INNER JOIN-i, et leida antud veeru põhjal mõlemas tabelis olevad kirjed. Kuigi see toimib, võib see mõnikord olla eksitav, kuna te pole kindel, kas andmed puuduvad või on mõlemas tabelis või ainult ühes.

Järeldus

Selles õpetuses õppisime tundma kõiki meetodeid ja tehnikaid, mida saame kasutada kahe tabeli võrdlemiseks SQL-is.