SELECT: jak wybrać z tabeli dokładnie to, co trzeba

INF.03 · teoria
autor: redakcja · 07.09.2026 · aktualizacja: 08.09.2026
Zapytanie SELECT krok po kroku: kolumny, WHERE z operatorami, LIKE, IN, BETWEEN, IS NULL, sortowanie ORDER BY, LIMIT i DISTINCT. Lekcja 8.4 kursu INF.03.

[ INF.03: PYTANIA Z TEGO DZIAŁU ]

SELECT (WYBIERZ) to po­le­ce­nie, które wy­bie­ra dane z tabeli. To naj­częst­sze po­le­ce­nie SQL na eg­za­mi­nie: w części pi­sem­nej py­ta­nie z baz danych zwykle po­ka­zu­je za­py­ta­nie i pyta, co ono zwróci, a w części prak­tycz­nej trzy z czte­rech kwe­rend to prawie zawsze SELECT. Ta lekcja uczy czytać i pisać za­py­ta­nia do jednej tabeli. Łą­cze­nie dwóch tabel jest w lekcji o złą­cze­niach.

Baza, na której ćwi­czy­my

Cały dział SQL używa tej samej małej bazy sklepu. Na po­czą­tek tabela produkt.
[ TABELA PRODUKT ]
id
nazwa
cena
ka­te­go­ria
sztuk
1
Kla­wia­tu­ra
120
ak­ce­so­ria
15
2
Mysz
45
ak­ce­so­ria
0
3
Mo­ni­tor 24
650
mo­ni­to­ry
4
4
Mo­ni­tor 27
990
mo­ni­to­ry
2
5
Kabel HDMI
25
ak­ce­so­ria
NULL
NULL w ko­lum­nie sztuk znaczy: war­tość nie­zna­na. To nie jest zero i nie jest pusty tekst. Wróci to jesz­cze w tej lekcji.

Szkie­let za­py­ta­nia

SELECT nazwa, cena FROM produkt;
Czyta się to od końca: z tabeli produkt (FROM, czyli Z) wy­bierz ko­lum­ny nazwa i cena. Ko­lej­ność kolumn w wyniku jest taka jak w za­py­ta­niu, a nie taka jak w tabeli. Gwiazd­ka za­stę­pu­je listę kolumn:
SELECT * FROM produkt;
To zwraca wszyst­kie ko­lum­ny i wszyst­kie wier­sze. Na eg­za­mi­nie prak­tycz­nym pierw­sze dwie kwe­ren­dy to zwykle SELECT * z wa­run­kiem, bo spraw­dza­ją, czy umiesz za­wę­zić wynik.
AS (JAKO) nadaje ko­lum­nie w wyniku inną nazwę:
SELECT nazwa, cena * 1.23 AS cena_brutto FROM produkt;
Ko­lum­na cena_brutto nie ist­nie­je w tabeli. Po­wsta­je tylko w wyniku i znika po za­py­ta­niu. Tak samo można nazwać ko­lum­nę wy­li­czo­ną z dwóch innych albo skró­cić długą nazwę.

WHERE: wa­ru­nek na wier­sze

WHERE (GDZIE) zo­sta­wia tylko te wier­sze, dla któ­rych wa­ru­nek jest praw­dzi­wy.
SELECT nazwa FROM produkt WHERE cena > 100;
Wynik: Kla­wia­tu­ra, Mo­ni­tor 24, Mo­ni­tor 27. Mysz i kabel od­pa­da­ją, bo ich cena nie jest więk­sza niż 100.
Ope­ra­to­ry po­rów­na­nia: =, <> (różne; MySQL ro­zu­mie też !=), <, >, <=, >=. Wa­run­ki łączy się sło­wa­mi AND (I), OR (LUB) i NOT (NIE).
SELECT nazwa FROM produkt WHERE kategoria = 'akcesoria' AND cena < 100;
Wynik: Mysz, Kabel HDMI. Tekst zawsze stoi w apo­stro­fach, liczba bez. MySQL wy­ba­czy '120' za­miast 120, ale w py­ta­niach o typy danych ta róż­ni­ca ma zna­cze­nie.
Pu­łap­ka: AND wiąże moc­niej niż OR. Wa­ru­nek a OR b AND c znaczy a OR (b AND c). Kiedy mie­szasz oba, sta­wiaj na­wia­sy, tak jak w ma­te­ma­ty­ce.

LIKE, IN, BETWEEN: krót­sze wa­run­ki

LIKE (PODOBNY DO) po­rów­nu­je tekst ze wzor­cem. Znak % za­stę­pu­je do­wol­ny ciąg znaków, także pusty. Znak _ za­stę­pu­je do­kład­nie jeden znak.
Wzo­rzec
Pasuje
Nie pasuje
'Mon%'
Mo­ni­tor 24, Mo­ni­tor 27
Mysz
'%HDMI'
Kabel HDMI
Kla­wia­tu­ra
'M___'
Mysz
Mo­ni­tor 24
'%o%'
Mo­ni­tor 24, Mo­ni­tor 27
Mysz
Py­ta­nie z in­for­ma­to­ra CKE: WHERE imie LIKE '_a%' wy­bie­ra imiona, w któ­rych a jest DRUGĄ literą: jeden do­wol­ny znak, potem a, potem co­kol­wiek. Kasia i Marek pasują, Anna nie.
IN (W) spraw­dza, czy war­tość jest na liście:
SELECT nazwa FROM produkt WHERE kategoria IN ('monitory', 'drukarki');
To samo, co kategoria = 'monitory' OR kategoria = 'drukarki', tylko krócej. Lista może mieć jedną war­tość albo dwa­dzie­ścia.
BETWEEN (POMIĘDZY) spraw­dza prze­dział, oba końce włącz­nie:
SELECT nazwa FROM produkt WHERE cena BETWEEN 45 AND 650;
Wynik: Kla­wia­tu­ra, Mysz, Mo­ni­tor 24. Mysz za 45 wcho­dzi, bo 45 jest końcem prze­dzia­łu.
Pu­łap­ka: BETWEEN 45 AND 650 to cena >= 45 AND cena <= 650. Od­po­wiedź z samymi > i <, bez rów­no­ści, jest w py­ta­niach naj­częst­szym błęd­nym wa­rian­tem.

NULL: war­tość, której nie ma

NULL nie równa się ni­cze­mu, nawet dru­gie­mu NULL. Wa­ru­nek sztuk = NULL nigdy nie jest praw­dzi­wy, więc takie za­py­ta­nie zwraca pusty wynik. Do spraw­dza­nia braku war­to­ści służy osobny ope­ra­tor:
SELECT nazwa FROM produkt WHERE sztuk IS NULL; SELECT nazwa FROM produkt WHERE sztuk IS NOT NULL;
Pierw­sze za­py­ta­nie zwraca Kabel HDMI. Drugie zwraca cztery po­zo­sta­łe pro­duk­ty. Zwróć uwagę na Mysz: ma sztuk = 0, czyli war­tość ZNANĄ (zero sztuk), więc nie jest NULL i prze­cho­dzi przez IS NOT NULL.

ORDER BY: ko­lej­ność wyniku

Bez ORDER BY (UPORZĄDKUJ WEDŁUG) baza zwraca wier­sze w ko­lej­no­ści, jaka jest jej wy­god­na, zwykle według klucza głów­ne­go, ale nikt tego nie obie­cu­je.
SELECT nazwa, cena FROM produkt ORDER BY cena DESC;
DESC (od descending, MALEJĄCO) daje od naj­droż­sze­go. ASC (od ascending, ROSNĄCO) jest do­myśl­ne, więc ORDER BY cena i ORDER BY cena ASC znaczą to samo. Można sor­to­wać po kilku ko­lum­nach: ORDER BY kategoria, cena DESC naj­pierw usta­wia ka­te­go­rie al­fa­be­tycz­nie, a w ob­rę­bie każdej ka­te­go­rii pro­duk­ty od naj­droż­sze­go.

LIMIT i DISTINCT

LIMIT (OGRANICZ) ucina wynik do po­da­nej liczby wier­szy. Razem z ORDER BY daje „dwa naj­tań­sze" albo „trzy naj­now­sze":
SELECT nazwa, cena FROM produkt ORDER BY cena LIMIT 2;
Wynik: Kabel HDMI, Mysz. Bez ORDER BY po­le­ce­nie LIMIT 2 zwróci do­wol­ne dwa wier­sze, więc na eg­za­mi­nie te dwa słowa idą zawsze razem.
DISTINCT (RÓŻNE) usuwa po­wtó­rze­nia z wyniku:
SELECT DISTINCT kategoria FROM produkt;
Wynik: ak­ce­so­ria, mo­ni­to­ry. Bez DISTINCT do­sta­niesz pięć wier­szy, bo tyle jest pro­duk­tów, i trzy z nich będą brzmia­ły „ak­ce­so­ria".
W prze­glą­dar­ce zmień wa­ru­nek albo ko­lum­nę sor­to­wa­nia i wy­ko­naj za­py­ta­nie po­now­nie:
[ SQL ]
baza: sklep
zapytanie
92/4000
Otwórz w placu zabaw ›

Ko­lej­ność klau­zul

Części za­py­ta­nia mają stałą ko­lej­ność. MySQL nie przyj­mie WHERE na­pi­sa­ne­go po ORDER BY.
SELECT kolumny FROM tabela WHERE warunek ORDER BY kolumna LIMIT liczba;
Między WHERE a ORDER BY wcho­dzą jesz­cze GROUP BY i HAVING, opi­sa­ne w lekcji o funk­cjach i gru­po­wa­niu.

Na eg­za­mi­nie

W części pi­sem­nej py­ta­nie po­ka­zu­je tabelę z kil­ko­ma wier­sza­mi i za­py­ta­nie, a od­po­wie­dzi to cztery moż­li­we wyniki. Metoda: przejdź przez wier­sze po kolei i dla każ­de­go sprawdź wa­ru­nek do­kład­nie tak, jak zro­bi­ła­by to baza. Zapisz sobie, które wier­sze zo­sta­ją, i do­pie­ro potem patrz na od­po­wie­dzi. Cztery rzeczy, na któ­rych py­ta­nia łapią naj­czę­ściej:
  • 1.
    BETWEEN obej­mu­je oba końce prze­dzia­łu.
  • 2.
    NULL nie prze­cho­dzi przez =, tylko przez IS NULL.
  • 3.
    % we wzorcu LIKE może za­stę­po­wać także pusty ciąg, więc 'Mon%' pasuje też do samego słowa Mon.
  • 4.
    LIMIT bez ORDER BY nie daje „naj­mniej­szych" ani „naj­więk­szych", tylko pierw­sze z brzegu.
W części prak­tycz­nej kwe­ren­dy za­pi­su­je się w pliku kwerendy.txt i do każdej robi zrzut ekranu wyniku z phpMyAdmin. Za­py­ta­nie musi zwra­cać do­kład­nie te ko­lum­ny, o które prosi arkusz, w tej ko­lej­no­ści. SELECT * tam, gdzie arkusz każe wy­pi­sać dwie ko­lum­ny, kosz­tu­je punkt.

Ściąga

Ele­ment
Znaczy
Przy­kład
SELECT
wy­bierz ko­lum­ny
SELECT nazwa, cena
*
wszyst­kie ko­lum­ny
SELECT *
AS
nazwij w wyniku
cena * 1.23 AS brutto
FROM
z tabeli
FROM produkt
WHERE
wa­ru­nek na wier­sze
WHERE cena > 100
AND, OR, NOT
i, lub, nie
WHERE a AND (b OR c)
LIKE
wzo­rzec: % do­wol­ny ciąg, _ jeden znak
LIKE 'Mon%'
IN
war­tość z listy
IN ('a', 'b')
BETWEEN
prze­dział z oboma koń­ca­mi
BETWEEN 10 AND 20
IS NULL
brak war­to­ści
WHERE sztuk IS NULL
ORDER BY
sortuj; ASC ro­sną­co (do­myśl­nie), DESC ma­le­ją­co
ORDER BY cena DESC
LIMIT
tylko N wier­szy
LIMIT 2
DISTINCT
bez po­wtó­rzeń
SELECT DISTINCT kategoria
Pobierz ściągę PDF
ZAWODNIK
egzamin zawodowy INF.02 · INF.03 · INF.04
Serwer Discord
Egzaminy zawodowe IT/Matury/Studia
@yastor
© 2026 Zawodnik · by Yastor
Arkusze i zasady oceniania pochodzą z CKE. Serwis nie jest powiązany z Centralną Komisją Egzaminacyjną.