Operátor LIKE sa používa v klauzule WHERE na vyhľadávanie špecifického vzoru v stĺpci.

SQL príkaz LIKE

Operátor LIKE sa používa na vyhľadávanie konkrétneho vzoru v stĺpci.

Syntax SQL LIKE

Demo databáza

V tomto návode budeme používať známu databázu Northwind.

Nižšie je uvedený výber z tabuľky „Zákazníci“:

ID používateľameno klientaKontaktná osobaAdresamestoPSČKrajina
1 Alfred Futterkiste Mária Andersová Obere Str. 57 Berlín 12209 Nemecko
2 Ana Trujillo Emparedados a helados Ana Trujillo Avda. de la Constitucion 2222 Mexiko D.F. 05021 Mexiko
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexiko D.F. 05023 Mexiko
4 Okolo Hornu Thomas Hardy 120 Hannover Sq. Londýn WA1 1DP UK
5 Berglunds snabbkop Christina Berglundová Berguvsvagen 8 Lulea S-958 22 Švédsko

Príklady operátorov SQL LIKE

Nasledujúci príkaz SQL vyberie všetkých zákazníkov, ktorých mesto začína na písmeno „s“ :

Poradenstvo: Znak "%" sa používa na definovanie masky (chýbajúce písmená) pred a za kresbou. Viac o zástupných znakoch sa dozviete v nasledujúcej kapitole.

Nasledujúci príkaz SQL vyberie všetkých klientov s mestom končiacim na písmeno "s" :

Nasledujúci príkaz SQL vyberie všetkých klientov s krajinou obsahujúcou vzor "land" :

Použitie kľúčového slova vám zabráni vybrať položky, ktoré sa nezhodujú so vzorom.

Nasledujúci príkaz SQL vyberie všetkých klientov s krajinou, ktorá neobsahuje vzor "land" .

LIKE a REGEXP_LIKE

Operátory LIKE a REGEXP_LIKE v dopytoch Oracle SQL, symboly % a _, regulárne výrazy v žiadostiach

Veľmi často v praktická práca je potrebné vykonať vyhľadávanie znakovej sady kdekoľvek v stĺpci - napríklad hľadať všetky záznamy s názvami produktov obsahujúcich určité slovo alebo hľadať slovo v jednotnom aj množnom čísle. Na tento účel môžete použiť operátor LIKE v Oracle SQL (dá sa použiť aj na SQL Server) a operátor REGEXP _LIKE (tento operátor nie je v SQL Serveri k dispozícii).

Povedzme, že LIKE a REGEXP _LIKE sa používajú iba v relatívne jednoduchých situáciách. Ak potrebujete hľadať na základe gramatiky, filtrovania šumových slov atď., potom by ste mali zvážiť použitie fulltextového vyhľadávania.

Operátor LIKE sa používa na porovnávanie hodnôt znakov so vzorom so špeciálnymi zástupnými znakmi (metaznakmi). Všimnite si, že Oracle poskytuje štyri varianty tohto operátora:

· "normálny" LIKE - používa sa na dopytovanie stĺpcov reťazcov s tradičným kódovaním;

· LIKEC - používa sa pre stĺpce s kódovaním Unicode (v terminológii Oracle - Unicode kompletné);

· LIKE2 - pre kódovanie UCS2;

· LIKE4 - pre kódovanie UCS4.

Príklad použitia tohto operátora môže vyzerať takto:

Páči sa mi to"R%";

V tomto príklade je posledný _name po kľúčovom slove where stĺpec, z ktorého sa preberajú hodnoty reťazca na testovanie, a „R %“ je podmienka na testovanie. Výrazná vlastnosť operátora LIKE je, že môže do podmienky zahrnúť špeciálne zástupné znaky (metaznaky). Pre tento operátor existujú iba dva zástupné znaky:

  • % - predstavuje akúkoľvek sekvenciu nula alebo viacerých znakov. V tomto prípade sa hodnota "%" nikdy nebude rovnať NULL (na kontrolu takýchto hodnôt sa používa IS NULL);
  • _ - predstavuje ľubovoľný jednotlivý znak.

V našom príklade sme použili zástupný znak % , takže dotaz vráti všetkých zamestnancov, ktorých priezvisko začína na R .

Ak chceme, aby znamienko percenta (%) a podčiarknutie (_) považoval Oracle za normálne vyhľadávateľné znaky (a nie ako zástupné znaky), máme k dispozícii parameter ESCAPE. Pomocou tejto možnosti môžete definovať zvláštny charakter, po ktorom sa zástupný znak bude považovať za normálny:

vyberte last_name z hr.employees kde priezvisko Páči sa mi to"R\%" ESCAPE "\";

V našom príklade sme definovali znak \ ako prepísanie zástupného znaku a ak máme zamestnanca s priezviskom R%, potom to dotaz určite vráti. Najbežnejším použitím zástupného znaku escape je spätná lomka (\), čo je najznámejšia hodnota pre programátorov v jazyku C, ale môžete použiť akýkoľvek znak, ak ho zadefinujete pomocou ESCAPE .

Podmienka LIKE nie je náročná na použitie, ale má veľmi obmedzené možnosti. Oveľa väčší funkčnosť poskytuje podmienku REGEXP _LIKE, ktorá vám umožňuje zadať podmienku vyhľadávania pomocou štandardných regulárnych výrazov kompatibilných s POSIX. Regulárne výrazy sú veľmi rozsiahlou témou, ktorá presahuje rámec tohto návodu. Úplnú referenciu o regulárnych výrazoch podporovaných Oracle nájdete v prílohe C knihy SQL Reference v dokumentácii Oracle. Tu uvádzame len jednoduchý príklad:

SELECT krstné_meno FROM zamestnancov

WHERE REGEXP_LIKE (krstne_meno, "^Ste(v|ph)en$");

V tomto príklade vrátime informácie o všetkých zamestnancoch, ktorých meno sa začína na Ste , končí na en a medzi nimi je v alebo ph. Výsledok môže vyzerať takto:

Steven

Steven

Porovná reťazcový výraz so vzorom vo výraze SQL.

Syntax

výraz Páči sa mi to "vzorka"

Syntax operátora Páči sa mi to obsahuje nasledujúce komponenty:

Poznámky

Operátor Páči sa mi to možno použiť na vyhľadávanie hodnôt polí, ktoré zodpovedajú zadanému vzoru. Ako šablóna môžete zadať celú hodnotu (napríklad Like „Smith“) alebo použiť zástupné znaky na získanie rozsahu hodnôt (napríklad Like „Sm*“)).

Vo výrazoch operátor Páči sa mi to možno použiť na porovnanie hodnoty poľa s reťazcovým výrazom. Napríklad, ak v SQL dotazšpecifikujte Podobne ako „C*“, dotaz vráti všetky hodnoty polí začínajúce písmenom C. V dotaze s parametrami môžete používateľa vyzvať, aby zadal vzor vyhľadávania.

Nasledujúci príklad vráti údaje, ktoré začínajú písmenom P, za ktorým nasleduje ľubovoľné písmeno od A do F a tri číslice:

Ako „P###“

Nasledujúca tabuľka ukazuje, ako používať operátor Páči sa mi to na porovnanie s rôznymi vzormi:


Typ zápasu


Ukážka

Zhoda

Žiadna zhoda
(vráti "True")

Viaceré znaky

aa, aBa, aBBBA

abc, AABB, kabína

Špeciálne znaky

Viaceré znaky

abcdeyo, abc

Jedna postava

aaa, a3a, aBa

Jedna číslica

a0a, a1a, a2a

Rozsah znakov

Mimo rozsah

Zmiešané

Užitočnosť klauzuly LIKE vychádza z operátorov zovšeobecňovania, ktoré podporuje. Klauzula LIKE vráti boolovskú hodnotu TRUE, ak porovnanie nájde zhodu.

Aby klauzula LIKE fungovala, je veľmi dôležité rozlišovať malé a veľké písmená konkrétneho DBMS. Napríklad, Microsoft SQL Server v predvolenom nastavení nerozlišuje veľké a malé písmená (hoci ho možno podľa toho nakonfigurovať). Takže SQL Server bude považovať riadky DAD a dad za rovnaké. Na druhej strane platforma Oracle rozlišuje veľké a malé písmená a reťazce DAD a dad tu budú odlišné. Tu je príklad na lepšie znázornenie tohto bodu.

SELECT * FROM autorov WHERE lname LIKE "LARS%"

Tento dotaz pre Microsoft SQL Server získa záznamy z tabuľky autorov, kde je priezvisko (lname) "larson" alebo "lars", aj keď je vyhľadávanie v dotaze definované pomocou veľkých písmen ("LARS%"). V systéme Oracle tento dotaz nenájde priezviská „Larson“ alebo „Lars“, pretože Oracle porovnáva veľké a malé písmená.

DB2

Platforma DB2 podporuje syntax klauzuly LIKE ANSI SQL 2003. Zástupné znaky % a podčiarkovník (_) sú podporované. Zrušovacie sekvencie sú podporované.

Platforma DB2 rozlišuje veľké a malé písmená, takže implementácia klauzuly LIKE tu plne rozlišuje veľké a malé písmená. Ak chcete vždy porovnávať hodnoty bez ohľadu na veľkosť písmen, použite funkciu UPPER alebo TRANSLATE. Okrem toho DB2 implicitne konvertuje kódovú stránku šablóny reťazca alebo sekvencie escape na kódovú stránku výrazu, pokiaľ nie sú špecifikované klauzulou FOR BIT DATA.

MySQL

Platforma MySQL podporuje syntax ANSI pre klauzulu LIKE. Zástupné znaky % a podčiarkovník (_) sú podporované. Podporovaná je aj klauzula ESCAPE.

Okrem toho MySQL podporuje špeciálne funkcie REGEXP a NOT RLIKE používané pri overovaní regulárnych výrazov. MySQL po verzii 3.23.4 štandardne nerozlišuje veľké a malé písmená.

Oracle

Platforma Oracle podporuje syntax ANSI pre klauzulu LIKE. Zástupné znaky % a podčiarkovník (_) sú podporované. Podporovaná je aj klauzula ESCAPE. Syntax pre klauzulu LIKE v Oracle je nasledovná.

výraz WHERE (LIKE | LIKE | LIKE2 |

LIKE4) vzor_reťazca

Prvky syntaxe špecifické pre Oracle majú nasledujúci význam.

použité Plný set znaky UNICODE.

Používa sa znaková sada UNICODE USC2.

Používa sa znaková sada UNICODE USC4.

Pretože platforma Oracle rozlišuje veľké a malé písmená, do funkcie UPPER musíte zahrnúť výraz, vzor reťazca alebo oboje. V tomto prípade si vždy porovnáte, čo potrebujete.

PostgreSQL

Platforma PostgreSQL podporuje syntax klauzuly ANSI LIKE. Zástupné znaky % a podčiarkovník (_) sú podporované. Podporované sú aj zrušovacie sekvencie.

PostgreSQL štandardne rozlišuje veľké a malé písmená. Pre porovnanie bez ohľadu na veľkosť písmen, PostgreSQL poskytuje kľúčové slovo ILIKE. Môžete tiež použiť operátor - ako ekvivalent k LIKE a -* ako ekvivalent k ILIKE a !- a !-* ako ekvivalent k NOT LIKE a NOT ILIKE v tomto poradí. Toto sú všetky rozšírenia štandardu ANSI, ktoré existujú v PostgreSQL.

Napríklad nasledujúce dotazy sú funkčne ekvivalentné.

SELECT * FROM autorov WHERE mesto LIKE "%ville"; SELECT * FROM autorov WHERE mesto -- ^ville";

Pretože tieto príklady používajú malé písmená, môžete naraziť na problém s rozlišovaním malých a veľkých písmen. To znamená, že dopyt hľadá reťazec "%ville" s malými písmenami a tabuľka môže obsahovať hodnoty s veľkými písmenami, ktoré nebudú zahrnuté vo výsledkoch - "BROWNSVILLE", "NASHVILLE", "HUNTSVILLE". Tento problém je možné vyriešiť tak, ako je uvedené v nasledujúcom príklade.

Prevod hodnôt na veľké písmená

SELECT * FROM autorov WHERE mesto LIKE UPPER("%ville");

Vykonajte porovnanie bez ohľadu na veľkosť písmen SELECT * FROM autorov WHERE mesto ~~* "%ville";

SELECT * FROM autorov WHERE mesto LIKE "%ville";

Mali by ste si byť vedomí (hoci to presahuje rámec tejto knihy), že PostgreSQL podporuje aj regulárne výrazy POSIX. Podrobnosti sú uvedené v popise platformy.

SQL Server

Platforma SQL Server podporuje syntax klauzuly ANSI LIKE. Zrušovacie sekvencie sú podporované. Podporované sú aj nasledujúce operátory zovšeobecňovania.

Zhoduje sa s akoukoľvek hodnotou zo zadanej množiny, napríklad , alebo rozsahom, napríklad [k-n].

[L]- zhoduje sa s ľubovoľným znakom, ktorý nie je v zadanej množine alebo rozsahu.

Použitie dodatočného zovšeobecňovania SQL príkazy server dostanete pridané vlastnosti. Môžete napríklad chcieť získať záznamy autorov, ktorých priezviská sú Carson, Carsen, Karson alebo Karsen.

SELECT * FROM autorov WHERE au_lname LIKE "arsn"

SELECT * FROM autorov WHERE au_lname LIKE "arsn"

Téma 3.2. Výber údajov pomocou klauzuly SELECT

Všetky príkazy SQL navrhnuté na výber údajov z existujúcich databázových tabuliek začínajú kľúčovým slovom (operátor) SELECT (select). Na spresnenie dopytu sa používajú ďalšie operátory, ako napríklad FROM (odkiaľ), WHERE (kam) atď.

Najjednoduchšia syntax pre SELECT dotaz je:

VYBRAŤ<список столбцов>

OD<список таблиц>

Uvádzajú sa operátori, ktorí môžu v dopyte chýbať. Na spresnenie požiadavky na načítanie údajov sa používajú tieto operátory:

p KDE(kde) - označuje záznamy, ktoré by mali byť zahrnuté vo výslednej tabuľke (filter záznamov);

p GROUP BY(zoskupiť podľa) - zoskupuje záznamy podľa hodnôt určitých stĺpcov;

p MAJÚCE(mať, podliehať) - označuje skupiny záznamov, ktoré majú byť zahrnuté do výslednej tabuľky (skupinový filter);

p ZORADIŤ PODĽA(sort by) – triedi (usporiada) záznamy.

Operátori VYBRAŤ a OD sú povinné. Kľúčové slovo SELECT hovorí databáze, že daná klauzula je žiadosťou o získanie informácií. Za slovom SELECT až "," sú uvedené názvy stĺpcov, ktorých obsah sa požaduje. Za slovom FROM nasleduje zoznam názvov tabuliek (oddelených ","), z ktorých sa získavajú informácie.

Príklad:

VYBERTE MENO, PRIEZVISKO

Vyššie uvedený dotaz načíta všetky hodnoty MENO a PRIEZVISKO z tabuľky ŠTUDENTOV. Výsledkom je tabuľka s 2 stĺpcami.

Poradie stĺpcov v tejto tabuľke sa zhoduje s poradím polí zadaných v dotaze, nie s ich poradím v tabuľke ŠTUDENTI.

Ak potrebujete získať všetky stĺpce tabuľky, potom namiesto zoznamu stĺpcov stačí zadať symbol ( *) .

Príklad:

VYBRAŤ *

Ihneď po príkaze SELECT pred zoznamom stĺpcov môžete použiť Kľúčové slová VŠETKY (všetky) a VÝZNAMNÝ (rôzne), ktoré určujú, ktoré záznamy sa majú vo výslednej tabuľke reprezentovať. Ak sa tieto kľúčové slová nepoužijú, predpokladá sa, že by sa mali vybrať všetky záznamy (čo je tiež rovnaké ako pri použití kľúčového slova ALL). Keď sa použije DISTINCT, vo výslednej tabuľke sa zobrazia iba jedinečné záznamy. V tomto prípade, ak je v zdrojovej tabuľke viacero rovnakých záznamov, tak sa z nich vyberie len prvý.

Príklad:

VYBERTE VZDIALENÉ MESTO

Ak je v klauzule FROM špecifikovaných viac ako jedna tabuľka, názvy stĺpcov v klauzule SELECT musia obsahovať predpony s uvedením, do ktorej tabuľky patria. Predpona je oddelená od názvu stĺpca bodkou.

Príklad:

Výraz MENO ŠTUDENTA znamená stĺpec NÁZOV od stolaŠTUDENTI

Hlavičky stĺpcov vo výslednej tabuľke je možné predefinovať podľa vlastného uváženia priradením tzv prezývky. Ak to chcete urobiť, v zozname stĺpcov za príslušným stĺpcom napíšte výraz formulára: AS hlavička stĺpca

Príklad:

VYBERTE MENO AKO Meno, PRIEZVISKO AKO Priezvisko

Pre každú tabuľku za kľúčovým slovom FROM možno zadať aj aliasy. Na to stačí zadať alias oddelený medzerou hneď za názvom príslušnej tabuľky. Aliasy tabuliek, ktoré sú kratšie ako ich názvy, sú užitočné pri zložitých dotazoch.

Príklad:

VYBERTE T1.NAME , T1.PRIEZVISKO, T2.SUM_STIPEND

OD ŽIAKOV T1, ŠTIPENDIA T2;

vyhlásenie WHERE

Podmienky vyhľadávania v klauzule WHERE sú boolovské výrazy, t.j. vezmite si jednu z troch možné hodnoty: pravda, falošný a NULOVÝ (toto sa stane, keď sú niektoré prvky vo výraze NULL). V SQL teda máme do činenia s trojhodnotovou logikou.

Pri zostavovaní logických výrazov sa používajú špeciálne kľúčové slová a symboly porovnávacích operácií, ktoré sa nazývajú predikáty:

ü porovnávacie predikáty: (=), (<), (>), (<>), (<=), (>=);

ü LIKE, NEPÁČI;

ü VŠETKY, NIEKTORÉ, AKÉKOĽVEK;

Príklad:

KDE PRIEZVISKO = "Petrov";

V dôsledku vykonania dotazu sa získa tabuľka jedného stĺpca, ktorá obsahuje mená všetkých študentov s priezviskom Petrov, ktorí sa nachádzajú v tabuľke ŠTUDENTI.

Príklad:

Napíšte žiadosť o mená a priezviská študentov študujúcich v 3. ročníku a poberajúcich štipendium:

VYBERTE MENO, PRIEZVISKO

WHERE KURS=3 A STIPEND>0;

MEDZI Operátorom

Predikát BETWEEN (medzi) vám umožňuje zadať výraz na kontrolu, či je hodnota v rozsahu definovanom hraničnými hodnotami.

Príklad:

SELECT SUBJECT_NAME

KDE HODINY MEDZI 30 A 40;

Vypíšte názvy predmetov, ktorých štúdium je dané počtom hodín v rozsahu od 30 do 40.

Hraničné hodnoty sú v rozmedzí hodnôt, s ktorými sa porovnáva.

Ekvivalentom vyššie uvedeného je výraz s porovnávacími predikátmi:

SELECT SUBJECT_NAME

WHERE HODINY>30 A HOD<40;

Okrem údajov numerického typu môžu výrazy s BETWEEN používať údaje nasledujúcich typov: znak, bit, dátum a čas.

operátorov IN a NOT IN

Predikáty IN (in) a NOT IN (not in) sa používajú na testovanie, či je hodnota v danom zozname hodnôt.

Predikát vytvorený pomocou IN sa považuje za pravdivý, ak sa hodnota poľa, ktorého názov je uvedený naľavo od IN, zhoduje s niektorou z hodnôt v zozname.

Príklad:

SELECT STUDENT_ID

WHERE MARK IN (4, 5);

Získajte z tabuľky EXAM_MARKS informácie o študentoch, ktorí majú len 4 a 5 známok zo skúšky.

NIE V- nezodpovedá žiadnej z hodnôt

Príklad:

SELECT STUDENT_ID

WHERE MARK NOT IN(0, 1, 2, 3);

Získajte informácie o študentoch, ktorí nemajú neuspokojivé známky zo skúšky z tabuľky EXAM_MARKS.

Operátori LIKE a NELIKE

Predikáty LIKE (podobné) a NOT LIKE (nie podobné) sa používajú na testovanie čiastočnej zhody reťazcov znakov. Tento operátor skúma hodnoty reťazcov polí, aby zistil, či reťazec zadaný v operátore LIKE je zahrnutý v hodnote reťazca znakov kontrolovaného poľa.

Kritérium čiastočného plnenia je špecifikované pomocou dvoch zástupné znaky: znak percenta (%) a podčiarknutie (_). Znak percenta (%) znamená ľubovoľnú množinu znakov vrátane prázdneho znaku a podčiarknutie (_) znamená ľubovoľný jeden znak.

Príklad:

VYBRAŤ *

KDE PRIEZVISKO AKO "P%";

Výsledkom dotazu je tabuľka s údajmi o študentoch, ktorých priezvisko začína písmenom „P“.

Ak chcete vylúčiť všetkých študentov s priezviskom „Petrov“, musíte spustiť nasledujúci dotaz:

VYBRAŤ *

KDE PRIEZVISKO NIE JE AKO "Petrov";

Ak je potrebné do „vzorky“ zahrnúť aj samotné znaky podčiarknutia alebo percent, je potrebné, aby takéto znaky interpreter SQL nevnímal ako znaky masky. Aby bolo možné brať znak percenta alebo podčiarknutia doslovne, musíte pred ním uviesť špeciálny ovládací znak. Tento znak môže byť definovaný ľubovoľne, pokiaľ sa nevyskytuje ako dátový prvok.

Príklad:

SELECT Name, Address, Discount_Percent

OD klientov

WHERE Percent_discount AKO "20#%"

Tu za kľúčovým slovom ESCAPE nasleduje znak, ktorý sa používa ako ovládací prvok. Rovnakým spôsobom môžete zakázať aj samotný riadiaci znak.

Príklad:

PÁČI SA MI TO "_ \ _P"

V tomto výraze je znak "\" deklarovaný ako znak ESC pomocou kľúčového slova ESCAPE. Prvý znak „_“ sa bude rovnako ako predtým zhodovať s ktorýmkoľvek znakom v kontrolovanom reťazci a druhý znak „_“ bude interpretovaný doslovne, ako bežný znak podčiarknutia.

IS NULL Operátor

Predikát IS NULL sa používa na identifikáciu záznamov, v ktorých konkrétny stĺpec nemá žiadnu hodnotu.

Príklad:

Záznamy zákazníkov, pre ktoré nie je zadaná žiadna adresa, môžete získať pomocou nasledujúceho dotazu:

VYBERTE meno, adresu, región

OD klientov

KDE JE adresa NULL;

Ak chcete získať záznamy, v ktorých stĺpec „Adresa“ obsahuje nejakú špecifickú hodnotu (t. j. nie je null), môžete použiť podobný výraz, ale s logickým operátorom NOT (nie):

VYBERTE meno, adresu, región

OD klientov

KDE adresa NIE JE NULL;

Nemali by sa používať porovnávacie predikáty s NULL, ako napríklad "Adresa=NULL"