MySQL WHERE-klausul: AND, OR, IN, NOT IN Spørringseksempel
⚡ Smart oppsummering
MySQL WHERE-klausulen filtrerer rader før de når resultatsettet, og bruker presise kriterier på SELECT-, UPDATE- og DELETE-setninger. Å forstå AND-, OR-, IN- og NOT IN-operatorer og sammenligningsoperatorer lar nybegynnere hente nøyaktig de postene en spørring krever.

Hva er WHERE-klausul i MySQL?
HVOR punkt in MySQL er et nøkkelord som brukes til å spesifisere de eksakte kriteriene for data eller rader som vil bli påvirket av den angitte SQL-setningen. WHERE-leddet kan brukes med SQL-setninger som INSERT, UPDATE, SELECT og DELETE for å filtrere poster og utføre ulike operasjoner på dataene.
Vi så på hvordan du kan spørre etter data fra en database ved å bruke SELECT-setningen i forrige veiledning. SELECT-setningen returnerte alle resultatene fra den spørrede databasetabellen.
Det finnes imidlertid tilfeller der vi ønsker å begrense spørreresultatene til en spesifisert betingelse. WHERE-klausulen i SQL er nyttig i slike situasjoner, og den fungerer på samme måte i en SLETT- eller OPPDATERING-spørring slik det gjør i en SELECT-spørring.
WHERE-klausul Syntaks
Den grunnleggende syntaksen til WHERE-klausulen er som følger.
SELECT * FROM tableName WHERE condition;
HER
- "VELG * FRA tabellnavn" er standarden SELECT-setning
- "HVOR" er nøkkelordet som begrenser resultatsettet, og "betingelse" er filteret som brukes på resultatene. Filteret kan være et område, en enkeltverdi eller en underspørring.
Anta at vi ønsker et medlems detaljer fra medlemstabellen, gitt medlemskapsnummer 1. Skriptet nedenfor oppnår det.
SELECT * FROM `members` WHERE `membership_number` = 1;
Kjører dette skriptet i MySQL arbeidsbenk på «myflixdb» produserer du resultatet nedenfor.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Én enkelt betingelse er sjelden nok. Avsnittene nedenfor kombinerer WHERE med logiske operatører.
WHERE-klausul kombinert med – OG LOGISK Operator
Med den logiske operatoren AND returneres en rad bare hvis ALLE angitte kriterier er oppfylt.
Anta at vi ønsker alle filmene i kategori 2 som ble utgitt i 2008. Manuset nedenfor oppnår det.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Å kjøre skriptet ovenfor mot «myflixdb» gir følgende resultat.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
OG innsnevrer et resultatsett. ELLER utvider det.
WHERE-klausul kombinert med – OR LOGISK Operator
Med OR-operatoren returneres en rad hvis NOEN av de angitte kriteriene er oppfylt.
Følgende manus henter alle filmene i enten kategori 1 eller kategori 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Resultatsettet vises nedenfor.
| 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 |
Det blir vanskelig å lese å kjede mange ELLER-betingelser. Nøkkelordet IN løser dette.
WHERE-klausul kombinert med – IN søkeord
WHERE-klausulen, når den brukes med IN-nøkkelordet, påvirker bare rader med verdier som samsvarer med den oppgitte listen. IN reduserer antallet OR-klausuler du ellers ville skrevet.
Følgende MySQL WHERE IN-spørringen gir rader der medlemskapsnummer er enten 1, 2 eller 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Resultatsettet vises nedenfor.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 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 |
IKKE INN utfører det motsatte filteret.
WHERE-klausul kombinert med – IKKE I søkeord
Med NOT IN-nøkkelordet ekskluderer WHERE-klausulen alle rader hvis verdi samsvarer med den oppgitte listen.
Følgende spørring gir rader der medlemskapsnummer IKKE er 1, 2 eller 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Resultatsettet vises nedenfor.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
WHERE filtrerer også verdier etter størrelse og likhet ved hjelp av sammenligningsoperatorer.
WHERE-klausul kombinert med – SAMMENLIGNING Operatorer
Sammenligningsoperatorene mindre enn (<), lik (=), større enn (>) og ikke lik (<>) kan alle brukes med WHERE-klausulen.
= Lik
Følgende skript henter alle kvinnelige medlemmer fra medlemstabellen ved å bruke lik til sammenligningsoperatoren.
SELECT * FROM `members` WHERE `gender` = 'Female';
Resultatsettet vises nedenfor.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 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 |
> Større enn
Følgende skript henter alle betalingene som er større enn 2,000 fra betalingstabellen.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Resultatsettet vises nedenfor.
| 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 |
<> Ikke lik
Følgende manus henter alle filmene hvis kategori-ID ikke er 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Resultatsettet vises nedenfor.
| 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 |
Hurtigreferanse: WHERE-klausul Operatorer
Operatorene som oftest er paret med WHERE er oppsummert nedenfor. Fullstendige definisjoner finnes i MySQL operatørreferanse.
| Operator | Betydning | Eksempeltilstand |
|---|---|---|
| = | Lik | `kjønn` = 'Kvinne' |
| <> | Ikke lik | `kategori_id` <> 1 |
| > / | Større enn / mindre enn | `betalt_beløp` > 2000 |
| OG / ELLER | Alle kriterier / alle kriterier | `kategori_id` = 2 OG `utgivelsesår` = 2008 |
| INN / IKKE INN | Samsvarer med/ekskluderer en liste | `medlemsnummer` IN (1,2,3) |
| ER NULL / ER IKKE NULL | Tester for manglende verdier | `postadresse` ER NULL |
⚠️ Merk: NULL samsvarer aldri med = eller <>. Bruk IS NULL eller IS NOT NULL når en kolonne kanskje ikke inneholder noen verdi.
Hjernetrim: Finn filmer som er returnert for sent
Anta at vi ønsker leiefilmene som ikke ble returnert innen fristen 25.06.2012. Ved å kombinere WHERE med mindre-enn-operatoren og AND oppnås dette.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Utfører skriptet ovenfor i MySQL arbeidsbenk gir følgende resultater.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

