Aby wyświetlić rekordy z tabeli pracownicy tylko dla pracowników, którzy skończyli 26 lat, należy użyć zapytania
A.
SELECT * FROM pracownicy WHERE wiek > 25;
B.
SELECT * FROM pracownicy AND wiek > 25;
C.
SELECT * FROM wiek WHERE pracownicy > 25;
D.
SELECT * FROM pracownicy OR wiek > 25;
Pytanie z egzaminu CKE, styczeń 2021 (arkusz E.14-SG-21.01).
Zapytanie SELECT * FROM pracownicy WHERE wiek > 25; jest poprawne, bo korzysta z właściwej składni SQL do pobierania rekordów z tabeli i filtrowania ich po warunku. SELECT * oznacza pobranie wszystkich kolumn, FROM pracownicy wskazuje tabelę źródłową, a WHERE wiek > 25 ogranicza wynik tylko do tych wierszy, w których wartość w kolumnie wiek jest większa niż 25. Jeśli wiek jest zapisywany jako liczba całkowita, to warunek wiek > 25 obejmuje osoby, które mają 26 lat lub więcej, czyli faktycznie skończyły 26 lat. W praktyce takie filtrowanie stosuje się np. przy tworzeniu list pracowników spełniających określone kryteria kadrowe, raportów HR albo uprawnień zależnych od wieku. Moim zdaniem warto od razu zapamiętać typowy schemat: SELECT kolumny FROM tabela WHERE warunek. W profesjonalnych bazach danych często zamiast przechowywać gotowy wiek zapisuje się datę urodzenia i wylicza wiek dynamicznie, bo wiek zmienia się z czasem. Ale przy założeniu, że istnieje kolumna wiek, ta odpowiedź jest dokładnie tym, czego wymaga pytanie.
W tym zadaniu kluczowe jest rozróżnienie, która część zapytania SQL odpowiada za wybór tabeli, a która za filtrowanie rekordów. Nazwa tabeli musi znaleźć się po słowie FROM, więc jeśli po FROM pojawia się wiek, to baza danych będzie próbowała odczytać dane z tabeli o takiej nazwie. To jest częsty błąd: ktoś widzi, że warunek dotyczy wieku, więc niechcący traktuje wiek jak tabelę, a pracownicy jak kolumnę. Tymczasem logicznie powinno być odwrotnie: pracownicy to tabela, a wiek to pole w tej tabeli.
Niepoprawne jest też zastępowanie WHERE operatorami AND albo OR bez wcześniejszego warunku. AND i OR służą do łączenia warunków logicznych, na przykład WHERE wiek > 25 AND stanowisko = 'programista'. Nie mogą one po prostu stać po nazwie tabeli jako zamiennik klauzuli WHERE, bo SQL ma określoną kolejność elementów zapytania. Najpierw wybieramy kolumny przez SELECT, potem źródło danych przez FROM, a dopiero później nakładamy warunki przez WHERE. OR działa podobnie jak AND, tylko oznacza alternatywę logiczną, więc też musi występować wewnątrz poprawnie zbudowanego warunku. Z mojego doświadczenia wynika, że najwięcej pomyłek bierze się z mieszania języka naturalnego z językiem SQL. Zdanie „pracownicy i wiek większy niż 25” brzmi po polsku sensownie, ale baza danych potrzebuje ścisłej składni: SELECT * FROM pracownicy WHERE wiek > 25;.
Niepoprawne jest też zastępowanie WHERE operatorami AND albo OR bez wcześniejszego warunku. AND i OR służą do łączenia warunków logicznych, na przykład WHERE wiek > 25 AND stanowisko = 'programista'. Nie mogą one po prostu stać po nazwie tabeli jako zamiennik klauzuli WHERE, bo SQL ma określoną kolejność elementów zapytania. Najpierw wybieramy kolumny przez SELECT, potem źródło danych przez FROM, a dopiero później nakładamy warunki przez WHERE. OR działa podobnie jak AND, tylko oznacza alternatywę logiczną, więc też musi występować wewnątrz poprawnie zbudowanego warunku. Z mojego doświadczenia wynika, że najwięcej pomyłek bierze się z mieszania języka naturalnego z językiem SQL. Zdanie „pracownicy i wiek większy niż 25” brzmi po polsku sensownie, ale baza danych potrzebuje ścisłej składni: SELECT * FROM pracownicy WHERE wiek > 25;.