A LIKE operátor a WHERE záradékban egy adott minta megkeresésére szolgál egy oszlopban.

LIKE SQL utasítás

A LIKE operátor egy adott minta megkeresésére szolgál egy oszlopban.

SQL LIKE szintaxis

Demo adatbázis

Ebben az oktatóanyagban a jól ismert Northwind adatbázist fogjuk használni.

Az alábbiakban egy válogatás található a „Vásárlók” táblázatból:

Felhasználói azonosítóÜgyfél NeveA kapcsolattartó személyCímvárosIrányítószámOrszág
1 Alfred Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Németország
2 Ana Trujillo Emparedados és helados Ana Trujillo Avda. de la Constitucion 2222 Mexikó D.F. 05021 Mexikó
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexikó D.F. 05023 Mexikó
4 A Horn környékén Thomas Hardy 120 Hannover Sq. London WA1 1DP Egyesült Királyság
5 Berglunds snabbkop Christina Berglund Berguvsvagen 8 Lulea S-958 22 Svédország

SQL LIKE operátor példák

A következő SQL utasítás az összes olyan ügyfelet kiválasztja, amelynek városa "s" betűvel kezdődik:

Tanács: A "%" jel a maszk (hiányzó betűk) meghatározására szolgál a rajz előtt és után. A következő fejezetben többet megtudhat a helyettesítő karakterekről.

A következő SQL utasítás az összes olyan ügyfelet kiválasztja, amelynek városa "s" betűre végződik:

A következő SQL utasítás kiválasztja az összes olyan ügyfelet, amelynek országa a "land" mintát tartalmazza:

A kulcsszó használata megakadályozza, hogy olyan bejegyzéseket válasszon ki, amelyek nem egyeznek a mintával.

A következő SQL utasítás minden olyan ügyfelet kiválaszt, amelynek országa nem tartalmazza a "land" mintát.

LIKE és REGEXP_LIKE

LIKE és REGEXP_LIKE operátorok a lekérdezésekben Oracle SQL, % és _ szimbólumok, reguláris kifejezések kérésekben

Nagyon gyakran be praktikus munka szükségessé válik a karakterkészlet-keresés végrehajtása bárhol egy oszlopban – például meg kell keresni az összes olyan rekordot, ahol a terméknevek egy szót tartalmaznak, vagy egy szót egyes számban és többes számban is keresni. Erre a célra használhatja a LIKE operátort az Oracle SQL-ben (az SQL Serverben is használható) és a REGEXP _LIKE operátort (ezt az operátort az SQL Server nem tartalmazza).

Tegyük fel, hogy a LIKE és a REGEXP _LIKE csak viszonylag egyszerű helyzetekben használatos. Ha nyelvtan, zajszószűrés stb. alapján kell keresnie, akkor fontolja meg a teljes szöveges keresést.

A LIKE operátor a karakterértékek mintához való párosítására szolgál speciális helyettesítő karakterekkel (metakarakterekkel). Vegye figyelembe, hogy az Oracle ennek az operátornak négy változatát kínálja:

· "normál" LIKE - hagyományos kódolású karakterlánc-oszlopok lekérdezésére szolgál;

· LIKEC - Unicode kódolású oszlopokhoz használatos (Oracle terminológiában - Unicode teljes );

· LIKE2 - UCS2 kódoláshoz;

· LIKE4 - UCS4 kódoláshoz.

Egy példa az operátor használatára a következőképpen nézhet ki:

tetszik"R%";

Ebben a példában az utolsó _name a where kulcsszó után az az oszlop, amelyből a karakterlánc-értékek átvételre kerülnek, és az „R %” a tesztelés feltétele. Megkülönböztető tulajdonság A LIKE operátornak az, hogy speciális helyettesítő karaktereket (metakaraktereket) tartalmazhat a feltételben. Ehhez az operátorhoz csak két helyettesítő karakter tartozik:

  • % - bármely nulla vagy több karakterből álló sorozatot jelöl. Ebben az esetben a "%" érték soha nem lesz egyenlő a NULL-lal (az IS NULL az ilyen értékek ellenőrzésére szolgál);
  • _ - bármely karaktert jelöl.

Példánkban a % helyettesítő karaktert használtuk, így a lekérdezés minden alkalmazottat visszaad, akinek a vezetékneve R betűvel kezdődik.

Ha azt szeretnénk, hogy a százalékjelet (%) és az aláhúzást (_) az Oracle szokásos kereshető karakterként kezelje (és nem helyettesítő karakterként), akkor rendelkezésünkre áll az ESCAPE paraméter. Ezzel az opcióval meghatározhatja különleges karakter, amely után a helyettesítő karakter normálnak tekinthető:

válassza ki a vezeték_nevet a hr.employees listából, ahol vezetéknév tetszik"R\%" ECAPE "\";

Példánkban a \ karaktert helyettesítő karakter felülírásként határoztuk meg, és ha van egy alkalmazottunk a vezetéknévvel R%, akkor a lekérdezés biztosan visszaadja. A leggyakoribb helyettesítő karakter a fordított perjel (\), amely a C programozók számára a legismertebb jelentés, de bármilyen karaktert használhat, ha az ESCAPE-vel definiálja.

A LIKE feltételt nem nehéz használni, de a lehetőségek nagyon korlátozottak. Sokkal nagyobb funkcionalitás REGEXP _LIKE feltételt biztosít, amely lehetővé teszi keresési feltétel megadását szabványos POSIX-kompatibilis reguláris kifejezések használatával. A reguláris kifejezések egy nagyon nagy téma, amely túlmutat ennek az oktatóanyagnak a keretein. Az Oracle által támogatott reguláris kifejezésekre vonatkozó teljes hivatkozásért lásd az SQL Reference könyv C függelékét az Oracle dokumentációjában. Itt csak egy egyszerű példát adunk:

SELECT first_name FROM alkalmazottak

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

Ebben a példában minden olyan alkalmazottra vonatkozó információkat adunk vissza, akiknek a neve Ste -vel kezdődik, en -re végződik, és közöttük van v vagy ph. Az eredmény így nézhet ki:

István

István

Összehasonlít egy karakterlánc-kifejezést egy SQL-kifejezésben lévő mintával.

Szintaxis

kifejezés Tetszik "minta"

Operátori szintaxis Tetszik a következő összetevőket tartalmazza:

Megjegyzések

Operátor Tetszik használható a megadott mintának megfelelő mezőértékek keresésére. Mint sablon megadhatja a teljes értéket (például Like "Smith" ), vagy helyettesítő karaktereket használhat az értéktartomány lekéréséhez (például Like "Sm*").

Kifejezésekben az operátor Tetszik használható egy mezőérték és egy karakterlánc-kifejezés összehasonlítására. Például, ha be SQL lekérdezés adja meg a „C*”-hoz hasonlóan, a lekérdezés minden C betűvel kezdődő mezőértéket ad vissza. A paraméterekkel rendelkező lekérdezésben felkérheti a felhasználót egy keresési minta megadására.

A következő példa olyan adatokat ad vissza, amelyek P betűvel kezdődnek, amit A-tól F-ig tetszőleges betű követ, valamint három számjegy:

Mint "P###"

Az alábbi táblázat az operátor használatát mutatja be Tetszik a különböző minták összehasonlításához:


Egyezés típusa


Minta

Megfelelőség

Nem egyezik
("True"-t ad vissza)

Több karakter

aa, aBa, aBBBA

abc, AABB, Cab

Speciális karakterek

Több karakter

abcdeyo, abc

Egy karakter

aaa, a3a, aba

Egy számjegy

a0a, a1a, a2a

Karaktertartomány

Hatótávolságon kívül

Vegyes

A LIKE záradék hasznossága az általa támogatott általánosító operátorokból származik. A LIKE záradék a TRUE logikai értéket adja vissza, ha az összehasonlítás egyezést talál.

A LIKE záradék működéséhez nagyon fontos egy adott DBMS kis- és nagybetűk érzékenysége. Például, Microsoft SQL A szerver alapértelmezés szerint nem érzékeny a kis- és nagybetűkre (bár ennek megfelelően konfigurálható). Tehát az SQL Server azonosként kezeli a DAD és az apa sorait. Másrészt az Oracle platform érzékeny a kis- és nagybetűkre, és a DAD és a dad karakterláncok itt mások lesznek. Íme egy példa, hogy jobban illusztrálja ezt a kérdést.

SELECT * FROM szerzők WHERE lname LIKE "LARS%"

Ez a Microsoft SQL Server lekérdezése lekéri azokat a rekordokat a szerzői táblából, ahol a vezetéknév (lname) "larson" vagy "lars", még akkor is, ha a keresés nagybetűvel ("LARS%") van megadva a lekérdezésben. Az Oracle-ben ez a lekérdezés nem találja meg a "Larson" vagy a "Lars" vezetékneveket, mert az Oracle kis- és nagybetűk közötti összehasonlítást végez.

DB2

A DB2 platform támogatja az ANSI SQL 2003 LIKE záradék szintaxisát A % helyettesítő karakterek és az aláhúzás (_) használata támogatott. A törlési szekvenciák támogatottak.

A DB2 platform megkülönbözteti a kis- és nagybetűket, így a LIKE záradék itt való megvalósítása teljes mértékben megkülönbözteti a kis- és nagybetűket. A kis- és nagybetűk közötti különbségek összehasonlításához használja az UPPER vagy a TRANSLATE függvényt. Ezenkívül a DB2 implicit módon egy karakterlánc-sablon vagy escape-szekvencia kódlapját konvertálja kifejezési kódlappá, hacsak nincsenek megadva a FOR BIT DATA záradékkal.

MySQL

A MySQL platform támogatja az ANSI szintaxist a LIKE záradékhoz. A % helyettesítő karakterek és az aláhúzás (_) támogatottak. Az ESCAPE záradék is támogatott.

Ezenkívül a MySQL támogatja a REGEXP és NOT RLIKE speciális függvényeket, amelyeket a reguláris kifejezések érvényesítésében használnak. A 3.23.4-es verzió után a MySQL alapértelmezés szerint nem különbözteti meg a kis- és nagybetűket.

Jóslat

Az Oracle platform támogatja az ANSI szintaxist a LIKE záradékhoz. A % helyettesítő karakterek és az aláhúzás (_) támogatottak. Az ESCAPE záradék is támogatott. A LIKE záradék szintaxisa az Oracle-ben a következő.

WHERE kifejezés (LIKE | LIKEC | LIKE2 |

LIKE4) string_pattern

Az Oracle-specifikus szintaktikai elemek a következő jelentéssel bírnak.

használt teljes készlet UNICODE karakterek.

A UNICODE USC2 karakterkészlet használatos.

A UNICODE USC4 karakterkészlet használatos.

Mivel az Oracle platform megkülönbözteti a kis- és nagybetűket, az UPPER függvényben szerepeltetni kell egy kifejezést, string_pattern vagy mindkettőt. Ebben az esetben mindig összehasonlítja, mire van szüksége.

PostgreSQL

A PostgreSQL platform támogatja az ANSI LIKE záradék szintaxisát. A % helyettesítő karakterek és az aláhúzás (_) támogatottak. A törlési szekvenciák szintén támogatottak.

A PostgreSQL alapértelmezés szerint megkülönbözteti a kis- és nagybetűket. A kis- és nagybetűk közötti összehasonlításhoz a PostgreSQL az ILIKE kulcsszót biztosítja. Használhatja a - operátort a LIKE megfelelőjeként és a -* operátort az ILIKE megfelelőjeként, valamint a !- és !-* operátort a NOT LIKE és a NOT ILIKE megfelelőjeként. Ezek mind a PostgreSQL-ben létező ANSI-szabvány kiterjesztései.

Például a következő lekérdezések funkcionálisan egyenértékűek.

SELECT * FROM szerzők WHERE város LIKE "%ville"; SELECT * FROM szerzők WHERE város -- ^ville";

Mivel ezek a példák kisbetűket használnak, előfordulhat, hogy a kis- és nagybetűk érzékeny problémába ütközhet. Ez azt jelenti, hogy a lekérdezés a "%ville" karakterláncot keresi kisbetűkkel, és a táblázat olyan nagybetűs értékeket tartalmazhat, amelyek nem fognak szerepelni az eredményekben - "BROWNSVILLE", "NASHVILLE", "HUNTSVILLE". Ez a probléma az alábbi példában látható módon megoldható.

Értékek konvertálása nagybetűssé

SELECT * FROM szerzők WHERE város LIKE UPPER("%ville");

Végezzen egy kis- és nagybetűk közötti összehasonlítást SELECT * FROM szerzők WHERE city ~~* "%ville";

SELECT * FROM szerzők WHERE város LIKE "%ville";

Tudnia kell (bár ez túlmutat ennek a könyvnek), hogy a PostgreSQL a POSIX reguláris kifejezéseket is támogatja. A részleteket a platform leírása tartalmazza.

SQL szerver

Az SQL Server platform támogatja az ANSI LIKE záradék szintaxisát. A törlési szekvenciák támogatottak. A következő további általánosító operátorok is támogatottak.

Megfelel a megadott halmaz bármely értékének, például , vagy tartománynak, például [k-n].

[L]- megfelel minden olyan karakternek, amely nem tartozik a megadott készletbe vagy tartományba.

További általánosítás használata SQL utasítások szervert kapsz további jellemzők. Előfordulhat például, hogy olyan szerzők rekordjait szeretné lekérni, akiknek vezetékneve Carson, Carsen, Karson vagy Karsen.

SELECT * FROM szerzők WHERE au_lname LIKE "arsn"

SELECT * FROM szerzők WHERE au_lname LIKE "arsn"

Téma 3.2. Adatok kiválasztása a SELECT záradék segítségével

A meglévő adatbázistáblákból való adatok kiválasztására tervezett összes SQL utasítás a SELECT (select) kulcsszóval (operátor) kezdődik. A lekérdezés finomításához további operátorokat használnak, például FROM (from), WHERE (hol) stb.

A SELECT lekérdezés legegyszerűbb szintaxisa a következő:

KIVÁLASZTÁS<список столбцов>

TÓL TŐL<список таблиц>

A lekérdezésből esetleg hiányzó operátorok listája. Ezeket az operátorokat használják az adatlekérési kérés finomításához:

p AHOL(ahol) - jelöli azokat a rekordokat, amelyeket az eredményül kapott táblázatba (rekordszűrő) fel kell venni;

p CSOPORTOSÍT(csoportosítás szerint) - a rekordokat csoportosítja bizonyos oszlopok értékei szerint;

p HAVING(amely, tárgya) - jelöli azokat a rekordcsoportokat, amelyeknek szerepelniük kell az eredményül kapott táblázatban (csoportszűrő);

p RENDEZÉS(rendezés szerint) – rendezi (rendezi) a rekordokat.

Üzemeltetők KIVÁLASZTÁSés TÓL TŐL kötelezőek. A SELECT kulcsszó közli az adatbázissal, hogy az adott záradék egy információ lekérésére irányuló kérés. A KIVÁLASZTÁS – „” szó után megjelenik azoknak az oszlopoknak a neve, amelyek tartalmát kéri. A FROM szót a táblanevek listája követi (","-vel elválasztva), amelyekből az információ lekérhető.

Példa:

KIVÁLASZTÁS NÉV, VEZETÉKNÉV

A fenti lekérdezés lekéri az összes NÉV- és VEZETÉKNÉV értéket a TANULÓK táblából. Az eredmény egy 2 oszlopos táblázat.

Ebben a táblázatban az oszlopok sorrendje megegyezik a lekérdezésben megadott mezők sorrendjével, nem pedig a TANULÓK táblában lévő sorrendjükkel.

Ha a táblázat összes oszlopát be kell szereznie, akkor az oszlopok listája helyett elegendő a szimbólumot megadni ( *) .

Példa:

KIVÁLASZTÁS *

Közvetlenül az oszloplista előtti SELECT utasítás után lehet jelentkezni kulcsszavakatÖSSZES (összes)és KÜLÖNBÖZŐ (különböző), amelyek meghatározzák, hogy mely rekordok jelenjenek meg az eredményül kapott táblázatban. Ha ezeket a kulcsszavakat nem használja, akkor feltételezzük, hogy az összes rekordot ki kell jelölni (ami szintén megegyezik az ALL kulcsszó használatával). A DISTINCT használatakor csak az egyedi rekordok jelennek meg a kapott táblázatban. Ebben az esetben, ha több azonos rekord van a forrástáblában, akkor csak az első kerül kiválasztásra közülük.

Példa:

VÁLASSZA KÜLÖNBÖZŐ VÁROST

Ha egynél több tábla van megadva a FROM záradékban, akkor a SELECT záradékban szereplő oszlopneveknek tartalmazniuk kell előtagok, jelezve, hogy melyik táblázathoz tartoznak. Az előtagot egy pont választja el az oszlop nevétől.

Példa:

Kifejezés A TANULÓ NEVE oszlopot jelent NÉV az asztaltól DIÁKOK

Az eredményül kapott táblázatban az oszlopfejlécek tetszés szerint újradefiniálhatók az ún álnevek. Ehhez a megfelelő oszlop utáni oszloplistába írja be a következő űrlapot: AS oszlopfejléc

Példa:

SELECT NAME AS Keresztnév, VEZETÉKNÉV, AS Vezetéknév

A FROM kulcsszó után minden táblához alias is megadható. Ehhez elegendő egy álnevet megadni közvetlenül a megfelelő tábla neve után szóközzel elválasztva. A nevüknél rövidebb táblaálnevek összetett lekérdezéseknél hasznosak.

Példa:

KIVÁLASZTÁS T1.NÉV , T1.VEZETÉKNÉV, T2.SZUM_STIPEND

DIÁKOK TÓL T1, ÖSZTÖNZET T2;

WHERE nyilatkozat

A WHERE záradékban szereplő keresési feltételek logikai kifejezések, azaz. vegyél egyet a három közül lehetséges értékek: igaz, hamisés NULLA (ez akkor történik, ha a kifejezés néhány eleme NULL). Így az SQL-ben háromértékű logikával van dolgunk.

A logikai kifejezések összeállításakor speciális kulcsszavakat és összehasonlítási műveletek szimbólumait használjuk, amelyeket predikátumoknak nevezünk:

ü összehasonlító predikátumok: (=), (<), (>), (<>), (<=), (>=);

ü LIKE, NEM TETSZIK;

ü ALL, SOME, ANY;

Példa:

WHERE SURNAME = "Petrov";

A lekérdezés végrehajtása eredményeként egy oszlopból álló táblázatot kapunk, amely tartalmazza az összes Petrov nevű diák nevét, akik a DIÁKOK táblában szerepelnek.

Példa:

3. évfolyamon tanuló, ösztöndíjban részesülő hallgatók vezeték- és keresztnevére írjon igényt:

KIVÁLASZTÁS NÉV, VEZETÉKNÉV

AHOL KURS=3 ÉS ÖBLÉZET>0;

Üzemeltető KÖZÖTT

A BETWEEN (beween) predikátum lehetővé teszi egy kifejezés megadását annak ellenőrzésére, hogy egy érték a határértékek által meghatározott tartományban van-e.

Példa:

SUBJECT_NAME KIVÁLASZTÁSA

HOL ÓRA 30 ÉS 40 KÖZÖTT;

Adja meg azoknak a tárgyaknak a nevét, amelyek tanulmányozása során az órák számát 30 és 40 között adják meg.

A határértékek azon értéktartományon belül vannak, amelyhez képest az összehasonlítás történik.

A fentiek megfelelője egy összehasonlító predikátumokkal rendelkező kifejezés:

SUBJECT_NAME KIVÁLASZTÁSA

AHOL ÓRA>30 ÉS ÓRA<40;

A BETWEEN karakterrel rendelkező kifejezések a numerikus típusú adatokon kívül a következő típusú adatokat is használhatják: karakter, bit, dátum-idő.

IN és NOT IN operátorok

Az IN (in) és NOT IN (not in) predikátumok arra szolgálnak, hogy teszteljék, hogy egy érték szerepel-e egy adott értéklistában.

Az IN segítségével szerkesztett predikátum akkor tekinthető igaznak, ha annak a mezőnek az értéke, amelynek neve az IN-től balra van feltüntetve, megegyezik a lista egyik értékével.

Példa:

KIVÁLASZTÁSA TANULÓ_ID

AHOL JELÖLJÜK (4, 5);

A EXAM_MARKS táblázatból információkat kaphat azokról a tanulókról, akiknek csak 4 és 5 vizsgaosztályzatuk van.

NEM BENT- nem egyezik egyik értékkel sem

Példa:

KIVÁLASZTÁSA TANULÓ_ID

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

A EXAM_MARKS táblázatból tájékozódhat azokról a tanulókról, akiknek nincs elégtelen vizsgajegye.

Az operátorok LIKETIK és NEM TETSZIK

A LIKE (hasonló) és NOT LIKE (nem hasonló) predikátumokat a karakterláncok részleges illeszkedésének tesztelésére használják. Ez az operátor a mezők karakterlánc-értékeit vizsgálja annak meghatározására, hogy a LIKE operátorban megadott karakterlánc szerepel-e az ellenőrzött mező karakterlánc_értékében.

A részleges megfelelés kritériuma kettővel van megadva helyettesítő karakterek: százalékjel (%) és aláhúzás (_). A százalékjel (%) bármely karakterkészletet jelent, beleértve az üreset is, az aláhúzás (_) pedig bármely egyetlen karaktert.

Példa:

KIVÁLASZTÁS *

AHOL VEZETÉKNÉV MINT "P%";

A lekérdezés eredménye egy táblázat, amely azon tanulók adatait tartalmazza, akiknek vezetéknevük "P" betűvel kezdődik.

Ha ki szeretné zárni az összes "Petrov" vezetéknevű tanulót, akkor a következő lekérdezést kell futtatnia:

KIVÁLASZTÁS *

AHOL A VEZETÉKNÉV NEM MINT „Petrov”;

Ha szükség van arra, hogy magukat az aláhúzásjelet vagy a százalékos karaktereket belefoglalják a „mintába”, akkor az ilyen karaktereket az SQL értelmező nem maszkkarakterként fogja fel. Ahhoz, hogy a százalékos vagy aláhúzásjelet szó szerint értsük, meg kell előznie egy speciális vezérlőkaraktert. Ez a karakter tetszőlegesen definiálható, amennyiben nem adatelemként fordul elő.

Példa:

SELECT név, cím, kedvezmény_százalék

Ügyfelektől

WHERE Percent_discount LIKE "20#%"

Itt az ESCAPE kulcsszót a vezérlőként használt karakter követi. Ugyanígy letilthatja magát a vezérlőkaraktert is.

Példa:

TETSZIK "_ \ _P"

Ebben a kifejezésben a "\" karakter ESC karakternek van deklarálva az ESCAPE kulcsszó használatával. Az 1. karakter "_" megegyezik az ellenőrzött karakterlánc bármely karakterével, a 2. "_" karakter pedig szó szerint értelmeződik, mint egy normál aláhúzás karakter.

IS NULL Üzemeltető

Az IS NULL predikátum azon rekordok azonosítására szolgál, ahol egy adott oszlopnak nincs értéke.

Példa:

A következő lekérdezéssel lekérheti azokat az ügyfélrekordokat, amelyekhez nincs megadva cím:

SELECT Név, Cím, Régió

Ügyfelektől

WHERE cím NULL;

Olyan rekordok lekéréséhez, amelyekben a "Cím" oszlop valamilyen meghatározott értéket (azaz nem nullát) tartalmaz, használhat hasonló kifejezést, de a logikai NOT (not) operátorral:

SELECT Név, Cím, Régió

Ügyfelektől

AHOL A cím NEM NULL;

Az összehasonlító predikátumokat nem szabad használni NULL-lal, például "Address=NULL"