# Informatyka — zadanie 3.2

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

- arkusz: Informatyka · Matura · maj 2017 (rozszerzona)
- rok: 2017
- poziom: rozszerzona
- typ: closed
- punkty: 1
- działy: Bazy danych

## Treść

Zadanie 3.2. (0-1)
Rozważ następujące zapytanie SQL do pewnej bazy danych:
SELECT pesel, COUNT(*)
FROM samochody
WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)
GROUP BY pesel HAVING COUNT(*) > 1
Po wykonaniu tego zapytania w odpowiedzi
1.
ten sam numer PESEL może pojawić więcej niż jeden raz.
P
F
2.
nie pojawi się żaden numer PESEL, który jest zapisany w tabeli
dokumenty_zastrzezone.
P
F
3.
otrzymasz tabelę o 2 kolumnach.
P
F
4.
przy odpowiednich danych może pojawić się wiersz
„82122302134, 1”.
P
F
Uwaga: kolumna pesel zawiera numery PESEL.
MIN_1R

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

## Poprawna odpowiedź

**F, P, P, F**

## Sposób 1 - analiza zapytania SQL

```sql
SELECT pesel, COUNT(*)
FROM samochody
WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)
GROUP BY pesel HAVING COUNT(*) > 1

**Krok po kroku:**
1. Z tabeli `samochody` wybieramy wiersze, gdzie `pesel` NIE występuje w `dokumenty_zastrzezone`.
2. Grupujemy wynik po `pesel` (każdy PESEL pojawi się dokładnie raz w grupie).
3. Filtr `HAVING COUNT(*) > 1` zostawia tylko grupy o liczności > 1 (co najmniej 2 samochody).
4. Wynikowa tabela ma 2 kolumny: pesel i COUNT(*).

## Sposób 2 - analiza każdego stwierdzenia

### Stwierdzenie 1: „Ten sam numer PESEL może pojawić więcej niż jeden raz."
- **GROUP BY pesel** powoduje, że każdy PESEL pojawia się DOKŁADNIE JEDEN RAZ w wynikach.
- **F** ✓

### Stwierdzenie 2: „Nie pojawi się żaden numer PESEL, który jest zapisany w tabeli dokumenty_zastrzezone."
- Klauzula `WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)` wyklucza takie PESELe PRZED grupowaniem.
- **P** ✓

### Stwierdzenie 3: „Otrzymasz tabelę o 2 kolumnach."
- `SELECT pesel, COUNT(*)` → dwie kolumny: pesel i count.
- **P** ✓

### Stwierdzenie 4: „Przy odpowiednich danych może pojawić się wiersz „82122302134, 1"."
- Klauzula `HAVING COUNT(*) > 1` wyklucza wiersze z licznikiem = 1. Wiersz „pesel, 1" jest NIEMOŻLIWY w wynikach.
- **F** ✓

## Sposób 3 - kontekst biznesowy zapytania

Zapytanie zwraca: właścicieli (PESEL), którzy mają **co najmniej 2 samochody** (COUNT > 1) i których dokumenty NIE są zastrzeżone (NOT IN dokumenty_zastrzezone). To typowy raport np. dla urzędu pojazdów.

## Reference algorytmiczny - semantyka WHERE vs HAVING

> Reference - WHERE vs HAVING:
> - **WHERE** - filtr na pojedynczych wierszach PRZED grupowaniem.
> - **GROUP BY** - grupowanie wierszy po wartościach kolumny.
> - **HAVING** - filtr na grupach PO grupowaniu (może używać funkcji agregujących COUNT, SUM, AVG, MIN, MAX).
> - Kolejność wykonania: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.

> Reference - NOT IN:
> - `pesel NOT IN (podzapytanie)` - wybierz wiersze, których pesel NIE występuje w wyniku podzapytania.
> - Uwaga: jeśli podzapytanie zwraca NULL, NOT IN może dawać nieoczekiwane wyniki (3-wartościowa logika SQL).

## Schemat oceniania CKE

> Klucz CKE (zadanie 3.2, max 1 pkt):
> - **1 pkt** - za KOMPLET 4 poprawnych odpowiedzi: F, P, P, F
> - **0 pkt** - odpowiedź niepełna/błędna albo brak

## Typowe pułapki

- **Stwierdzenie 1 (P zamiast F)** - uczeń myśli „w tabeli samochody PESEL może powtarzać się". Tak, ale po GROUP BY każdy PESEL pojawi się raz. Mylenie tabeli wejściowej z wyjściową.
- **Stwierdzenie 4 (P zamiast F)** - przeoczenie HAVING COUNT(*) > 1. Wiersz z licznikiem 1 jest NIEMOŻLIWY w wynikach.
- **NOT IN i NULL** - szczegół zaawansowany: gdy podzapytanie zawiera NULL, NOT IN może zwrócić puste wyniki (poza zakresem testu, ale dobrze wiedzieć).

## Złożoność obliczeniowa

- WHERE z NOT IN + GROUP BY + HAVING: typowo O(n log n) lub O(n) z hash-aggregate i indeksem na pesel.
- NOT IN nieoptymalnie skompilowane może być O(n²) - lepsze: LEFT JOIN WHERE IS NULL lub NOT EXISTS.

## Odpowiedź

**Odpowiedź:** F

_Rozwiązanie AI z maturazai.pl, weryfikowane z kluczem CKE — źródło nieoficjalne._

## Linki

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

## Podobne zadania

- [Zadanie 3.2](https://matura.lol/question/informatyka-2017-maj-matura-rozszerzona/zad/3.2) — Zadanie 3.2. (0-1) Rozważ następujące zapytanie SQL do pewnej bazy danych: SELECT pesel, COUNT(*) FROM samochody WHERE pesel NOT IN (SELECT pesel FROM dokumenty

_Ostatnia aktualizacja danych: 2026-10-03_
