Dla których imion zastosowana w zapytaniu klauzula LIKE jest prawdziwa?SELECT imie FROM mieszkancy WHERE imie LIKE '_r%';
W tym zapytaniu kluczowy jest wzorzec LIKE '_r%'. W SQL znak podkreślenia _ oznacza dokładnie jeden dowolny znak, a znak procenta % oznacza dowolny ciąg znaków, także pusty. Czyli warunek mówi: imię ma mieć pierwszy znak dowolny, drugi znak musi być literą r, a potem może wystąpić dowolna dalsza część tekstu. Dlatego pasują imiona Arleta, Krzysztof, Krystyna i Tristan, bo w każdym z nich druga litera to r. Arleta: A-r-leta, Krzysztof: K-r-zysztof, Krystyna: K-r-ystyna, Tristan: T-r-istan. Moim zdaniem to jedno z tych zadań, które dobrze pokazuje praktyczne zastosowanie LIKE przy filtrowaniu rekordów w bazie danych, np. gdy szukamy nazwisk o określonym układzie liter albo kodów produktów zaczynających się według jakiegoś schematu. W dobrej praktyce SQL warto pamiętać, że działanie LIKE może zależeć od ustawień porównywania tekstu, czyli kolacji bazy danych, szczególnie przy wielkości liter i znakach narodowych. Sam wzorzec jest jednak poprawny: druga pozycja musi być r.
Wzorzec LIKE '_r%' nie oznacza, że imię ma po prostu zawierać literę r gdziekolwiek w środku. To jest bardzo częsty błąd przy czytaniu zapytań SQL, bo procent % faktycznie kojarzy się z dowolnym fragmentem tekstu, ale tutaj przed nim występuje jeszcze dokładny warunek na drugą literę. Podkreślenie _ zastępuje jeden i tylko jeden znak, więc po nim musi pojawić się litera r. Dopiero po tej literze r znak % pozwala na dowolną resztę imienia. Z tego powodu zestaw zawierający Krzysztof, Krystyna i Romuald nie jest w całości poprawny, bo Romuald ma drugą literę o, mimo że literę r ma na początku. Podobnie imiona Rafał, Rebeka, Renata i Roksana zaczynają się od R, ale ich druga litera to odpowiednio a, e, e oraz o, więc nie spełniają wzorca. W przypadku imion Gerald, Jarosław, Marek i Tamara też można się pomylić, patrząc tylko na obecność litery r w dalszej części wyrazu, ale SQL sprawdza pozycje znaków zgodnie z podanym wzorcem. Z mojego doświadczenia najlepiej czytać taki zapis od lewej do prawej: jeden dowolny znak, potem r, potem cokolwiek. To pomaga uniknąć zgadywania i jest zgodne z praktyką pisania warunków filtrujących w zapytaniach SELECT.