Dana jest tabela o nazwie wycieczki z polami nazwa, cena, miejsca (jako liczba wolnych miejsc). Aby wyświetlić jedynie nazwy tych wycieczek, które kosztują więcej niż 1500 złotych i nie mają już żadnego wolnego miejsca, należy posłużyć się zapytaniem
SELECT nazwa FROM wycieczki WHERE cena > 1500 OR miejsca = 0;
OR zwróci też drogie wycieczki z wolnymi miejscami i tanie wyprzedane.SELECT nazwa FROM wycieczki WHERE cena > 1500 AND miejsca = 0;
nazwa, operator AND i miejsca = 0 spełniają wszystkie wymagania.SELECT * FROM wycieczki WHERE cena > 1500 AND miejsca = 0;
SELECT * FROM wycieczki WHERE cena > 1500 OR miejsca > 0;
miejsca > 0 to trzy błędy naraz.Poprawne jest SELECT nazwa FROM wycieczki WHERE cena > 1500 AND miejsca = 0;. Oba warunki muszą być spełnione jednocześnie (droga i wyprzedana), więc łączy je AND. „Więcej niż 1500” to ostra nierówność cena > 1500, a „żadnego wolnego miejsca” oznacza dokładnie zero, czyli miejsca = 0. Wynik ma zawierać tylko nazwy, więc po SELECT stoi pole nazwa.
Takie zapytanie przydaje się na przykład biuru podróży do znalezienia wyprzedanych ofert premium. Przy przekładaniu zdania na SQL warto osobno sprawdzić trzy rzeczy: które kolumny wyświetlić, jak połączyć warunki i jaka jest wartość graniczna każdego z nich.
Zapytanie z OR i miejsca = 0 wyświetla właściwe kolumny i ma dobre warunki, ale łączy je niewłaściwie. OR zwróci każdą wycieczkę droższą niż 1500 zł, także z wolnymi miejscami, oraz każdą wyprzedaną, nawet tanią.
Zapytanie z gwiazdką, OR i miejsca > 0 myli się w trzech miejscach: zwraca wszystkie kolumny, łączy warunki alternatywą, a warunek miejsca > 0 opisuje wycieczki, które jeszcze MAJĄ wolne miejsca.
Zapytanie z gwiazdką, AND i miejsca = 0 wybiera dokładnie te wiersze, które trzeba, ale pokazuje wszystkie kolumny zamiast samej nazwy - a zadanie wymaga jedynie nazw. Jednocześnie wszystkie wymagania spełnia tylko zapytanie z polem nazwa, operatorem AND i warunkiem miejsca = 0.
Szybki test: wycieczka za 1800 zł z pięcioma wolnymi miejscami nie powinna trafić do wyniku. Odrzuci ją tylko zapytanie, które wymaga jednocześnie wysokiej ceny i zera miejsc.