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 Neve | A kapcsolattartó személy | Cím | város | Irányítószám | Orszá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_LIKELIKE é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:
|
| Megfelelőség
| Nem egyezik
|
---|---|---|---|
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"