JOIN w SQL
- Poprzednia strona SQL Aliases
- Następna strona SQL Inner Join
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
- Poprzednia strona SQL Aliases
- Następna strona SQL Inner Join