JOIN służy do łączenia danych z dwóch (lub więcej) tabel w bazie danych na podstawie wspólnego pola (np. id_klienta, id_zamowienia, id_ucznia itd.).
Przykład:
Masz dwie tabele:
W obu tabelach znajduje się kolumna uczen_id, która pozwala połączyć dane o konkretnym uczniu z jego ocenami.
Składnia:
SELECT kolumny
FROM tabela1
JOIN tabela2
ON warunek_połączenia;
lub bardziej szczegółowo:
SELECT t1.kolumna, t2.kolumna
FROM tabela1 AS t1
[INNER | LEFT | RIGHT | FULL]
JOIN tabela2 AS t2
ON t1.klucz = t2.klucz;SELECT Uczniowie.imie, Uczniowie.nazwisko, Oceny.przedmiot, Oceny.ocena
FROM Uczniowie
INNER JOIN Oceny
ON Uczniowie.uczen_id = Oceny.uczen_id;Zwróci tylko uczniów, którzy mają wpisane oceny.
| imie | nazwisko | przedmiot | ocena |
|---|---|---|---|
| Jan | Kowalski | Matematyka | 5 |
| Jan | Kowalski | Fizyka | 4 |
| Anna | Nowak | Matematyka | 3 |

INNER JOIN – połączenie wewnętrzne
Zwraca tylko te rekordy, które mają dopasowanie w obu tabelach.
Przykład:
SELECT Uczniowie.imie, Uczniowie.nazwisko, Oceny.przedmiot, Oceny.ocena
FROM Uczniowie
INNER JOIN Oceny
ON Uczniowie.uczen_id = Oceny.uczen_id;
Wynik: pokaże tylko tych uczniów, którzy mają przynajmniej jedną ocenę.

LEFT JOIN (lub LEFT OUTER JOIN) – połączenie lewostronne
Zwraca wszystkie rekordy z lewej tabeli (tej, która jest przed słowem JOIN), nawet jeśli nie mają dopasowania w tabeli prawej.
Przykład:
SELECT Uczniowie.imie, Uczniowie.nazwisko, Oceny.przedmiot, Oceny.ocena
FROM Uczniowie
LEFT JOIN Oceny
ON Uczniowie.uczen_id = Oceny.uczen_id;
Wynik: pokaże wszystkich uczniów, nawet tych bez ocen.
W miejscach, gdzie nie ma dopasowania w tabeli Oceny, pola będą miały wartość NULL

RIGHT JOIN (dla pełności)
Działa odwrotnie do LEFT JOIN: pokazuje wszystkie rekordy z prawej tabeli, nawet jeśli nie mają dopasowania w lewej.
(W praktyce rzadziej używany.)
Ostatnim rodzajem Join jest FULL JOIN w SQL to operacja, która zwraca wszystkie rekordy zarówno z lewej, jak i z prawej tabeli. Jeśli nie ma dopasowania w jednej z tabel, SQL zwróci wartość NULL w brakujących kolumnach.

Stwórz bazę danych
CREATE DATABASE Szkola;
USE Szkola;
Utwórz tabele
Tabela Uczniowie:
CREATE TABLE Uczniowie (
uczen_id INT PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50)
);
Tabela Oceny:
CREATE TABLE Oceny (
ocena_id INT PRIMARY KEY,
uczen_id INT,
przedmiot VARCHAR(50),
ocena INT,
FOREIGN KEY (uczen_id) REFERENCES Uczniowie(uczen_id)
);
Wstaw dane
INSERT INTO Uczniowie VALUES
(1, 'Jan’, 'Kowalski’),
(2, 'Anna’, 'Nowak’),
(3, 'Piotr’, 'Wiśniewski’);
INSERT INTO Oceny VALUES
(1, 1, 'Matematyka’, 5),
(2, 1, 'Polski’, 4),
(3, 2, 'Angielski’, 5);
Wykonaj zapytania JOIN
INNER JOIN – pokaż tylko uczniów z ocenami:
SELECT Uczniowie.imie, Uczniowie.nazwisko, Oceny.przedmiot, Oceny.ocena
FROM Uczniowie
INNER JOIN Oceny
ON Uczniowie.uczen_id = Oceny.uczen_id;
LEFT JOIN – pokaż wszystkich uczniów, nawet bez ocen:
SELECT Uczniowie.imie, Uczniowie.nazwisko, Oceny.przedmiot, Oceny.ocena
FROM Uczniowie
LEFT JOIN Oceny
ON Uczniowie.uczen_id = Oceny.uczen_id;
Zadanie dodatkowe:
Należy dodać trzecią tabelę Nauczyciele i połączyć ją z Oceny, aby pokazać, który nauczyciel wystawił ocenę.