Które z zapytań SQL wybiera nazwiska z tabeli klient, które są minimum jednoliterowe i rozpoczynają się od litery Z?
A.
SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z_%';
B.
SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z%';
C.
SELECT nazwisko FROM klient WHERE nazwisko='Z_?';
D.
SELECT nazwisko FROM klient WHERE nazwisko='Z?';
Pytanie z egzaminu CKE, czerwiec 2020 (arkusz E.14-SG-20.06).
Zapytanie SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z%'; jest właściwe, ponieważ używa operatora LIKE oraz wzorca tekstowego 'Z%'. W SQL znak % oznacza dowolny ciąg znaków o długości od zera wzwyż. To ważny szczegół: wzorzec 'Z%' pasuje zarówno do nazwiska Zieliński, Zawadzka, Zając, jak i do samej wartości Z, jeśli taka istnieje w tabeli. Czyli spełnia warunek: nazwisko ma mieć minimum jedną literę i zaczynać się od Z. Litera Z jest pierwszym wymaganym znakiem, a reszta może istnieć, ale nie musi. Moim zdaniem to jedno z tych pytań, gdzie trzeba uważać na różnicę między % i _, bo na egzaminach często na tym łapią. W praktyce takie zapytanie przydaje się np. w wyszukiwarkach klientów, filtrowaniu listy kontaktów albo generowaniu raportów alfabetycznych. Warto też pamiętać, że działanie wielkości liter zależy od systemu bazy danych i ustawionej kolacji, więc w jednej bazie Z% może znaleźć też nazwiska na z, a w innej nie. Dobrą praktyką jest świadome ustawianie kolacji albo stosowanie funkcji typu UPPER(nazwisko) LIKE 'Z%', gdy chcemy porównywać bez względu na wielkość liter.
W tym zadaniu kluczowe jest rozumienie operatora LIKE i znaków wieloznacznych używanych w SQL. Sam operator = porównuje wartość dosłownie, znak po znaku. Jeśli zapiszesz nazwisko='Z?' albo nazwisko='Z_?', baza danych nie potraktuje znaków ? czy _ jako symboli zastępczych w wyszukiwaniu wzorca, tylko jako normalne znaki tekstowe. Takie zapytanie szukałoby dokładnie nazwiska składającego się z tych konkretnych znaków, co w praktyce prawie na pewno nie jest tym, o co chodzi. To częsty błąd, bo w różnych programach, np. w wyszukiwarkach plików, znak ? bywa symbolem jednego dowolnego znaku, ale standardowe wzorce SQL przy LIKE działają inaczej: % oznacza dowolną liczbę znaków, a _ oznacza dokładnie jeden znak. Trzeba też uważać na wzorzec LIKE 'Z_%'. On wygląda podobnie do poprawnego, ale ma inne znaczenie. Litera Z musi być pierwsza, znak _ wymusza dokładnie jeden dowolny znak po niej, a dopiero % pozwala na dalszy ciąg. Czyli taki warunek wybierze nazwiska co najmniej dwuznakowe, np. Za albo Zieliński, ale nie wybierze samego Z. A treść mówi o wartościach minimum jednoliterowych, więc pojedyncza litera Z też powinna przejść filtr. Poprawny sposób to użycie LIKE 'Z%', bo wtedy Z jest obowiązkowym początkiem, a dalsza część nazwiska jest opcjonalna. Z mojego doświadczenia najlepiej zapamiętać to tak: % jest „elastyczne”, a _ zajmuje jedno konkretne miejsce w tekście.