Sql gdje primjeri. SQL Gdje: upotrebe i primjeri. Primjeri korištenja Where

SQL se smatra jednim od najčešćih programskih jezika za rad sa bazama podataka. Jezičke konstrukcije vam omogućavaju ne samo da kreirate bazu podataka, već i da izvršite razne manipulacije s njom kako biste promijenili podatke ili ih odabrali.

Da biste odabrali podatke iz baze podataka, koristite konstrukciju Odaberi [skup podataka] iz [ime tablice]. Iskustvo pokazuje da u 80% slučajeva kada koristite upite za odabir podataka, morate koristiti različite uslove – parametre. Da bi se to postiglo, uslov SQL-Where je uveden u jezik kao dodatak upitu, da bi se zakomplikovao.

Načini korištenja uslova gdje

Često programer treba da odabere, uglavnom za izvještavanje, podatke pohranjene u bazi podataka. Da biste to učinili, možda neće biti dovoljno izgraditi jednostavan upit za odabir. U pravilu je potrebno uzeti u obzir i različite uvjete, parametre uzorkovanja, kojih može biti dosta, ili ih provjeriti. da li podaci spadaju u definisani opseg ili se nalaze u određenoj tabeli.

SQL-Where konstrukcija se može koristiti za postavljanje uvjeta za odabir podataka ili za provjeru da li su podaci uključeni u odabranu ili stranu tablicu.

Korištenje Gdje postaviti opcije odabira

Ako trebate specificirati određene parametre za odabir iz baze podataka za izvješćivanje, sintaksa SQL-Where konstrukcije može se jednostavno organizirati. Da biste to učinili, možete koristiti sljedeća pravila:

    Morate da napravite standardni upit koristeći konstrukciju Select * from.

    Koristeći konstrukciju ključa Join, odredite iz kojih tabela će se izvršiti odabir.

    Koristeći konstrukciju Where, navedite listu parametara za odabir.

Ove vrste upita su prilično jednostavne za konstruiranje i ne izazivaju poteškoće čak ni početnicima.

Korištenje konstrukcije za testiranje pojave

Ako programer ima zadatak ne samo da odabere podatke iz tabele na osnovu uslova, već i da proveri njihovo uključivanje u jednu ili više tabela drugog plana, SQL-Where konstrukcija će biti neophodna.

Koristeći sintaksu ove konstrukcije, možete izgraditi iste uslove, ali sa ugniježđenim upitima koji će provjeriti da li su odabrani redovi uključeni u skup tablica baze podataka treće strane.

U pravilu se u takve svrhe formira privremena tabela u koju se bilježi cijeli skup podataka potrebnih za provjeru pojave.

Primjeri korištenja Where

Sada će biti dati primjeri Za početak, zamislimo da postoje dvije tabele sa podacima - Tovar i TovarAmount. Prvi sadrži nazive robe koja se prodaje, cijenu, datum prodaje i kupca koji je kupio robu. Drugi označava dostupnost proizvoda, tačnije koji je na lageru.

Primjer zahtjeva s parametrom koji će ukazati na sve proizvode prodate u određenom broju dana bila bi sljedeća konstrukcija:

Odaberite * iz proizvoda

Gdje T_Date >= '12/01/2016' i T_Date<= ‘’12/07/1016 and T_PriceOut >0

Upit ovog tipa će vratiti listu proizvoda, podatke iz tabele, koji su prodati u prvih sedam dana decembra, što je naznačeno jednim od uslova odabira: T_PriceOut >0.

Ako uzmemo u obzir uvjet za povlačenje robe koja je na zalihama, tada će dizajn biti sljedeći:

Odaberite * iz proizvoda

Gdje je T_Tovar (odaberite TA_Tovar gdje je TA_ Iznos >0)

U Where može biti mnogo ugniježđenih uslova, ali vrijedi napomenuti da što je više uvjeta nametnuto, to će upit duže trajati. Upravo je to razlog za korištenje privremenih tabela. Mnogo je brže kreirati nekoliko takvih i zatim uporediti podatke u njima nego izgraditi stanje sa nekoliko nivoa verifikacije podataka.

U ovom članku ću vam reći o uvjetnom CASE operatoru, bez kojeg bi se obračun podataka u brojnim zadacima pretvorio u hrpe dijelova koda, kao i o tome kako ga koristiti u SQL upitima.

Bez obzira na to koliko dobro dizajnirate svoju bazu podataka, uvijek će biti problema gdje uslovne izjave ne mogu proći. Na primjer, umjesto ogromnih brojeva, dobijete verbalni opis, ili, ovisno o prisutnosti (odsustvu) podataka, dodajte dodatne znakove u red, ili kao složeniji primjer, ovisno o različitim nijansama, dodijelite zapis jednom ili drugu grupu. Postoji mnogo situacija.

u principu, ovog operatera postoje najmanje dva oblika u različitim bazama podataka. Prva opcija liči na običan prelazak sa bilo kojeg programskog jezika. Drugi zavisi od logičkih izraza.

Međutim, za potrebe ovog članka, razmotrit ću drugu opciju, budući da ona nema problema sa situacijama kao što je CASE WHEN NULL (null unutar baze podataka nije određena vrijednost, tako da se ne može koristiti u naredbi nalik prekidaču ). Osim toga, u svakodnevnom životu zadaci se najčešće javljaju posebno za drugu opciju - izračunavanje kroz logičke izraze. Stoga je bolje odmah naučiti i nastaviti ga koristiti.

Obično se opisuje ovako (sintaksa može varirati ovisno o bazi podataka):

CASE WHEN bool_izraz1 ONDA vrijednost1 ..... KADA bool_izrazN ONDA vrijednostN ELSE vrijednostElse END

bool_expressionX je boolean uslov

valueX je vrijednost koja će biti zamijenjena ako je odgovarajući logički uvjet ispunjen

valueElse je vrijednost koja će biti zamijenjena ako prethodno nije ispunjen nijedan uvjet.

Nakon ovih malih informacija, idemo na praksu.

Napomena: Uzgred, vrijedi znati da se obično ovaj operator može koristiti ne samo u odabiru, već i na bilo kojem mjestu gdje se mogu koristiti polja. Na primjer, prilikom spajanja tabela ili čak filtriranja (imanje) prilikom grupiranja (grupisa po).

Uvjetni izraz CASE...WHEN...THEN

Da bismo bolje razumjeli uslovni izraz CASE...WHEN...THEN, zamislimo mali problem. Recimo da imate tabelu sa podacima o kupcima i njihovom ukupnom broju kupovina. A zadatak je dinamički kreirati popust. Naravno, bilo bi moguće i ručno podesiti popust. Ali, imate prag, a pragovi su fiksirani (nešto poput: iznos veći od 1000 će dobiti 2% popusta, a više od 5000 će dobiti 5%) i želite da automatizujete ovaj proces tako da ne Ne morate tražiti greške svaki put kada uđete u bazu podataka (klijent je prikupio potreban iznos - automatski se pojavljuje popust).

Uzmimo uslovnu tabelu klijenata sa tri klijenta. Na primjer, oni će biti sasvim dovoljni.

Sada postavimo nekoliko uslova za automatsko davanje popusta na osnovu zadatka. Istovremeno, vjerujemo da se klijentu u svakom slučaju daje maksimalan popust.

1. Iznos od 1000 - 2% popusta

2. Iznos od 5000 - 5% popusta

3. Iznos od 10.000 - 8% popusta

4. Broj narudžbi od 10 - 7% popusta

5. Broj narudžbi od 20 - 8% popusta

Kao što vidite, popust zavisi od dva faktora: količine i količine. Pokušajmo sada od njih stvoriti uslove na osnovu popusta, odnosno pravila su suprotna, tako da se mogu koristiti u sql upitu. Dobijamo sljedeće:

1. 2% - Iznos od 1000 do 4999 i broj narudžbi manji od 10.

2. 5% - Iznos od 5000 do 9999 i broj narudžbi je manji od 10.

3. 7% - Broj narudžbi od 10 do 19 i iznos manji od 10.000

4. 8% - Količina od 20 ili iznos od 10.000

Sada ostaje samo da to zapišete. Hajde da dobijemo sledeći sql upit

Prikazujemo ime i druge podatke biramo ime, broj_porudžbine, total_sum, -- I sada prikazujemo popust SLUČAJ -- Prvo pravilo 2% KADA c.total_sum >= 1000 i c.total_sum<= 4999 and c.order_count < 10 THEN 2 -- Второе правило 5% WHEN c.total_sum >= 5000 i c.total_sum<= 9999 and c.order_count < 10 THEN 5 -- Третье правило 7% WHEN c.total_sum < 10000 and c.order_count >= 10 i c.order_count<= 19 THEN 5 -- Четвертое правило 8% WHEN c.total_sum >= 10000 ili c.order_count >= 20 ONDA 5 -- Nisu ispunjena nikakva pravila, što znači da je popust 0. ELSE 0 END kao popust od klijenta c

Kao rezultat izvršenja dobijamo sledeću tabelu:

Kao što vidite, dva kupca su dobila popust od 8 posto, a jedan kupac 2 posto. U tom slučaju, sa svakom narudžbom postotak će se automatski izračunati i nećete morati ništa prilagođavati. Na primjer, ako se Petyin iznos poveća na 5000, tada će njegov popust automatski porasti na 5% (barem, budući da još uvijek postoji veliki broj narudžbi).

U većini slučajeva ne morate preuzimati sve zapise, već samo one koji ispunjavaju određene kriterije. Stoga, za filtriranje uzorka SQL postoji poseban operater GDJE.

1. Jednostavno filtriranje pomoću WHERE operatora.

Odaberimo, na primjer, zapise iz naše tabele koji se odnose samo na određeni proizvod. Da bismo to učinili, naznačit ćemo dodatni parametar izbor koji će filtrirati vrijednost po koloni Proizvod.

Primjer upita za odabir tekstualnih vrijednosti:

SELECT * OD Sumproduct GDJE Proizvod = "Bcikli"

Kao što vidite, uslov odabira je stavljen u jednostruke navodnike, što je obavezno prilikom filtriranja tekstualne vrijednosti. Prilikom filtriranja numeričkih vrijednosti, navodnici nisu potrebni.

Primjer upita za odabir numeričkih vrijednosti:

SELECT > 40000 ORDER BY Iznos

U ovom primjeru odabrali smo zapise u kojima je prihod od prodaje iznosio više od 40 hiljada dolara i, dodatno, svi zapisi su sortirani uzlaznim redoslijedom po polju Iznos

Tabela ispod navodi listu podržanih uslovnih izraza SQL:

2. Filtriranje po rasponu vrijednosti ( IZMEĐU).

Za odabir podataka koji se nalaze u određenom rasponu koristi se operator IZMEĐU. Sljedeći upit će odabrati sve vrijednosti u rasponu od 1000 $ V 2000 $ inkluzivno, na terenu Iznos.

SELECT * OD Sumproduct GDJE Količina IZMEĐU 1000 I 2000

Redoslijed sortiranja ovisit će o redoslijedu polja u zahtjevu. To jest, u našem slučaju, prvo će podaci biti sortirani po kolonama Iznos, a zatim po Grad.

3. Izbor praznih zapisa ( IS NULL).

IN SQL postoji poseban operator za odabir praznih zapisa (tzv NULL). Prazan unos je svaka ćelija u tabeli u koju nisu uneti znakovi. Ako se unese u ćeliju 0 ili prostor, tada se polje smatra popunjenim.

SELECT * OD Sumproduct GDJE Količina IS NULL

U gornjem primjeru, namjerno smo uklonili dvije vrijednosti u polju Iznos da demonstrira rad operatera NULL.

4. Napredno filtriranje ( I, ILI).

Jezik SQL nije ograničeno na filtriranje prema jednom uslovu za vlastite potrebe, možete koristiti prilično složene strukture za odabir podataka istovremeno prema mnogim kriterijima. U tu svrhu u SQL postoje dodatni operateri koji proširuju mogućnosti operatera GDJE. Takvi operateri su: I, ILI, U, NE. Evo nekoliko primjera kako ti operateri rade.

SELECT * OD Sumproduct GDJE Količina > 40000 I Grad = "Toronto"

SELECT * OD Sumproduct WHERE Mjesec= "april"ILI Mjesec= "mart"

Hajde da kombinujemo operatore I I ILI. Da bismo to učinili, napravit ćemo izbor bicikala ( Bicikli ) i klizaljke ( Klizaljke ), koji su prodati u martu (mart ).

SELECT * OD Sumproduct GDJE Proizvod= "Bcikli"ILI Proizvod= "Klazaljke" I Mjesec= "mart"

Vidimo da je naš uzorak uključivao mnoge vrijednosti (osim za mart ( mart), također januar ( januara), februar ( februar) i april ( april)). Šta je razlog? I činjenica je da SQL ima prioritete izvršenja naredbi. Odnosno, operater I ima veći prioritet od operatora ILI, pa su prvo odabrane ploče sa klizaljkama koje su prodate u martu, a potom i sve ploče vezane za bicikle.

Dakle, da bismo dobili ispravan odabir, moramo promijeniti prioritete izvršavanja naredbi. Za ovo koristimo zagrade, kao u matematici. Tada će se prvo obraditi operatori u zagradama, a zatim svi ostali.

SELECT * OD Sumproduct GDJE (Proizvod= "Bcikli"ILI Proizvod= "Klazaljke") I Mjesec= "mart"

5. Napredno filtriranje ( IN operater).

SELECT * IZ Sumproduct WHERE IDIN (4, 12, 58, 67)

Operater IN obavlja istu funkciju kao ILI međutim, ima niz prednosti:

  • Kada radite sa dugim listama, klauzula sa IN lakše za čitanje;
  • Koristi se manje operatora, što ubrzava obradu zahtjeva;
  • Najvažnija prednost IN je da se dodatna struktura može koristiti u njegovom dizajnu SELECT, sta
  • otvara velike mogućnosti za kreiranje složenih podupita.

6. Napredno filtriranje ( NE operater).

SELECT * IZ Sumproduct GDJE NIJE GradIN ("Toronto", "Montreal")

Ključna riječ NE omogućava vam da uklonite nepotrebne vrijednosti iz uzorka. Još jedna jedinstvena karakteristika je da se postavlja ispred naziva kolone uključene u filtriranje, a ne iza.

Teško je objasniti sintaksu za SQL Server WHERE klauzula, pa pogledajmo nekoliko primjera.

Počećemo tako što ćemo pogledati kako koristiti klauzulu WHERE sa samo jednim uslovom.

SELECT * FROM zaposlenih WHERE first_name = "Jane";

U ovom primjeru klauzule WHERE SQL Servera, koristili smo klauzulu WHERE da filtriramo naše rezultate iz zaposlenima sto. Naredba SELECT iznad bi vratila sve redove iz zaposlenima sto gde je ime je "Jane". Budući da se * koristi u SELECT, sva polja iz zaposlenima tabela bi se pojavila u skupu rezultata.

Primjer - korištenje uvjeta I

Pogledajmo kako koristiti klauzulu WHERE sa uslovom AND.

SELECT * FROM zaposlenih WHERE prezime = "Anderson" AND Employee_id >= 3000;

Ovaj primjer klauzule WHERE SQL Servera koristi klauzulu WHERE za definiranje više uvjeta. U ovom slučaju, ovaj SELECT izraz koristi uvjet AND da vrati sve zaposlenima koji imaju a prezime od "Anderson" i Employee_id je veći ili jednak 3000.

Primjer - korištenje uvjeta OR

Pogledajmo kako koristiti klauzulu WHERE sa uslovom OR.

SELECT employee_id, last_name, first_name FROM zaposlenika WHERE last_name = "Johnson" OR first_name = "Danielle";

Ovaj primjer klauzule WHERE SQL Servera koristi klauzulu WHERE za definiranje više uvjeta, ali umjesto korištenja uvjeta AND, koristi uvjet OR. U ovom slučaju, ovaj SELECT izraz bi vratio sve Employee_id, prezime, i ime vrijednosti iz zaposlenima sto gde je prezime je "Johnson" ili ime je "Danielle".

Primer - Kombinovanje uslova I & ILI

Pogledajmo kako koristiti klauzulu WHERE kada kombinujemo uslove AND & OR u jednom SQL naredbi.

SELECT * FROM zaposlenih WHERE (state = "Kalifornija" I prezime = "Smith") OR (employee_id = 82);

Ovaj primjer klauzule WHERE SQL Servera koristi klauzulu WHERE za definiranje više uvjeta, ali kombinira uvjet AND i uvjet OR. Ovaj primjer bi vratio sve zaposlenima koji se nalazi u stanje od "Kalifornije" i čije prezime je "Smith" kao i svi zaposleni čiji Employee_id je jednako 82.

Roditelji određuju redosljed I i ILI uslovi se procjenjuju. Baš kao što ste naučili po redoslijedu operacija na času matematike!

Primjer - spajanje tablica

Pogledajmo kako koristiti klauzulu WHERE kada spajamo više tabela.

SELECT employee.employee_id, contacts.last_name FROM zaposlenika INNER JOIN contacts ON employee.employee_id = contacts.contact_id WHERE staff.first_name = "Sarah";

Ovaj primjer klauzule WHERE SQL Servera koristi klauzulu WHERE za spajanje više tablica u jednu SELECT naredbu. Ovaj SELECT izraz bi vratio sve redove u kojima je ime u zaposlenima sto je "Sarah". I the zaposlenik s and kontakti stolovi su spojeni na Employee_id od zaposlenima sto i contact_id od kontakti sto.

Prilikom odabira zapisa iz tabele, gotovo uvijek je potrebno postaviti određene uslove po kojima određujemo koji nam zapisi trebaju, a koji ne. I ovi uslovi se mogu postaviti pomoću WHERE klauzule u SQL-u. Već sam vas upoznao s tim, ali sam u ovom članku odlučio da vas upoznam GDJE malo bliže.

Počeću sa jednostavan primjer uzorkovanje koristeći WHERE klauzule u SQL-u:

SELECT * FROM table WHERE count=5

Biće vraćeni zapisi u kojima je polje " count"važnosti 5 . Sada zakomplikujmo upit:

SELECT * IZ tabele WHERE count=5 I id< 100

Tako će biti vraćeni zapisi čije polje " count"važnosti 5 I polje " id„manje je važno 100 .

Naravno, možete koristiti i druge logičke operacije. Njihova puna lista:

  • ! (negacija)
  • I (I)
  • ILI (ILI)
  • XOR (EKSKLUZIVNO ILI, ponekad se također naziva MONTAŽA ILI, ali ovaj naziv se uglavnom nalazi u literaturi o mikroprocesorima)

Primjer korištenja više logičkih operatora:

SELECT * FROM table WHERE !(id<= 120 AND (count=10 OR date > "10/11/1980"))

Ovo je, na prvi pogled, složeno SQL upit. Pokušajte to sami shvatiti.

Također WHERE klauzula u SQL-u može sadržavati LIKE. LIKE omogućava vam da odredite da li navedeni niz odgovara određenom uzorku. Da bude malo jasnije, dat ću primjer:

SELECT * IZ tabele GDJE tekst KAO "%some text%"

Dato SQL upitće se vratiti set_set koji sadrži zapise u kojima je polje " tekst" ima sljedeći tekst: " neki tekst". Imajte na umu da ovo nije test jednakosti. Tekst može biti ogroman, ali ako sadrži red: " neki tekst“, to LIKEće se vratiti istina.

Pusti me da napišem kako postaviti obrazac za LIKE:

  • % - Ovo smo ti i ja koristili. Najčešće se koristi i znači bilo koje žice bilo koje dužine. U stvari, linija " %neki tekst%" kažemo da je bilo koji niz bilo koje dužine prvi, a zatim " neki tekst", a zatim ponovo bilo koji niz bilo koje dužine. Ako tekst odgovara ovom uzorku, vratite se istina, inače false.
  • je jedan znak. Da biste koristili ovaj predložak, morate specificirati raspone, na primjer, ovako: " neki% Ovaj obrazac će značiti da prvo dođe 1 karakter (bilo koji znak iz a to z), zatim " neke", a zatim bilo koji niz bilo koje dužine.
  • _ je bilo koji pojedinačni znak.
  • [^] - ovo je suprotno. Na primjer, možete dati ovaj primjer: " [^az]neki_". Ovaj obrazac znači da je bilo koji znak na prvom mjestu, ali samo NE "a" I NE "z". Sljedeća bi trebala biti linija " neke", a zatim samo jedan jedini znak.

Znanje i sposobnost upotrebe LIKE veoma važno, verujte mom iskustvu. Najjednostavniji primjer korištenja LIKE-a- Ovo pretraga sajta. Na kraju krajeva, sadržaj je u bazi podataka i morate izvući samo one zapise koji sadrže niz naveden u stringu za pretragu. A onda dolazi u pomoć LIKE. Upravo ovako sam implementirao svoju pretragu na ovoj stranici.

Pregled