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: HAVING w SQL Operator OR w SQL SELECT w SQL UNION ALL w SQL WHERE w SQL

Zdefiniowano bazę danych z tabelą mieszkancy o polach: nazwisko, imie, miasto. Następnie stworzono następujące zapytanie do bazy:

SELECT nazwisko, imie FROM mieszkancy WHERE miasto='Poznań'
UNION ALL
SELECT nazwisko, imie FROM mieszkancy WHERE miasto='Kraków';
Wskaż zapytanie, które zwróci identyczne dane.
A.
SELECT nazwisko, imie FROM mieszkancy AS 'Poznań' OR 'Kraków';
Źle. AS nadaje alias tabeli lub kolumnie i nie filtruje danych. Ten zapis kończy się błędem składni.
B.
SELECT nazwisko, imie FROM mieszkancy WHERE miasto='Poznań' OR miasto='Kraków';
Dobrze. Warunek z OR zwraca osoby z Poznania i z Krakowa, czyli te same dane co UNION ALL.
C.
SELECT nazwisko, imie FROM mieszkancy WHERE miasto BETWEEN 'Poznań' OR 'Kraków';
Źle. BETWEEN wymaga przedziału ze słowem AND i objąłby też miasta leżące alfabetycznie pomiędzy.
D.
SELECT nazwisko, imie FROM mieszkancy WHERE miasto HAVING 'Poznań' OR 'Kraków';
Źle. HAVING filtruje wyniki grupowania GROUP BY i nie stoi wewnątrz warunku WHERE.

Pytanie z egzaminu CKE, styczeń 2016 (arkusz E.14-X-16.01).

UNION ALL skleja wyniki dwóch zapytań jeden pod drugim. Pierwsze zwraca mieszkańców Poznania, drugie Krakowa, więc razem dostajesz osoby z obu miast. Ten sam zbiór daje jedno zapytanie z warunkiem połączonym operatorem OR: WHERE miasto='Poznań' OR miasto='Kraków'. Wiersz trafia do wyniku, gdy spełniony jest którykolwiek z warunków.

W OR każdy warunek trzeba zapisać w całości, z nazwą kolumny po obu stronach. Krótszy zapis tego samego to WHERE miasto IN ('Poznań', 'Kraków'). Różnica między obiema postaciami może dotyczyć tylko kolejności wierszy, bo UNION ALL najpierw wypisuje cały Poznań, a dopiero potem Kraków. Bez ORDER BY kolejność wyniku SQL nie jest jednak gwarantowana.

Wszystkie błędne zapytania próbują wpisać dwa miasta w miejsce, które ich nie przyjmie. AS nadaje alias tabeli albo kolumnie, a nie filtruje danych. Zapis FROM mieszkancy AS 'Poznań' OR 'Kraków' to w dodatku błąd składni.

HAVING filtruje wyniki grupowania po GROUP BY, np. HAVING COUNT(*) > 5. Nie łączy się go z WHERE w środku warunku. BETWEEN wymaga przedziału zapisanego słowem AND: BETWEEN 'A' AND 'M', a przedział nazw miast obejmowałby też wszystkie miasta leżące alfabetycznie pomiędzy.

Zapamiętaj: kilka wartości jednej kolumny łączy się przez OR z pełnymi warunkami albo przez IN.

Poprawne zapytanie z OR jest też krótsze i czytelniejsze od połączenia dwóch zapytań.

Warto przećwiczyć takie zapytania w phpMyAdmin: zapis z błędną składnią serwer odrzuci od razu komunikatem o błędzie, a BETWEEN z poprawnym AND zadziała, ale zwróci za dużo wierszy.

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.