Łączenie tabel – INNER JOIN
INNER JOIN służy do łączenia danych znajdujących się w dwóch lub większej liczbie tabel. Zwraca tylko te rekordy, dla których istnieje dopasowanie w obu tabelach.
Najczęściej tabele łączy się za pomocą powiązanych ze sobą kolumn, np. klucza głównego PRIMARY KEY oraz klucza obcego FOREIGN KEY.
Przykład tabel
Tabela pracownicy posiada kolumnę wydzial, która przechowuje identyfikator wydziału pracownika.
id_os | imie | nazwisko | wydzial
1 | Jan | Kowalski | 2
2 | Anna | Nowak | 1
Tabela wydzialy przechowuje informacje o poszczególnych wydziałach.
id_wydzialu | nazwa
1 | IT
2 | HR
Kolumna pracownicy.wydzial wskazuje na kolumnę wydzialy.id_wydzialu.
pracownicy.wydzial = wydzialy.id_wydzialu
INNER JOIN
SELECT
p.imie,
p.nazwisko,
w.nazwa AS wydzial
FROM pracownicy p
INNER JOIN wydzialy w
ON p.wydzial = w.id_wydzialu;
GO
FROM pracownicy p oznacza pobieranie danych z tabeli pracownicy. Litera p jest aliasem tabeli, czyli jej krótszą nazwą używaną wewnątrz zapytania.
INNER JOIN wydzialy w dołącza tabelę wydzialy. Aliasem tej tabeli jest litera w.
Najważniejszym elementem połączenia jest warunek ON:
ON p.wydzial = w.id_wydzialu
Warunek ON określa, po których kolumnach SQL Server ma połączyć dane z obu tabel.
Jeżeli pracownik posiada:
wydzial = 2
SQL Server szuka w tabeli wydzialy rekordu:
id_wydzialu = 2
Po znalezieniu dopasowania dane obu tabel zostają połączone.
imie | nazwisko | wydzial
Jan | Kowalski | HR
Anna | Nowak | IT
Jak działa INNER JOIN
INNER JOIN zwraca tylko rekordy, które posiadają dopasowanie w obu tabelach.
Jeżeli pracownik posiada wydzial = 5, ale w tabeli wydzialy nie istnieje rekord z id_wydzialu = 5, taki pracownik nie pojawi się w wyniku zapytania.
Ogólny schemat INNER JOIN
SELECT
tabela1.kolumna,
tabela2.kolumna
FROM tabela1
INNER JOIN tabela2
ON tabela1.id = tabela2.id;
GO
INNER JOIN z aliasami
SELECT
a.kolumna,
b.kolumna
FROM tabela1 a
INNER JOIN tabela2 b
ON a.id = b.id;
GO
Alias pozwala skrócić nazwę tabeli. Zamiast wielokrotnie wpisywać pracownicy.imie, można używać krótszego zapisu p.imie.
Łączenie trzech tabel
Jedno zapytanie może łączyć więcej niż dwie tabele. Każda kolejna tabela otrzymuje własny JOIN oraz warunek ON.
SELECT
p.imie,
p.nazwisko,
w.nazwa AS wydzial,
m.nazwa AS miasto
FROM pracownicy p
INNER JOIN wydzialy w
ON p.wydzial = w.id_wydzialu
INNER JOIN miasta m
ON p.miasto_id = m.id_miasta;
GO
Najważniejsze elementy JOIN
SELECT określa, jakie kolumny mają zostać wyświetlone.
FROM określa główną tabelę zapytania.
INNER JOIN określa tabelę, którą chcemy dołączyć.
ON określa warunek, według którego rekordy z tabel mają zostać ze sobą połączone.
SELECT -- co chcemy wyświetlić
FROM -- z jakiej tabeli zaczynamy
JOIN -- jaką tabelę dołączamy
ON -- po jakich kolumnach łączymy