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.

  • 🔍 Kjerneformål: WHERE-klausulen begrenser hvilke rader en setning berører, så SELECT, UPDATE og DELETE påvirker bare samsvarende rader.
  • 🔗 OG Operator: Rader returneres bare når hver betingelse evalueres til sann, noe som innsnevrer resultatsettet.
  • 🔀 OR Operator: Rader returneres når en enkelt betingelse evalueres til sann, noe som utvider resultatsettet.
  • ???? INN og IKKE INN: Nøkkelordet IN samsvarer med en liste med verdier i ett uttrykk, mens NOT IN ekskluderer den samme listen.
  • 🇧🇷 Sammenligning Operators: Lik (=), større enn (>), mindre enn (<) og ikke lik (<>) filtrerer numeriske kolonner, tekstkolonner og datokolonner.
  • ⚠️ NULL-håndtering: NULL samsvarer aldri med = eller <>, så IS NULL og IS NOT NULL er nødvendige for å teste for manglende verdier.

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 i MySQL

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 email
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 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

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 email
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 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

> 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

Spørsmål og svar

WHERE filtrerer individuelle rader før gruppeping, så den kan ikke referere til aggregerte funksjoner. HAVING filtrerer grupper etter GROUP BY-kjøringer, noe som gjør den til det rette stedet for betingelser som COUNT(*) > 5.

Bruk ER NULL eller ER IKKE NULL. Operator-funksjoner som = og <> returnerer ukjent for NULL, så `postal_address` = NULL samsvarer ikke med noe, mens `postal_address` IS NULL fungerer.

Ja, når den filtrerte kolonnen er indeksert, MySQL leser bare samsvarende rader i stedet for å skanne tabellen.ping En kolonne i en funksjon, for eksempel YEAR(`fødselsdato`) = 1980, forhindrer bruk av indeksen.

Ja. AI-assistenter gjør vanlig engelsk om til SQL, og MySQL Workbench kan kjøre resultatet. RevVis alle betingelser mot skjemaet ditt, fordi en modell kan finne opp kolonnenavn.

Test det med SELECT først. En feil WHERE-klausul på en SLETT- eller OPPDATERING-spørring kan endre hver rad. Forhåndsvis de samsvarende radene, og bruk deretter den samme betingelsen på nytt for skrivingen.

Oppsummer dette innlegget med: