I denne artikel skal vi tale om WHERE
klausul og hvordan man bruger den i MySQL. Udover SELECT
, omfanget af WHERE
klausulen inkluderer UPDATE
og DELETE
udsagn. WHERE
klausul er uundværlig for kvalitetsarbejde med MySQL-databaser. Derfor vil den aktuelle artikel omhandle denne klausul og udforske dens kendetegn i dybden.
Når vi beskæftiger os med MySQL, har vi brug for betingede klausuler til SELECT-sætningerne i det absolutte flertal af tilfælde. Sådanne klausuler bestemmer udvælgelseskriterierne, så vi får kun de data, vi har brug for.
MySQL WHERE
klausul er den mest praktiske måde at filtrere resultater på. Det er fleksibelt, hvilket giver brugerne mulighed for at specificere forskellige betingelser for dataudvælgelsen og kombinere flere betingelser i en erklæring. For at gøre din hverdag endnu mere behagelig, er det altid bedre at ty til MySQL-profilering og forespørgselsoptimering.
Indhold
- MySQL WHERE-syntaks
- Brug af WHERE i MySQL
- Eksempel på WHERE-forespørgsel med en enkelt betingelse
- Flere WHERE-betingelser
- HVOR OG operatør
- HVOR ELLER operator
- Brug af AND med OR-betingelser
- HVOR MELLEM operatør
- WHERE LIKE operator
- WHERE NOT LIKE eksempel
- WHERE IN-operatør
- WHERE NOT I eksempel
- WHERE IS NULL operator
- WHERE IS NOT NULL eksempel
- HVOR IKKE FINNES
- HVOR FINNES
- Brug af MySQL WHERE-klausul med sammenligningsoperatorer
- Resumé
MySQL WHERE-syntaks
Til at begynde med, lad os se nærmere på brugen af WHERE
i SELECT
udmelding. Den grundlæggende syntaks er som følger:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT … FROM
er standarderklæringen, der definerer hvilke kolonner og hvilken tabel vi målretter mod. WHERE
nøgleord identificerer dataudvælgelseskriterierne. Der kan være en enkelt værdi, intervallet mellem værdier, underforespørgslen og mere end én betingelse.
Automatiser dit arbejde med forespørgselskriterier. Se og rediger dem visuelt på de separate faner i vores visuelle MySQL-forespørgselsværktøj hvor du tegner din forespørgsel. Du behøver ikke at skrive kolonnernes navne eller huske komplekse regler. Vælg blot de nødvendige data fra listerne og nyd resultaterne.
Brug af WHERE i MySQL
MySQL fungerer på følgende måde, når du udfører SELECT
sætning, der indeholder WHERE
klausul:
- Evaluer
FROM
klausul for at identificere måltabellen. - Fortsæt til
WHERE
klausul for at evaluere kriterierne for dataudvælgelse. - Tjek
SELECT
sætning for at definere de kolonner, der skal hentes.
Bemærk :SELECT
sætningen indeholder ofte ORDER BY
klausul, der placerer resultaterne i stigende eller faldende rækkefølge. Hvis ja, vil MySQL evaluere det til sidst.
Arbejdsprincippet i MySQL WHERE
ligner IF
tilstand i programmeringssprog. Den sammenligner de værdier, vi leverer, med værdierne i MySQL-måltabellen. Når disse værdier matcher, henter RDBMS disse poster til brugerne.
Når betingelsen for WHERE
klausul er en tekstværdi, sætter vi den tekst i enkelte anførselstegn. Der er dog ingen anførselstegn nødvendige for de numeriske værdier.
SELECT first_name, last_name, city
FROM Readers
WHERE City = ‘Seattle’;
SELECT *
FROM Readers
WHERE CustomerID = 24;
Forøg dine scriptevner med det avancerede MySQL-formateringsprogram, der gør det muligt at forskønne din kode for at få den præcis, som du kan lide den.
Lad os nu gennemgå brugen af WHERE
klausul. Det involverer masser af konkrete sager. Den bedste måde at udforske dem på er at henvise til en praktisk MySQL WHERE
eksempel for hvert scenarie.
WHERE-eksempel på en enkelt betingelse
Det enkleste scenarie for at bruge denne klausul er MySQL WHERE
at have ét enkelt kriterium for dataudvælgelsen. Antag, at en virksomhed ønsker at hente listen over sine medarbejdere, der arbejder i Customer Care-afdelingen som supportchefer:
SELECT
last_name,
first_name,
job_title
FROM
employees
WHERE
jobtitle = 'Support';
Forespørgslen vil hente data fra medarbejderne tabel og filtrer posterne i henhold til værdien i job_title kolonne. Det skal returnere listen over alle efter- og fornavne på alle medarbejdere, der arbejder som supportchefer. Outputtet er nedenfor:
efternavn | fornavn | job_title |
Ræv | Mary | Support |
Sort | John | Support |
Johnson | Steve | Support |
Hudson | Diana | Support |
Williams | Katie | Support |
Grøn | Jake | Support |
Bemærk :Sode mindre og opnå mere med MySQL syntax checker. dbForge Studio til MySQL er en funktionsrig IDE designet til at lette MySQL- og MariaDB-databaseudvikling, vedligeholdelse og administration.
Flere WHERE-betingelser
Eksemplet ovenfor beviser, at MySQL WHERE
klausul bringer data, der matcher betingelsen. I dette tilfælde filtrerede det alle de ansatte med den angivne stillingsbetegnelse. Vi skal dog ofte opstille flere kriterier for at hente dataene. Det er muligt – vi skal anvende MySQL WHERE
med de specifikke operatorer – AND
operatoren og OR
operatør.
WHERE AND operator
Lad os gøre vores tidligere eksempel en smule mere kompliceret. Vi ønsker listen over medarbejdere, der arbejder i Supportafdelingen, ansat sidste år.
For at opnå det, sætter vi to betingelser og forener dem med AND
logisk operator:
SELECT
last_name,
first_name,
job_title,
hire_year
FROM
employees
WHERE
jobtitle = 'Support' AND
hire_year = 2021;
Udgangen:
efternavn | fornavn | job_title | ansættelsesår |
Ræv | Mary | Support | 2021 |
Sort | John | Support | 2021 |
Johnson | Steve | Support | 2021 |
Kodeskrivning i sig selv fylder brorparten af den samlede tid, du bruger på databaseudvikling og administration. Fordoble din kodningshastighed med den raffinerede og optimerede MySQL Server-kodeeditor, der følger med dbForge Studio til MySQL.
WHERE OR operator
Brug OR
logisk operator er en anden metode til at arbejde med flere forhold i MySQL WHERE
klausul. Hvis vi sender denne forespørgsel, vil den returnere data, der matcher de kriterier, vi har sat.
Virksomheden ønsker at tjekke de faste kunder, der kommer fra to byer. Til det specificerer vi disse byer og bruger OR
operatør.
SELECT
lastName,
firstName,
city
FROM
customers
WHERE
city = 'Seattle' OR
city = 'Bellevue';
efternavn | fornavn | by |
Anderson | Mary | Seattle |
Sort | John | Seattle |
Thompson | Steve | Bellevue |
Smith | Diana | Bellevue |
Williams | Katie | Seattle |
Peters | Jake | Seattle |
Brug af AND med OR-betingelser
MySQL giver mulighed for at kombinere MySQL WHERE AND OR
– begge logiske operatorer kan være til stede i en enkelt sætning. I dette tilfælde vil MySQL kontrollere tre betingelser på én gang.
For eksempel ønsker biblioteket at få information om sine læsere bosiddende i Bellevue, som blev bibliotekets faste læsere i 2021 eller har læst mere end 20 bøger.
I dette tilfælde er MySQL WHERE
streng bliver mere kompleks. Til at passe og organisere AND
&OR
betingelser, bruger vi parenteserne til at bestemme, hvordan MySQL skal evaluere dem.
Tag et kig på eksemplet nedenfor:
SELECT *
FROM readers
WHERE (city = 'Bellevue' AND reg_year = '2020')
OR (books_read > 20);
Udgangen:
efternavn | fornavn | by | reg_år | books_read |
Anderson | Mary | Seattle | 2021 | 25 |
Jones | Chris | Bellevue | 2020 | 12 |
Thompson | Lora | Seattle | 2020 | 35 |
Farrell | Brian | Bellevue | 2021 | 48 |
Smith | Jeff | Bellevue | 2020 | 50 |
Peters | Anna | Bellevue | 2020 | 10 |
Patterson | John | Bellevue | 2020 | 11 |
Dette output viser nogle resultater, der matcher bopælsbyens tilstand + registreringsår. Det inkluderer også resultater, der matcher den anden betingelse om at have læst mere end 20 bøger.
HVOR MELLEM operatoren
MELLEM-operatøren giver mulighed for at sætte bredere grænser. Antag, at biblioteket ønsker at få listen over dets læsere, der tiltrådte i 2019, 2020 og 2021. I stedet for at indsende flere forespørgsler eller bruge AND
operatør, kan vi indstille området for WHERE
tilstand ved hjælp af BETWEEN
operatør.
For at hente listen over læsere, der deltager mellem 2019 og 2022, sender vi følgende forespørgsel:
SELECT
last_Name,
first_Name,
reg_year
FROM
readers
WHERE
reg_year BETWEEN 2019 AND 2021
ORDER BY reg_year;
Udgangen:
efternavn | fornavn | reg_år |
Anderson | Mary | 2019 |
Jones | Chris | 2019 |
Thompson | Lora | 2019 |
Farrell | Brian | 2019 |
Smith | Jeff | 2020 |
Peters | Anna | 2020 |
Patterson | John | 2020 |
Williams | Mærk | 2021 |
Hiks | Andrew | 2021 |
Bevilling | Valentina | 2021 |
WHERE LIKE operator
Ved at anvende LIKE-operatoren kan du bruge WHERE-sætningen til at vælge visse poster, der indeholder et specifikt mønster. For at definere det mønster, bruger vi procenttegnet (%) til at erstatte et tegn eller en streng med flere tegn uanset længde.
De mest almindelige mønstre for MySQL SELECT WHERE LIKE
er følgende:
WHERE
værdi LIKE 'abc%
’ – finder og returnerer alle værdier, der starter med "abc"
WHERE
værdi LIKE '%abc'
– finder og returnerer alle værdier, der slutter med "abc"
WHERE
værdi LIKE '%abc%'
– finder og returnerer værdier med "abc" hvor som helst mellem start og slut
Lad os tage et kig på WHERE LIKE
eksempel. Virksomheden ønsker at få listen over sine kunder fra USA og Storbritannien. Forespørgslen er som følger:
SELECT ContactName, Country, City
FROM Customers
WHERE Country LIKE 'U%'
ORDER BY ContactName;
Outputtet er:
Kontaktnavn | Land | By |
Helen Bennett | UK | Cowes |
Simon Crowther | UK | London |
Hari Kumar | UK | London |
Howard Snyder | USA | Eugene |
Yoshi Latimer | USA | Elgin |
John Steel | USA | Walla Walla |
Jaime Torres | USA | San Francisco |
Fran Wilson | USA | Portland |
WHERE NOT LIKE eksempel
Der er et andet tilfælde, hvor du skal udelukke nogle data fra resultaterne. Vi kan bruge MySQL WHERE NOT LIKE
operatør. Den finder og returnerer data, der ikke har specifikke tegn.
Virksomheden ønsker en liste over sine kunder fra alle lande undtagen Storbritannien og USA. Syntaksen for WHERE NOT LIKE
i MySQL vil se ud som nedenfor:
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT LIKE 'U%'
ORDER BY Country;
Udgangen:
Kontaktnavn | Land | By |
Roland Mendel | Østrig | Graz |
Georg Pipps | Østrig | Salzburg |
Catherine Dewey | Belgien | Bruxelles |
Pascale Cartrain | Belgien | Charleroi |
Elizabeth Lincoln | Canada | Tsawassen |
Yoshi Tannamuri | Canada | Vancouver |
Jean Fresnière | Canada | Montréal |
Jytte Petersen | Danmark | København |
Palle Ibsen | Danmark | Århus |
Pirkko Koskitalo | Finland | Oulu |
Matti Karttunen | Finland | Helsinki |
Annette Roulet | Frankrig | Toulouse |
Marie Bertrand | Frankrig | Paris |
Maria Anders | Tyskland | Berlin |
Hanna Mooss | Tyskland | Mannheim |
WHERE IN operator
Brug af IN
og NOT IN
søgeord er en anden mulighed for at filtrere rækkerne og kun hente en del af data, der matcher vores strenge kriterier. Det primære formål er at reducere antallet af OR
klausuler i én SELECT
udmelding.
MySQL WHERE IN
appellerer til rækkerne, der indeholder de værdier, vi har angivet for WHERE
tilstand. For eksempel ønsker vi at hente listen over kunder, der bor i flere europæiske lande. WHERE IN
syntaks er som følger i MySQL:
SELECT ContactName, Country, City
FROM Customers
WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Bemærk venligst, at vi vedlægger vores værdier, der angiver søgebetingelsen, i parentes. I tilfælde af at arbejde med tekstværdier skal vi sætte dem alle i enkelte anførselstegn. Men hvis vores værdier er numeriske, vil vi liste dem uden enkelte anførselstegn, f.eks. (25, 35, 45).
Outputtet af ovenstående MySQL WHERE IN
klausul i SELECT
erklæringen er:
Kontaktnavn | Land | By |
Catherine Dewey | Belgien | Bruxelles |
Pascale Cartrain | Belgien | Charleroi |
Frédérique Citeaux | Frankrig | Strasbourg |
Laurence Lebihans | Frankrig | Marseille |
Janine Labrune | Frankrig | Nantes |
Martine Rancé | Frankrig | Lille |
Alexander Feuer | Tyskland | Leipzig |
Henriette Pfalzheim | Tyskland | Köln |
Horst Kloss | Tyskland | Cunewalde |
Karin Josephs | Tyskland | Münster |
Rita Müller | Tyskland | Stuttgart |
Thomas Hardy | UK | London |
Victoria Ashworth | UK | London |
Elizabeth Brown | UK | Manchester |
Ann Devon | UK | London |
WHERE NOT I eksempel
Det modsatte tilfælde er MySQL WHERE NOT IN
klausul. Det bruges til at sikre, at din forespørgsel vil ignorere de rækker, der indeholder de værdier, der er angivet for betingelsen. I ovenstående eksempel anmodede vi om kunder fra de 4 bestemte europæiske lande. MySQL WHERE NOT IN
SELECT
forespørgsel for den samme anmodning returnerer alle kunder, der bor i andre lande undtagen de 4, der er defineret tidligere.
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Udgangen:
Kontaktnavn | Land | By |
Patricio Simpson | Argentina | Buenos Aires |
Sergio Gutiérrez | Argentina | Buenos Aires |
Brian Citeaux | Canada | Montréal |
Laura Smith | Canada | Toronto |
Jane Green | Canada | Toronto |
Martine Rancé | Canada | Vancouver |
Alexander Feuer | Canada | Århus |
Paolo Accorti | Italien | Rom |
Giovanni Rovelli | Italien | Torino |
Anna Moroni | Italien | Pavia |
Bemærk :Vi anbefaler at bruge [NOT] EXISTS
over [NOT] IN
siden EXISTS
logisk operator virker hurtigere end IN
, når man sammenligner datasæt ved hjælp af en underforespørgsel. Desuden NOT EXISTS
vil undgå uventede resultater, når kildedataene indeholder NULL
værdier.
WHERE IS NULL operator
For at kontrollere om en værdi er NULL
eller ej, brug IS NULL
operatør. Følgende sætning bruger WHERE
klausul med IS NULL
operator for at hente rækkerne uden en værdi i books_read
kolonne:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NULL;
Outputtet vil se sådan ud:
efternavn | fornavn | reg_år | books_read |
Janett | Overacker | 2020 | NULL |
Lidia | Swenson | 2017 | NULL |
Albert | Crepeau | 2018 | NULL |
Anastasia | Johnson | 2021 | NULL |
Vil | Smith | 2017 | NULL |
WHERE IS NOT NULL eksempel
I modsætning til den forrige kommando, WHERE IS NOT NULL
, viser tværtimod kun de rækker, der indeholder en slags værdi i den pågældende kolonne. I det følgende eksempel vil vi kun vælge de rækker, hvor books_read kolonnen er ikke tom:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NOT NULL;
I outputtet vil du kun se de rækker, der indeholder en værdi i books_read kolonne:
efternavn | fornavn | reg_år | books_read |
Cory | Baster | 2021 | 8 |
Maddison | Winston | 2022 | 3 |
Isabella | Garsia | 2014 | 45 |
Jeremy | Koh | 2022 | 1 |
Aaron | Peterson | 2021 | 15 |
WHERE EXISTS
The EXISTS
operator checks if the subquery returns any value at all. Typically, this operator is used to indicate that at least one row in a table satisfies a certain condition.
In the example below,
SELECT last_name, first_name
FROM customers
WHERE EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
WHERE NOT EXISTS
However, the NOT EXISTS
operator is there for us in case we want to make sure whether there are rows in the table that do not satisfy a certain condition. For example, let’s find all products from the Products table for which there were no orders in the Orders table:
SELECT last_name, first_name
FROM customers
WHERE NOT EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
There is a separate article in our blog for those willing to learn more about the difference between EXISTS and NOT EXISTS in SQL.
Using MySQL WHERE clause with comparison operators
As we know, the WHERE
condition value can be any number, text, string, or subquery. Besides specifying the condition strictly, we can set a wider meaning for it by using the comparison operators. One example of a similar function is using the BETWEEN
operatør. Now, let us review other options to set the condition range.
Operator | Description | Example |
= | Equal to the value. It is applicable for almost any data type. | SELECT * FROM VisitorsWHERE City =’London’; |
<> or != | Not equal to. It excludes the rows matching the value from the results. | SELECT * FROM CustomersWHERE Country=’Germany’ AND City !=’Berlin’; |
< | Less than. Mostly applies to numbers and date/time. | SELECT * FROM CustomersWHERE CustomerID <7; |
> | Greater than. Works in the same way, for numeric values and date/time. | SELECT * FROM CustomersWHERE CustomerID> 10; |
<= | Less than or equal to. The results set includes the rows with the same values or less than the condition value. | SELECT * FROM CustomersWHERE CustomerID <=5; |
>= | Greater than or equal to. The result set includes rows having the same values exceeding the condition values. | SELECT * FROM CustomersWHERE CustomerID>=55; |
In our example, we want to retrieve the list of customers with a customer ID lower than 90 who reside in the USA. The query is the following:
SELECT CustomerID, ContactName, City, Country
FROM Customers
WHERE CustomerID < 90 AND Country ='USA';
The output is:
CustomerID | ContactName | City | Country |
65 | Paula Wilson | Albuquerque | USA |
55 | Rene Phillips | Anchorage | USA |
78 | Liu Wong | Butte | USA |
36 | Yoshi Latimer | Elgin | USA |
32 | Howard Snyder | Eugene | USA |
82 | Helvetius Nagy | Kirkland | USA |
48 | Fran Wilson | Portland | USA |
77 | Liz Nixon | Portland | USA |
45 | Jaime Torres | San Francisco | USA |
89 | Karl Jablonski | Seattle | USA |
55 | Rene Phillips | Anchorage | USA |
Summary
As you see, MySQL WHERE
is among the most helpful clauses for all MySQL users. The variety of different logical operators lets you focus on the specific portion of data only, filter it correctly, and receive the results you need. Besides, modern professional tools for MySQL databases allow you to perform all tasks faster and easier. They take the burden of manual routines off your shoulders and make the performance much more stable and reliable. To sum up, working with a WHERE
statement is not too complicated. However, it requires being familiar with the corresponding commands. The command-line tools are more oriented toward experienced tech-savvy users. On the contrary, dbForge Studio for MySQL can boast an intuitive graphical interface. The intelligent code completion feature will be of use while working with the WHERE
clause, navigating the code, obtaining quick object information, and instantly performing syntax checks. Moreover, dbForge Query Builder will be of use to easily build WHERE
clauses visually.
Useful Links
- Joins in MySQL
- MySQL update query