TOP

Lekcja SQL 5. Symbole wieloznaczne i wyrażenia regularne (LIKE)

Często, aby filtrować dane, będziemy musieli pobierać próbki nie według dokładnego dopasowania warunku, ale według wartości przybliżonej. To znaczy, gdy na przykład szukamy produktu, którego nazwa pasuje do określonego wzorca (wyrażenia regularnego) lub zawiera określone symbole lub słowa. Do takich celów służy operator LIKE w języku SQL, który wyszukuje wartości przybliżone. Do skonstruowania takiego wzorca wykorzystywane są metaznaki (znaki specjalne, służące do przeszukiwania części wartości), a mianowicie: „znak procentu” (%) lub gwiazdka (*), „podkreślenie” (_) lub „znak zapytania” (?) , „nawiasy kwadratowe” ([ ]).


1. Znak procentu metaznaku (%) lub gwiazdka (*)

Wybierzmy na przykład z naszej tabeli rekordy, które odnoszą się wyłącznie do produktów zawierających w nazwie słowo Narty. W tym celu stworzymy odpowiedni szablon:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

Jak widać, DBMS wybrał tylko te rekordy, w których kolumna Produkt zawierała produkty zawierające słowo Narty.

W tym przykładzie użyto metaznaku gwiazdki (*), ponieważ MS Access nie obsługuje „znaku procentu” (%) dla operatora LIKE.

2. Podkreślenie metaznaku (_) lub znak zapytania (?)

Podkreślenie lub znak zapytania służy do zastąpienia pojedynczego znaku w słowie. Zastąpmy wszystkie samogłoski w słowie Bikes „znakiem zapytania” (?) i zobaczmy wynik:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
Użyliśmy metaznaku „znak zapytania” (?), ponieważ MS Access nie obsługuje „podkreślenia” (_) dla operatora LIKE.

3. Nawiasy kwadratowe metaznaków ([ ])

Metaznak nawiasu kwadratowego ([ ]) służy do jednoczesnego określenia zestawu znaków do wyszukiwania.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

W powyższym przykładzie wybraliśmy rekordy, w których nazwy miast zaczynają się na literę T lub N, w polu City.

Metaznak nawiasu kwadratowego ([ ]) nie jest obsługiwany w dialekcie MySQL.

Również w tym przypadku możemy użyć innego metaznaku, który działa odwrotnie. Dodajmy wykrzyknik (!) do naszego wyrażenia regularnego, co będzie oznaczać „nie równy” (dla MS Access) lub znak mocy (^) (dla innych DBMS).

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

Oznacza to, że ostatnie utworzone przez nas zapytanie zostanie odczytane w następujący sposób: wybierze wszystkie kolumny z tabeli Sumproduct i tylko te rekordy, w których nazwy miast w polu City nie zaczynają się na litery T lub N. Dodatkowo zauważamy, że zestaw liter w metaznaku „nawiasy kwadratowe” odpowiada tylko jednej pozycji w tekście.

Podobny wynik możemy uzyskać, jeśli zastosujemy już znany nam operator NOT, ale z wykrzyknikiem (!) rekord będzie krótszy.