JOIN w SQL

SQL join jest używany do wyszukiwania danych z dwóch lub więcej tabel na podstawie relacji między kolumnami w tych tabelach.

Join i Klucz

Czasami, aby uzyskać kompletny wynik, musimy pobrać wyniki z dwóch lub więcej tabel. W takim przypadku musimy wykonać join.

Tabele w bazie danych można połączyć za pomocą kluczy. Klucz główny (Primary Key) to kolumna, w której każda wartość wiersza jest unikalna. W tabeli każda wartość klucza głównego jest unikalna. Cel tego działania to połączenie danych między tabelami bez powtarzania wszystkich danych w każdej tabeli.

Proszę spojrzeć na tabelę "Persons":

Id_P LastName FirstName Adres Miasto
1 Adams John Oxford Street Londyn
2 Bush George Fifth Avenue Nowy Jork
3 Carter Thomas Changan Street Pekin

Proszę zauważyć, że kolumna "Id_P" jest kluczem głównym w tabeli "Persons". Oznacza to, że żaden wiersz nie może mieć takiego samego Id_P. Nawet jeśli nazwiska dwóch osób są identyczne, Id_P może je odróżnić.

Kolejne, proszę spojrzeć na tabelę "Orders":

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

Proszę zauważyć, że kolumna "Id_O" jest kluczem głównym w tabeli "Orders", jednocześnie kolumna "Id_P" w tabeli "Orders" jest używana do odniesienia do tabeli "Persons" bez konieczności używania ich dokładnych nazwisk.

Proszę zauważyć, że kolumna "Id_P" łączy powyższe dwie tabele.

Odwoływanie się do dwóch tabel

Możemy uzyskać dane z dwóch tabel, odwołując się do nich

Kto zamówił produkt i co zamówili?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

Zbiór wyników:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

SQL JOIN - Użycie Join

Oprócz powyższego sposobu, możemy również używać słowa kluczowego JOIN, aby uzyskać dane z dwóch tabel

Jeśli chcemy wyświetlić zamówienia wszystkich osób, możemy użyć poniższego zapytania SELECT:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

Zbiór wyników:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

Różne SQL JOIN

Oprócz INNER JOIN (wewnętrzny złączenie), którego używaliśmy w powyższym przykładzie, możemy używać innych rodzajów złączeń

Poniżej znajduje się lista dostępnych typów JOIN oraz ich różnic

  • JOIN: Zwraca wiersze, jeśli w tabeli istnieje przynajmniej jeden dopasowanie
  • LEFT JOIN: Zwraca wszystkie wiersze z lewej tabeli, nawet jeśli w prawej tabeli nie ma dopasowania
  • RIGHT JOIN: Zwraca wszystkie wiersze z prawej tabeli, nawet jeśli w lewej tabeli nie ma dopasowania
  • FULL JOIN: Zwraca wiersze, jeśli istnieje dopasowanie w jednym z tabel