Przejdź do treści

Łączenie tabel – INNER JOIN – MS SQL

Łą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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *