Pobieranie danych z więcej niż jednej tabeli jednocześnie
Problem: Mamy ID_Klasy w tabeli Uczniowie, ale nazwa klasy (np. "3A") i nazwisko wychowawcy są w tabeli Klasy. Jak wyświetlić nazwisko ucznia obok nazwy jego klasy w jednym zapytaniu?
Odpowiedź: operacja łączenia (JOIN).
Idea: "łączenia" tabel na podstawie pasujących kluczy (PK = FK)
Operacja JOIN pozwala na "sklejenie" dwóch (lub więcej) tabel w poziomie (kolumna obok kolumny). Łączenie odbywa się na podstawie warunku łączenia – najczęściej jest to równość między kluczem obcym (FK) w jednej tabeli a kluczem głównym (PK) w drugiej.
Składnia INNER JOIN
INNER JOIN (złączenie wewnętrzne) jest najczęstszym i domyślnym typem złączenia. Działa jak "część wspólna" zbiorów — zwraca tylko te wiersze, dla których istnieje pasujący rekord w obu łączonych tabelach.
SELECT...
FROM TabelaA
INNER JOIN TabelaB
ON TabelaA.KolumnaFK = TabelaB.KolumnaPK;Przykład: Pobranie nazwisk uczniów i nazw ich klas
Zakładamy:
- Tabela Uczniowie (zawiera FK ID_Klasy)
- Tabela Klasy (zawiera PK ID_Klasy oraz kolumnę NazwaKlasy)
SELECT
Uczniowie.Nazwisko,
Uczniowie.Imie,
Klasy.NazwaKlasy
FROM Uczniowie
INNER JOIN Klasy
ON Uczniowie.ID_Klasy = Klasy.ID_Klasy;Ważna uwaga: Jeśli w obu tabelach istnieje kolumna o tej samej nazwie (tutaj: ID_Klasy), musimy używać pełnej, kwalifikowanej nazwy (NazwaTabeli.NazwaKolumny), aby baza wiedziała, o którą kolumnę chodzi.
Rezultat INNER JOIN: Jeżeli w tabeli Uczniowie znajdzie się uczeń z ID_Klasy = NULL (nieprzypisany do klasy), INNER JOIN nie znajdzie dla niego dopasowania w tabeli Klasy, więc taki uczeń nie pojawi się w wynikach zapytania.
Gdzie znaleźć więcej informacji
Materiały o złączach zewnętrznych (np. LEFT JOIN/RIGHT JOIN) oraz zachowaniu NULL przy łączeniach można znaleźć w lekcjach dotyczących złączeń (Lekcja 15) . Informacje o kluczach głównych i obcych (PK/FK) są opisane w Lekcji 22 , a podstawy SELECT — w Lekcji 3 .