Dataczwartek, 13 sierpnia 2026 Czas19:13:25
← Bazy danych i SQL

Lekcja 3. DQL — wyszukiwanie danych (SELECT)

Podstawowy

Po co się tego uczymy?

SELECT to najczęściej używane polecenie w całym SQL-u — to nim "pytasz" bazę danych o informacje. Wyszukiwarka produktów w sklepie, lista ocen ucznia, ranking najlepiej sprzedających się produktów — wszystko to w tle wykonuje zapytanie SELECT.

Teoria

DQL (ang. Data Query Language) w praktyce sprowadza się do jednego polecenia: SELECT. Podstawowa struktura:

SELECT kolumny FROM tabela WHERE warunek ORDER BY kolumna LIMIT liczba;

- SELECT — które kolumny chcesz zobaczyć (albo * dla wszystkich).
- FROM — z jakiej tabeli.
- WHERE — warunek filtrujący wiersze (operatory: =, !=, <, >, <=, >=, AND, OR, BETWEEN, IN).
- LIKE — wyszukiwanie tekstu według wzorca: % zastępuje dowolną liczbę znaków, _ zastępuje dokładnie jeden znak. Np. '%gitara%' znajdzie "Gitara akustyczna" i "Struny do gitary".
- ORDER BY — sortowanie wyników (ASC — rosnąco, domyślnie; DESC — malejąco).
- LIMIT — ogranicza liczbę zwracanych wierszy.

Ważna rzecz, o której uczniowie zapominają: kolejność PISANIA zapytania (SELECT...FROM...WHERE) nie jest tą samą kolejnością, w jakiej baza je WYKONUJE. Zobacz diagram niżej.

Schemat

W jakiej kolejności baza danych faktycznie czyta Twoje zapytanie 1. FROM skąd dane 2. WHERE jaki warunek 3. SELECT jakie kolumny 4. ORDER/LIMIT sortuj, przytnij Dlatego w zapytaniu piszesz SELECT jako pierwsze słowo, ale baza wykonuje je dopiero po FROM i WHERE

Przykład z życia

Wchodzisz na stronę sklepu internetowego, wpisujesz w wyszukiwarkę "gitara", ustawiasz filtr "cena do 500 zł" i sortowanie "od najtańszych". W tle serwer wykonuje dokładnie takie zapytanie SELECT, jakie widzisz w kodzie poniżej.

Kod (SQL)

-- Wszystkie produkty z kategorii "Instrumenty" tańsze niż 500 zł,

-- posortowane od najtańszego, tylko pierwsze 3 wyniki

SELECT nazwa, cena
FROM Produkty
WHERE kategoria = 'Instrumenty' AND cena < 500
ORDER BY cena ASC
LIMIT 3;

-- Produkty, których nazwa zawiera słowo "gitara" (wielkość liter nieważna)

SELECT nazwa, cena
FROM Produkty
WHERE nazwa LIKE '%gitara%';

Komentarz i wyjaśnienie kodu

Pierwsze zapytanie filtruje po dwóch warunkach naraz połączonych AND (obie muszą być spełnione), sortuje rosnąco po cenie i ogranicza wynik do 3 wierszy — dokładnie tak działa strona "3 najtańsze produkty w kategorii". Drugie zapytanie pokazuje LIKE ze znakiem % z obu stron wzorca — to znajdzie słowo "gitara" gdziekolwiek w nazwie produktu, nie tylko na początku.

Ćwiczenie samodzielne

Napisz zapytanie, które wybierze z tabeli Produkty nazwy i ceny wszystkich produktów droższych niż 100 zł, posortowane malejąco po cenie (od najdroższego).

Plac zabaw — wypróbuj online

Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.

SQL

Zadania do pracy własnej

  1. Zadanie 1. SELECT w sklepie 2P

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Sklep muzyczny 2P (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Wyświetl wszystkich klientów.
    2. Wyświetl produkty, których stan magazynowy jest większy niż 15.
    3. Wyświetl zamówienia wraz z nazwiskiem klienta i nazwą produktu.
    4. Oblicz wartość każdego zamówienia: cena * ilość_sztuk.
    5. Policz liczbę zamówień każdego klienta.
    6. Policz łączną liczbę sprzedanych sztuk każdego produktu.
    7. Wyświetl produkty, których nigdy nie zamówiono.
    8. Wyświetl klientów z miejscowości Olsztyn.
    9. Pokaż najdroższy produkt.
    10. Pokaż zamówienia z 2025 roku.
  2. Zadanie 2. SELECT w aptece

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Apteka Zdrowie (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Wyświetl wszystkie leki wraz z kategorią i producentem.
    2. Wyświetl leki, których stan magazynowy jest mniejszy niż 50.
    3. Policz liczbę leków w każdej kategorii.
    4. Oblicz średnią cenę leków według kategorii.
    5. Oblicz wartość magazynu każdego leku: cena * ilość_magazyn.
    6. Pokaż trzy najdroższe leki.
    7. Wyświetl sprzedaż: nazwa leku, ilość, data, wartość sprzedaży.
    8. Oblicz sumę sprzedanych sztuk dla każdego leku.
    9. Pokaż producentów, których leki były sprzedawane.
    10. Pokaż kategorie, w których średnia cena przekracza 20 zł.
  3. Zadanie 3. SELECT w siłowni

    Uwaga przed importem: plik z bazą jest spakowany jako .gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np. sklep_muzyczny.sql_.gz i import nie przejdzie, zmień nazwę pliku na sklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.

    Baza do pracy: Siłownia FitZone (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.

    1. Wyświetl zajęcia wraz z imieniem i nazwiskiem trenera.
    2. Wyświetl klientów z karnetem Premium.
    3. Policz liczbę zajęć prowadzonych przez każdego trenera.
    4. Policz zapisy na każde zajęcia.
    5. Wyświetl klientów zapisanych na Trening siłowy.
    6. Pokaż zajęcia rozpoczynające się po godzinie 17:00.
    7. Pokaż klientów, którzy zapisali się na więcej niż jedne zajęcia.
    8. Wyświetl raport: klient, typ karnetu, zajęcia, trener, data zapisu.
    9. Policz zapisy według dnia.
    10. Pokaż trenerów, którzy prowadzą zajęcia z co najmniej dwoma zapisami.

Typowe błędy

Bardzo częsty błąd to zapomnienie apostrofów wokół wartości tekstowych (WHERE kategoria = Instrumenty zamiast WHERE kategoria = 'Instrumenty') — SQL potraktuje to jako nazwę kolumny i zgłosi błąd. Drugi błąd to używanie LIKE bez znaków % (wtedy działa jak zwykłe porównanie =). Trzeci: próba napisania LIMIT przed ORDER BY — to zadziała odwrotnie niż zamierzone, bo LIMIT zawsze musi być na samym końcu zapytania.

Nawiązanie do egzaminu zawodowego

SELECT to trzon efektu "wyszukuje informacje w bazie danych przy użyciu języka SQL" (INF.03.4). W informatorze CKE pojawiają się dokładnie takie zadania: wybór dwóch kolumn z sortowaniem i LIMIT-em (zadanie 18) oraz użycie LIKE do wyszukiwania wzorca w tekście (zadanie 17) — oba typy zapytań znajdziesz w tej lekcji.