SQL SELECT - Podstawy Zapytań na Maturze z Informatyki
SELECT to najważniejsza komenda w języku SQL. To jest Twój podstawowy 'scyzoryk' do pracy z bazami danych. Na maturze *zawsze* dostaniesz zadanie z bazą danych (czy to w Excelu/Accessie, czy w MySQL/MariaDB), a umiejętność 'odpytania' bazy o konkretne dane jest absolutnie kluczowa. Myśl o komendzie SELECT jak o zadawaniu pytania bazie: 'Hej, baza danych, proszę, pokaż mi...'. Możesz prosić o całe tabele, konkretne kolumny, a także filtrować, sortować i grupować dane. W tym przewodniku skupimy się na absolutnych podstawach: jak wyciągać dane, filtrować je (WHERE) i sortować (ORDER BY), co stanowi 80% zadań maturalnych z SQL.
Dlaczego to ważne? Na maturze CKE w części praktycznej (na komputerze) regularnie pojawiają się zadania z bazą danych. Często musisz napisać konkretne zapytania SQL, aby dostać punkty. Nawet jeśli rozwiązujesz zadanie w Excelu, znajomość logiki SQL (filtrowania, łączenia tabel) jest nieoceniona. Podstawowe `SELECT ... FROM ... WHERE ...` to absolutny 'must-have'.
Teoria
Główną ideą zapytania SELECT jest 'wybranie' (SELECT) określonych kolumn (lub wszystkich, używając *) 'z' (FROM) konkretnej tabeli. Dodatkowo, możemy nałożyć 'warunki' (WHERE), aby zobaczyć tylko te wiersze, które nas interesują, oraz 'posortować' (ORDER BY) wynik.
Jak to działa?
- SELECT [kolumny] - Tu decydujesz, co chcesz zobaczyć. Np. 'SELECT imie, nazwisko' albo 'SELECT *' (co oznacza 'wszystkie kolumny').
- FROM [tabela] - Tu mówisz, z której 'szuflady' (tabeli) chcesz brać dane. Np. 'FROM uczniowie'.
- WHERE [warunek] (Opcjonalnie) - To Twój filtr. Np. 'WHERE klasa = "3A"' albo 'WHERE punkty > 80'.
- ORDER BY [kolumna] [kierunek] (Opcjonalnie) - Tu sortujesz wyniki. Np. 'ORDER BY nazwisko ASC' (rosnąco, alfabetycznie) lub 'ORDER BY punkty DESC' (malejąco, od największej).
- JOIN [inna_tabela] ON [warunek_laczenia] (Opcjonalnie) - Pozwala łączyć dane z wielu tabel (omówione w osobnym przewodniku, ale kluczowe).
- Kolejność wykonywania (logiczna): FROM -> WHERE -> SELECT -> ORDER BY.
Złożoność: Nie dotyczy w tradycyjnym sensie O(n). Wydajność zależy od wielkości tabel, użytych indeksów i złożoności warunków. Dla matury, gdzie tabele są małe, każde poprawnie napisane zapytanie będzie wystarczająco szybkie.
Implementacja
SELECT * - Wyświetlanie całej tabeli
SQLSELECT * FROM Uczniowie;Najprostsze zapytanie. Gwiazdka (*) oznacza 'wszystkie kolumny'. To zapytanie zwróci każdy wiersz i każdą kolumnę z tabeli 'Uczniowie'. Świetne, żeby zobaczyć, jak wyglądają dane.
SELECT [kolumny] - Wybieranie konkretnych kolumn
SQLSELECT imie, nazwisko, klasa FROM Uczniowie;Zamiast gwiazdki, podajemy nazwy kolumn oddzielone przecinkami. Zapytanie zwróci tylko kolumny 'imie', 'nazwisko' i 'klasa' dla wszystkich uczniów.
Klauzula WHERE - Filtrowanie wierszy
SQLSELECT imie, nazwisko FROM Uczniowie WHERE klasa = '1A';
-- Inny przykład z warunkiem liczbowym
SELECT * FROM Uczniowie WHERE punkty > 90;Klauzula WHERE to Twój filtr. Zwraca tylko te wiersze, które spełniają warunek. Pamiętaj: tekst (stringi) umieszczamy w pojedynczych cudzysłowach ('1A'), a liczby nie (90).
Klauzula ORDER BY - Sortowanie wyników
SQLSELECT nazwisko, imie, punkty FROM Uczniowie
WHERE klasa = '1A'
ORDER BY nazwisko ASC;ORDER BY sortuje wynik. Domyślnie sortuje rosnąco (ASC - Ascending). Aby posortować od największej do najmniejszej, użyj DESC (Descending), np. 'ORDER BY punkty DESC'.
WHERE z operatorami (AND, OR, LIKE)
SQLSELECT * FROM Uczniowie
WHERE punkty > 80 AND klasa = '2B';
SELECT * FROM Uczniowie
WHERE imie = 'Anna' OR imie = 'Jan';
SELECT * FROM Uczniowie
WHERE nazwisko LIKE 'K%';Możesz łączyć warunki. AND - oba muszą być prawdziwe. OR - przynajmniej jeden musi być prawdziwy. LIKE 'K%' to potężne narzędzie - oznacza 'zaczyna się na K'. Znak '%' to dowolny ciąg znaków.
Przykładowe Zadania Maturalne
Masz bazę danych 'Sklep', a w niej tabelę 'Produkty' (id_produktu, nazwa, kategoria, cena). Napisz zapytanie SQL, które wyświetli nazwy i ceny wszystkich produktów z kategorii 'Nabiał', które kosztują mniej niż 5 zł. Wyniki posortuj alfabetycznie według nazwy.
Wskazówka: Potrzebujesz trzech klauzul: SELECT (nazwa, cena), FROM (Produkty), WHERE (do filtrowania kategorii i ceny) oraz ORDER BY (do sortowania). Pamiętaj o cudzysłowach dla tekstu 'Nabiał' i o użyciu operatora AND.
Pokaż szkic rozwiązania
1. Zacznij od SELECT: `SELECT nazwa, cena` 2. Określ tabelę: `FROM Produkty` 3. Dodaj filtr kategorii: `WHERE kategoria = 'Nabiał'` 4. Dodaj filtr ceny: `AND cena < 5` 5. Dodaj sortowanie: `ORDER BY nazwa ASC;` 6. Pełne zapytanie: `SELECT nazwa, cena FROM Produkty WHERE kategoria = 'Nabiał' AND cena < 5 ORDER BY nazwa ASC;`
W bazie danych są tabele 'Wlasciciele' (id_wlasciciela, imie, nazwisko) oraz 'Samochody' (nr_rejestracyjny, marka, rok_produkcji, id_wlasciciela). Zapisz zapytanie SQL, w wyniku którego uzyskasz imiona i nazwiska właścicieli samochodów zarejestrowanych w Chorzowie (nr rejestracyjny rozpoczyna się od liter SH) i wyprodukowanych w 2020 roku. Nazwiska uporządkuj alfabetycznie.
Wskazówka: To zadanie wymaga połączenia (JOIN) dwóch tabel. Musisz połączyć 'Wlasciciele' i 'Samochody' przez klucz 'id_wlasciciela'. Następnie w klauzuli WHERE musisz dać dwa warunki: jeden na rok produkcji i jeden na numer rejestracyjny (użyj operatora LIKE z procentem: 'SH%'). Na koniec posortuj (ORDER BY) nazwiska.
Pokaż szkic rozwiązania
1. Zacznij od SELECT: `SELECT Wlasciciele.imie, Wlasciciele.nazwisko` 2. Określ tabelę główną: `FROM Wlasciciele` 3. Połącz drugą tabelę: `JOIN Samochody ON Wlasciciele.id_wlasciciela = Samochody.id_wlasciciela` 4. Filtruj dane (WHERE) dwoma warunkami połączonymi przez AND: a. `WHERE Samochody.nr_rejestracyjny LIKE 'SH%'` b. `AND Samochody.rok_produkcji = 2020` 5. Posortuj wynik: `ORDER BY Wlasciciele.nazwisko ASC;`
Częste Błędy
❌ Brak cudzysłowu przy tekście
Warunek `WHERE klasa = 1A` (bez cudzysłowu) zwróci błąd. Baza myśli, że `1A` to nazwa kolumny, a nie wartość tekstowa.
Poprawka: Zawsze umieszczaj wartości tekstowe (stringi, daty) w pojedynczym cudzysłowie: `WHERE klasa = '1A'`.
❌ Mylenie `*` z `COUNT(*)`
`SELECT *` wybiera *wszystkie dane*. `SELECT COUNT(*)` zlicza *liczbę wierszy*. To zupełnie inne polecenia.
Poprawka: Jeśli chcesz zobaczyć dane, użyj `*`. Jeśli chcesz policzyć, ile czegoś jest, użyj `COUNT(*)`.
❌ Błędna kolejność klauzul
Pisanie `SELECT ... WHERE ... FROM ...` albo `SELECT ... FROM ... ORDER BY ... WHERE ...` jest błędne. Baza danych wymaga ścisłej kolejności.
Poprawka: Zapamiętaj kolejność: `SELECT`, `FROM`, `JOIN` (jeśli jest), `WHERE`, `GROUP BY` (jeśli jest), `ORDER BY` (jeśli jest).
❌ Mylenie `=` z `LIKE`
Operator `=` sprawdza dokładną równość. `WHERE nazwisko = 'K'` znajdzie tylko osoby o nazwisku 'K'. Operator `LIKE` służy do dopasowywania wzorców.
Poprawka: Do szukania wzorców (np. 'zaczyna się na K') używaj `LIKE 'K%'`. Do sprawdzania dokładnej wartości (np. 'klasa to 1A') używaj `WHERE klasa = '1A'`.
Kluczowe Wnioski
- SELECT wybiera kolumny (lub * dla wszystkich).
- FROM wskazuje tabelę.
- WHERE filtruje wiersze (warunki).
- ORDER BY sortuje wyniki (domyślnie ASC - rosnąco).
- Kolejność pisania to: SELECT, FROM, WHERE, ORDER BY.
- Tekst (stringi) zawsze dawaj w pojedynczych cudzysłowach: 'imie = "Anna"'.
- LIKE 'wzór%' służy do szukania tekstu zaczynającego się na 'wzór'.
Najczęściej Zadawane Pytania
❓ Jaka jest różnica między `*` a `COUNT(*)`?
`SELECT *` pobiera *dane* (wszystkie kolumny i wiersze). `SELECT COUNT(*)` nie pobiera danych, tylko zwraca *jedną liczbę* - informację, ile wierszy spełniło warunki.
❓ Co to jest `ASC` i `DESC`?
To kierunki sortowania w ORDER BY. ASC (Ascending) to rosnąco (A-Z, 1-100). DESC (Descending) to malejąco (Z-A, 100-1). ASC jest domyślne, więc nie trzeba go pisać.
❓ Czym się różni `WHERE` od `HAVING`?
WHERE filtruje pojedyncze wiersze przed grupowaniem. HAVING filtruje grupy po grupowaniu (używa się go tylko z GROUP BY, np. HAVING COUNT(*) > 5).
❓ Co oznacza znak `%` w `LIKE`?
To 'joker' (wildcard) oznaczający dowolny ciąg znaków (także pusty). `LIKE 'K%'` oznacza 'zaczyna się na K'. `LIKE '%k'` oznacza 'kończy się na k'. `LIKE '%k%'` oznacza 'zawiera literę k'.
❓ Muszę znać SQL na maturę? Nie wystarczy Excel?
W arkuszu CKE (np. 2024, 2025) jest osobne zadanie, gdzie *musisz* napisać zapytanie SQL. Excel nie wystarczy, aby zdobyć punkty za te zadania. Musisz znać przynajmniej podstawy `SELECT`, `JOIN`, `WHERE` i `ORDER BY`.
Chcesz opanować wszystkie tematy maturalne?
Dołącz do kursu i zyskaj dostęp do interaktywnych lekcji, edytora kodu i setek zadań.