Przejdź do treści
ŚredniWaga: 4-8 pkt

Relacje i Kwerendy Wielotabelowe

Wszystko, co musisz wiedzieć o łączeniu tabel na maturze. Klucz główny, klucz obcy, relacje jeden do wielu oraz INNER JOIN. To absolutny pewniak 100%.

Dane na maturze przychodzą w kilku plikach tekstowych, więc zanim cokolwiek policzysz, musisz je posklejać kluczem głównym z obcym. Stąd w arkuszu z bazy prawie zawsze siedzi kwerenda na dwóch albo trzech tabelach, z tabelą pośrednią w roli mostu. Powtarzalne jest też to, na czym uczniowie się wykładają: brak nawiasów przy trzech tabelach w Accessie i kolumna podana bez nazwy tabeli. Na starcie ciężko to wytłumaczyć, ale po kilku zadaniach uczniowie zaczynają czytać powiązania wprost z budowy tabel i sami wskazują, przez co trzeba się połączyć.

  1. Dlaczego właściwie musimy łączyć tabele?

Na maturze z informatyki dane nigdy nie są podane na tacy w jednym wielkim arkuszu. Zamiast tego, CKE rzuca Ci 3-4 pliki tekstowe (np. uczniowie.txt, oceny.txt, przedmioty.txt).

Po ich zaimportowaniu do Accessa lub środowiska SQL stają się one osobnymi bytami. Aby wyciągnąć z nich użyteczne informacje, musimy je ze sobą posklejać, tworząc relacyjną bazę danych. Sukces całego zadania zależy od tego, czy poprawnie zidentyfikujesz i połączysz odpowiednie klucze.

  1. Dwa najważniejsze pojęcia: Klucz Główny i Obcy

Zanim zaczniesz pisać kwerendy, musisz zbudować "mosty" między tabelami. Pamiętaj o dwóch złotych zasadach:

🔑 Klucz główny (PK)

Primary Key to unikalny identyfikator każdego rekordu. W tej tabeli wartości absolutnie nie mogą się powtarzać!

Np. ID_ucznia czy PESEL.

🔗 Klucz obcy (FK)

Foreign Key to pole w innej tabeli, odwołujące się do klucza głównego. Tutaj wartości mogą (i będą!) się powtarzać.

Np. jeden uczeń może mieć wiele ocen.

💡 Złota zasada łączenia:

Zawsze łączymy Klucz główny z Kluczem obcym. W ten sposób tworzymy klasyczną dla matury relację typu jeden do wielu, oznaczaną matematycznie jako 1:N1:N.

  1. Jak wyciągnąć dane? JOIN vs Access

💻 Środowisko SQL

Używamy polecenia JOIN (najczęściej INNER JOIN). Zwraca ono tylko i wyłącznie te wiersze, które mają pasujące wartości w obu połączonych tabelach.

🖱️ Microsoft Access

Wystarczy w widoku projektu kwerendy dodać odpowiednie tabele i przeciągnąć myszką pole klucza głównego do klucza obcego. Gdy zobaczysz czarną linię łączącą tabele – gotowe! Access sam w tle wygeneruje kod z INNER JOIN.

  1. Klasyczne zadanie maturalne w praktyce

Mamy trzy typowe tabele: Uczniowie (ID_ucznia, Imie, Nazwisko), Oceny (ID_oceny, Wartosc, ID_ucznia, ID_przedmiotu) oraz Przedmioty (ID_przedmiotu, Nazwa_przedmiotu).

Zadanie

Polecenie z arkusza:

"Podaj imiona i nazwiska uczniów, którzy otrzymali ocenę niedostateczną (wartość 1) z przedmiotu o nazwie 'Informatyka'."

Zapisz kolejne kroki budowania relacji i kwerendy w SQL.
💡 Pokaż rozwiązanie krok po kroku
  • 1

    Krok 1: Zrozumienie "mostu" (Tabeli pośredniej)

    Nie możemy połączyć Uczniów bezpośrednio z Przedmiotami, bo nie mają wspólnego klucza. Musimy użyć tabeli Oceny jako mostu, ponieważ zawiera ona zarówno ID_ucznia, jak i ID_przedmiotu.

  • 2

    Krok 2: Łączenie tabel (JOIN)

    Łączymy pierwszą parę: Uczniowie INNER JOIN Oceny ON Uczniowie.ID_ucznia = Oceny.ID_ucznia, a do wyniku dołączamy trzecią tabelę: INNER JOIN Przedmioty ON Oceny.ID_przedmiotu = Przedmioty.ID_przedmiotu.

  • 3

    Krok 3: Nałożenie warunków i złożenie kodu

    Dodajemy warunki do klauzuli WHERE (Wartość = 1 oraz Nazwa = 'Informatyka').

    SELECT Uczniowie.Imie, Uczniowie.Nazwisko
    FROM (Uczniowie
        INNER JOIN Oceny ON Uczniowie.ID_ucznia = Oceny.ID_ucznia)
        INNER JOIN Przedmioty ON Oceny.ID_przedmiotu = Przedmioty.ID_przedmiotu
    WHERE Oceny.Wartosc = 1 AND Przedmioty.Nazwa_przedmiotu = 'Informatyka';
    
    -- Nawiasy przy trzech tabelach sa w Accessie OBOWIAZKOWE.
    -- Bez nich silnik zwraca "Blad skladni w klauzuli FROM".

  1. Maturalne miny (Na co koniecznie uważać!)

🧨 Gubienie tabel pośrednich

Próba łączenia tabel, które nie mają wspólnego klucza, natychmiast wyrzuci błąd. Zawsze sprawdzaj, czy nie potrzebujesz środkowej tabeli jako "mostu".

⚠️ Niejednoznaczność nazw kolumn

Jeśli pole ID_ucznia znajduje się w kilku tabelach, sam zapis SELECT ID_ucznia zmyli bazę. Musisz zawsze precyzować pochodzenie: Tabela.Kolumna (np. Uczniowie.ID_ucznia).

👻 Pułapka LEFT JOIN

Zwykły INNER JOIN pomija rekordy bez pary. Jeśli jednak CKE zapyta: "Podaj wszystkich uczniów wraz z liczbą wypożyczeń, nawet tych, którzy nic nie wypożyczyli", wymusza to użycie LEFT JOIN!

Przeczytaj też
Zadania praktyczne na maturze — jak się przygotować

Plan pracy na 210 minut, kolejność rozwiązywania i format plików wynikowych, na którym najłatwiej stracić punkty.

Korepetycje z informatyki

Zdajesz maturę rozszerzoną z informatyki?

Prowadzimy indywidualne przygotowanie do matury z informatyki — algorytmy, Python i C++, bazy danych i arkusz kalkulacyjny. Zajęcia online, na arkuszach CKE. Zobacz program i cennik.

Zobacz korepetycje z informatyki

Uczysz się w technikum informatycznym? Prowadzimy też przygotowanie do kwalifikacji INF.02, INF.03 i INF.04. Zobacz egzaminy zawodowe

Nadal czujesz się niepewnie?

To tylko jeden z pewniaków. Na kursie przechodzimy przez nie wszystkie, krok po kroku, aż poczujesz ten spokój.

Pomóżcie mi zdać maturę!