MySQL WHERE-klausul: AND, OR, IN, NOT IN Forespørgselseksempel

⚡ Smart opsummering

MySQL WHERE-klausulen filtrerer rækker, før de når resultatsættet, og anvender præcise kriterier på SELECT-, UPDATE- og DELETE-sætninger. Forståelse af AND-, OR-, IN- og NOT IN-operatorer samt sammenligningsoperatorer giver begyndere mulighed for at hente præcis de poster, en forespørgsel kræver.

  • 🔍 Kerneformål: WHERE-klausulen begrænser, hvilke rækker en sætning berører, så SELECT, UPDATE og DELETE påvirker kun matchende rækker.
  • 🔗 AND Operator: Rækker returneres kun, når hver betingelse evalueres til sand, hvilket indsnævrer resultatsættet.
  • 🔀 OR Operator: Rækker returneres, når en enkelt betingelse evalueres til sand, hvilket udvider resultatsættet.
  • ???? IND og IKKE IND: Nøgleordet IN matcher en liste med værdier i ét udtryk, mens NOT IN ekskluderer den samme liste.
  • ⚖️ Sammenligning Operators: Lig med (=), større end (>), mindre end (<) og ikke lig med (<>) filtrerer numeriske kolonner, tekstkolonner og datokolonner.
  • ⚠️ NULL-håndtering: NULL matcher aldrig = eller <>, så IS NULL og IS NOT NULL er nødvendige for at teste for manglende værdier.

Hvad er WHERE-klausul i MySQL?

HVOR klausul in MySQL er et nøgleord, der bruges til at specificere de nøjagtige kriterier for data eller rækker, der vil blive påvirket af den angivne SQL-sætning. WHERE-sætningen kan bruges med SQL-sætninger som INSERT, UPDATE, SELECT og DELETE til at filtrere poster og udføre forskellige operationer på dataene.

Vi så på, hvordan man forespørger data fra en database ved at bruge SELECT-sætningen i den forrige øvelse. SELECT-sætningen returnerede alle resultater fra den forespurgte databasetabel.

Der er dog tidspunkter, hvor vi ønsker at begrænse forespørgselsresultaterne til en bestemt betingelse. WHERE-klausulen i SQL er praktisk i sådanne situationer, og den fungerer på samme måde i en SLET- eller OPDATER-forespørgsel som det gør i en SELECT-forespørgsel.

WHERE-klausul i MySQL

WHERE klausul Syntaks

Den grundlæggende syntaks for WHERE-klausulen er som følger.

SELECT * FROM tableName WHERE condition;

HER

  • "VÆLG * FRA tabelnavn" er standarden SELECT erklæring
  • "HVOR" er nøgleordet, der begrænser resultatsættet, og "tilstand" er det filter, der anvendes på resultaterne. Filteret kan være et område, en enkelt værdi eller en underforespørgsel.

Antag, at vi ønsker et medlems oplysninger fra medlemstabellen, givet medlemskabsnummer 1. Scriptet nedenfor opnår dette.

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

Udfører dette script i MySQL arbejdsbord på “myflixdb” producerer 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

En enkelt betingelse er sjældent nok. Afsnittene nedenfor kombinerer WHERE med logiske operatører.

WHERE-klausul kombineret med – AND LOGISK OperaTor

Med den logiske operator AND returneres en række kun, hvis ALLE angivne kriterier er opfyldt.

Antag, at vi ønsker alle filmene i kategori 2, der blev udgivet i 2008. Manuskriptet nedenfor opnår det.

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

Udførelse af ovenstående script mod “myflixdb” giver følgende resultat.

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

OG indsnævrer et resultatsæt. ELLER udvider det.

WHERE-klausul kombineret med – OR LOGISK OperaTor

Med OR-operatoren returneres en række, hvis NOGEN af de angivne kriterier er opfyldt.

Følgende manuskript henter alle filmene i enten kategori 1 eller kategori 2.

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

Resultatsættet er vist 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 bliver svært at læse at kæde mange ELLER-betingelser sammen. Nøgleordet IN løser dette.

WHERE-klausul kombineret med – IN Søgeord

WHERE-klausulen, når den bruges sammen med IN-nøgleordet, påvirker kun rækker, hvis værdier matcher den angivne liste. IN reducerer antallet af OR-klausuler, du ellers ville skrive.

Følgende MySQL WHERE IN-forespørgslen giver rækker, hvor membership_number er enten 1, 2 eller 3.

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

Resultatsættet er vist 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 IN udfører det modsatte filter.

WHERE-klausul kombineret med – IKKE I Søgeord

Med NOT IN-nøgleordet udelukker WHERE-klausulen alle rækker, hvis værdi matcher den angivne liste.

Følgende forespørgsel giver rækker, hvor medlemskabsnummer IKKE er 1, 2 eller 3.

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

Resultatsættet er vist 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å værdier efter størrelse og lighed ved hjælp af sammenligningsoperatorer.

WHERE-klausul kombineret med – SAMMENLIGNING Operatorer

Sammenligningsoperatorerne "mindre end" (<), "lig med" (=), "større end" (>) og "ikke lig med" (<>) kan alle bruges sammen med WHERE-klausulen.

= Svarende til

Følgende script henter alle kvindelige medlemmer fra medlemstabellen ved hjælp af lig med sammenligningsoperatoren.

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

Resultatsættet er vist 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 end

Følgende script henter alle betalinger, der er større end 2,000, fra betalingstabellen.

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

Resultatsættet er vist 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 lig med

Følgende script henter alle de film, hvis kategori-id ikke er 1.

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

Resultatsættet er vist 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

Hurtig reference: WHERE-klausul Operatorer

De operatorer, der oftest parres med WHERE, er opsummeret nedenfor. De fulde definitioner findes i MySQL operatørreference.

OperaTor Betydning Eksempelbetingelse
= Svarende til `køn` = 'Kvinde'
<> Ikke lig med `kategori_id` <> 1
> / Større end / mindre end `betalt_beløb` > 2000
OG / ELLER Alle kriterier / alle kriterier `kategori_id` = 2 OG `udgivelsesår` = 2008
I / IKKE I Matcher/ekskluderer en liste `medlemsnummer` IN (1,2,3)
ER NULL / ER IKKE NULL Test for manglende værdier `postadresse` ER NULL

⚠️ Bemærk: NULL matcher aldrig = eller <>. Brug IS NULL eller IS NOT NULL, når en kolonne muligvis ikke indeholder nogen værdi.

Hjernevrider: Find film, der returneres for sent

Antag, at vi ønsker de lejede film, der ikke blev returneret inden skæringsdatoen d. 25/06/2012. Kombinationen af ​​WHERE med mindre-end-operatoren og AND opnår dette.

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

Udførelse af ovenstående script i MySQL workbench giver 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

Ofte Stillede Spørgsmål

WHERE filtrerer individuelle rækker før grouping, så den kan ikke referere til aggregerede funktioner. HAVING filtrerer grupper efter GROUP BY-kørsler, hvilket gør den til det rigtige sted for betingelser som COUNT(*) > 5.

Brug ER NULL eller ER IKKE NULL. OperaTor-funktioner som = og <> returnerer ukendt for NULL, så `postal_address` = NULL matcher ingenting, mens `postal_address` IS NULL fungerer.

Ja, når den filtrerede kolonne er indekseret, MySQL læser kun matchende rækker i stedet for at scanne tabellen.ping En kolonne i en funktion, f.eks. YEAR(`fødselsdato`) = 1980, forhindrer brug af indeks.

Ja. AI-assistenter omdanner almindeligt engelsk til SQL, og MySQL Workbench kan køre resultatet. RevSe alle betingelser i forhold til dit skema, fordi en model kan opfinde kolonnenavne.

Test det med SELECT først. En forkert WHERE-klausul på en SLET- eller OPDATER-forespørgsel kan ændre hver række. Forhåndsvis de matchende rækker, og genbrug derefter den samme betingelse til skrivningen.

Opsummer dette indlæg med: