MySQL WHERE klauzula: AND, OR, IN, NOT IN Primjer upita

โšก Pametni saลพetak

MySQL Klauzula WHERE filtrira retke prije nego ลกto dosegnu skup rezultata, primjenjujuฤ‡i precizne kriterije na naredbe SELECT, UPDATE i DELETE. Razumijevanje operatora AND, OR, IN, NOT IN i operatora usporedbe omoguฤ‡uje poฤetnicima da dohvate toฤno one zapise koje upit zahtijeva.

  • ๐Ÿ” Osnovna svrha: Klauzula WHERE ograniฤava koje retke naredba dodiruje, pa tako SELECT, UPDATE i DELETE utjeฤu samo na odgovarajuฤ‡e retke.
  • ๐Ÿ”— I Operator: Redci se vraฤ‡aju samo kada se svaki uvjet isplati, suลพavajuฤ‡i skup rezultata.
  • ๐Ÿ”€ OR Operator: Redci se vraฤ‡aju kada se bilo koji pojedinaฤni uvjet ocijeni kao istinit, proลกirujuฤ‡i skup rezultata.
  • ๐Ÿ“‹ UNUTRA i NE UNUTRA: Kljuฤna rijeฤ IN pronalazi popis vrijednosti u jednom izrazu, dok NOT IN iskljuฤuje taj isti popis.
  • โš–๏ธ usporedba Operatorovi: Jednako (=), veฤ‡e od (>), manje od (<) i nije jednako (<>) filtriraju numeriฤke, tekstualne i datumske stupce.
  • โš ๏ธ Rukovanje NULL vrijednostima: NULL se nikad ne podudara s = ili <>, pa su za provjeru nedostajuฤ‡ih vrijednosti potrebni IS NULL i IS NOT NULL.

ล to je WHERE klauzula u MySQL?

WHERE in MySQL je kljuฤna rijeฤ koja se koristi za odreฤ‘ivanje toฤnih kriterija podataka ili redaka na koje ฤ‡e utjecati navedena SQL izjava. Klauzula WHERE moลพe se koristiti sa SQL naredbama kao ลกto su INSERT, UPDATE, SELECT i DELETE za filtriranje zapisa i izvoฤ‘enje raznih operacija na podacima.

Pogledali smo kako postaviti upit za podatke iz a baza podataka pomoฤ‡u naredbe SELECT u prethodnom vodiฤu. Izjava SELECT vratila je sve rezultate iz upitane tablice baze podataka.

Meฤ‘utim, postoje sluฤajevi kada ลพelimo ograniฤiti rezultate upita na odreฤ‘eni uvjet. Klauzula WHERE u SQL-u je korisna u takvim situacijama i funkcionira na isti naฤin u Upit za brisanje ili aลพuriranje kao ลกto se to radi u SELECT upitu.

WHERE klauzula u MySQL

WHERE klauzula Sintaksa

Osnovna sintaksa WHERE klauzule je sljedeฤ‡a.

SELECT * FROM tableName WHERE condition;

OVDJE

  • โ€œSELECT * FROM tableNameโ€ je standard SELECT izraz
  • "GDJE" je kljuฤna rijeฤ koja ograniฤava skup rezultata i "stanje" je filtar primijenjen na rezultate. Filtar moลพe biti raspon, pojedinaฤna vrijednost ili podupit.

Pretpostavimo da ลพelimo podatke o ฤlanu iz tablice ฤlanova, s obzirom na broj ฤlanstva 1. Skript u nastavku to postiลพe.

SELECT * FROM `members` WHERE `membership_number` = 1;

Izvrลกavanje ove skripte u MySQL radna tezga na โ€œmyflixdbโ€ daje rezultat u nastavku.

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm

Jedan uvjet rijetko je dovoljan. Odjeljci u nastavku kombiniraju WHERE s logiฤki operatori.

WHERE klauzula u kombinaciji s โ€“ I LOGIฤŒNO Operahumka

S logiฤkim operatorom AND, redak se vraฤ‡a samo ako su ispunjeni SVI navedeni kriteriji.

Pretpostavimo da ลพelimo sve filmove u kategoriji 2 koji su objavljeni 2008. godine. Scenarij u nastavku to postiลพe.

SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;

Izvrลกavanje gornjeg skripta na "myflixdb" daje sljedeฤ‡i rezultat.

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2

I suลพava skup rezultata. ILI ga proลกiruje.

WHERE klauzula u kombinaciji s โ€“ OR LOGIฤŒNO Operahumka

S operatorom OR, redak se vraฤ‡a ako je ispunjen BILO KOJI od navedenih kriterija.

Sljedeฤ‡i scenarij dobiva sve filmove iz kategorije 1 ili kategorije 2.

SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;

Skup rezultata prikazan je u nastavku.

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2

Lanฤano povezivanje mnogih OR uvjeta postaje teลกko za ฤitanje. Kljuฤna rijeฤ IN to rjeลกava.

WHERE klauzula u kombinaciji s โ€“ IN Rijeฤ

Klauzula WHERE, kada se koristi s kljuฤnom rijeฤi IN, utjeฤe samo na retke ฤije vrijednosti odgovaraju navedenom popisu. IN smanjuje broj OR klauzula koje biste inaฤe napisali.

Sljedeฤ‡e MySQL Upit WHERE IN vraฤ‡a retke gdje je broj_ฤlanstva 1, 2 ili 3.

SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);

Skup rezultata prikazan je u nastavku.

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com

NOT IN izvodi suprotan filter.

WHERE klauzula u kombinaciji s โ€“ NE U Rijeฤ

S kljuฤnom rijeฤi NOT IN, klauzula WHERE iskljuฤuje svaki redak ฤija vrijednost odgovara navedenom popisu.

Sljedeฤ‡i upit daje retke gdje membership_number NIJE 1, 2 ili 3.

SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);

Skup rezultata prikazan je u nastavku.

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

WHERE takoฤ‘er filtrira vrijednosti prema veliฤini i jednakosti, koristeฤ‡i operatore usporedbe.

WHERE klauzula u kombinaciji s โ€“ USPOREDBA Operaulagatelji

Operatori usporedbe manje od (<), jednako (=), veฤ‡e od (>) i nije jednako (<>) mogu se koristiti s klauzulom WHERE.

= Jednak

Sljedeฤ‡a skripta dobiva sve ลพenske ฤlanice iz tablice ฤlanova pomoฤ‡u operatora jednako za usporedbu.

SELECT * FROM `members` WHERE `gender` = 'Female';

Skup rezultata prikazan je u nastavku.

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

> Veฤ‡i od

Sljedeฤ‡a skripta dobiva sva plaฤ‡anja koja su veฤ‡a od 2,000 iz tablice plaฤ‡anja.

SELECT * FROM `payments` WHERE `amount_paid` > 2000;

Skup rezultata prikazan je u nastavku.

payment_id membership_number payment_date description amount_paid external_reference_number
1 1 23-07-2012 Movie rental payment 2500 11
3 3 30-07-2012 Movie rental payment 6000 NULL

<> Nije jednako

Sljedeฤ‡a skripta dobiva sve filmove ฤiji ID kategorije nije 1.

SELECT * FROM `movies` WHERE `category_id` <> 1;

Skup rezultata prikazan je u nastavku.

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey mooners John Schultz 2005 8

Kratki pregled: Klauzula WHERE Operaulagatelji

Operatori koji se najฤeลกฤ‡e uparuju s WHERE saลพeti su u nastavku. Potpune definicije nalaze se u MySQL referenca operatora.

Operahumka Znaฤenje Primjer uvjeta
= Jednak `spol` = 'ลฝenski'
<> Nije jednako `id_kategorije` <> 1
> / Veฤ‡e od / manje od `iznos_plaฤ‡en` > 2000
I / ILI Svi kriteriji / bilo koji kriterij `category_id` = 2 I `year_released` = 2008
UNUTRA / NIJE UNUTRA Podudara se / iskljuฤuje popis `broj_ฤlanstva` IN (1,2,3)
JE NULA / NIJE NULA Testovi za nedostajuฤ‡e vrijednosti `poลกtanska_adresa` JE NULL

โš ๏ธ Napomena: NULL se nikad ne podudara s = ili <>. Koristite IS NULL ili IS NOT NULL kada stupac moลพda ne sadrลพi vrijednost.

Mozaika: Pronaฤ‘ite filmove vraฤ‡ene kasno

Pretpostavimo da ลพelimo unajmljene filmove koji nisu vraฤ‡eni do krajnjeg datuma 25.06.2012. To postiลพemo kombiniranjem WHERE s operatorom "manje od" i AND.

SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;

Izvrลกavanje gornje skripte u MySQL radni stol daje sljedeฤ‡e rezultate.

reference_number transaction_date return_date membership_number movie_id movie_returned
14 21-06-2012 24-06-2012 2 2 0

Pitanja i odgovori

WHERE filtrira pojedinaฤne retke prije grupeping, tako da ne moลพe referencirati agregacijske funkcije. HAVING filtrira grupe nakon izvrลกavanja GROUP BY, ลกto ga ฤini pravim mjestom za uvjete kao ลกto je COUNT(*) > 5.

Koristite IS NULL ili IS NOT NULL. OperaTermini poput = i <> vraฤ‡aju nepoznato za NULL, pa `postal_address` = NULL ne odgovara niฤemu, dok `postal_address` IS NULL funkcionira.

Da, kada je filtrirani stupac indeksiran, MySQL ฤita samo odgovarajuฤ‡e retke umjesto skeniranja tablice. Prelomiping Stupac u funkciji, kao ลกto je YEAR(`date_of_birth`) = 1980, sprjeฤava koriลกtenje indeksa.

Da. AI asistenti pretvaraju obiฤan engleski u SQL i MySQL Radna tezga moลพe pokrenuti rezultat. RevPregledajte svaki uvjet u odnosu na vaลกu shemu, jer model moลพe izmisliti nazive stupaca.

Prvo testirajte s SELECT-om. Pogreลกna WHERE klauzula na Upit za brisanje ili aลพuriranje moลพe promijeniti svaki redak. Pregledajte podudarne retke, a zatim ponovno upotrijebite isti uvjet za pisanje.

Saลพmite ovu objavu uz: