SQL - Wybieranie Danych (SELECT i JOIN)
Podstawy zapytań na przykładzie bazy klientów pizzerii. Odróżnij MS Accessa od czystego MySQL.
Bazy Danych: SELECT i JOIN
Zanim zaczniesz wyciągać dane z bazy, musisz zrozumieć jedno: SQL (Structured Query Language) to język deklaratywny. Oznacza to, że mówisz komputerowi CO chcesz uzyskać, a nie JAK ma to zrobić.
Wyobraź sobie, że zarządzasz pizzerią. Masz dwie tabele: Klienci oraz Zamowienia.
1. Wyciąganie Danych (SELECT)
Chcesz zobaczyć wszystkie imiona klientów? To banalnie proste:
SELECT Imie, Nazwisko
FROM Klienci;A co jeśli chcesz znaleźć tylko tych klientów, którzy mieszkają na "Klonowej"? Tutaj wchodzi instrukcja WHERE:
SELECT Imie, Nazwisko
FROM Klienci
WHERE Ulica = 'Klonowa';2. Łączenie Tabel (JOIN)
Najważniejsza rzecz na maturze to łączenie tabel. W jednym miejscu masz dane o Kliencie, w drugim o jego Zamówieniach. Kluczem obcym w Zamowienia jest zazwyczaj ID_Klienta.
Żeby zobaczyć, kto złożył jakie zamówienie, używamy INNER JOIN:
SELECT Klienci.Imie, Zamowienia.DataZamowienia
FROM Klienci
JOIN Zamowienia ON Klienci.ID_Klienta = Zamowienia.ID_Klienta;💡 Różnica MS Access vs MySQL (Matura)
Na maturze zazwyczaj masz wybór programu. Jeśli korzystasz z MS Access (kreator zapytań SQL):
- Access uwielbia nawiasy! Gdy łączysz więcej niż dwie tabele, musisz to robić zagnieżdżając
(JOIN ... ON ...)w nawiasach. - Access czasem używa
*jako znaku wieloznacznego (np.LIKE 'A*'), podczas gdy w standardowym SQL / MySQL poprawnym znakiem jest%(np.LIKE 'A%'). Pamiętaj o tym pisząc zapytania z palca!
🧠 Dla Dociekliwych
Dlaczego nie łączyć tabel "po staremu" po przecinku? Kiedyś (bardzo dawno temu) pisało się zapytania tak:
SELECT Klienci.Imie, Zamowienia.Data
FROM Klienci, Zamowienia
WHERE Klienci.ID_Klienta = Zamowienia.ID_Klienta;Dlaczego tego nie robić? Gdy zapomnisz klauzuli WHERE, baza danych połączy każdy wiersz z Klienci z każdym wierszem w Zamowienia (iloczyn kartezjański). Z 1000 klientów i 1000 zamówień robi się milion bezsensownych wierszy! Używając JOIN ... ON ... zmuszasz się do wyraźnego zdefiniowania warunku łączenia, co chroni przed błędami i ułatwia czytanie skomplikowanych zapytań.
