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.

  • 🔍 Kerndoel: De WHERE-clausule beperkt welke rijen door een statement worden beïnvloed, waardoor SELECT, UPDATE en DELETE alleen van invloed zijn op overeenkomende rijen.
  • 🔗 EN Operavoor: Rijen worden alleen geretourneerd wanneer aan alle voorwaarden is voldaan, waardoor de resultatenset wordt verkleind.
  • 🔀 OR Operavoor: Rijen worden geretourneerd wanneer aan een van de voorwaarden wordt voldaan, waardoor de resultatenset wordt uitgebreid.
  • 📋 BINNEN en NIET BINNEN: Het trefwoord IN komt overeen met een lijst van waarden in één expressie, terwijl NOT IN diezelfde lijst uitsluit.
  • ​ Vergelijk OperaTorens: Gelijk aan (=), groter dan (>), kleiner dan (<) en niet gelijk aan (<>) filteren numerieke, tekst- en datumkolommen.
  • ⚠️ NULL-verwerking: NULL komt nooit overeen met = of <>, dus IS NULL en IS NOT NULL zijn nodig om te controleren op ontbrekende waarden.

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

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

> 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

Veelgestelde vragen

WHERE filtert individuele rijen vóór groeperingpingHet kan dus geen aggregatiefuncties gebruiken. HAVING filtert groepen na GROUP BY, waardoor het de juiste plek is voor voorwaarden zoals COUNT(*) > 5.

Gebruik IS NULL of IS NOT NULL. OperaTorens zoals = en <> retourneren 'onbekend' voor NULL, dus `postal_address` = NULL komt niet overeen, terwijl `postal_address` IS NULL wel werkt.

Ja, als de gefilterde kolom geïndexeerd is. MySQL Leest alleen de overeenkomende rijen in plaats van de hele tabel te scannen. Wrapping Een kolom in een functie, zoals YEAR(`date_of_birth`) = 1980, voorkomt het gebruik van een index.

Ja. AI-assistenten zetten gewone taal om in SQL, en MySQL Werkbank kan het resultaat uitvoeren. RevControleer elke voorwaarde aan de hand van uw schema, omdat een model kolomnamen kan verzinnen.

Test het eerst met SELECT. Een onjuiste WHERE-clausule op een DELETE- of UPDATE-query Je kunt elke rij wijzigen. Bekijk de overeenkomende rijen in een voorbeeld en gebruik vervolgens dezelfde voorwaarde opnieuw voor het schrijven.

Vat dit bericht samen met: