Zapytanie

Żądanie pobrania lub przetworzenia danych z bazy, najczęściej za pomocą polecenia SELECT. Może łączyć wiele tabel i warunków.

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 WHERE czy JOIN to 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.