Łączenie tabel - INNER JOIN - LEFT JOIN

Czym jest JOIN?

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:

  • Uczniowie (zawiera dane o uczniach)
  • Oceny (zawiera ich oceny)

W obu tabelach znajduje się kolumna uczen_id, która pozwala połączyć dane o konkretnym uczniu z jego ocenami.

Składnia:

Ogólna składnia JOIN

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;

Przykład praktyczny:

INNER JOIN

SELECT Uczniowie.imie, Uczniowie.nazwisko, Oceny.przedmiot, Oceny.ocena
FROM
Uczniowie
INNER JOIN Oceny
ON Uczniowie.uczen_id = Oceny.uczen_id;
 
Przykład tabeli:

Zwróci tylko uczniów, którzy mają wpisane oceny.

imienazwiskoprzedmiotocena
JanKowalskiMatematyka5
JanKowalskiFizyka4
AnnaNowakMatematyka3

Rodzaje JOIN

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.


Zadanie na lekcji

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ę.

Kontakt: mgzsp22@gmail.com

© 2025. Wszystkie prawa zastrzeżone.

error: Content is protected !!