Typy połączeń
Na tych zajęciach podsumujemy i utrwalimy stosowanie różnych typów połączeń tabel. W tym celu, utworzymy bardzo prostą bazę szkola
, składającą się z dwóch bardzo prostych tabel uczniowie
oraz klasy
, a następnie przetestujemy podstawowe typy połączeń.

szkola
Ćwiczenie 4_2_5_1. Utworzenie bazy danych szkola
Zastosuj polecenie SQL:
CREATE DATABASE szkola DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

szkola
Ćwiczenie 4_2_5_2. Utworzenie tabel bazy danych szkola
Zastosuj polecenie SQL:
CREATE TABLE uczniowie
(
id_uczen INT UNSIGNED NOT NULL PRIMARY KEY,
nazwisko CHAR(50) NOT NULL
);
CREATE TABLE klasy
(
id_uczen INT UNSIGNED,
klasa CHAR(20)
);

szkola
Ćwiczenie 4_2_5_3. Wypełnienie tabel danymi
Zastosuj polecenie SQL:
INSERT INTO uczniowie VALUES
(1, 'Mądry'),
(2, 'Zdolny'),
(3, 'Pracowity'),
(4, 'Zaradny'),
(5, 'Ambitny');
INSERT INTO klasy VALUES
(2, '1 A'),
(4, '1 A'),
(5, '2 B');

uczniowie

klasy
Ćwiczenie 4_2_5_4. Połączenie inner join
Jest to najprostsze połączenie. Umożliwia pobrać wszystkie rekordy z tabeli A mające odpowiedniki w tabeli B. Mówiąc inaczej, pobierana jest część wspólna tych tabel. Klauzula pozwala na łączenie 2 lub więcej tabel. W naszym przykładzie elementem wspólnym tabel, na podstawie którego wykonywane jest porównywanie jest "id_uczen". Zastosuj następujące zapytanie SQL:
SELECT * FROM uczniowie
INNER JOIN klasy
ON uczniowie.id_uczen = klasy.id_uczen;

Identyczny efekt uzyskamy, stosując zapytanie:
SELECT * FROM uczniowie, klasy
WHERE uczniowie.id_uczen = klasy.id_uczen;
Ćwiczenie 4_2_5_5. Połączenie equi-join
Jest to szczególny przypadek inner join, w którym do porównań używa się tylko znaków równości. Tak więc poprzedni przykład jest połączeniem typu equi-join. MySQL umożliwia dla equi-join, zastosowanie wersji skróconej:
SELECT * FROM uczniowie
INNER JOIN klasy
USING(id_uczen);

Ćwiczenie 4_2_5_6. Połączenie left join
Jest to najczęstsze z używanych połączeń. Pozwala pobrać wszystkie rekordy z tabeli A wraz z odpowiadającymi im rekordami z tabeli B nawet wtedy, gdy w tabeli B nie ma odpowiedników dla rekordów z tabeli A.
SELECT * FROM uczniowie
LEFT JOIN klasy ON uczniowie.id_uczen = klasy.id_uczen;

Wiersze w których nie ma odpowiedników, zostały wypełnione wartościami NULL
.
Ćwiczenie 4_2_5_7. Połączenie cross join
Jest to najciekawsze z połączeń. W wyniku daje wszystkie możliwe kombinacje rekordów z tabeli A z rekordami z tabeli B (iloczyn kartezjański). Należy o tym pamiętać, jeżeli chcielibyśmy wykonać takie połączenie dwóch dużych tabel. Liczba wyników jest iloczynem liczby rekordów tabeli A i liczby rekordów tabeli B. Równoznaczym typem połączenia, jest full join.
SELECT * FROM uczniowie
CROSS JOIN klasy;
