MySQL WHERE Klausul: AND, OR, IN, NOT IN Frågeexempel

⚡ Smart sammanfattning

MySQL WHERE-klausulen filtrerar rader innan de når resultatmängden och tillämpar exakta kriterier på SELECT-, UPDATE- och DELETE-satser. Att förstå AND-, OR-, IN- och NOT IN-operatorer och jämförelseoperatorer låter nybörjare hämta exakt de poster som en fråga kräver.

  • 🔍 Kärnsyfte: WHERE-klausulen begränsar vilka rader en sats berör, så SELECT, UPDATE och DELETE påverkar endast matchande rader.
  • 🔗 AND Operator: Rader returneras endast när varje villkor utvärderas till sant, vilket begränsar resultatmängden.
  • 🔀 OR Operator: Rader returneras när ett enskilt villkor utvärderas till sant, vilket utökar resultatmängden.
  • 📋 IN och INTE IN: Nyckelordet IN matchar en lista med värden i ett uttryck, medan NOT IN exkluderar samma lista.
  • ⚖️ Jämförelse Operators: Lika med (=), större än (>), mindre än (<) och inte lika med (<>) filtrerar numeriska kolumner, textkolumner och datumkolumner.
  • ⚠️ NULL-hantering: NULL matchar aldrig = eller <>, så IS NULL och IS NOT NULL krävs för att testa saknade värden.

Vad är WHERE-klausul i MySQL?

WHERE in MySQL är ett nyckelord som används för att ange de exakta kriterierna för data eller rader som kommer att påverkas av den angivna SQL-satsen. WHERE-satsen kan användas med SQL-satser som INSERT, UPDATE, SELECT och DELETE för att filtrera poster och utföra olika operationer på data.

Vi tittade på hur man frågar efter data från en databas med hjälp av SELECT-satsen i föregående handledning. SELECT-satsen returnerade alla resultat från den efterfrågade databastabellen.

Det finns dock tillfällen då vi vill begränsa frågeresultaten till ett specifikt villkor. WHERE-klausulen i SQL är praktisk i sådana situationer, och den fungerar på samma sätt i en RADERA eller UPDATERA fråga som det gör i en SELECT-fråga.

WHERE klausul in MySQL

WHERE-sats Syntax

Den grundläggande syntaxen för WHERE-klausulen är följande.

SELECT * FROM tableName WHERE condition;

HÄR

  • "VÄLJ * FRÅN tabellnamn" är standarden SELECT-sats
  • "VAR" är nyckelordet som begränsar resultatmängden, och "skick" är filtret som tillämpas på resultaten. Filtret kan vara ett intervall, ett enskilt värde eller en delfråga.

Anta att vi vill ha en medlems uppgifter från medlemstabellen, givet medlemsnummer 1. Skriptet nedan åstadkommer det.

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

Kör det här skriptet i MySQL arbetsbänk på "myflixdb" ger resultatet nedan.

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

Ett enda villkor är sällan tillräckligt. Avsnitten nedan kombinerar WHERE med logiska operatörer.

WHERE-klausul kombinerad med – AND LOGISK Operator

Med den logiska operatorn AND returneras en rad endast om ALLA angivna kriterier är uppfyllda.

Anta att vi vill ha alla filmer i kategori 2 som släpptes 2008. Manuset nedan uppnår det.

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

Att köra ovanstående skript mot "myflixdb" ger följande resultat.

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

OCH begränsar en resultatmängd. ELLER breddar den.

WHERE-klausul kombinerad med – OR LOGISK Operator

Med OR-operatorn returneras en rad om NÅGOT av de angivna kriterierna är uppfyllt.

Följande manus hämtar alla filmer i antingen kategori 1 eller kategori 2.

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

Resultatuppsättningen visas nedan.

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

Att kedja ihop många ELLER-villkor blir svårt att läsa. Nyckelordet IN löser det.

WHERE-klausul kombinerad med – IN Nyckelord

WHERE-klausulen, när den används med nyckelordet IN, påverkar endast rader vars värden matchar den angivna listan. IN minskar antalet OR-klausuler som du annars skulle skriva.

Följande MySQL WHERE IN-frågan ger rader där membership_number är antingen 1, 2 eller 3.

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

Resultatuppsättningen visas nedan.

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 utför motsatt filter.

WHERE-klausul kombinerad med – INTE I Nyckelord

Med nyckelordet NOT IN exkluderar WHERE-klausulen alla rader vars värde matchar den angivna listan.

Följande fråga ger rader där medlemsnummer INTE är 1, 2 eller 3.

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

Resultatuppsättningen visas nedan.

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 filtrerar även värden efter storlek och likhet med hjälp av jämförelseoperatorer.

WHERE-klausul kombinerad med – JÄMFÖRELSE Operatorer

Jämförelseoperatorerna mindre än (<), lika med (=), större än (>) och inte lika med (<>) kan alla användas med WHERE-klausulen.

= Lika med

Följande skript hämtar alla kvinnliga medlemmar från medlemstabellen med hjälp av operatorn lika med jämförelse.

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

Resultatuppsättningen visas nedan.

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 än

Följande skript hämtar alla betalningar som är större än 2,000 XNUMX från betalningstabellen.

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

Resultatuppsättningen visas nedan.

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

<> Inte lika med

Följande manus hämtar alla filmer vars kategori-id inte är 1.

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

Resultatuppsättningen visas nedan.

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

Snabbreferens: WHERE-klausul Operatorer

Operatorerna som oftast paras ihop med WHERE sammanfattas nedan. Fullständiga definitioner finns i MySQL operatorreferens.

Operator Betydelse Exempelvillkor
= Lika med `kön` = 'Kvinna'
<> Inte lika med `kategori_id` <> 1
> / Större än / mindre än `betalt_belopp` > 2000
OCH / ELLER Alla kriterier / valfria kriterier `kategori_id` = 2 OCH `utgivningsår` = 2008
INNE / INTE INNE Matchar/exkluderar en lista `medlemsnummer` IN (1,2,3)
ÄR NULL / ÄR INTE NULL Tester för saknade värden `postadress` ÄR NULL

⚠️ Obs: NULL matchar aldrig = eller <>. Använd IS NULL eller IS NOT NULL när en kolumn kanske inte innehåller något värde.

Hjärngympa: Hitta filmer som återlämnats sent

Anta att vi vill ha de hyrda filmerna som inte returnerades senast 25/06/2012. Genom att kombinera WHERE med operatorn mindre än och AND uppnås det.

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

Exekvera skriptet ovan i MySQL arbetsbänk ger följande resultat.

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

Vanliga frågor

WHERE filtrerar enskilda rader före grouping, så den kan inte referera till aggregerade funktioner. HAVING filtrerar grupper efter GROUP BY-körningar, vilket gör den till rätt plats för villkor som COUNT(*) > 5.

Använd ÄR NULL eller ÄR INTE NULL. Operators som = och <> returnerar okänt för NULL, så `postal_address` = NULL matchar ingenting, medan `postal_address` IS NULL fungerar.

Ja, när den filtrerade kolumnen är indexerad, MySQL läser bara matchande rader istället för att skanna tabellen.ping En kolumn i en funktion, till exempel YEAR(`date_of_birth`) = 1980, förhindrar användning av index.

Ja. AI-assistenter omvandlar vanlig engelska till SQL, och MySQL Arbetsbänk kan köra resultatet. RevVisa alla villkor mot ditt schema, eftersom en modell kan uppfinna kolumnnamn.

Testa det med SELECT först. En felaktig WHERE-klausul på en RADERA eller UPDATERA fråga kan ändra varje rad. Förhandsgranska de matchande raderna och återanvänd sedan samma villkor för skrivningen.

Sammanfatta detta inlägg med: