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_1itable_2nazywane są tabelami połączonymi. - Dla każdego wiersza w
table_1zapytanie 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_1i ten proces jest kontynuowany, aż wszystkie wiersze wtable_1zostaną 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,productNamez tabeliproducts. -
categoryNamez 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;
|