KWALIFIKACJA INF3 - STYCZEŃ 2015

PYTANIE NR 19.
Kod

SELECT imie, pesel, wiek FROM dane WHERE wiek IN (18,30)

spowoduje wybranie
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Klauzula WHERE wiek IN (18,30) wybiera rekordy, dla których kolumna wiek ma wartość dokładnie 18 albo dokładnie 30. Nie oznacza to przedziału 18–30. Operator IN jest równoważny warunkowi wiek=18 OR wiek=30, a SELECT zwraca tylko kolumny imie, pesel i wiek.

Pełne wyjaśnienie:

Zapytanie:

SELECT imie, pesel, wiek
FROM dane
WHERE wiek IN (18,30)

Składa się z dwóch kluczowych elementów: listy wybieranych kolumn w SELECT oraz warunku filtrującego w WHERE.

SELECT imie, pesel, wiek oznacza, że w wyniku zapytania mają znaleźć się wyłącznie trzy kolumny: imię, numer PESEL i wiek (inne kolumny z tabeli nie zostaną zwrócone).

WHERE wiek IN (18,30) ogranicza wynik do tych wierszy (rekordów), w których wartość w kolumnie wiek jest jedną z wartości wymienionych na liście. W praktyce jest to skrót zapisu logicznego:

WHERE wiek = 18 OR wiek = 30

Dlatego poprawne jest stwierdzenie, że zapytanie wybierze dane osób w wieku równym 18 lub 30 lat.

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

  • Odpowiedź mówiąca o "przedziale od 18 do 30 lat" myli operator IN z operatorem przedziału. W SQL do przedziałów używa się najczęściej BETWEEN 18 AND 30 (z uwzględnieniem wartości krańcowych) albo dwóch porównań, np. wiek >= 18 AND wiek <= 30.
  • Odpowiedź o osobach "powyżej 30 lat" jest sprzeczna z warunkiem, bo IN (18,30) nie obejmuje wartości większych niż 30 (np. 31, 40). Aby wybrać osoby powyżej 30 lat, warunek wyglądałby np. wiek > 30.
  • Odpowiedź zawierająca "nazwiska" jest niezgodna z listą kolumn w SELECT (nie ma tam kolumny nazwisko). Dodatkowo "poniżej 18 lat" nie wynika z warunku równości do 18 lub 30.

Wskazówka egzaminacyjna: gdy widzisz IN (a,b,c), czytaj to jako "równe a lub b lub c", a nie jako zakres liczbowy.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Operator IN sprawdza, czy wartość kolumny należy do podanej listy wartości. Warunek wiek IN (18,30) oznacza: wiek równy 18 lub wiek równy 30. To skrót zapisu wielu porównań połączonych operatorem OR.
IN wybiera wartości dokładnie wymienione na liście (np. 18 i 30). BETWEEN opisuje przedział (np. 18–30, zwykle z wartościami krańcowymi). Jeśli w odpowiedziach pojawia się "od … do …", najczęściej chodzi o BETWEEN, a nie o IN.
Bo nawias z wartościami po IN to lista, a nie zapis matematycznego przedziału. SQL interpretuje to jako zbiór dopuszczalnych wartości. Wiek 19, 25 czy 29 nie spełnia warunku IN (18,30), mimo że leży "pomiędzy" 18 i 30.
Najczęściej używa się BETWEEN: wiek BETWEEN 18 AND 30 (zwykle włącznie). Alternatywnie można użyć dwóch porównań: wiek >= 18 AND wiek <= 30. To inna logika niż lista wartości w IN.
Zapytanie zwróci tylko te kolumny, które zostały wymienione po słowie SELECT. Pozostałe kolumny tabeli istnieją, ale nie pojawią się w wyniku. To częsty haczyk na egzaminie: warunek filtruje wiersze, a lista po SELECT decyduje o kolumnach wyniku.
Równoważny zapis to połączenie porównań operatorem logicznym OR: wiek = 18 OR wiek = 30. W praktyce IN jest wygodniejsze przy dłuższych listach, np. status IN ('nowy','w trakcie','zamknięty').
IN działa dla różnych typów danych, o ile porównywane wartości mają zgodny typ z kolumną. Można filtrować liczby (np. wiek), tekst (np. rola IN ('admin','user')) oraz inne typy wspierane przez silnik bazy. Ważne jest, by nie mieszać typów bez sensu.
Najczęstsze pomyłki to: traktowanie IN (a,b) jak przedziału, mylenie listy kolumn w SELECT z warunkiem w WHERE, oraz przeoczenie, że IN oznacza dopasowanie dokładne. Warto przepisywać IN na OR, by sprawdzić logikę.
Gdy porównujesz tę samą kolumnę do wielu wartości, IN jest zwykle czytelniejsze niż długi łańcuch OR. Dla dwóch wartości różnica jest kosmetyczna, ale dla większej listy IN poprawia czytelność i zmniejsza ryzyko błędu w składni.
Jeśli wiek ma wartość NULL, to warunek wiek IN (18,30) nie będzie spełniony, bo NULL nie jest równe żadnej wartości. Aby uwzględnić braki danych, trzeba dodać osobny warunek, np. wiek IS NULL, zależnie od wymagań zadania.
info

Około 69% zdających odpowiada poprawnie na to pytanie. średnie

Specjaliści zwracają uwagę: "Klauzula WHERE wiek IN (18,30) wybiera rekordy, dla których kolumna wiek ma wartość dokładnie 18 albo dokładnie 30."

Źródła:

  • MySQL 8.0 Reference Manual — Operators: IN (sekcja o porównaniach), https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_in - accessed 2026-02-27
  • PostgreSQL Documentation — 9.24. Comparison Operators (opis IN), https://www.postgresql.org/docs/current/functions-comparison.html - accessed 2026-02-27
  • Microsoft Learn — Transact-SQL: IN (opis operatora IN), https://learn.microsoft.com/en-us/sql/t-sql/language-elements/in-transact-sql - accessed 2026-02-27

Materiały:

  • Dokumentacja wybranego silnika bazy danych: sekcja o operatorach i warunku WHERE
  • Ćwiczenia: porównanie wyników zapytań z IN, BETWEEN oraz OR na przykładowej tabeli
  • Kurs podstaw SQL (SELECT, WHERE, operatory logiczne)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego