SELECT imie FROM mieszkancy WHERE imie LIKE '_r%'; Dla których imion zastosowana w zapytaniu klauzula LIKE jest prawdziwa?
SELECT imie FROM mieszkancy WHERE imie LIKE '_r%';Dla których imion zastosowana w zapytaniu klauzula LIKE jest prawdziwa?
A. Krzysztof, Krystyna, Romuald.
B. Arleta, Krzysztof, Krystyna, Tristan.
C. Gerald, Jarosław, Marek, Tamara.
D. Rafał, Rebeka, Renata, Roksana.
Pytanie z egzaminu CKE, czerwiec 2021 (arkusz EE.09-SG-21.06).
Wzorzec LIKE '_r%' oznacza: pierwszy znak może być dowolny, drugi znak musi być literą r, a po nim może wystąpić dowolny ciąg znaków, także pusty. W SQL znak _ w klauzuli LIKE zastępuje dokładnie jeden znak, natomiast % zastępuje zero, jeden albo wiele znaków. Dlatego pasują imiona Arleta, Krzysztof, Krystyna i Tristan, bo każde z nich ma r na drugiej pozycji: Arleta → A r..., Krzysztof → K r..., Krystyna → K r..., Tristan → T r.... To jest właśnie sedno tego zapytania: SELECT imie FROM mieszkancy WHERE imie LIKE '_r%'; wyszukuje rekordy, w których kolumna imie spełnia określony wzorzec tekstowy. W praktyce takie filtrowanie przydaje się np. w wyszukiwarkach użytkowników, katalogach produktów albo raportach, gdzie trzeba znaleźć dane według fragmentu tekstu. Moim zdaniem warto zapamiętać różnicę między _ i %, bo to jest bardzo częsty haczyk na sprawdzianach i w prawdziwych zapytaniach. Dobra praktyka jest też taka, żeby świadomie używać LIKE, bo wzorce zaczynające się od symbolu wieloznacznego, takiego jak _ albo %, mogą gorzej korzystać z indeksów w bazie danych.
W tym zadaniu łatwo pomylić samo występowanie litery r w imieniu z jej konkretną pozycją. Klauzula LIKE nie sprawdza tutaj, czy imię po prostu zawiera literę r gdziekolwiek. Wzorzec '_r%' jest bardziej precyzyjny: znak _ zajmuje dokładnie jeden dowolny znak, potem musi być litera r, a dopiero później % pozwala na dowolną dalszą część tekstu. Czyli najważniejszy warunek brzmi: r musi być drugim znakiem imienia. Z tego powodu imiona typu Romuald nie pasują, mimo że zaczynają się od r, bo na drugiej pozycji mają o. Podobnie Rafał, Rebeka, Renata i Roksana odpadają, ponieważ drugą literą nie jest r, tylko odpowiednio a, e, e oraz o. Imiona takie jak Gerald, Jarosław, Marek czy Tamara też nie spełniają wzorca, bo litera r występuje tam na innej pozycji albo w ogóle nie jest druga. Typowy błąd myślowy polega na traktowaniu % i _ jak tego samego symbolu. A to nie działa tak samo. % jest elastyczny i oznacza dowolnie długi fragment tekstu, natomiast _ jest bardzo konkretny: jeden znak, nie mniej i nie więcej. W pracy z bazami danych, szczególnie w SQL, takie szczegóły mają duże znaczenie, bo wpływają na wynik zapytania i czasem też na wydajność. Z mojego doświadczenia najlepiej czytać wzorzec znak po znaku, wtedy od razu widać, które rekordy przejdą filtr, a które nie.