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: Programowanie webowe Bazy danych

Słowa kluczowe: Operatory porównania w SQL Projekcja w algebrze relacji SELECT ... WHERE w SQL SELECT w SQL Selekcja w algebrze relacji

Dana jest tabela mieszkania zawierająca kolumny o nazwach: adres, metraz, ile_pokoi, standard, status, cena. Wykonanie przedstawionej kwerendy SQL spowoduje, że zostaną wyświetlone

SELECT metraz, cena FROM mieszkania WHERE ile_pokoi > 3;
A. metraż oraz cena tych mieszkań, które mają więcej niż 3 pokoje
B. wszystkie informacje oprócz adresu tych mieszkań, które mają więcej niż 3 pokoje
C. metraż oraz cena tych mieszkań, które mają co najmniej 3 pokoje
D. wszystkie informacje dotyczące mieszkań, które mają co najmniej 3 pokoje

Pytanie z egzaminu CKE, czerwiec 2018 (arkusz E.14-X-18.06).

Kwerenda SELECT metraz, cena FROM mieszkania WHERE ile_pokoi > 3; zwraca tylko dwie wskazane kolumny: metraz oraz cena. To wynika bezpośrednio z części SELECT, bo tam określamy, jakie dane mają znaleźć się w wyniku zapytania. Warunek WHERE ile_pokoi > 3 ogranicza rekordy do mieszkań, które mają więcej niż 3 pokoje, czyli 4, 5, 6 itd. Ważne jest tu rozróżnienie: znak > oznacza „większe niż”, a nie „większe lub równe”. Gdyby chodziło o co najmniej 3 pokoje, należałoby użyć warunku ile_pokoi >= 3. W praktyce takie zapytanie przyda się np. w panelu biura nieruchomości, gdy chcemy pokazać klientowi tylko duże mieszkania i od razu porównać ich metraż oraz cenę. Moim zdaniem to bardzo dobry przykład na to, że w SQL trzeba czytać osobno listę kolumn i osobno warunek filtrowania. Dobra praktyka jest taka, żeby nie używać SELECT * bez potrzeby, bo pobieranie tylko potrzebnych kolumn zmniejsza ilość przesyłanych danych i poprawia czytelność kwerendy.
W tym zapytaniu łatwo pomylić dwie różne rzeczy: wybór kolumn oraz filtrowanie wierszy. Część SELECT metraz, cena nie oznacza pobrania wszystkich informacji o mieszkaniu, tylko pobranie konkretnie tych dwóch pól. Jeśli tabela ma także adres, standard, status czy ile_pokoi, to te dane nie pojawią się w wyniku, nawet jeśli istnieją w tabeli. Do wyświetlenia wszystkich kolumn służyłoby SELECT *, ale w tym przypadku gwiazdki nie ma. To częsty błąd, bo ktoś patrzy na nazwę tabeli mieszkania i zakłada, że wynik zawiera pełne rekordy, a SQL działa jednak bardzo dosłownie. Równie ważny jest operator w warunku WHERE. Zapis ile_pokoi > 3 wybierze mieszkania mające więcej niż 3 pokoje, więc mieszkanie trzypokojowe zostanie pominięte. Sformułowanie „co najmniej 3 pokoje” odpowiadałoby operatorowi >=, czyli większe lub równe. W bazach danych taka różnica ma spore znaczenie, bo jeden znak potrafi zmienić wynik raportu, oferty albo statystyki. Niepoprawne jest też założenie, że zapytanie zwraca „wszystko oprócz adresu”. SQL nie działa tu na zasadzie odejmowania jednej kolumny od kompletu, tylko na zasadzie jawnego wskazania, które kolumny mają być pokazane. Z mojego doświadczenia najlepiej czytać takie zapytania od końca logicznie: z tabeli mieszkania wybierz rekordy, gdzie ile_pokoi jest większe niż 3, a potem pokaż z nich tylko metraż i cenę.

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.