Encyklopedia SQL - Sortowanie wyników wyszukiwania – LIKE  

Udostępnij na: Facebook

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:

  1. Klauzula LIKE umożliwia stosowanie symboli wieloznacznych w konstrukcji warunku ograniczania zbioru rekordów w WHERE.
  2. Operator NOT LIKE w przeciwieństwie do LIKE za prawdę logiczną uznaje brak dopasowania rekordu do wzorca.
  3. Podstawowymi znakami specjalnymi w LIKE/NOT LIKE są: % (każdy ciąg znaków), _ (pojedynczy znak), [] (ciąg znaków wymieniony w nawiasach), [^] ciąg znaków, oprócz zakresu wymienionego w nawiasach.

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: