SQL INNER JOIN (Polski)

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 i table_2 nazywane są tabelami połączonymi.
  • Dla każdego wiersza w table_1 zapytanie znajduje odpowiedni wiersz w table_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 w table_1 i ten proces jest kontynuowany, aż wszystkie wiersze w table_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 tabeli products.
  • categoryName z tabeli categories.

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;

Wizualizuj INNER JOIN za pomocą diagramu Venna

Write a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *