Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych Algorytmy i podstawy informatyki

W języku SQL dla dowolnych zestawów danych w tabeli Uczniowie, aby wybrać rekordy, które zawierają wyłącznie uczennice o imieniu „Aleksandra”, urodzone po roku „1998”, należy zapisać zapytanie

A.
SELECT * FROM Uczniowie WHERE imie="Aleksandra" OR rok_urodzenia < "1998";
B.
SELECT * FROM Uczniowie WHERE imie="Aleksandra" OR rok_urodzenia > "1998";
C.
SELECT * FROM Uczniowie WHERE imie="Aleksandra" AND rok_urodzenia < "1998";
D.
SELECT * FROM Uczniowie WHERE imie="Aleksandra" AND rok_urodzenia > "1998";

Pytanie z egzaminu CKE, styczeń 2018 (arkusz E.14-X-18.01).

To zapytanie spełnia oba warunki naraz: wybiera rekordy z tabeli Uczniowie tylko wtedy, gdy pole imie ma wartość „Aleksandra” oraz pole rok_urodzenia jest większe niż 1998. Operator AND jest tutaj kluczowy, bo oznacza logiczne „i”, czyli każdy zwrócony rekord musi przejść oba filtry jednocześnie. Warunek rok_urodzenia > 1998 dobrze oddaje sformułowanie „urodzone po roku 1998”, więc obejmuje np. lata 1999, 2000, 2001 itd., ale nie 1998. W praktyce takie zapytanie mogłoby wyglądać najlepiej tak: SELECT * FROM Uczniowie WHERE imie = 'Aleksandra' AND rok_urodzenia > 1998;. Moim zdaniem warto zapamiętać, że w standardzie SQL tekst zapisuje się w apostrofach, a liczby bez cudzysłowu, jeśli kolumna ma typ liczbowy. Cudzysłowy czasem działają w wybranych systemach, ale nie jest to dobra, przenośna praktyka. SELECT * jest wygodne w testach i prostych ćwiczeniach, natomiast w realnych projektach lepiej podawać konkretne kolumny, np. imie, nazwisko, rok_urodzenia, bo zapytanie jest czytelniejsze i zwykle mniej obciąża bazę.
W tym zadaniu najłatwiej pomylić dwa różne pomysły: „spełnia jeden z warunków” oraz „spełnia wszystkie warunki”. Operator OR oznacza alternatywę, czyli rekord zostanie wybrany, gdy imię będzie równe Aleksandra albo rok urodzenia będzie zgodny z podanym porównaniem. To daje za szeroki wynik. Do takiego wyniku mogłyby trafić osoby o imieniu Aleksandra urodzone w dowolnym roku, ale też uczniowie o innych imionach, jeżeli tylko ich rok urodzenia pasuje do warunku. A pytanie mówi o rekordach zawierających wyłącznie uczennice o imieniu Aleksandra urodzone po roku 1998, więc filtr ma być zawężający, nie rozszerzający. Z mojego doświadczenia to klasyczny błąd przy SQL: czytamy zdanie po polsku i widzimy dwa kryteria, ale nie zastanawiamy się, czy mają działać razem, czy zamiennie. Drugi problem to znak porównania. Rok mniejszy niż 1998 oznacza osoby urodzone przed 1998, czyli starsze, a nie po tym roku. Dla „po roku 1998” potrzebne jest rok_urodzenia > 1998. Warto też pamiętać o typach danych. Jeżeli rok_urodzenia jest liczbą, dobrym stylem jest porównywać go z liczbą 1998, a nie z tekstem '1998'. Baza często sobie z tym poradzi przez konwersję typów, ale w pracy zawodowej takie drobiazgi mogą prowadzić do dziwnych błędów, szczególnie przy innych formatach dat albo różnych silnikach baz danych.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.