Struktura podstawowego zapytania SQL
Wkraczamy w świat DQL (Data Query Language). Każde zapytanie pobierające dane w SQL zwykle zaczyna się od przynajmniej dwóch słów kluczowych: SELECT oraz FROM. To najprostszy i niezbędny szkielet zapytania.
SELECT [lista_kolumn]
FROM [nazwa_tabeli];
Słowo kluczowe SELECT — co chcemy zobaczyć
Klauzula SELECT określa, które kolumny (lub wyrażenia) mają się pojawić w wynikach. Można tam umieszczać nazwy kolumn, wyrażenia arytmetyczne, funkcje agregujące (np. AVG, SUM) oraz aliasy kolumn.
SELECT Imie, Nazwisko, SredniaOcen
FROM Uczniowie;
Dodatkowe możliwości w klauzuli SELECT:
- Alias kolumny — zmiana nazwy kolumny w wyniku:
SELECT Imie AS PierwszeImie. - Wyrażenia — można zwracać obliczenia:
SELECT SredniaOcen * 1.0 AS SredniaProcent. - Funkcje agregujące — używane z GROUP BY:
SELECT COUNT(*),AVG(SredniaOcen). - DISTINCT — usunięcie duplikatów:
SELECT DISTINCT Miasto FROM Uczniowie.
Słowo kluczowe FROM — skąd pobieramy dane
Klauzula FROM wskazuje tabelę (lub tabele) będące źródłem danych. Można podawać nazwy tabel, aliasy tabel oraz pełne kwalifikacje (np. schema.nazwa_tabeli).
SELECT u.Imie, u.Nazwisko
FROM Uczniowie AS u;
W praktyce zapytania często zawierają więcej klauzul (kolejność typowa w SQL):
SELECT ...
FROM ...
WHERE ... -- filtrowanie wierszy
GROUP BY ... -- grupowanie
HAVING ... -- filtrowanie grup
ORDER BY ... -- sortowanie wyników
LIMIT ... -- ograniczenie liczby wierszy (różne DB mają różne nazwy)
Uwagi do FROM
- Można łączyć tabele (JOIN) oraz podzapytania (subquery) w klauzuli FROM.
- Stosowanie aliasów tabel (np.
u) ułatwia czytelność przy wielu tabelach:SELECT u.* FROM Uczniowie u JOIN Oceny o ON u.Id = o.UczenId.
Użycie * do wybrania wszystkich kolumn
Symbol * oznacza „wszystkie dostępne kolumny” z tabeli wskazanej w FROM.
SELECT * FROM Uczniowie;
To zapytanie zwróci wszystkie wiersze i wszystkie kolumny z tabeli Uczniowie. Jest to bardzo wygodne podczas eksploracji danych, ale w kodzie produkcyjnym należy ostrożnie używać tego skrótu.
Dlaczego SELECT * jest uważane za złą praktykę w produkcji?
- Wydajność: Pobierasz często więcej danych niż potrzebujesz (np. duże pola tekstowe, obrazy), co zwiększa obciążenie bazy i transfer sieciowy.
- Kruchość kodu: Dodanie nowej kolumny w tabeli zmienia wynik zapytania (np. kolejność kolumn, ich liczba), co może zepsuć aplikacje oczekujące określonej struktury.
- Bezpieczeństwo i prywatność: Możesz przypadkowo ujawnić wrażliwe dane, jeśli nie kontrolujesz jawnie listy kolumn.
Wybieranie konkretnych, nazwanych kolumn — dobre praktyki
Preferowaną metodą jest jawne wymienienie tylko tych kolumn, które są potrzebne. Dzięki temu zapytanie jest czytelne, wydajne i odporne na zmiany struktury tabeli.
SELECT Imie, Nazwisko, SredniaOcen
FROM Uczniowie;
Dodatkowe wskazówki i dobre praktyki:
- Wymieniaj kolumny jawnie — ułatwia to zrozumienie zapytania i kontrolę nad przesyłanymi danymi.
- Używaj aliasów, gdy to potrzebne — czytelność i jednoznaczność (np. przy dołączaniu tabel):
SELECT u.Imie AS ImieUcznia, o.Nazwa AS NazwaPrzedmiotu. - Ogranicz liczbę wierszy przy eksploracji danych (np.
LIMIT 100), żeby nie obciążać bazy niepotrzebnie. - Używaj klauzuli WHERE do filtrowania już na poziomie bazy danych zamiast pobierać wszystko i filtrować po stronie aplikacji.
- Testuj wydajność — sprawdzaj plany zapytań (EXPLAIN), indeksy i dobieraj zapytania tak, by korzystały z indeksów.
Przykłady rozszerzone
-- Jawne wybieranie kolumn, aliasy i filtrowanie
SELECT Imie AS PierwszeImie, Nazwisko, SredniaOcen
FROM Uczniowie
WHERE SredniaOcen >= 4.0
ORDER BY SredniaOcen DESC
LIMIT 10;
-- Użycie aliasu tabeli i selekcja wszystkich kolumn tylko z jednej tabeli
SELECT u.*
FROM Uczniowie u
JOIN Oceny o ON u.Id = o.UczenId
WHERE o.Przedmiot = 'Matematyka';
Podsumowanie — co warto zapamiętać
- Minimum zapytania to SELECT i FROM.
- Unikaj SELECT * w kodzie produkcyjnym; używaj go tylko przy szybkiej eksploracji danych.
- Wymieniaj jawnie potrzebne kolumny — to poprawia wydajność i stabilność aplikacji.
- Pamiętaj o dodatkowych klauzulach (WHERE, GROUP BY, ORDER BY, LIMIT) — one pozwalają precyzyjnie kontrolować wyniki.