Dana jest tabela ksiazki z polami: tytul, autor (typu tekstowego), cena (typu liczbowego). Aby kwerenda SELECT zwróciła tylko tytuły, dla których cena jest mniejsza od 50 zł, należy zapisać:
A.
SELECT tytul FROM ksiazki WHERE cena < 50;
B.
SELECT tytul FROM ksiazki WHERE cena > '50 zł';
C.
SELECT * FROM ksiazki WHERE cena < 50;
D.
SELECT ksiazki FROM tytul WHERE cena < '50 zł';
Pytanie z egzaminu CKE, styczeń 2017 (arkusz E.14-X-17.01).
Instrukcja SELECT tytul FROM ksiazki WHERE cena < 50; jest poprawna, bo spełnia oba warunki z treści zadania: wybiera tylko kolumnę tytul oraz filtruje rekordy po kolumnie cena, zostawiając wyłącznie te książki, których cena jest mniejsza niż 50. W SQL część SELECT określa, jakie dane mają zostać pokazane w wyniku, a część WHERE określa warunek, który musi spełnić każdy rekord. Ponieważ cena jest polem liczbowym, wartość 50 zapisujemy bez apostrofów i bez dopisku zł. To ważne, bo '50 zł' byłoby tekstem, a nie liczbą, więc porównanie mogłoby działać źle albo w ogóle zwrócić błąd, zależnie od systemu bazy danych. Moim zdaniem to jest jeden z podstawowych nawyków w SQL: wybierać tylko potrzebne kolumny, a nie wszystko jak leci. W praktyce taka kwerenda przyda się np. w sklepie internetowym, gdy chcemy wyświetlić klientowi listę tanich książek, bez autora i ceny, tylko same tytuły. Dobra praktyka branżowa mówi też, żeby pisać zapytania czytelnie: słowa kluczowe SQL, takie jak SELECT, FROM i WHERE, często zapisuje się wielkimi literami, a nazwy tabel i kolumn małymi. Nie jest to obowiązkowe w każdym DBMS, ale pomaga w utrzymaniu kodu.
W tym zadaniu łatwo pomylić dwie rzeczy: wybór kolumn z filtrowaniem rekordów. Sam warunek cena < 50 faktycznie ogranicza wyniki do książek tańszych niż 50 zł, ale jeżeli użyje się SELECT *, baza zwróci wszystkie kolumny z tabeli, czyli tytul, autor i cena. To nie pasuje do polecenia, bo miały zostać zwrócone tylko tytuły. Gwiazdka bywa wygodna podczas szybkiego testowania zapytania, ale w gotowych aplikacjach raczej lepiej jej unikać, bo pobiera niepotrzebne dane i utrudnia kontrolę nad wynikiem. Innym typowym błędem jest traktowanie wartości liczbowej jak tekstu. Skoro pole cena ma typ liczbowy, porównujemy je z liczbą 50, a nie z napisem '50 zł'. Dopisek waluty powinien być sprawą prezentacji w interfejsie, a nie elementem wartości liczbowej w bazie. Z mojego doświadczenia wynika, że taki błąd często bierze się z myślenia „tak widzę cenę na stronie, więc tak zapisuję ją w SQL”, a to nie jest dobre podejście. Trzeba też uważać na operator: znak > oznacza większe niż, a w pytaniu chodzi o ceny mniejsze od 50. Zamiana miejscami nazwy tabeli i kolumny również psuje sens zapytania. Po SELECT podajemy kolumny, które chcemy zobaczyć, a po FROM nazwę tabeli, z której dane mają być pobrane. Poprawny schemat to więc SELECT kolumna FROM tabela WHERE warunek. Tutaj naturalnie wychodzi: SELECT tytul FROM ksiazki WHERE cena < 50; i tyle, bez waluty w warunku.