Encyklopedia SQL - Sortowanie wyników wyszukiwania – LIKE
Autor: Paweł Wilkosz
Opublikowano: 2012-01-24
Kontynuując problem prawidłowego konstruowania warunku logicznego, ograniczającego zbiór rekordów pobieranych z bazy danych, w niniejszej publikacji pragnę omówić wykorzystanie operatora LIKE do przeszukiwania pól znakowych.
Przed wykonaniem zadań zapoznaj się z następującym materiałem:
Po wykonaniu zadań będziesz wiedział:
- w jaki sposób wykorzystać operator LIKE, NOT LIKE w konstrukcji warunku symboli wieloznacznych (wild characters).
Operator LIKE
W poprzednich częściach Encyklopedii SQL, dotyczących ograniczania rekordów w zbiorze wynikowym, Twoja uwaga ukierunkowana była głównie na sposoby manipulowania na kolumnach numerycznych, ewentualnie powiązanych z datą i czasem. Jednakże, podczas codziennej pracy z bazami danych może zdarzyć się, iż o ilości informacji stanowiących zbiór wyników końcowych, będzie decydować pole nienumeryczne – a ściślej mówiąc kolumna typu CHAR, VARCHAR itp. Do porównywania łańcuchów znakowych możesz posłużyć się poleceniem LIKE, przyjmującym następującą składnię w zapytaniu SELECT:
SELECT kolumna1, kolumna2, … , kolumnaN
FROM Tabela
WHERE kolumna LIKE wzorzec_do_porównania
Zanim omówiony zostanie praktyczny przykład zastosowania LIKE, chciałbym zwrócić uwagę na znaki specjalne, mające duże zastosowanie w projektowaniu wzorca porównującego kolejne kolumny. Najpopularniejsze wzorce zostały zestawione w tabeli 1.
Tabela 1. Znaki specjalne używane w konstrukcji LIKE.
Wzorzec | Opis |
% | Dopasowanie do jakiegokolwiek łańcucha znakowego, w szczególności pusty ciąg znaków. |
_ | Dopasowanie do jakiegokolwiek pojedynczego znaku. |
[] | Dopasowanie do ciągu znaków wymienionych w zakresie ograniczonym przez []. |
[^] | Dopasowanie do ciągu znaków, oprócz zbioru wymienionego w [^]. |
Aby lepiej zrozumieć zagadnienia dopasowywania wzorców, posłużę się następującym przykładem. Programista baz danych w firmie AdventureWorks dostał kolejne zadanie w swojej codziennej pracy. Tym razem zlecenie napisania zapytania złożyli administratorzy baz danych. Ponieważ w swoim dziale mieli awarię i część ważnych logów została utracona, chcieliby skompletować brakujące fragmenty danych bazy AdventureWorks (tabela DatabaseLog), ale tylko takie, które spełniają następujące warunki:
- dotyczą schematów zaczynających się na literę ‘P’ (1),
- zawierają trzycyfrowy identyfikator logu (2),
- zostały wykonane na obiektach, których druga litera to ‘a’, a trzecią nie jest ‘l’ (3).
Niniejszy cel można zrealizować za pomocą zapytania:
SELECT DatabaseLogID, [Schema], [Object]
FROM DatabaseLog
WHERE [Schema] LIKE ‘P%’ -- (1)
AND DatabaseLogId LIKE ‘[0-9][0-9][0-9]’ -- (2)
AND [Object] LIKE ‘_a[^l]%’ -- (3)
Zapytanie powinno zwrócić wynik zgodny z Rys. 1.
Rys. 1. Ograniczanie zbioru wynikowego za pomocą operatora LIKE z określonymi wzorcami dopasowań.
Operator NOT LIKE
Działanie operatora NOT LIKE jest zbliżone do LIKE z tą różnicą, iż NOT LIKE za prawdę logiczną uznaje sytuację, w której dany rekord nie został dopasowany do wskazanego wzorca. Kontynuując praktyczny przykład, można przyjąć założenie, iż administratorów/zleceniodawców interesowałyby również tylko te rekordy z wpisu do dziennika logów, które nie dotyczyły operacji ALTER (kolumna TSQL). Zatem, uzupełniając zapytanie z poprzedniego podpunktu, należy dodać następującą klauzulę:
SELECT DatabaseLogID, [Schema], [Object], [TSQL]
FROM DatabaseLog
WHERE [Schema] LIKE ‘P%’
AND DatabaseLogId LIKE ‘[0-9][0-9][0-9]’
AND [Object] LIKE ‘_a[^l]%’
AND [TSQL] NOT LIKE ‘ALTER%’
Wynik wykonania zapytania powinien być zgodny z Rys. 2.
Rys. 2. Ograniczanie zbioru wynikowego za pomocą operatora LIKE/NOT LIKE z określonymi wzorcami dopasowań.
Informacja |
Zapamiętaj, że:
|
Podsumowanie
W publikacji został poruszony problem wykorzystania operatorów LIKE/NOT LIKE w niestandardowej konstrukcji warunków logicznych dla klauzuli WHERE.
W kolejnej publikacji nauczysz się dodawać dane do istniejących kolumn, tabel.
Dodatkowo zobacz: