{"id":"informatyka-2017-maj-matura-rozszerzona/zad/3.2","paper_id":"informatyka-2017-maj-matura-rozszerzona","number":"3.2","points":1,"ptype":"true_false","subject":"informatyka","category":"matura","year":2017,"month":"maj","level":"rozszerzona","text":"Zadanie 3.2. (0-1)\nRozważ następujące zapytanie SQL do pewnej bazy danych:\nSELECT pesel, COUNT(*)\nFROM samochody\nWHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)\nGROUP BY pesel HAVING COUNT(*) > 1\nPo wykonaniu tego zapytania w odpowiedzi\n1.\nten sam numer PESEL może pojawić więcej niż jeden raz.\nP\nF\n2.\nnie pojawi się żaden numer PESEL, który jest zapisany w tabeli\ndokumenty_zastrzezone.\nP\nF\n3.\notrzymasz tabelę o 2 kolumnach.\nP\nF\n4.\nprzy odpowiednich danych może pojawić się wiersz\n„82122302134, 1”.\nP\nF\nUwaga: kolumna pesel zawiera numery PESEL.\nMIN_1R","answer":"F","answer_text":"Zadanie 3.2. (0-1)\nIII. Rozwiązywanie problemów\ni podejmowanie decyzji […],\nz zastosowaniem podejścia algorytmicznego.\n2. Wyszukiwanie, gromadzenie,\nselekcjonowanie, przetwarzanie\ni wykorzystywanie informacji,\nwspółtworzenie zasobów w sieci,\nkorzystanie z różnych źródeł i sposobów\nzdobywania informacji.\nZdający:\n2) stosuje metody wyszukiwania\ni przetwarzania informacji w relacyjnej bazie\ndanych (język SQL);\nSchemat punktowania\n1 p. - za wskazanie czterech poprawnych odpowiedzi.\n0 p. - za odpowiedź niepełną lub błędną albo za brak odpowiedzi.\nPoprawna odpowiedź\nF, P, P, F.","solution":"## Poprawna odpowiedź\n\n**F, P, P, F**\n\n## Sposób 1 - analiza zapytania SQL\n\n```sql\nSELECT pesel, COUNT(*)\nFROM samochody\nWHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)\nGROUP BY pesel HAVING COUNT(*) > 1\n\n**Krok po kroku:**\n1. Z tabeli `samochody` wybieramy wiersze, gdzie `pesel` NIE występuje w `dokumenty_zastrzezone`.\n2. Grupujemy wynik po `pesel` (każdy PESEL pojawi się dokładnie raz w grupie).\n3. Filtr `HAVING COUNT(*) > 1` zostawia tylko grupy o liczności > 1 (co najmniej 2 samochody).\n4. Wynikowa tabela ma 2 kolumny: pesel i COUNT(*).\n\n## Sposób 2 - analiza każdego stwierdzenia\n\n### Stwierdzenie 1: „Ten sam numer PESEL może pojawić więcej niż jeden raz.\"\n- **GROUP BY pesel** powoduje, że każdy PESEL pojawia się DOKŁADNIE JEDEN RAZ w wynikach.\n- **F** ✓\n\n### Stwierdzenie 2: „Nie pojawi się żaden numer PESEL, który jest zapisany w tabeli dokumenty_zastrzezone.\"\n- Klauzula `WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)` wyklucza takie PESELe PRZED grupowaniem.\n- **P** ✓\n\n### Stwierdzenie 3: „Otrzymasz tabelę o 2 kolumnach.\"\n- `SELECT pesel, COUNT(*)` → dwie kolumny: pesel i count.\n- **P** ✓\n\n### Stwierdzenie 4: „Przy odpowiednich danych może pojawić się wiersz „82122302134, 1\".\"\n- Klauzula `HAVING COUNT(*) > 1` wyklucza wiersze z licznikiem = 1. Wiersz „pesel, 1\" jest NIEMOŻLIWY w wynikach.\n- **F** ✓\n\n## Sposób 3 - kontekst biznesowy zapytania\n\nZapytanie 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.\n\n## Reference algorytmiczny - semantyka WHERE vs HAVING\n\n> Reference - WHERE vs HAVING:\n> - **WHERE** - filtr na pojedynczych wierszach PRZED grupowaniem.\n> - **GROUP BY** - grupowanie wierszy po wartościach kolumny.\n> - **HAVING** - filtr na grupach PO grupowaniu (może używać funkcji agregujących COUNT, SUM, AVG, MIN, MAX).\n> - Kolejność wykonania: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.\n\n> Reference - NOT IN:\n> - `pesel NOT IN (podzapytanie)` - wybierz wiersze, których pesel NIE występuje w wyniku podzapytania.\n> - Uwaga: jeśli podzapytanie zwraca NULL, NOT IN może dawać nieoczekiwane wyniki (3-wartościowa logika SQL).\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 3.2, max 1 pkt):\n> - **1 pkt** - za KOMPLET 4 poprawnych odpowiedzi: F, P, P, F\n> - **0 pkt** - odpowiedź niepełna/błędna albo brak\n\n## Typowe pułapki\n\n- **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ą.\n- **Stwierdzenie 4 (P zamiast F)** - przeoczenie HAVING COUNT(*) > 1. Wiersz z licznikiem 1 jest NIEMOŻLIWY w wynikach.\n- **NOT IN i NULL** - szczegół zaawansowany: gdy podzapytanie zawiera NULL, NOT IN może zwrócić puste wyniki (poza zakresem testu, ale dobrze wiedzieć).\n\n## Złożoność obliczeniowa\n\n- WHERE z NOT IN + GROUP BY + HAVING: typowo O(n log n) lub O(n) z hash-aggregate i indeksem na pesel.\n- NOT IN nieoptymalnie skompilowane może być O(n²) - lepsze: LEFT JOIN WHERE IS NULL lub NOT EXISTS.","image":"img/informatyka-2017-maj-matura-rozszerzona/zad-3.2.webp","solution_image":null,"topics":null,"page_from":6,"source":"ocr","answer_source":"maturazai","answer_text_source":"ocr","solution_source":"maturazai","text_source":"ocr","source_label":"Informatyka · Matura · maj 2017 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 3.2. (0-1)<br>Rozważ następujące zapytanie SQL do pewnej bazy danych:<br>SELECT pesel, COUNT(*)<br>FROM samochody<br>WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)<br>GROUP BY pesel HAVING COUNT(*) &gt; 1<br>Po wykonaniu tego zapytania w odpowiedzi<br>1.<br>ten sam numer PESEL może pojawić więcej niż jeden raz.<br>P<br>F<br>2.<br>nie pojawi się żaden numer PESEL, który jest zapisany w tabeli<br>dokumenty_zastrzezone.<br>P<br>F<br>3.<br>otrzymasz tabelę o 2 kolumnach.<br>P<br>F<br>4.<br>przy odpowiednich danych może pojawić się wiersz<br>„82122302134, 1”.<br>P<br>F<br>Uwaga: kolumna pesel zawiera numery PESEL.<br>MIN_1R</p>","answer_text_html":"<p>Zadanie 3.2. (0-1)<br>III. Rozwiązywanie problemów<br>i podejmowanie decyzji […],<br>z zastosowaniem podejścia algorytmicznego.</p>\n<ol><li>Wyszukiwanie, gromadzenie,</li></ol>\n<p>selekcjonowanie, przetwarzanie<br>i wykorzystywanie informacji,<br>współtworzenie zasobów w sieci,<br>korzystanie z różnych źródeł i sposobów<br>zdobywania informacji.<br>Zdający:</p>\n<ol><li>stosuje metody wyszukiwania</li></ol>\n<p>i przetwarzania informacji w relacyjnej bazie<br>danych (język SQL);<br>Schemat punktowania<br>1 p. - za wskazanie czterech poprawnych odpowiedzi.<br>0 p. - za odpowiedź niepełną lub błędną albo za brak odpowiedzi.<br>Poprawna odpowiedź<br>F, P, P, F.</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>F, P, P, F</strong></p>\n<h4>Sposób 1 - analiza zapytania SQL</h4>\n<p>```sql<br>SELECT pesel, COUNT(*)<br>FROM samochody<br>WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)<br>GROUP BY pesel HAVING COUNT(*) &gt; 1</p>\n<p><strong>Krok po kroku:</strong></p>\n<ol><li>Z tabeli <code>samochody</code> wybieramy wiersze, gdzie <code>pesel</code> NIE występuje w <code>dokumenty_zastrzezone</code>.</li><li>Grupujemy wynik po <code>pesel</code> (każdy PESEL pojawi się dokładnie raz w grupie).</li><li>Filtr <code>HAVING COUNT(*) &gt; 1</code> zostawia tylko grupy o liczności &gt; 1 (co najmniej 2 samochody).</li><li>Wynikowa tabela ma 2 kolumny: pesel i COUNT(*).</li></ol>\n<h4>Sposób 2 - analiza każdego stwierdzenia</h4>\n<h5>Stwierdzenie 1: „Ten sam numer PESEL może pojawić więcej niż jeden raz.&quot;</h5>\n<ul><li><strong>GROUP BY pesel</strong> powoduje, że każdy PESEL pojawia się DOKŁADNIE JEDEN RAZ w wynikach.</li><li><strong>F</strong> ✓</li></ul>\n<h5>Stwierdzenie 2: „Nie pojawi się żaden numer PESEL, który jest zapisany w tabeli dokumenty_zastrzezone.&quot;</h5>\n<ul><li>Klauzula <code>WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)</code> wyklucza takie PESELe PRZED grupowaniem.</li><li><strong>P</strong> ✓</li></ul>\n<h5>Stwierdzenie 3: „Otrzymasz tabelę o 2 kolumnach.&quot;</h5>\n<ul><li><code>SELECT pesel, COUNT(*)</code> → dwie kolumny: pesel i count.</li><li><strong>P</strong> ✓</li></ul>\n<h5>Stwierdzenie 4: „Przy odpowiednich danych może pojawić się wiersz „82122302134, 1&quot;.&quot;</h5>\n<ul><li>Klauzula <code>HAVING COUNT(*) &gt; 1</code> wyklucza wiersze z licznikiem = 1. Wiersz „pesel, 1&quot; jest NIEMOŻLIWY w wynikach.</li><li><strong>F</strong> ✓</li></ul>\n<h4>Sposób 3 - kontekst biznesowy zapytania</h4>\n<p>Zapytanie zwraca: właścicieli (PESEL), którzy mają <strong>co najmniej 2 samochody</strong> (COUNT &gt; 1) i których dokumenty NIE są zastrzeżone (NOT IN dokumenty_zastrzezone). To typowy raport np. dla urzędu pojazdów.</p>\n<h4>Reference algorytmiczny - semantyka WHERE vs HAVING</h4>\n<blockquote>Reference - WHERE vs HAVING:<br>- <strong>WHERE</strong> - filtr na pojedynczych wierszach PRZED grupowaniem.<br>- <strong>GROUP BY</strong> - grupowanie wierszy po wartościach kolumny.<br>- <strong>HAVING</strong> - filtr na grupach PO grupowaniu (może używać funkcji agregujących COUNT, SUM, AVG, MIN, MAX).<br>- Kolejność wykonania: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.</blockquote>\n<blockquote>Reference - NOT IN:<br>- <code>pesel NOT IN (podzapytanie)</code> - wybierz wiersze, których pesel NIE występuje w wyniku podzapytania.<br>- Uwaga: jeśli podzapytanie zwraca NULL, NOT IN może dawać nieoczekiwane wyniki (3-wartościowa logika SQL).</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 3.2, max 1 pkt):<br>- <strong>1 pkt</strong> - za KOMPLET 4 poprawnych odpowiedzi: F, P, P, F<br>- <strong>0 pkt</strong> - odpowiedź niepełna/błędna albo brak</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Stwierdzenie 1 (P zamiast F)</strong> - uczeń myśli „w tabeli samochody PESEL może powtarzać się&quot;. Tak, ale po GROUP BY każdy PESEL pojawi się raz. Mylenie tabeli wejściowej z wyjściową.</li><li><strong>Stwierdzenie 4 (P zamiast F)</strong> - przeoczenie HAVING COUNT(*) &gt; 1. Wiersz z licznikiem 1 jest NIEMOŻLIWY w wynikach.</li><li><strong>NOT IN i NULL</strong> - szczegół zaawansowany: gdy podzapytanie zawiera NULL, NOT IN może zwrócić puste wyniki (poza zakresem testu, ale dobrze wiedzieć).</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>WHERE z NOT IN + GROUP BY + HAVING: typowo O(n log n) lub O(n) z hash-aggregate i indeksem na pesel.</li><li>NOT IN nieoptymalnie skompilowane może być O(n²) - lepsze: LEFT JOIN WHERE IS NULL lub NOT EXISTS.</li></ul>"}]}