Lekcja 3: Pierwsze zapytanie - SELECT i FROM

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Lekcja 3: Pierwsze zapytanie - SELECT i FROM
Required In Progress

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:

  1. Wymieniaj kolumny jawnie — ułatwia to zrozumienie zapytania i kontrolę nad przesyłanymi danymi.
  2. Używaj aliasów, gdy to potrzebne — czytelność i jednoznaczność (np. przy dołączaniu tabel): SELECT u.Imie AS ImieUcznia, o.Nazwa AS NazwaPrzedmiotu.
  3. Ogranicz liczbę wierszy przy eksploracji danych (np. LIMIT 100), żeby nie obciążać bazy niepotrzebnie.
  4. Używaj klauzuli WHERE do filtrowania już na poziomie bazy danych zamiast pobierać wszystko i filtrować po stronie aplikacji.
  5. 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.