Palyginkite dvi lenteles SQL

Palyginkite Dvi Lenteles Sql



Duomenų palyginimas SQL yra įprasta užduotis, su kuria retkarčiais susidurs kiekvienas duomenų bazių kūrėjas. Laimei, duomenų palyginimas pateikiamas įvairiais formatais, tokiais kaip tiesioginis palyginimas, Būlio palyginimas ir kt.

Tačiau vienas iš realaus pasaulio duomenų palyginimo scenarijų, su kuriuo galite susidurti, yra dviejų lentelių palyginimas. Jis atlieka labai svarbų vaidmenį atliekant tokias užduotis kaip duomenų patvirtinimas, klaidų nustatymas, dubliavimas arba duomenų vientisumo užtikrinimas.







Šioje pamokoje išnagrinėsime visus įvairius metodus ir metodus, kuriuos galime panaudoti palygindami dvi duomenų bazių lenteles SQL.



Duomenų sąrankos pavyzdys

Prieš pasinerdami į kiekvieną metodą, demonstravimo tikslais nustatykime pagrindinę duomenų sąranką.



Turime dvi lenteles su duomenų pavyzdžiais, kaip parodyta pavyzdyje.





1 lentelės pavyzdys:

Toliau pateikiamos pirmosios lentelės kūrimo ir pavyzdinių duomenų įterpimo į lentelę užklausos:



KURTI LENTELĘ sample_tb1 (
darbuotojo_id INT PRIMARY KEY AUTO_INCREMENT,
vardas VARCHAR ( penkiasdešimt ) ,
pavardė VARCHAR ( penkiasdešimt ) ,
skyrius VARCHAR ( penkiasdešimt ) ,
atlyginimas DECIMAL ( 10 , 2 )
) ;

INSERT INTO sample_tb1 ( vardas, pavardė, skyrius, atlyginimas )
VERTYBĖS
( 'Penelopė' , 'Vytis' , 'HR' , 55000,00 ) ,
( 'Matjus' , 'narvelis' , 'TAI' , 60000,00 ) ,
( 'Jeniffer' , 'Deivis' , 'Finansai' , 50000,00 ) ,
( 'Kirsten' , 'Fawcet' , 'TAI' , 62000,00 ) ,
( 'Kameronas' , 'kainuotojas' , 'Finansai' , 48000,00 ) ;

Tai turėtų sukurti naują lentelę pavadinimu „sample_tb1“ su įvairia informacija, pvz., vardais, vardais, skyriumi ir atlyginimu.

Gauta lentelė yra tokia:

2 lentelės pavyzdys:

Tęskime ir sukurkime dvi pavyzdines lenteles. Tarkime, kad tai yra pirmosios lentelės atsarginė kopija. Galime sukurti lentelę ir įterpti duomenų pavyzdį, kaip parodyta toliau:

KURTI LENTELĘ sample_tb2 (
darbuotojo_id INT PRIMARY KEY AUTO_INCREMENT,
vardas VARCHAR ( penkiasdešimt ) ,
pavardė VARCHAR ( penkiasdešimt ) ,
skyrius VARCHAR ( penkiasdešimt ) ,
atlyginimas DECIMAL ( 10 , 2 )
) ;
INSERT INTO sample_tb2 ( vardas, pavardė, skyrius, atlyginimas )
VERTYBĖS
( 'Penelopė' , 'Vytis' , 'HR' , 55000,00 ) ,
( 'Matjus' , 'narvelis' , 'TAI' , 60000,00 ) ,
( 'Jeniffer' , 'Deivis' , 'Finansai' , 50000,00 ) ,
( 'Kirsten' , 'Fawcet' , 'TAI' , 62000,00 ) ,
( 'Audrey' , 'dekanas' , 'Finansai' , 48000,00 ) ;

Tai turėtų sukurti lentelę ir įterpti pavyzdinius duomenis, kaip nurodyta ankstesnėje užklausoje. Gauta lentelė yra tokia:

Palyginkite dvi lenteles naudodami Išskyrus

Vienas iš labiausiai paplitusių dviejų SQL lentelių palyginimo būdų yra operatoriaus EXCEPT naudojimas. Taip surandamos eilutės, kurios yra pirmoje lentelėje, bet nėra antroje lentelėje.

Mes galime jį naudoti norėdami atlikti palyginimą su pavyzdinėmis lentelėmis taip:

PASIRINKTI *
FROM sample_tb1
IŠSKYRUS
PASIRINKTI *
FROM sample_tb2;

Šiame pavyzdyje operatorius EXCEPT grąžina visas skirtingas pirmosios užklausos eilutes (sample_tb1), kurių nėra antroje užklausoje (sample_tb2).

Palyginkite dvi lenteles naudodami sąjungą

Antrasis metodas, kurį galime naudoti, yra UNION operatorius kartu su sąlyga GROUP BY. Tai padeda identifikuoti įrašus, esančius vienoje lentelėje, o ne kitoje, išsaugant pasikartojančius įrašus.

Paimkite užklausą, kuri parodyta toliau:

PASIRINKTI
Darbuotojo ID,
Pirmas vardas,
pavardė,
skyrius,
atlyginimas
NUO
(
PASIRINKTI
Darbuotojo ID,
Pirmas vardas,
pavardė,
skyrius,
atlyginimas
NUO
sample_tb1
SĄJUNGOS VISI
PASIRINKTI
Darbuotojo ID,
Pirmas vardas,
pavardė,
skyrius,
atlyginimas
NUO
sample_tb2
) AS kombinuoti_duomenys
GRUPUOTI PAGAL
Darbuotojo ID,
Pirmas vardas,
pavardė,
skyrius,
atlyginimas
TURIMAS
COUNT ( * ) = 1 ;

Pateiktame pavyzdyje mes naudojame operatorių UNION ALL norėdami sujungti abiejų lentelių duomenis, išsaugodami dublikatus.

Tada mes naudojame sąlygą GROUP BY, kad sugrupuotus duomenis pagal visus stulpelius. Galiausiai, mes naudojame sąlygą HAVING, siekdami užtikrinti, kad būtų pasirinkti tik tie įrašai, kurių skaičius yra vienas (be dublikatų).

Išvestis:

Šis metodas yra šiek tiek sudėtingesnis, tačiau jis suteikia daug geresnę įžvalgą, nes gaunate faktinius duomenis, kurių trūksta abiejose lentelėse.

Palyginkite dvi lenteles naudodami INNER JOIN

Jei galvojote, kodėl gi nepasinaudojus VIDINIU JOIN? Tu būtum tiesi. Norėdami palyginti lenteles ir rasti bendrus įrašus, galime naudoti INNER JOIN.

Paimkite, pavyzdžiui, šią užklausą:

PASIRINKTI
sample_tb1. *
NUO
sample_tb1
INNER JOIN sample_tb2 ON
pavyzdys_tb1.darbuotojo_id = pavyzdys_tb2.darbuotojo_id;

Šiame pavyzdyje mes naudojame SQL INNER JOIN, kad rastume įrašus, esančius abiejose lentelėse pagal nurodytą stulpelį. Nors tai veikia, kartais tai gali būti klaidinanti, nes nesate tikri, ar duomenų iš tikrųjų trūksta, ar jie yra abiejose lentelėse, ar tik vienoje.

Išvada

Šioje pamokoje sužinojome apie visus metodus ir metodus, kuriuos galime panaudoti palygindami dvi lenteles SQL.