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.

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

