SQL - Łączenie Tabel (INNER JOIN i LEFT JOIN)
Prawie każde zadanie z bazy na maturze to łączenie tabel. Przebrnij przez INNER JOIN i poznaj sekrety aliasów.
Łączenie Tabel w SQL (JOIN)
Najważniejsza rzecz na maturze to łączenie tabel. W jednym miejscu (w jednej tabeli) masz dane o Klientach, w drugim (w drugiej tabeli) o jego Zamowieniach.
W tabeli Zamowienia znajduje się jedynie kolumna, którą nazywamy Kluczem Obcym (zazwyczaj o nazwie ID_Klienta lub Klient_ID), która wskazuje na to, który klient z tabeli głównej złożył to zamówienie.
Żeby zobaczyć na jednym ekranie: imię klienta ORAZ datę jego zamówienia, musimy użyć konstrukcji JOIN.
INNER JOIN (Złączenie Wewnętrzne)
INNER JOIN (często pisane po prostu jako JOIN) zwraca tylko te wiersze, które mają dopasowanie w OBU tabelach. Jeśli klient nie ma zamówień, nie wyświetli się. Jeśli jest zamówienie, ale z usuniętym klientem (anomalia) - też się nie wyświetli.
SELECT Klienci.Imie, Zamowienia.DataZamowienia
FROM Klienci
INNER JOIN Zamowienia
ON Klienci.ID_Klienta = Zamowienia.ID_Klienta;Zwróć uwagę na blok ON. Wskazujemy w nim, po których kolumnach bazy są połączone. Zazwyczaj jest to Klucz Główny z jednej tabeli równy Kluczowi Obcemu z drugiej.
Interaktywna Konsola: Złączenie tabel (INNER JOIN)
Połącz tabelę 'klienci' z tabelą 'zamowienia' i zobacz, którzy klienci robili zakupy oraz na jaką kwotę.
Aliasowanie (Skracanie Kodu)
Pisanie w kółko Klienci.ID_Klienta i Zamowienia.ID_Klienta przy 3 lub 4 tabelach jest męczące. Używamy aliasów! Nadajemy tabelom "tymczasowe imiona" (jak K i Z).
SELECT K.Imie, Z.DataZamowienia
FROM Klienci AS K
INNER JOIN Zamowienia AS Z
ON K.ID_Klienta = Z.ID_Klienta;Słówko AS jest opcjonalne, większość pisze po prostu FROM Klienci K.
LEFT JOIN (Złączenie Zewnętrzne)
A co, jeśli pan prezes chce zobaczyć wszystkich klientów z naszej bazy, a obok nich ich zamówienia... Ale jeśli jakiś klient nigdy nic nie kupił, to też ma się wyświetlić na liście (z pustym miejscem, czyli statusem NULL obok daty)?
Używamy LEFT JOIN. Oznacza to "Weź wszystko z tabeli po lewej stronie, a z tej po prawej dopasuj to co znajdziesz (lub wpisz NULL)".
SELECT K.Imie, K.Nazwisko, Z.DataZamowienia
FROM Klienci K
LEFT JOIN Zamowienia Z
ON K.ID_Klienta = Z.ID_Klienta;Bardzo częste zadanie na INF.03: "Znajdź wszystkich klientów, którzy nie mają żadnego zamówienia". Jak to zrobić? Robimy LEFT JOIN, a w WHERE wymuszamy szukanie pustych okienek:
SELECT K.Imie, K.Nazwisko
FROM Klienci K
LEFT JOIN Zamowienia Z ON K.ID_Klienta = Z.ID_Klienta
WHERE Z.ID_Zamowienia IS NULL;Interaktywna Konsola: Wszyscy klienci i ich zakupy (LEFT JOIN)
Sprawdź, którzy klienci nie zrobili żadnego zakupu (zwróć uwagę na wiersze z pustymi polami zamówień).
[!TIP] Różnica MS Access vs MySQL (Matura) Na maturze zazwyczaj masz wybór programu. Jeśli korzystasz z MS Access w trybie edytora SQL, musisz uważać: Access uwielbia nawiasy! Gdy łączysz więcej niż dwie tabele (np. 3 lub 4), musisz zagnieżdżać złączenia w nawiasach okrągłych. Na szczęście na maturze rzadko kto pisze czysty kod w Accessie, zazwyczaj używamy tam kreatora wizualnego. Jeśli wolisz pisać z palca, wybierz po prostu system XAMPP (MariaDB/MySQL) jeśli jest dostępny.
