# Informatyka — zadanie 3.3

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2018-05/zad/3.3
> Wersja Markdown strony zadania (dla asystentów AI). Przy cytowaniu podaj matura.lol i link powyżej.

- arkusz: Informatyka · Matura · maj 2018 (rozszerzona)
- rok: 2018
- poziom: rozszerzona
- typ: closed
- punkty: 1
- działy: Bazy danych, dane i bazy

## Treść

Zadanie 3.3. (0-1)
Wskaż zdania prawdziwe dla języka SQL.
1.
W wynikach zapytania postaci SELECT ( ) ORDER BY ( )
zawsze dostajemy rekordy uporządkowane ściśle rosnąco według
wskazanego pola.
P
F
2. Zapytanie UPDATE może zmienić wartości pól w bazie danych.
P
F
3.
Zapytanie postaci SELECT * FROM tabela1 WHERE pole LIKE
( ) może w pewnych warunkach dać wszystkie rekordy z tabeli
tabela1.
P
F
4.
Wynik zapytania SELECT * FROM tabela1 JOIN tabela2 ON
tabela1.pole = tabela2.pole może być pusty przy niepustych
tabelach tabela1 oraz tabela2.
P
F
Wypełnia
egzaminator
Nr zadania
2.2.
3.1.
3.2.
3.3.
Maks. liczba pkt.
4
1
1
1
Uzyskana liczba pkt.
MIN_1R
BRUDNOPIS (nie podlega ocenie)

## Rozwiązanie — maturazai.pl (AI)

## Poprawna odpowiedź

**1) F, 2) P, 3) P, 4) P**

## Sposób 1 - analiza poszczególnych stwierdzeń

### Stwierdzenie 1: ORDER BY → ZAWSZE ściśle rosnąco → **F**

**Fałsz.** Dwa powody:

1. **Domyślnie ORDER BY sortuje ROSNĄCO (ASC), ale nie ŚCIŚLE.** Mogą być duplikaty (równe wartości), więc nie "ściśle rosnąco". Słowo "ściśle" oznacza, że a < b zawsze, a tu może być a = b.
2. **Można sortować malejąco**: `ORDER BY kolumna DESC` - wtedy w ogóle nie rosnąco.
3. **Słowo "zawsze" jest za mocne** - wystarczy jeden kontrprzykład.

```sql
SELECT * FROM tabela ORDER BY wiek; -- może być [25, 30, 30, 45] - to NIEROSNĄCO niemalejąco, ale NIE ściśle.
SELECT * FROM tabela ORDER BY wiek DESC; -- malejąco.

### Stwierdzenie 2: UPDATE może zmienić pola → **P**

**Prawda.** UPDATE to **podstawowe zapytanie modyfikujące** w SQL:
```sql
UPDATE pracownicy
SET pensja = pensja * 1.1
WHERE staz_lat > 5;
To zmienia wartości pola `pensja` u pracowników ze stażem > 5 lat.

### Stwierdzenie 3: SELECT * WHERE pole LIKE może zwrócić wszystkie → **P**

**Prawda.** Wzorzec `LIKE '%'` (jeden znak %, dowolny ciąg) **pasuje do każdego niepustego stringa**:

```sql
SELECT * FROM tabela1 WHERE pole LIKE '%';
To zwróci wszystkie rekordy gdzie `pole` jest NOT NULL.

Można też `LIKE '%[anything]%'` - pasuje wszędzie, gdzie występuje [anything].

### Stwierdzenie 4: JOIN może dać pusty wynik przy niepustych tabelach → **P**

**Prawda.** INNER JOIN zwraca tylko **pasujące pary** - jeśli żaden klucz z tabela1 nie pasuje do tabela2, wynik jest **pusty**.

**Przykład:**
```sql
-- tabela1: [{id: 1, kategoria: 'A'}, {id: 2, kategoria: 'A'}]
-- tabela2: [{id: 10, typ: 'B'}, {id: 11, typ: 'C'}]
SELECT * FROM tabela1 JOIN tabela2 ON tabela1.kategoria = tabela2.typ;
-- Wynik: PUSTY, bo 'A' nigdy nie pasuje do 'B' ani 'C'.

## Reference informatyczny - kluczowe konstrukcje SQL

> Reference - ORDER BY:
> - Domyślnie ASC (rosnąco). Można jawnie ASC/DESC.
> - **NIE musi być ściśle rosnące** - równe wartości mogą sąsiadować.
> - Sortowanie po wielu polach: `ORDER BY a, b DESC` (a rosnąco, b malejąco).
> - **NULL**: zwykle na początku przy ASC (zależy od silnika).
>
> Reference - UPDATE:
> - Składnia: `UPDATE tabela SET kol1 = val1, kol2 = val2 WHERE warunek;`.
> - **UWAGA**: bez `WHERE` aktualizuje WSZYSTKIE rekordy.
> - Może użyć podzapytań: `SET kol = (SELECT )`.
>
> Reference - LIKE:
> - `%` = dowolny ciąg znaków (0 lub więcej).
> - `_` = dokładnie jeden znak.
> - `LIKE '%'` = każdy niepusty string.
> - `LIKE 'A%'` = zaczynający się na A.
> - `LIKE '%kot%'` = zawierający "kot".
> - `LIKE '_at'` = 3-znakowy, kończący się na "at" (cat, bat, hat).
>
> Reference - JOIN:
> - **INNER JOIN** (= JOIN) - tylko pasujące rekordy z obu tabel.
> - **LEFT JOIN** - wszystkie z lewej + dopasowane z prawej (NULL gdy brak).
> - **RIGHT JOIN** - analogicznie z prawej.
> - **FULL JOIN** - wszystkie z obu.
> - **CROSS JOIN** - kartezjański.
> - Pusty wynik INNER JOIN może wystąpić nawet przy niepustych tabelach.

## Schemat oceniania CKE

> Klucz CKE (zadanie 3.3, max 1 pkt):
> - **1 pkt** - wszystkie 4 odpowiedzi poprawne: F, P, P, P
> - **0 pkt** - niepełna lub błędna

## Typowe pułapki

- **"Zawsze ściśle rosnąco"** - uczniowie myślą "ORDER BY = rosnąco" i klikają P, ale słowo "ściśle" wyklucza duplikaty. Plus można sortować DESC.
- **LIKE z `%` jako jedynym znakiem** - często pomijane. To bardzo użyteczne w optional filters.
- **JOIN z pustym wynikiem** - uczniowie mylą z tym, że tabele są niepuste = wynik niepusty. INNER JOIN wymaga DOPASOWAŃ.
- **UPDATE bez WHERE** - pamiętać o ryzyku, ale w stwierdzeniu pyta tylko CZY MOŻE zmienić → tak, oczywiście.

## Złożoność obliczeniowa

N/A - zadanie teoretyczne z SQL.

## Linki

- [dane JSON](https://matura.lol/api/question/maturazai-informatyka-inf-2018-05/zad/3.3)
- [otwórz w wyszukiwarce](https://matura.lol/?problem=maturazai-informatyka-inf-2018-05%2Fzad%2F3.3)

## Podobne zadania

- [Zadanie 3.2](https://matura.lol/question/informatyka-2023-czerwiec-matura-stara-rozszerzona/zad/3.2) — Zadanie 3.2. (0-1) 1. W wyniku zapytania: SELECT DISTINCT nazwisko FROM osoby; otrzymamy listę różnych nazwisk osób z tabeli osoby (nazwiska nie będą się powtar
- [Zadanie 3.3](https://matura.lol/question/informatyka-2018-maj-matura-rozszerzona/zad/3.3) — Zadanie 3.3. (0-1) Wskaż zdania prawdziwe dla języka SQL. 1. W wynikach zapytania postaci SELECT ( ) ORDER BY ( ) zawsze dostajemy rekordy uporządkowane ściśle 

_Ostatnia aktualizacja danych: 2026-10-03_
