Wyszukiwanie tekstu pasującego do wzorca operatorem LIKE i NOT LIKE oraz metaznaki zastępujące dowolne znaki.
Operator = znajduje wyłącznie dokładne dopasowania. Nie pomoże, gdy pytanie brzmi „nazwiska zaczynające się na K" albo „imiona kończące się na literę a". Do wyszukiwania po wzorcu służy operator LIKE.
Wzorzec to zwykły tekst, w którym część znaków zastąpiono metaznakami – symbolami oznaczającymi „tu może być cokolwiek". Dwa najważniejsze to metaznak zastępujący dowolnie długi fragment (także pusty) oraz metaznak zastępujący dokładnie jeden znak.
I tu zaczyna się problem, o którym trzeba wiedzieć przed maturą. Symbole tych metaznaków zależą od bazy, w której pracujesz. Access używa gwiazdki i znaku zapytania, a większość pozostałych baz – procentu i podkreślnika. Sens jest identyczny, zapis inny. Szczegóły w tabeli niżej.
Jak czytać wzorzec. „K, a po nim cokolwiek" znajdzie każde nazwisko zaczynające się na K, niezależnie od długości. „Cokolwiek, a na końcu litera a" znajdzie wszystko kończące się tą literą. Metaznak postawiony z obu stron fragmentu wyszuka go w dowolnym miejscu tekstu. Metaznak pojedynczego znaku przydaje się z kolei wtedy, gdy znasz pozycję, ale nie samą wartość – na przykład przy numerze o stałej długości.
NOT LIKE odwraca wynik: zwraca wiersze, które do wzorca nie pasują.
Ostrożnie z wnioskowaniem z danych osobowych. Kuszące jest szukanie kobiet po imieniu kończącym się na „a" – ale to reguła z wyjątkami (Barnaba, Kuba) i nie jest to poprawny sposób ustalania płci. Na maturze taki wzorzec może być poleceniem zadania i wtedy się go wykonuje, natomiast w prawdziwej bazie danych płeć trzyma się w osobnej kolumnie.
Do wyszukiwania po pozycji w tekście często lepiej sprawdzają się funkcje tekstowe, które wycinają konkretny fragment. Do porównań na zakresach liczb służy z kolei operator BETWEEN.
| W Accessie | Standardowy SQL | Znaczenie |
|---|---|---|
* |
% |
dowolnie długi fragment tekstu, także pusty |
? |
_ |
dokładnie jeden dowolny znak |
# |
(brak odpowiednika) |
dokładnie jedna cyfra |
-- Nazwiska zaczynające się na literę K (zapis Accessa) SELECT nazwisko, klasa FROM uczniowie WHERE nazwisko LIKE 'K*'
| nazwisko | klasa |
|---|---|
| Kowalska | 3A |
-- Ten sam warunek w standardowym SQL-u SELECT nazwisko, klasa FROM uczniowie WHERE nazwisko LIKE 'K%'
| nazwisko | klasa |
|---|---|
| Kowalska | 3A |
-- Fragment w środku tekstu: metaznak z obu stron SELECT nazwisko FROM uczniowie WHERE nazwisko LIKE '*ow*'
| nazwisko |
|---|
| Kowalska |
| Nowak |
-- NOT LIKE zwraca to, co do wzorca nie pasuje SELECT imie FROM uczniowie WHERE imie NOT LIKE '*a'
| imie |
|---|
| Piotr |
| Marek |
| Karol |
Sprawdź, w czym pracujesz, zanim napiszesz wzorzec. To jedyny temat w SQL-u, w którym poprawne zapytanie w jednej bazie jest po prostu błędne w drugiej. Jeśli wzorzec z gwiazdką nie zwraca niczego, spróbuj procentu – i odwrotnie. Objaw jest mylący, bo baza nie zgłasza błędu: traktuje gwiazdkę jako zwykły znak i szuka nazwiska, które dosłownie zawiera gwiazdkę. Wynik jest pusty, a zapytanie wygląda poprawnie.
Drugi typowy błąd to brak metaznaku po jednej stronie. Wzorzec 'K' (bez niczego dalej) znajdzie tylko tekst będący dokładnie literą K, a nie nazwiska zaczynające się na K. Jeśli szukasz początku – metaznak musi być z prawej. Jeśli końca – z lewej. Jeśli fragmentu gdziekolwiek – z obu stron.
Trzecia rzecz: LIKE bez żadnego metaznaku działa jak zwykłe =. To nie błąd, ale sygnał, że prawdopodobnie chciałeś napisać coś innego.
Zależy od bazy i jej ustawień. Access domyślnie nie rozróżnia, więc 'k*' i 'K*' dadzą ten sam wynik. W części innych baz jest odwrotnie. Jeśli zadanie nie precyzuje, bezpieczniej dopasować wielkość liter do tego, co jest w danych.
Trzeba go „wyłączyć", ujmując w nawiasy kwadratowe – wzorzec '[*]' szuka dosłownej gwiazdki. Na maturze pojawia się to rzadko, ale warto wiedzieć, że taka możliwość istnieje.
Formalnie operuje na tekście, więc liczba zostanie najpierw zamieniona na tekst. Działa, ale jest to obejście – do warunków na liczbach służą operatory porównania i BETWEEN.
Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: