MySQL WHERE-clausule: AND, OR, IN, NOT IN Queryvoorbeeld
⚡ Slimme samenvatting
MySQL De WHERE-clausule filtert rijen voordat ze de resultaatset bereiken, waardoor precieze criteria worden toegepast op SELECT-, UPDATE- en DELETE-instructies. Inzicht in AND, OR, IN, NOT IN en vergelijkingsoperatoren stelt beginners in staat om precies de records op te halen die een query vereist.
Wat is WHERE-clausule in MySQL?
WHERE Clausule in MySQL is een sleutelwoord dat wordt gebruikt om de exacte criteria van gegevens of rijen te specificeren die worden beïnvloed door de opgegeven SQL-instructie. De WHERE-component kan worden gebruikt met SQL-instructies zoals INSERT, UPDATE, SELECT en DELETE om records te filteren en verschillende bewerkingen op de gegevens uit te voeren.
We hebben gekeken hoe u gegevens kunt opvragen uit een databank met behulp van de SELECT-instructie uit de vorige zelfstudie. De SELECT-instructie retourneerde alle resultaten uit de opgevraagde databasetabel.
Er zijn echter momenten waarop we de queryresultaten willen beperken tot een specifieke voorwaarde. De WHERE-clausule in SQL komt in dergelijke situaties goed van pas en werkt op dezelfde manier als in een DELETE- of UPDATE-query zoals dat ook gebeurt in een SELECT-query.
WHERE-clausule Syntaxis
De basisstructuur van de WHERE-clausule is als volgt.
SELECT * FROM tableName WHERE condition;
HIER
- “SELECT * FROM tabelnaam” is de standaard SELECT-instructie
- "WAAR" is het sleutelwoord dat de resultaten beperkt, en "voorwaarde" Dit is het filter dat op de resultaten wordt toegepast. Het filter kan een bereik, een enkele waarde of een subquery zijn.
Stel dat we de gegevens van een lid uit de ledentabel willen opvragen, gegeven lidmaatschapsnummer 1. Het onderstaande script doet dat.
SELECT * FROM `members` WHERE `membership_number` = 1;
Dit script wordt uitgevoerd in MySQL werkbank De zoekopdracht "myflixdb" levert het onderstaande resultaat op.
| 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 |
Een enkele voorwaarde is zelden voldoende. De onderstaande secties combineren WHERE met logische operatoren.
WHERE-clausule gecombineerd met – EN LOGISCH Operator
Met de logische operator AND wordt een rij alleen geretourneerd als aan ALLE opgegeven criteria is voldaan.
Stel dat we alle films in categorie 2 willen die in 2008 zijn uitgebracht. Het onderstaande script doet dat.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Het uitvoeren van het bovenstaande script op de database "myflixdb" levert het volgende resultaat op.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Met AND wordt de resultatenverzameling verkleind, met OR wordt deze vergroot.
WHERE-clausule gecombineerd met – OR LOGISCH Operator
Met de OR-operator wordt een rij geretourneerd als aan ÉÉN van de opgegeven criteria wordt voldaan.
Het volgende script haalt alle films op die in categorie 1 of categorie 2 vallen.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
De resultaten worden hieronder weergegeven.
| 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 |
Het aaneenschakelen van veel OR-voorwaarden maakt een code moeilijk leesbaar. Het trefwoord IN biedt hiervoor een oplossing.
WHERE-clausule gecombineerd met – IN Keyword
De WHERE-clausule, in combinatie met het trefwoord IN, heeft alleen invloed op rijen waarvan de waarden overeenkomen met de opgegeven lijst. IN vermindert het aantal OR-clausules dat u anders zou moeten schrijven.
De volgende MySQL De WHERE IN-query geeft rijen terug waar membership_number gelijk is aan 1, 2 of 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
De resultaten worden hieronder weergegeven.
| 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 voert het tegenovergestelde filter uit.
WHERE-clausule gecombineerd met – NIET IN Keyword
Met het trefwoord NOT IN sluit de WHERE-clausule elke rij uit waarvan de waarde overeenkomt met de opgegeven lijst.
De volgende query geeft rijen weer waar membership_number NIET gelijk is aan 1, 2 of 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
De resultaten worden hieronder weergegeven.
| 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 |
De WHERE-clausule filtert waarden ook op grootte en gelijkheid, met behulp van vergelijkingsoperatoren.
WHERE-clausule gecombineerd met – VERGELIJKING Operaverdraaid
De vergelijkingsoperatoren kleiner dan (<), gelijk aan (=), groter dan (>) en niet gelijk aan (<>) kunnen allemaal worden gebruikt met de WHERE-clausule.
= Gelijk aan
Het volgende script haalt alle vrouwelijke leden op uit de ledentabel met behulp van de gelijk aan-vergelijkingsoperator.
SELECT * FROM `members` WHERE `gender` = 'Female';
De resultaten worden hieronder weergegeven.
| 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 |
> Groter dan
Het volgende script haalt alle betalingen die groter zijn dan 2,000 op uit de betalingstabel.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
De resultaten worden hieronder weergegeven.
| 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 |
<> Niet gelijk aan
Het volgende script haalt alle films op waarvan de categorie-id niet 1 is.
SELECT * FROM `movies` WHERE `category_id` <> 1;
De resultaten worden hieronder weergegeven.
| 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 |
Snel naslagwerk: WHERE-clausule Operaverdraaid
De operatoren die het vaakst in combinatie met WHERE worden gebruikt, worden hieronder samengevat. Volledige definities staan in de MySQL operatorreferentie.
| Operator | Betekenis | Voorbeeldconditie |
|---|---|---|
| = | Gelijk aan | `gender` = 'Vrouwelijk' |
| <> | Niet gelijk aan | `category_id` <> 1 |
| > / | Groter dan / kleiner dan | `amount_paid` > 2000 |
| EN/OF | Alle criteria / willekeurige criteria | `category_id` = 2 EN `year_released` = 2008 |
| IN / NIET IN | Komt overeen met/sluit een lijst uit | `lidmaatschapsnummer` IN (1,2,3) |
| IS NULL / IS NIET NULL | Tests voor ontbrekende waarden | `postal_address` IS NULL |
⚠️ Opmerking: NULL komt nooit overeen met = of <>. Gebruik IS NULL of IS NOT NULL wanneer een kolom geen waarde mag bevatten.
Hersenkraker: Zoek films die te laat zijn teruggebracht.
Stel dat we de gehuurde films willen die niet vóór de uiterste inleverdatum van 25-06-2012 zijn teruggebracht. Door de WHERE-clausule te combineren met de 'kleiner dan'-operator en de AND-operator, kunnen we dat bereiken.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Voer het bovenstaande script uit in MySQL workbench geeft de volgende resultaten.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |


