Porównanie danych w SQL jest częstym zadaniem, z którym od czasu do czasu spotyka się każdy programista baz danych. Na szczęście porównanie danych występuje w wielu różnych formatach, takich jak porównanie dosłowne, porównanie logiczne itp.
Jednak jednym ze scenariuszy porównywania danych w świecie rzeczywistym, z którym możesz się spotkać, jest porównanie dwóch tabel. Odgrywa kluczową rolę w zadaniach takich jak walidacja danych, identyfikacja błędów, duplikacja czy zapewnienie integralności danych.
W tym samouczku omówimy różne metody i techniki, które możemy zastosować do porównania dwóch tabel bazy danych w języku SQL.
Przykładowa konfiguracja danych
Zanim zagłębimy się w każdą z metod, skonfigurujmy podstawową konfigurację danych do celów demonstracyjnych.
Mamy dwie tabele z przykładowymi danymi, jak pokazano w przykładzie.
Przykładowa tabela 1:
Poniżej znajdują się zapytania umożliwiające utworzenie pierwszej tabeli i wstawienie przykładowych danych do tabeli:
UTWÓRZ TABELĘ próbka_tb1 (
id_pracownika INT KLUCZ PODSTAWOWY AUTO_INCREMENT,
imię VARCHAR ( pięćdziesiąt ) ,
nazwisko VARCHAR ( pięćdziesiąt ) ,
dział VARCHAR ( pięćdziesiąt ) ,
wynagrodzenie DZIESIĘTNE ( 10 , 2 )
) ;
WSTAW DO próbki_tb1 ( imię, nazwisko, dział, wynagrodzenie )
WARTOŚCI
( 'Penelopa' , 'Pościg' , „HR” , 55000,00 ) ,
( 'Mateusz' , 'Klatka szybowa' , 'TO' , 60000,00 ) ,
( „Jeniffer” , „Davis” , 'Finanse' , 50000,00 ) ,
( „Kirsten” , „Fawcet” , 'TO' , 62000,00 ) ,
( „Cameron” , „koszt” , 'Finanse' , 48000,00 ) ;
Powinno to spowodować utworzenie nowej tabeli o nazwie „próbka_tb1” zawierającej różne informacje, takie jak nazwiska, dział i wynagrodzenie.
Wynikowa tabela wygląda następująco:
Przykładowa tabela 2:
Kontynuujmy i utwórzmy dwie przykładowe tabele. Załóżmy, że jest to kopia zapasowa pierwszej tabeli. Możemy utworzyć tabelę i wstawić przykładowe dane, jak pokazano poniżej:
UTWÓRZ TABELĘ próbka_tb2 (id_pracownika INT KLUCZ PODSTAWOWY AUTO_INCREMENT,
imię VARCHAR ( pięćdziesiąt ) ,
nazwisko VARCHAR ( pięćdziesiąt ) ,
dział VARCHAR ( pięćdziesiąt ) ,
wynagrodzenie DZIESIĘTNE ( 10 , 2 )
) ;
WSTAW DO próbki_tb2 ( imię, nazwisko, dział, wynagrodzenie )
WARTOŚCI
( 'Penelopa' , 'Pościg' , „HR” , 55000,00 ) ,
( 'Mateusz' , 'Klatka szybowa' , 'TO' , 60000,00 ) ,
( „Jeniffer” , „Davis” , 'Finanse' , 50000,00 ) ,
( „Kirsten” , „Fawcet” , 'TO' , 62000,00 ) ,
( „Audrey” , 'Dziekan' , 'Finanse' , 48000,00 ) ;
Powinno to utworzyć tabelę i wstawić przykładowe dane, jak określono w poprzednim zapytaniu. Wynikowa tabela wygląda następująco:
Porównaj dwie tabele za pomocą wyjątku
Jednym z najczęstszych sposobów porównywania dwóch tabel w SQL jest użycie operatora EXCEPT. Spowoduje to znalezienie wierszy, które istnieją w pierwszej tabeli, ale nie istnieją w drugiej tabeli.
Możemy go użyć do przeprowadzenia porównania z przykładowymi tabelami w następujący sposób:
WYBIERAĆ *Z przykładu_tb1
Z WYJĄTKIEM
WYBIERAĆ *
Z przykładu_tb2;
W tym przykładzie operator EXCEPT zwraca wszystkie odrębne wiersze z pierwszego zapytania (przykład_tb1), które nie pojawiają się w drugim zapytaniu (przykład_tb2).
Porównaj dwie tabele za pomocą Unii
Drugą metodą, którą możemy zastosować, jest operator UNION w połączeniu z klauzulą GROUP BY. Pomaga to zidentyfikować rekordy istniejące w jednej tabeli, a nie w drugiej, zachowując jednocześnie zduplikowane rekordy.
Weźmy zapytanie pokazane poniżej:
WYBIERAĆdowód pracownika,
imię,
nazwisko,
dział,
wynagrodzenie
Z
(
WYBIERAĆ
dowód pracownika,
imię,
nazwisko,
dział,
wynagrodzenie
Z
próbka_tb1
UNIA WSZYSTKICH
WYBIERAĆ
dowód pracownika,
imię,
nazwisko,
dział,
wynagrodzenie
Z
próbka_tb2
) AS połączone_dane
GRUPUJ WEDŁUG
dowód pracownika,
imię,
nazwisko,
dział,
wynagrodzenie
MAJĄCY
LICZYĆ ( * ) = 1 ;
W podanym przykładzie używamy operatora UNION ALL, aby połączyć dane z obu tabel, zachowując duplikaty.
Następnie używamy klauzuli GROUP BY, aby pogrupować połączone dane według wszystkich kolumn. Na koniec używamy klauzuli HAVING, aby mieć pewność, że wybrane zostaną tylko rekordy z liczbą jeden (bez duplikatów).
Wyjście:
Ta metoda jest nieco bardziej złożona, ale zapewnia znacznie lepszy wgląd w dane, których brakuje w obu tabelach.
Porównaj dwie tabele za pomocą INNER JOIN
Jeśli zastanawiałeś się, dlaczego nie zastosować INNER JOIN? Miałbyś rację. Możemy użyć INNER JOIN do porównania tabel i znalezienia wspólnych rekordów.
Weźmy na przykład następujące zapytanie:
WYBIERAĆpróbka_tb1. *
Z
próbka_tb1
ZŁĄCZENIE WEWNĘTRZNE próbka_tb2 WŁ
próbka_tb1.employee_id = próbka_tb2.employee_id;
W tym przykładzie używamy SQL INNER JOIN, aby znaleźć rekordy istniejące w obu tabelach na podstawie danej kolumny. Chociaż to działa, może czasami wprowadzać w błąd, ponieważ nie masz pewności, czy danych faktycznie brakuje, czy są one obecne w obu tabelach, czy tylko w jednej.
Wniosek
W tym samouczku poznaliśmy wszystkie metody i techniki, które możemy zastosować do porównania dwóch tabel w SQL.