Różnica między JOIN a UNION w SQL

You are currently viewing Różnica między JOIN a UNION w SQL

Wstęp

SQL oferuje różne sposoby łączenia danych, ale nie każdy mechanizm działa tak samo. Dwa najczęściej używane sposoby to JOIN i UNION. Oba służą do operowania na wielu tabelach, lecz ich działanie znacząco się różni. W tym wpisie z serii „Szybki strzał” przeanalizujemy, różnicę między JOIN a UNION i kiedy warto z nich korzystać.

Podstawowa różnica między JOIN a UNION

W SQL zarówno JOIN, jak i UNION służą do łączenia danych, ale działają na zupełnie innych zasadach.

  • JOIN służy do łączenia rekordów z różnych tabel na podstawie relacji między nimi. Wynik zapytania zawiera kolumny z obu tabel, powiązane według określonych warunków.
  • UNION pozwala na połączenie wyników dwóch lub więcej zapytań w jeden zestaw wynikowy. Łączone dane muszą mieć taką samą liczbę kolumn i zgodne typy danych.
CechaJOINUNION
Kierunek łączeniaPoziomy (kolumny)Pionowy (wiersze)
WarunkiWymaga klucza łączeniaTaka sama struktura wyników
DuplikatyZależą od typu JOINUNION je usuwa,
UNION ALL nie
Typowe zastosowanieŁączenie danych relacyjnychScalanie raportów/różnych
źródeł
Podstawowa różnica między JOIN a UNION

Przykłady zastosowania

W ramach przykładów będziemy operować na poniższej strukturze tabel:

CREATE TABLE klienci (
    id INT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50),
    telefon VARCHAR(15)
);

CREATE TABLE zamowienia (
    id INT PRIMARY KEY,
    klient_id INT,
    nazwa VARCHAR(100),
    FOREIGN KEY (klient_id) REFERENCES klienci(id)
);

CREATE TABLE pracownicy (
    id INT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50)
);

Przykład JOIN – pobieranie powiązanych danych

Chcemy pobrać listę klientów oraz nazwę ich zamówienia z tabel klienci i zamowienia.

SELECT klienci.imie, klienci.nazwisko, zamowienia.nazwa
FROM klienci
JOIN zamowienia ON klienci.id = zamowienia.klient_id;

Tutaj JOIN dodatkowo pobiera kolumnę nazwa z tabeli zamowienia, aby uzyskać dodatkowo, oprócz klienta, nazwę jego zamówienia. Mamy tutaj relacje pomiędzy identyfikatorem klienta, a identyfikatorem klienta ustawionym w tabeli zamowienia. Dzięki temu możemy użyć JOIN pomiędzy tabelami.

Możemy oczywiście też w drugą stronę łączyć. Pobieramy dane o zamówieniach oraz chcemy dla każdego zamówienia wyciągnąć też numer telefonu klienta, który to zamówienie złożył:

SELECT z.*, k.telefon 
FROM zamowienia z
JOIN klienci k on k.id = z.klient_id;

Przykład UNION – scalanie wyników z różnych tabel

UNION stosujemy wtedy, gdy chcemy pobrać dane z kilku tabel, które w jakimś stopniu, merytorycznie są do siebie w jakiś sposób podobne. Poniżej przykład pobrania danych o wszystkich osobach z tabel klienci i pracownicy wraz z oznaczeniem jaką pełnią rolę posortowanymi po imieniu.

SELECT imie, nazwisko, 'Klient' AS rola FROM klienci
UNION
SELECT imie, nazwisko, 'Pracownik' FROM pracownicy
order by imie;

Przykład JOIN i UNION w jednym zapytaniu

Oczywiście nic nie stoi na przeszkodzie, aby używać JOIN i UNION w jednym zapytaniu SQL. Możemy najpierw połączyć tabele za pomocą JOIN, a następnie scalić wyniki przy użyciu UNION. Przykład zastosowania poniżej.

SELECT k.imie, k.nazwisko, z.nazwa 
FROM klienci k
JOIN zamowienia z ON k.id = z.klient_id
UNION
SELECT p.imie, p.nazwisko, NULL FROM pracownicy p;

W tym przypadku JOIN łączy dane z tabel klienci i zamowienia, a UNION dodaje do wyniku dodatkowe rekordy z tabeli pracownicy, w której nie ma kolumny nazwa zamówienia, więc używamy NULL dla zachowania zgodności struktury wynikowej.

Kiedy używać JOIN, a kiedy UNION?

JOIN – kiedy używać?

  • Gdy potrzebujemy połączyć powiązane dane z różnych tabel. Istnieje relacja między tabelami taka, że jesteśmy wstanie je powiązać pomiędzy sobą.
  • Jeśli chcemy zobaczyć zależności między tabelami (np. zamówienia klientów, produkty w kategoriach).

UNION – kiedy używać?

  • Gdy chcemy połączyć wyniki z różnych tabel lub zapytań.
  • Kiedy dane nie mają bezpośredniego związku kluczami, ale mają tę samą strukturę.
  • Jeśli potrzebujemy usunąć duplikaty (lub zostawić je w przypadku UNION ALL).

Podsumowanie

Różnica między JOIN a UNION w SQL jest istotna, ponieważ wpływa na sposób łączenia danych i optymalizację zapytań. Każdy z tych mechanizmów ma swoje konkretne zastosowanie i warto znać ich specyfikę, aby pisać bardziej efektywny kod SQL.

Najważniejsza różnica: JOIN łączy dane z różnych tabel w ramach jednego wiersza, a UNION scala wyniki wielu zapytań w jedną tabelę wynikową.

Znajomość tych mechanizmów pozwala pisać efektywne zapytania SQL i optymalnie przetwarzać dane. Wybór między JOIN a UNION zależy od tego, czy dane są powiązane kluczami (JOIN), czy po prostu chcemy połączyć wyniki kilku zapytań (UNION).

Jeśli chcielibyście bardziej szczegółowy wpis na temat któregoś z tych mechanizmów, dajcie znać w komentarzu! 🚀

Subscribe
Powiadom o
guest
0 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments