{"id":"informatyka-2017-maj-matura-rozszerzona/zad/3.1","paper_id":"informatyka-2017-maj-matura-rozszerzona","number":"3.1","points":1,"ptype":"true_false","subject":"informatyka","category":"matura","year":2017,"month":"maj","level":"rozszerzona","text":"Zadanie 3.1. (0-1)\nPo wykonaniu podanego zapytania SQL do pewnej bazy danych wyniki będą zawsze\nuporządkowane niemalejąco według pola nazwa.\n1.\nSELECT nazwa, wartosc FROM dane ORDER BY wartosc, nazwa\nP\nF\n2.\nSELECT nazwa, wartosc FROM dane ORDER BY nazwa\nP\nF\n3.\nSELECT nazwa, sum(wartosc) FROM dane GROUP BY nazwa\nP\nF\n4.\nSELECT nazwa, sum(wartosc) FROM dane GROUP BY nazwa\nORDER BY nazwa\nP\nF","answer":null,"answer_text":"Zadanie 3.1. (0-1)\nIII Rozwiązywanie problemów\ni podejmowanie decyzji z wykorzystaniem\nkomputera, z zastosowaniem podejścia\nalgorytmicznego.\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, F, P.","solution":"## Poprawna odpowiedź\n\n| # | Zapytanie | Sortowanie po `nazwa` | Ocena |\n| 1 | `ORDER BY wartosc, nazwa` | NIE - głównie po wartosc | **F** |\n| 2 | `ORDER BY nazwa` | TAK - bezpośrednio | **P** |\n| 3 | `GROUP BY nazwa` (bez ORDER BY) | NIE GWARANTOWANE | **F** |\n| 4 | `GROUP BY nazwa ORDER BY nazwa` | TAK | **P** |\n\n**Wynik: F, P, F, P**\n\n## Sposób 1 - analiza klauzuli ORDER BY\n\n**Zapytanie 1:** `ORDER BY wartosc, nazwa`\n- Sortowanie najpierw po `wartosc`, dopiero przy remisach - po `nazwa`.\n- Wyniki NIE są uporządkowane niemalejąco po samej `nazwa` (np. wartości {(B, 1), (A, 2)} dadzą porządek (B, 1), (A, 2), gdzie B < A jest fałszem).\n- **F**\n\n**Zapytanie 2:** `ORDER BY nazwa`\n- ORDER BY bez kierunku domyślnie sortuje rosnąco (ASC).\n- Wyniki uporządkowane niemalejąco po `nazwa` ✓.\n- **P**\n\n**Zapytanie 3:** `GROUP BY nazwa` (bez ORDER BY)\n- W standardzie SQL klauzula GROUP BY **nie gwarantuje** porządku wyników - to detal implementacyjny silnika bazy danych.\n- Bez `ORDER BY` kolejność może być dowolna (zwykle dla wydajności).\n- **F**\n\n**Zapytanie 4:** `GROUP BY nazwa ORDER BY nazwa`\n- GROUP BY grupuje, a ORDER BY na końcu wymusza sortowanie po nazwa.\n- Wyniki uporządkowane niemalejąco po `nazwa` ✓.\n- **P**\n\n## Sposób 2 - przykład danych pokazujący różnicę\n\nDane:\n| nazwa | wartosc |\n| Zofia | 1 |\n| Anna | 2 |\n| Beata | 1 |\n\n**Zapytanie 1 (ORDER BY wartosc, nazwa):**\nBeata | 1\nZofia | 1\nAnna | 2\nPo nazwa: Beata, Zofia, Anna - NIE jest niemalejąco (Zofia > Anna).\n\n**Zapytanie 2 (ORDER BY nazwa):**\nAnna | 2\nBeata | 1\nZofia | 1\nNiemalejąco po nazwa ✓.\n\n**Zapytanie 3 (GROUP BY nazwa, bez ORDER BY):**\nPorządek niezdefiniowany. Może być Beata, Anna, Zofia lub jakkolwiek inaczej.\n\n**Zapytanie 4 (GROUP BY nazwa ORDER BY nazwa):**\nAnna | 2\nBeata | 1\nZofia | 1\nNiemalejąco ✓.\n\n## Reference algorytmiczny - semantyka SQL\n\n> Reference - porządek wyników w SQL:\n> - **Bez ORDER BY** silnik SQL może zwrócić wiersze w DOWOLNEJ kolejności (zwykle nieprzewidywalnej, zależnej od planu wykonania, indeksów, partycjonowania).\n> - **ORDER BY kolumna** sortuje rosnąco po danej kolumnie (domyślnie ASC).\n> - **ORDER BY a, b** sortuje najpierw po a; przy remisach po b.\n> - **GROUP BY** grupuje wiersze, ale NIE narzuca kolejności wyjścia (mimo że w niektórych RDBMS, np. starszym MySQL, była niejawna kolejność po polach grupujących - w nowych wersjach już nie).\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 3.1, max 1 pkt):\n> - **1 pkt** - za KOMPLET poprawnych odpowiedzi: F, P, F, P\n> - **0 pkt** - za odpowiedź niepełną/błędną lub brak\n\n## Typowe pułapki\n\n- **Zapytanie 3 (P zamiast F)** - najczęstszy błąd. Uczeń myśli „GROUP BY grupuje po nazwa, więc wyniki są po nazwa\". To MIT - bez ORDER BY porządek nie jest gwarantowany.\n- **Zapytanie 1 (P zamiast F)** - myślenie „ORDER BY zawiera nazwa, więc OK\". Ale nazwa jest DRUGIM kryterium - pierwszy jest wartosc, więc po nazwa wyniki niekoniecznie są uporządkowane.\n- **Niemalejąco vs rosnąco** - „niemalejąco\" oznacza „rosnąco lub równo\" (≤), czyli to samo co default ASC.\n\n## Złożoność obliczeniowa\n\n- Sortowanie wyników SQL po klauzuli ORDER BY: zwykle O(n log n).\n- GROUP BY: O(n log n) z indeksem na kolumnie lub O(n) z hash-aggregate.","image":"img/informatyka-2017-maj-matura-rozszerzona/zad-3.1.webp","solution_image":null,"topics":null,"page_from":6,"source":"ocr","answer_source":null,"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.1. (0-1)<br>Po wykonaniu podanego zapytania SQL do pewnej bazy danych wyniki będą zawsze<br>uporządkowane niemalejąco według pola nazwa.<br>1.<br>SELECT nazwa, wartosc FROM dane ORDER BY wartosc, nazwa<br>P<br>F<br>2.<br>SELECT nazwa, wartosc FROM dane ORDER BY nazwa<br>P<br>F<br>3.<br>SELECT nazwa, sum(wartosc) FROM dane GROUP BY nazwa<br>P<br>F<br>4.<br>SELECT nazwa, sum(wartosc) FROM dane GROUP BY nazwa<br>ORDER BY nazwa<br>P<br>F</p>","answer_text_html":"<p>Zadanie 3.1. (0-1)<br>III Rozwiązywanie problemów<br>i podejmowanie decyzji z wykorzystaniem<br>komputera, z zastosowaniem podejścia<br>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, F, P.</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p>| # | Zapytanie | Sortowanie po <code>nazwa</code> | Ocena |<br>| 1 | <code>ORDER BY wartosc, nazwa</code> | NIE - głównie po wartosc | <strong>F</strong> |<br>| 2 | <code>ORDER BY nazwa</code> | TAK - bezpośrednio | <strong>P</strong> |<br>| 3 | <code>GROUP BY nazwa</code> (bez ORDER BY) | NIE GWARANTOWANE | <strong>F</strong> |<br>| 4 | <code>GROUP BY nazwa ORDER BY nazwa</code> | TAK | <strong>P</strong> |</p>\n<p><strong>Wynik: F, P, F, P</strong></p>\n<h4>Sposób 1 - analiza klauzuli ORDER BY</h4>\n<p><strong>Zapytanie 1:</strong> <code>ORDER BY wartosc, nazwa</code></p>\n<ul><li>Sortowanie najpierw po <code>wartosc</code>, dopiero przy remisach - po <code>nazwa</code>.</li><li>Wyniki NIE są uporządkowane niemalejąco po samej <code>nazwa</code> (np. wartości {(B, 1), (A, 2)} dadzą porządek (B, 1), (A, 2), gdzie B &lt; A jest fałszem).</li><li><strong>F</strong></li></ul>\n<p><strong>Zapytanie 2:</strong> <code>ORDER BY nazwa</code></p>\n<ul><li>ORDER BY bez kierunku domyślnie sortuje rosnąco (ASC).</li><li>Wyniki uporządkowane niemalejąco po <code>nazwa</code> ✓.</li><li><strong>P</strong></li></ul>\n<p><strong>Zapytanie 3:</strong> <code>GROUP BY nazwa</code> (bez ORDER BY)</p>\n<ul><li>W standardzie SQL klauzula GROUP BY <strong>nie gwarantuje</strong> porządku wyników - to detal implementacyjny silnika bazy danych.</li><li>Bez <code>ORDER BY</code> kolejność może być dowolna (zwykle dla wydajności).</li><li><strong>F</strong></li></ul>\n<p><strong>Zapytanie 4:</strong> <code>GROUP BY nazwa ORDER BY nazwa</code></p>\n<ul><li>GROUP BY grupuje, a ORDER BY na końcu wymusza sortowanie po nazwa.</li><li>Wyniki uporządkowane niemalejąco po <code>nazwa</code> ✓.</li><li><strong>P</strong></li></ul>\n<h4>Sposób 2 - przykład danych pokazujący różnicę</h4>\n<p>Dane:<br>| nazwa | wartosc |<br>| Zofia | 1 |<br>| Anna | 2 |<br>| Beata | 1 |</p>\n<p><strong>Zapytanie 1 (ORDER BY wartosc, nazwa):</strong><br>Beata | 1<br>Zofia | 1<br>Anna | 2<br>Po nazwa: Beata, Zofia, Anna - NIE jest niemalejąco (Zofia &gt; Anna).</p>\n<p><strong>Zapytanie 2 (ORDER BY nazwa):</strong><br>Anna | 2<br>Beata | 1<br>Zofia | 1<br>Niemalejąco po nazwa ✓.</p>\n<p><strong>Zapytanie 3 (GROUP BY nazwa, bez ORDER BY):</strong><br>Porządek niezdefiniowany. Może być Beata, Anna, Zofia lub jakkolwiek inaczej.</p>\n<p><strong>Zapytanie 4 (GROUP BY nazwa ORDER BY nazwa):</strong><br>Anna | 2<br>Beata | 1<br>Zofia | 1<br>Niemalejąco ✓.</p>\n<h4>Reference algorytmiczny - semantyka SQL</h4>\n<blockquote>Reference - porządek wyników w SQL:<br>- <strong>Bez ORDER BY</strong> silnik SQL może zwrócić wiersze w DOWOLNEJ kolejności (zwykle nieprzewidywalnej, zależnej od planu wykonania, indeksów, partycjonowania).<br>- <strong>ORDER BY kolumna</strong> sortuje rosnąco po danej kolumnie (domyślnie ASC).<br>- <strong>ORDER BY a, b</strong> sortuje najpierw po a; przy remisach po b.<br>- <strong>GROUP BY</strong> grupuje wiersze, ale NIE narzuca kolejności wyjścia (mimo że w niektórych RDBMS, np. starszym MySQL, była niejawna kolejność po polach grupujących - w nowych wersjach już nie).</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 3.1, max 1 pkt):<br>- <strong>1 pkt</strong> - za KOMPLET poprawnych odpowiedzi: F, P, F, P<br>- <strong>0 pkt</strong> - za odpowiedź niepełną/błędną lub brak</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Zapytanie 3 (P zamiast F)</strong> - najczęstszy błąd. Uczeń myśli „GROUP BY grupuje po nazwa, więc wyniki są po nazwa&quot;. To MIT - bez ORDER BY porządek nie jest gwarantowany.</li><li><strong>Zapytanie 1 (P zamiast F)</strong> - myślenie „ORDER BY zawiera nazwa, więc OK&quot;. Ale nazwa jest DRUGIM kryterium - pierwszy jest wartosc, więc po nazwa wyniki niekoniecznie są uporządkowane.</li><li><strong>Niemalejąco vs rosnąco</strong> - „niemalejąco&quot; oznacza „rosnąco lub równo&quot; (≤), czyli to samo co default ASC.</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>Sortowanie wyników SQL po klauzuli ORDER BY: zwykle O(n log n).</li><li>GROUP BY: O(n log n) z indeksem na kolumnie lub O(n) z hash-aggregate.</li></ul>"}]}