KWALIFIKACJA INF3 - STYCZEŃ 2020

PYTANIE NR 15.
W zapytaniu SQL, umieszczonym poniżej, znak gwiazdki oznacza, że w wyniku tego zapytania

SELECT * FROM mieszkancy WHERE imie = 'Anna';

A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W zapytaniu SELECT * operator * oznacza wybór wszystkich kolumn tabeli. Klauzula WHERE filtruje wynik do tych wierszy, które spełniają warunek, czyli tutaj tylko rekordy, gdzie imię równa się 'Anna'. Dlatego wynik zawiera komplet pól, ale nie wszystkie rekordy.

Pełne wyjaśnienie:

W SQL zapytanie typu SELECT służy do pobierania danych. Składa się m.in. z listy wybieranych kolumn oraz źródła danych (tabela) i opcjonalnego filtra.

1) Co oznacza *
Gwiazdka * w części SELECT * jest tzw. operatorem wieloznacznym i oznacza: zwróć wszystkie kolumny z podanej tabeli. Jest to równoważne wypisaniu po przecinku każdej nazwy kolumny (np. imie, nazwisko, …), tylko w skróconej formie.

2) Co robi WHERE
Klauzula WHERE nie wybiera kolumn, tylko ogranicza liczbę wierszy w wyniku. Warunek imie = 'Anna' oznacza, że zostaną zwrócone wyłącznie te rekordy, w których wartość w kolumnie imie jest dokładnie równa tekstowi 'Anna'.

Wniosek
Wynik zapytania zawiera więc wszystkie kolumny tabeli mieszkancy, ale tylko dla wyfiltrowanych wierszy spełniających warunek.

Dlaczego pozostałe odpowiedzi są błędne?

  • Stwierdzenie o "polu o nazwie *" jest niepoprawne: * nie jest nazwą kolumny, tylko skrótem oznaczającym zestaw wszystkich kolumn.
  • Odpowiedź o "wszystkich rekordach niezależnie od imie" ignoruje fakt, że WHERE działa jako filtr i ogranicza wynik.
  • Twierdzenie, że warunek WHERE jest ignorowany, jest sprzeczne z zasadą działania SQL: WHERE jest wykonywany przy wyborze wierszy i bez niego wynik byłby szerszy.

Wskazówka praktyczna: w aplikacjach internetowych często zamiast * podaje się konkretne kolumny (np. SELECT imie, nazwisko), aby poprawić czytelność i ograniczyć ilość przesyłanych danych.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
W zapytaniu SELECT znak * oznacza: "zwróć wszystkie kolumny" z tabeli wskazanej po FROM. Nie dotyczy liczby rekordów (wierszy), tylko zakresu pól w pojedynczym rekordzie.
Bo * jest elementem listy kolumn po słowie SELECT, czyli mówi, jakie kolumny mają znaleźć się w wyniku. O tym, które wiersze trafią do wyniku, decyduje głównie WHERE (lub jego brak).
WHERE filtruje wiersze. Warunek imie = 'Anna' oznacza, że w wyniku zostaną tylko te rekordy, w których wartość kolumny imie jest dokładnie równa tekstowi Anna. Pozostałe rekordy są odrzucane.
W typowym SQL literały tekstowe zapisuje się w apostrofach, więc poprawnie jest 'Anna'. Bez apostrofów wiele systemów potraktuje Anna jako identyfikator (np. nazwę kolumny) i zgłosi błąd albo zinterpretuje zapytanie inaczej.
SELECT * zwraca wszystkie kolumny, a SELECT imie, nazwisko tylko wskazane pola. W praktyce podawanie konkretnych kolumn bywa lepsze: wynik jest czytelniejszy, zwykle mniejszy i mniej zależny od zmian struktury tabeli.
Tak. Bez WHERE nie ma filtrowania wierszy, więc wynik zawiera wszystkie rekordy tabeli. Nadal będą to wszystkie kolumny (bo jest *), ale liczba wierszy będzie większa niż przy filtrze imie = 'Anna'.
Najczęstsze pomyłki to: mylenie * z "wszystkimi rekordami", pomijanie WHERE podczas czytania zapytania oraz złe zapisy literałów tekstowych (brak apostrofów). Błąd daje zwykle inny zakres danych albo błąd składni.
Może, zwłaszcza gdy tabela ma dużo kolumn lub duże pola (np. długie teksty). Pobierasz wtedy więcej danych niż potrzebujesz, co zwiększa transfer i czas przetwarzania. Dlatego w produkcji często wybiera się tylko potrzebne kolumny.
Stosuje się operatory logiczne, np. AND lub OR. Przykład: WHERE imie = 'Anna' AND miasto = 'Kraków'. Wtedy rekord musi spełniać oba warunki. Przy OR wystarczy spełnienie jednego z nich.
Nie zawsze. W wielu narzędziach średnik kończy polecenie, zwłaszcza gdy wykonujesz kilka zapytań naraz. Jednak część interfejsów lub bibliotek wykonuje pojedyncze zapytanie bez średnika. Na egzaminie warto rozumieć, że średnik to separator poleceń.
info

Około 81% zdających odpowiada poprawnie na to pytanie. średnio łatwe

W praktyce zawodowej kluczowe jest to, że w zapytaniu SELECT * operator * oznacza wybór wszystkich kolumn tabeli.

Źródła:

  • PostgreSQL Documentation: "SELECT", section "SELECT List" and "WHERE Clause" — https://www.postgresql.org/docs/current/sql-select.html (dostęp: 2026-02-18)
  • MySQL 8.0 Reference Manual: "SELECT Statement", description of "select_expr" and "WHERE" — https://dev.mysql.com/doc/refman/8.0/en/select.html (dostęp: 2026-02-18)
  • SQLite Documentation: "SELECT" (lang_select), explanation of result columns and WHERE filtering — https://www.sqlite.org/lang_select.html (dostęp: 2026-02-18)

Materiały:

  • Dokumentacja wybranego systemu DBMS (PostgreSQL/MySQL/SQLite) – rozdział o SELECT
  • Kurs podstaw SQL: selekcja kolumn i filtrowanie WHERE
  • Ćwiczenia: pisanie zapytań SELECT z różnymi warunkami (AND/OR/LIKE)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego