Ms sql kao u sintaksi. LIKE i NOT LIKE operatori

Dom / Mobilni uređaji

Korisnost klauzule LIKE temelji se na generičkim operatorima koje podržava. Klauzula LIKE vraća Booleovu vrijednost TRUE ako poređenje pronađe odgovarajuće vrijednosti.

Osetljivost na mala i mala slova određenog DBMS-a je veoma važna za rad LIKE klauzule. Na primjer, Microsoft SQL Server default je neosjetljiv na velika i mala slova (iako se može konfigurirati u skladu s tim). Na ovaj način, SQL Server će tretirati DAD i dad stringove kao iste. S druge strane, Oracle platforma je osjetljiva na velika i mala slova, a DAD i dad stringovi će se ovdje razlikovati. Evo primjera da bolje ilustruje ovu tezu.

SELECT * OD autora GDJE lname LIKE "LARS%"

Ovaj Microsoft SQL Server upit će dohvatiti zapise iz tabele autora u kojoj je prezime (lname) u obliku "larson" ili "lars", iako upit specificira traženje koristeći velika slova ("LARS%"). U Oracleu, ovaj upit neće pronaći prezimena "Larson" ili "Lars" jer Oracle radi poređenje osjetljivo na velika i mala slova.

DB2

DB2 platforma podržava ANSI SQL 2003 standardnu ​​sintaksu LIKE klauzule Podržani su zamjenski znakovi % i donja crta (_). Podržane su sekvence otkazivanja.

DB2 platforma je osjetljiva na velika i mala slova, tako da je implementacija LIKE klauzule ovdje potpuno osjetljiva na velika i mala slova. Da biste osigurali da se vrijednosti u različitim registrima uvijek uspoređuju na način bez obzira na velika i mala slova, morate koristiti funkciju UPPER ili TRANSLATE. Dodatno, DB2 implicitno pretvara kodnu stranicu uzorka niza ili sekvence otkazivanja u kodnu stranicu izraza osim ako nije definirana klauzulom FOR BIT DATA.

MySQL

MySQL platforma podržava ANSI sintaksu za LIKE klauzulu. Podržani su zamjenski znakovi % i donja crta (_). Klauzula ESCAPE je također podržana.

Osim toga, MySQL podržava posebne funkcije REGEXP i NOT RLIKE, koje se koriste prilikom provjere regularnih izraza. MySQL nakon verzije 3.23.4 je prema zadanim postavkama neosjetljiv na mala i mala slova.

Oracle

Oracle platforma podržava ANSI sintaksu za LIKE klauzulu. Podržani su zamjenski znakovi % i donja crta (_). Klauzula ESCAPE je također podržana. Sintaksa za LIKE klauzulu u Oracleu je sljedeća.

WHERE izraz (LIKE | LIKEC | LIKE2 |

LIKE4) string_pattern

Elementi sintakse specifični za Oracle imaju sljedeća značenja.

Koristi se full set UNICODE znakovi.

Koristi se UNICODE USC2 skup znakova.

Koristi se UNICODE USC4 skup znakova.

Budući da je Oracle platforma osjetljiva na velika i mala slova, morate uključiti izraz, string_pattern ili oboje u UPPER funkciju. U ovom slučaju ćete uvijek upoređivati ​​ono što vam treba.

PostgreSQL

PostgreSQL platforma podržava sintaksu ANSI LIKE klauzule. Podržani su zamjenski znakovi % i donja crta (_). Podržane su i sekvence otkazivanja.

PostgreSQL je podrazumevano osetljiv na velika i mala slova. Za poređenja bez obzira na velika i mala slova, PostgreSQL ima ključnu riječ ILIKE. Također možete koristiti - operator kao ekvivalent LIKE i -* kao ekvivalent ILIKE, i !- i !-* kao ekvivalent NOT LIKE i NOT ILIKE respektivno. Ovo su sve ANSI standardne ekstenzije koje postoje u PostgreSQL-u.

Na primjer, sljedeći upiti su funkcionalno ekvivalentni.

SELECT * OD autora GDJE grad LIKE "%ville"; SELECT * FROM autora WHERE grad -- ^ville";

Budući da ovi primjeri koriste mala slova, možete naići na problem osjetljivosti na velika i mala slova. To jest, upit traži string "%ville" u mala slova, a tabela može sadržavati vrijednosti velikim slovima koje neće biti uključene u rezultate - "BROWNSVILLE", "NASHVILLE", "HUNTSVILLE". Ovaj problem se može riješiti kao što je prikazano u sljedećem primjeru.

Pretvaranje vrijednosti u velika slova

SELECT * FROM autora WHERE city LIKE UPPER("%ville");

Izvodimo poređenje bez obzira na velika i mala slova SELECT * FROM autora WHERE grad ~~* "%ville";

SELECT * OD autora GDJE grad LIKE "%ville";

Trebalo bi da znate (iako je to van okvira ove knjige) da PostgreSQL takođe podržava POSIX regularne izraze. Detalji su navedeni u opisu platforme.

SQL Server

SQL Server platforma podržava sintaksu ANSI LIKE klauzule. Podržane su sekvence otkazivanja. Podržani su i sljedeći dodatni operatori generalizacije.

Odgovara bilo kojoj vrijednosti iz specificiranog skupa, kao što je , ili rasponu, kao što je [k-p].

[L]- odgovara bilo kojem znaku koji nije uključen u navedeni skup ili raspon.

Korištenjem dodatnih džoker naredbi SQL Servera, dobijate dodatne funkcije. Na primjer, možete preuzeti zapise za autore čija su prezimena Carson, Carsen, Karson ili Karsen.

SELECT * FROM autora GDJE au_lname LIKE "arsn"

SELECT * FROM autora GDJE au_lname LIKE "arsn"

LIKE i REGEXP _LIKE

LIKE i REGEXP_LIKE operatori u upitima Oracle SQL, simboli % i _, regularni izrazi u upitima

Vrlo često u praktičan rad postoji potreba da se izvrši pretraga po skupu znakova bilo gdje u koloni - na primjer, da se pronađu svi zapisi s nazivima proizvoda koji sadrže riječ, ili da se traži riječ u jednini i množini. U tu svrhu možete koristiti LIKE operator u Oracle SQL-u (ovo se također može koristiti u SQL Serveru) i REGEXP _LIKE operator (ovaj operator nije dostupan u SQL Serveru).

Recimo odmah da se LIKE i REGEXP _LIKE koriste samo u relativno jednostavnim situacijama. Ako treba da pretražujete na osnovu gramatike, filtriranja bučnih riječi, itd., trebali biste razmisliti o korištenju pretraživanja cijelog teksta.

Operator LIKE se koristi za usklađivanje vrijednosti znakova sa uzorkom sa posebnim zamjenskim znakovima (metaznacima). Imajte na umu da Oracle nudi četiri varijante ovog operatora:

· "običan" LIKE - koristi se za upite stupaca niza sa tradicionalnim kodiranjem;

· LIKEC - koristi se za kolone sa Unicode kodiranjem (u Oracle terminologiji - Unicode kompletan);

· LIKE2 - za UCS2 kodiranje;

· LIKE4 - za UCS4 kodiranje.

Primjer korištenja ovog operatora može izgledati ovako:

like"R%";

U ovom primjeru, posljednje _name nakon ključne riječi where je kolona iz koje se preuzimaju vrijednosti niza koje treba testirati, a "R %" je uslov koji se testira. Prepoznatljiva karakteristika Prednost LIKE operatora je u tome što može uključiti posebne zamjenske znakove (metakaraktere) u uvjet. Za ovog operatera postoje samo dva zamjenska znaka:

  • % - Predstavlja bilo koju sekvencu od nula ili više znakova. U ovom slučaju, vrijednost "%" nikada neće biti jednaka NULL (IS NULL se koristi za provjeru takvih vrijednosti);
  • _ - predstavlja bilo koji pojedinačni znak.

U našem primjeru koristili smo % zamjenski znak, tako da će upit vratiti sve zaposlenike čije prezime počinje sa R.

Ako želimo da Oracle tretira procente (%) i donju crtu (_) kao uobičajene pretražive znakove (a ne kao zamjenske znakove), imamo parametar ESCAPE. Koristeći ovaj parametar možete odrediti poseban karakter, nakon čega će se zamjenski znak smatrati normalnim:

odaberite prezime iz hr.employees gdje prezime like"R\%" ESCAPE "\";

U našem primjeru definirali smo znak \ da poništimo zamjensku vrijednost, a ako imamo zaposlenika s prezimenom R %, onda će ga zahtjev definitivno vratiti. Najčešći džoker znak za izlaz je obrnuta kosa crta (\), što je najčešće značenje za C programere, ali možete koristiti bilo koji znak tako što ćete ga definirati pomoću ESCAPE.

Stanje LIKE nije teško koristiti, ali je njegov raspon mogućnosti vrlo ograničen. Mnogo veći funkcionalnost obezbeđuje REGEXP _LIKE uslov, koji vam omogućava da navedete uslov pretrage koristeći standardne POSIX-kompatibilne regularne izraze. Regularni izrazi su veoma velika tema koja je izvan okvira ovog tutorijala. Za potpunu referencu na regularne izraze koje podržava Oracle, pogledajte Dodatak C SQL Reference book u Oracle dokumentaciji. Ovdje ćemo dati samo jednostavan primjer:

SELECT first_name FROM zaposlenih

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

U ovom primjeru vraćamo informacije o svim zaposlenicima čije ime počinje sa Ste, završava se sa en, a između ima v ili ph. Rezultat bi mogao izgledati ovako:

Steven

Steven

Uspoređuje string izraz sa uzorkom u SQL izrazu.

Sintaksa

izraz Sviđa mi se "uzorak"

Sintaksa operatora Sviđa mi se uključuje sljedeće komponente:

Bilješke

Operater Sviđa mi se može se koristiti za pronalaženje vrijednosti polja koje odgovaraju određenom uzorku. As šablon možete odrediti punu vrijednost (na primjer, Like “Smith”) ili koristiti zamjenske znakove da biste dobili raspon vrijednosti (na primjer, Like “Sm*”)).

U izrazima operator Sviđa mi se može se koristiti za poređenje vrijednosti polja sa string izrazom. Na primjer, ako je u SQL upit navedite Poput „C*“, upit će vratiti sve vrijednosti polja počevši od slova C. U upitu s parametrima, možete zatražiti od korisnika da unese obrazac pretraživanja.

Sljedeći primjer vraća podatke koji počinju slovom P, nakon čega slijedi bilo koje slovo od A do F i tri cifre:

Kao "P###"

Sljedeća tabela pokazuje kako se koristi operator Sviđa mi se provjeriti u odnosu na različite obrasce:


Tip podudaranja


Uzorak

Prepiska

Nema podudaranja
(vraća istinito)

Više znakova

aa, aBa, aBBBA

abv, AABB, Tsab

Posebni znakovi

Više znakova

abvgdje, abc

Jedan lik

aaa, a3a, aBa

Jedna cifra

a0a, a1a, a2a

Raspon karaktera

Van dometa

Miješano

Tema 3.2. Dohvaćanje podataka pomoću klauzule SELECT

Svi SQL izrazi namijenjeni za dohvaćanje podataka iz postojećih tablica baze podataka počinju ključnom riječi (operator) SELECT (odaberi). Za preciziranje upita koriste se dodatni operatori, kao što su FROM (od), WHERE (gdje) itd.

Najjednostavnija sintaksa za SELECT upit je:

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

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

Naznačeni su operateri koji možda nisu prisutni u zahtjevu. Ovi operatori se koriste za preciziranje zahtjeva za preuzimanje podataka:

str GDJE(gdje) – označava zapise koji bi trebali biti uključeni u rezultujuću tabelu (filter zapisa);

str GROUP BY(group by) – grupiše zapise prema vrijednostima određenih kolona;

str HAVING(imati, obezbeđeno) – označava grupe zapisa koje treba uključiti u rezultujuću tabelu (grupni filter);

str ORDER BY(sortiraj po) – sortira (uređuje) zapise.

Operateri SELECT I OD su obavezne. Ključna riječ SELECT govori bazi podataka da je ova izjava zahtjev za dohvaćanje informacija. Nakon riječi SELECT, odvojenih sa "," su navedena imena kolona čiji se sadržaj traži. Nakon riječi FROM, prikazana je lista imena tablica (kroz ",") iz kojih se preuzimaju informacije.

primjer:

ODABIR IME, PREZIME

Sljedeći upit preuzima sve vrijednosti IME i PREZIME iz tabele STUDENTS. Rezultat je tabela koja se sastoji od 2 kolone.

Redoslijed kolona u ovoj tabeli odgovara redoslijedu polja navedenih u upitu, a ne njihovom redoslijedu u tabeli STUDENTS.

Ako treba da dobijete sve kolone tabele, onda umesto liste kolona, ​​samo navedite simbol ( *) .

primjer:

SELECT *

Odmah posle SELECT izraz možete koristiti SVE ključne riječi prije liste kolona (sve) i DISTINCT (različito), koji određuju koje zapise treba prikazati u rezultirajućoj tabeli. Ako se ove ključne riječi ne koriste, podrazumijeva se da bi svi zapisi trebali biti odabrani (što je isto kao i korištenje ključne riječi ALL). Samo ako se koristi DISTINCT jedinstveni zapisi. Štaviše, ako izvorna tabela sadrži nekoliko identičnih zapisa, tada se bira samo prvi.

primjer:

ODABIR DISTINCT CITY

Ako klauzula FROM navodi više od jedne tablice, SELECT klauzula mora sadržavati imena stupaca prefiksi, pokazujući kojoj tabeli pripadaju. Prefiks je odvojen od naziva kolone tačkom.

primjer:

Izraz STUDENTS.NAME znači kolona NAME sa stola STUDENTI

Naslove kolona u rezultujućoj tabeli možete redefinisati po sopstvenom nahođenju dodeljivanjem tzv. pseudonimima. Da biste to uradili, na listi kolona iza odgovarajuće kolone napišite izraz poput: AS zaglavlje kolone

primjer:

ODABERITE IME KAO Ime, PREZIME KAO Prezime

Aliasi se također mogu specificirati za svaku tablicu nakon ključne riječi FROM. Da biste to učinili, samo navedite pseudonim odvojen razmakom odmah iza imena odgovarajuće tablice. Alijasi tablica, koji su kraći od njihovih imena, korisni su za složene upite.

primjer:

SELECT T1.NAME , T1.SURNAME, T2.SUM_STIPEND

OD STUDENATA T1, STIPENDIJA T2;

WHERE klauzula

Uslovi pretraživanja u klauzuli WHERE su Booleovi izrazi, tj. uzeti jednu od tri moguće vrijednosti: istina, false I NULL (ovo se dešava kada su neki elementi u izrazu NULL). Dakle, u SQL-u imamo posla sa trovrednosnom logikom.

Prilikom sastavljanja logičkih izraza koriste se posebne ključne riječi i simboli operacija poređenja, koji se nazivaju predikati:

ü predikati poređenja: (=), (<), (>), (<>), (<=), (>=);

ü LIKE, NE LIKE;

ü SVI, NEKI, BILO KOJI;

primjer:

GDJE PREZIME = "Petrov";

Kao rezultat izvršenja upita, iz jedne kolone će se dobiti tabela koja sadrži imena svih studenata sa prezimenom Petrov, koji se nalaze u tabeli STUDENTS.

primjer:

Napišite zahtjev za primanje imena i prezimena studenata koji studiraju na 3. godini i primaju stipendiju:

ODABIR IME, PREZIME

GDJE KURS=3 I STIPENDA>0;

Operator BETWEEN

Predikat BETWEEN (između) vam omogućava da navedete izraz za provjeru da li je vrijednost unutar raspona definiranog graničnim vrijednostima.

primjer:

ODABIR SUBJECT_NAME

GDJE SATI IZMEĐU 30 I 40;

Prikažite nazive predmeta za koje je određen broj sati u rasponu od 30 do 40.

Granične vrijednosti su uključene u raspon vrijednosti sa kojima se vrši poređenje.

Izraz s predikatima za poređenje je ekvivalentan sljedećem:

ODABIR SUBJECT_NAME

GDJE SATI>30 I SATI<40;

Pored numeričkih podataka, u izrazima sa BETWEEN mogu se koristiti sljedeće vrste podataka: znak, bit, datum-vrijeme.

IN i NOT IN operatori

Predikati IN (in) i NOT IN (ne in) se koriste za provjeru pojavljivanja vrijednosti u datoj listi vrijednosti.

Predikat konstruiran korištenjem IN smatra se istinitim ako vrijednost polja čije je ime naznačeno lijevo od IN odgovara jednoj od vrijednosti na listi.

primjer:

ODABIR STUDENT_ID

GDJE OZNAČITI (4, 5);

Dobijte informacije iz tabele EXAM_MARKS o studentima koji imaju ispitne ocjene samo 4 i 5.

NOT IN– ne odgovara nijednoj vrijednosti

primjer:

ODABIR STUDENT_ID

GDJE OZNAČITI NIJE IN (0, 1, 2, 3);

Dobijte informacije iz tabele EXAM_MARKS o studentima koji nemaju nezadovoljavajuće ocjene na ispitu.

LIKE i NOT LIKE operatori

Predikati LIKE i NOT LIKE se koriste za testiranje djelomičnih podudaranja nizova znakova. Ovaj operator gleda niz vrijednosti polja kako bi utvrdio da li je niz naveden u operatoru LIKE uključen u karakter string_value polja koje se provjerava.

Kriterij djelomičnog podudaranja je specificiran pomoću dva maskirani likovi: znak postotka (%) i donja crta (_). Znak postotka (%) označava bilo koji skup znakova, uključujući prazan znak, a donja crta (_) označava bilo koji pojedinačni znak.

primjer:

SELECT *

GDJE PREZIME KAO "P%";

Rezultat upita je tabela koja sadrži podatke o učenicima čije prezime počinje na slovo "P".

Ako treba da isključite sve studente sa prezimenom "Petrov", morate pokrenuti sljedeći upit:

SELECT *

GDJE PREZIME NE KAO "Petrov";

Ako je potrebno uključiti donje crte ili procentne znakove u "uzorak", potrebno je da takve znakove SQL interpreter ne percipira kao zamjenske znakove. Da bi se postotak ili donja crta shvatili doslovno, mora mu prethoditi poseban kontrolni znak. Ovaj znak se može definirati proizvoljno, sve dok se ne pojavljuje kao element podataka.

primjer:

SELECT Ime, Adresa, Procenat_popusta

OD klijenata

GDJE Popust_postotak KAO "20#%"

Ovdje nakon ključne riječi ESCAPE slijedi simbol koji se koristi kao kontrola. Na isti način možete onemogućiti sam kontrolni znak.

primjer:

LIKE "_ \ _P"

U ovom izrazu, znak "\" je deklariran kao ESC znak pomoću ključne riječi ESCAPE. Prvi znak "_" će odgovarati, kao i prije, bilo kojem karakteru u nizu koji se provjerava, a drugi znak "_" će se tumačiti doslovno, kao običan znak podvlake.

IS NULL operator

Predikat IS NULL se koristi za identifikaciju zapisa u kojima određena kolona nema vrijednost.

primjer:

Evidenciju o klijentima kojima adresa nije navedena možete dobiti pomoću sljedećeg zahtjeva:

SELECT Ime, Adresa, Region

OD klijenata

GDJE je adresa NULL;

Da biste dobili zapise u kojima stupac Adresa sadrži neku specifičnu vrijednost (tj. koja nije NULL), možete koristiti sličan izraz, ali s NOT logičkim operatorom:

SELECT Ime, Adresa, Region

OD klijenata

WHERE Adresa NIJE NULL;

Ne treba koristiti predikate za poređenje sa NULL, kao što je "Address=NULL"

Operator LIKE se koristi u klauzuli WHERE za traženje određenog uzorka u stupcu.

LIKE SQL izjava

Operator LIKE se koristi za traženje određenog uzorka u koloni.

SQL LIKE sintaksa

Demo verzija baze podataka

U ovom vodiču ćemo koristiti dobro poznatu bazu podataka Northwind.

Ispod je izbor iz tabele "Kupci":

ID korisnikaIme klijentaKontakt osobaAdresagradPoštanski brojDržava
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Njemačka
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitucion 2222 Meksiko D.F. 05021 Meksiko
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Meksiko D.F. 05023 Meksiko
4 Oko Roga Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbkop Christina Berglund Berguvsvagen 8 Lulea S-958 22 Švedska

Primjeri SQL LIKE operatora

Sljedeći SQL izraz odabire sve klijente s gradom koji počinje slovom "s":

savjet: Znak "%" se koristi za definiranje maske (slova koja nedostaju) prije i poslije crteža. Naučit ćete više o zamjenskim znakovima u sljedećem poglavlju.

Sljedeći SQL izraz odabire sve klijente s gradom koji se završava slovom "s":

Sljedeći SQL izraz odabire sve klijente sa zemljom koja sadrži obrazac "zemlja":

Korištenje ključne riječi sprječava vas da odaberete zapise koji se ne podudaraju s uzorkom.

Sljedeći SQL izraz odabire sve klijente iz zemlje koja ne sadrži obrazac "zemlja".

© 2024 ermake.ru -- O popravci računara - Informativni portal