Zapytanie (ang. query) to żądanie, które wysyłasz do bazy danych, żeby coś z niej wyciągnąć, policzyć albo zmienić. Najczęściej kojarzy się z pobieraniem danych za pomocą polecenia SELECT, ale to szersze pojęcie — zapytaniem jest też dodanie wiersza (INSERT), aktualizacja (UPDATE) czy usunięcie (DELETE). W bazach relacyjnych zapisujesz je w języku SQL, a baza tłumaczy Twoją deklarację „chcę te dane” na konkretny plan ich odszukania na dysku.
Najważniejsze, co musisz zrozumieć na starcie: SQL jest deklaratywny. Nie mówisz bazie „przejdź po pliku wiersz po wierszu i sprawdzaj warunek”. Mówisz tylko, jakiego wyniku oczekujesz, a silnik bazy (tzw. query planner, czyli optymalizator) sam decyduje, jak go najszybciej dostarczyć — czy użyć indeksu, czy przeskanować całą tabelę, w jakiej kolejności łączyć tabele. Twoje zapytanie to specyfikacja celu, nie instrukcja krok po kroku.
Pojedyncze zapytanie potrafi łączyć dane z wielu tabel (JOIN), filtrować je warunkami (WHERE), grupować i agregować (GROUP BY, COUNT, SUM) oraz sortować (ORDER BY). Dzięki temu jednym poleceniem odpowiadasz na pytania typu „ilu użytkowników z Polski złożyło zamówienie w czerwcu”.
Przykład z praktyki
Załóżmy, że masz tabele uzytkownicy i zamowienia w PostgreSQL. Chcesz listę klientów wraz z liczbą ich zamówień:
SELECT u.imie, COUNT(z.id) AS liczba FROM uzytkownicy u JOIN zamowienia z ON z.user_id = u.id WHERE z.data >= '2026-06-01' GROUP BY u.imie ORDER BY liczba DESC;
Jeśli zapytanie nagle zwalnia, użyj EXPLAIN ANALYZE przed poleceniem — pokaże, czy baza korzysta z indeksu, czy robi kosztowny Seq Scan przez całą tabelę.
Na co uważać
- SELECT * wygodne na szybko, ale w kodzie produkcyjnym wybieraj konkretne kolumny — mniej danych przez sieć i mniej niespodzianek przy zmianie schematu.
- SQL injection — nigdy nie sklejaj zapytania ze stringów z danymi od użytkownika. Używaj prepared statements i parametrów (
?albo$1). - Brak indeksu na kolumnie z
WHEREczyJOINto najczęstsza przyczyna wolnych zapytań. Baza skanuje wtedy wszystko. - N+1 — zamiast zapętlać setki małych zapytań w aplikacji, często wystarczy jeden dobry
JOIN.
Pojęcia powiązane: SQL, baza danych relacyjna, indeks, JOIN, query planner (optymalizator), ORM, transakcja, schemat bazy.