Podsumowanie: w tym samouczku dowiesz się, jak wykonywać zapytania dotyczące danych z wielu tabel za pomocą instrukcji SQL INNER JOIN.
W poprzednim samouczku nauczyłeś się, jak wyszukiwać dane z pojedynczej tabeli za pomocą instrukcji SELECT. Jednak często chcesz wykonywać zapytania dotyczące danych z wielu tabel, aby uzyskać pełny zestaw wyników do analizy. Do odpytywania danych z wielu tabel używasz instrukcji złączenia.
SQL udostępnia kilka typów złączeń, takich jak sprzężenie wewnętrzne, sprzężenie zewnętrzne (lewe sprzężenie zewnętrzne lub lewe sprzężenie, prawe sprzężenie zewnętrzne lub prawe sprzężenie i pełne sprzężenie zewnętrzne ) i łączenie własne. W tym samouczku pokażemy, jak używać klauzuli INNER JOIN
.
Składnia SQL INNER JOIN
Poniższy przykład ilustruje INNER JOIN
składnia łączenia dwóch tabel:
1
2
3
4
5
|
SELECT
kolumna1, kolumna2
OD
tabela_1
INNER JOIN table_2 ON join_condition;
|
Przyjrzyjmy się dokładniej powyższej składni:
-
table_1
itable_2
nazywane są tabelami połączonymi. - Dla każdego wiersza w
table_1
zapytanie znajduje odpowiedni wiersz wtable_2
, który spełnia warunek łączenia. Jeśli zostanie znaleziony odpowiedni wiersz, zapytanie zwróci wiersz zawierający dane z obu tabel. W przeciwnym razie analizuje następny wiersz wtable_1
i ten proces jest kontynuowany, aż wszystkie wiersze wtable_1
zostaną zbadane.
Przy łączeniu więcej niż dwóch tabel obowiązuje ta sama logika.
Przykłady SQL INNER JOIN
SQL INNER JOIN – przykład zapytania o dane z dwóch tabel
W tym przykładzie użyjemy tabel products
i categories
w przykładowej bazie danych. Poniższy rysunek ilustruje diagram bazy danych.
Na powyższym schemacie:
- Jedna kategoria może zawierać wiele produktów.
- Jeden produkt należy do jednej i tylko jednej kategorii.
Dlatego między wierszami w elemencie tabeli i wiersze w tabeli products
. Łączem między dwiema tabelami jest kolumna categoryid
.
Musimy sprawdzić następujące dane z obu tabel:
-
productID
,productName
z tabeliproducts
. -
categoryName
z tabelicategories
.
Poniższe zapytanie pobiera dane z obu tabel:
1
2
3
4
5
6
|
SELECT
productID, productName, categoryName
Z
produkty
WEWNĘTRZNE DOŁĄCZ
kategorie WŁĄCZONE kategorie.categoryID = products.categoryID;
|
Warunek łączenia jest określony w klauzuli INNER JOIN
po słowie kluczowym ON
jako wyrażenie:
1
|
kategorie.categoryID = products.categoryID
|
Dla każdego wiersza w products
table, zapytanie znajduje odpowiedni wiersz w tabeli categories
, która ma tę samą categoryid.
Jeśli istnieje zgodność między dwoma wierszami w w obu tabelach zwraca wiersz zawierający kolumny określone w klauzuli SELECT, tj. identyfikator produktu, nazwę produktu i nazwę kategorii; w przeciwnym razie sprawdza następny wiersz w tabeli products
, aby znaleźć pasujący wiersz w tabeli categories
. Ten proces trwa do momentu sprawdzenia ostatniego wiersza tabeli produktów.
SQL INNER JOIN – odpytywanie danych z trzech tabel
Możemy użyć tych samych technik do łączenia trzech tabel.Następujące zapytanie wybiera productID
, productName
, categoryName
i supplier
z products
, categories
i suppliers
tabel:
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
productID,
productName
categoryName,
companyName AS dostawca
FROM
produkty
INNER JOIN
kategorie WŁĄCZONE kategorie. categoryID = products.categoryID
WEWNĘTRZNE DOŁĄCZ
dostawcy NA dostawców.supplierID = products.supplierID
|
Niejawne SQL INNER JOIN
Istnieje inna forma INNER JOIN
zwana niejawnym sprzężeniem wewnętrznym, jak pokazano poniżej:
1
2
3
4
5
6
7
|
SELECT
kolumna1, kolumna2
Z
table_1,
table_2
WHERE
join_condition;
|
W tym formularzu określasz wszystkie połączone tabele w klauzulę FROM
i umieść warunek złączenia w klauzuli WHERE instrukcji SELECT
. Możemy przepisać powyższy przykład zapytania, używając niejawnego INNER JOIN
w następujący sposób:
1
2
3
4
5
6
7
|
SELECT
productID, productName, categoryName
FROM
produkty,
kategorie
GDZIE
products.categoryID = Categories.categoryID;
|