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

SELECT imie FROM pracownicy WHERE nazwisko = 'Kowal' OR stanowisko > 2; Na tabeli Pracownicy, której wiersze zostały pokazane poniżej, wykonano...

SELECT imie FROM pracownicy WHERE nazwisko = 'Kowal' OR stanowisko > 2;
Na tabeli Pracownicy, której wiersze zostały pokazane poniżej, wykonano przedstawioną kwerendę SELECT. Które dane zostaną wybrane?

idimienazwiskostanowisko
1AnnaKowalska1
2MonikaNowak2
3EwelinaNowakowska2
4AnnaPrzybylska3
5MariaKowal3
6EwaNowacka4
A. Anna, Maria, Ewa.
B. Tylko Anna.
C. Tylko Maria.
D. Monika, Ewelina, Maria.

Pytanie z egzaminu CKE, styczeń 2023 (arkusz EE.09-SG-23.01).

Kwerenda wybiera kolumnę imie z tych wierszy tabeli pracownicy, które spełniają warunek nazwisko = 'Kowal' OR stanowisko > 2. Ważne jest tu słowo OR, czyli alternatywa logiczna: wystarczy, że prawdziwy będzie przynajmniej jeden z warunków. Maria spełnia oba warunki, bo ma nazwisko Kowal i stanowisko 3. Anna z id 4 ma nazwisko Przybylska, ale stanowisko 3, więc też zostaje wybrana. Ewa ma stanowisko 4, więc również spełnia warunek stanowisko > 2. Anna Kowalska nie przechodzi, bo nazwisko Kowalska nie jest równe dokładnie Kowal, a stanowisko ma 1. Monika i Ewelina mają stanowisko 2, a operator > oznacza większe, nie większe lub równe. Wynik to więc: Anna, Maria, Ewa. W praktyce w SQL trzeba bardzo pilnować operatorów porównania i logiki AND/OR, bo mała różnica potrafi całkiem zmienić wynik raportu, np. listy pracowników, zamówień albo użytkowników systemu.
W tej kwerendzie łatwo pomylić kilka rzeczy naraz, szczególnie jeśli patrzy się tylko na jedną kolumnę tabeli. Warunek nazwisko = 'Kowal' oznacza dokładne porównanie tekstu, więc nie obejmuje nazwiska Kowalska. Gdyby chodziło o nazwiska zaczynające się od Kowal, należałoby użyć operatora LIKE, na przykład nazwisko LIKE 'Kowal%'. Tutaj jednak mamy zwykłe =, więc z tego warunku pasuje tylko Maria. Drugi warunek, stanowisko > 2, działa niezależnie, bo między warunkami jest OR. To nie jest AND, które wymagałoby spełnienia obu części jednocześnie. OR dopuszcza każdy rekord, w którym prawdziwe jest nazwisko = 'Kowal' albo prawdziwe jest stanowisko > 2. Dlatego nie można ograniczyć wyniku tylko do Marii. Nie można też dodać Moniki i Eweliny, bo ich stanowisko ma wartość 2, a 2 nie jest większe od 2. To częsty błąd: traktowanie > tak, jakby oznaczało >=. Z kolei wybór tylko Anny pomija fakt, że zapytanie nie filtruje po imieniu. SELECT imie mówi jedynie, jaką kolumnę pokazać w wyniku, a nie jaki rekord wybrać. Moim zdaniem to jedno z ważniejszych rozróżnień w SQL: SELECT określa projekcję kolumn, a WHERE selekcję wierszy. Poprawne myślenie jest takie: najpierw sprawdzamy każdy wiersz według WHERE, a dopiero potem z pasujących wierszy wypisujemy kolumnę imie.

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.