I den här artikeln kommer vi att prata om WHERE
klausul och hur man använder den i MySQL. Förutom SELECT
, omfattningen av WHERE
klausulen innehåller UPDATE
och DELETE
uttalanden. WHERE
klausul är oumbärlig för kvalitetsarbete med MySQL-databaser. Det är därför den aktuella artikeln kommer att behandla denna klausul och utforska dess utmärkande egenskaper på djupet.
När vi hanterar MySQL behöver vi villkorliga satser för SELECT-satserna i de absoluta majoriteten av fallen. Sådana klausuler bestämmer urvalskriterierna, så vi får bara den information vi behöver.
MySQL WHERE
klausul är det smidigaste sättet att filtrera resultat. Det är flexibelt, vilket gör att användarna kan specificera olika villkor för dataurvalet och kombinera flera villkor i ett uttalande. För att göra din vardagliga arbetsrutin ännu trevligare är det alltid bättre att ta till MySQL-profilering och frågeoptimering.
Innehåll
- MySQL WHERE-syntax
- Använda WHERE i MySQL
- WHERE-förfrågan med enstaka villkor
- Flera WHERE-villkor
- VAR OCH operatör
- WHERE OR operator
- Använda AND med ELLER-villkor
- VAR MELLAN operatör
- WHERE LIKE operator
- WHERE NOT LIKE-exempel
- WHERE IN-operatör
- WHERE NOT I-exempel
- WHERE IS NULL-operatorn
- WHERE IS NOT NULL-exempel
- DÄR INTE FINNS
- VAR FINNS
- Använda MySQL WHERE-sats med jämförelseoperatorer
- Sammanfattning
MySQL WHERE-syntax
Till att börja med, låt oss titta närmare på hur du använder WHERE
i SELECT
påstående. Den grundläggande syntaxen är följande:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT … FROM
är standardsatsen som definierar vilka kolumner och vilken tabell vi riktar in oss på. WHERE
nyckelordet identifierar dataurvalskriterierna. Det kan finnas ett enda värde, intervallet mellan värden, underfrågan och mer än ett villkor.
Automatisera ditt arbete med frågekriterier. Se och redigera dem visuellt på de separata flikarna i vår visuella MySQL-frågeverktyg där du ritar din fråga. Du behöver inte skriva in kolumnernas namn eller komma ihåg komplicerade regler. Välj bara nödvändig information från listorna och njut av resultaten.
Använda WHERE i MySQL
MySQL fungerar på följande sätt när du kör SELECT
sats som innehåller WHERE
klausul:
- Utvärdera
FROM
sats för att identifiera måltabellen. - Fortsätt till
WHERE
klausul för att utvärdera kriterierna för dataurval. - Kontrollera
SELECT
uttalande för att definiera kolumnerna som ska hämtas.
Obs :SELECT
uttalandet innehåller ofta ORDER BY
klausul som sätter resultaten i stigande eller fallande ordning. Om så är fallet kommer MySQL att utvärdera det till slut.
Arbetsprincipen för MySQL WHERE
liknar IF
skick i programmeringsspråk. Den jämför de värden vi tillhandahåller med de i måltabellen MySQL. När dessa värden matchar, hämtar RDBMS dessa poster till användarna.
När villkoret för WHERE
sats är ett textvärde, vi sätter den texten i enstaka citattecken. Dock behövs inga citattecken för de numeriska värdena.
SELECT first_name, last_name, city
FROM Readers
WHERE City = ‘Seattle’;
SELECT *
FROM Readers
WHERE CustomerID = 24;
Uppgradera dina skriptförmågor med den avancerade MySQL-formateraren som gör det möjligt att försköna din kod för att få den precis som du vill ha den.
Låt oss nu granska användningen av WHERE
klausul. Det handlar om många specifika fall. Det bästa sättet att utforska dem är att hänvisa till en praktisk MySQL WHERE
exempel för varje scenario.
WHERE-frågeexempel med ett villkor
Det enklaste scenariot för att använda den här klausulen är MySQL WHERE
ha ett enda kriterium för dataurvalet. Antag att något företag vill hämta listan över sina anställda som arbetar på Customer Care-avdelningen som supportchefer:
SELECT
last_name,
first_name,
job_title
FROM
employees
WHERE
jobtitle = 'Support';
Frågan kommer att hämta data från anställda tabell och filtrera posterna enligt värdet i jobbtitel kolumn. Den ska returnera listan över alla efter- och förnamn på alla anställda som arbetar som stödchefer. Utdata är nedan:
efternamn | förnamn | jobbtitel |
Räv | Mary | Support |
Svart | John | Support |
Johnson | Steve | Support |
Hudson | Diana | Support |
Williams | Katie | Support |
Grön | Jake | Support |
Obs :Koda mindre och uppnå mer med MySQL-syntaxkontroll. dbForge Studio för MySQL är en funktionsrik IDE designad för att underlätta utveckling, underhåll och administration av MySQL och MariaDB-databas.
Flera WHERE-villkor
Exemplet ovan bevisar att MySQL WHERE
klausul ger data som matchar villkoret. I det här fallet filtrerades alla de anställda med den angivna befattningen. Vi behöver dock ofta ställa in flera kriterier för att hämta data. Det är möjligt – vi måste använda MySQL WHERE
med de specifika operatorerna – AND
operatorn och OR
operatör.
WHERE AND operator
Låt oss göra vårt tidigare exempel lite mer komplicerat. Vi vill ha listan över medarbetare som arbetar på Supportavdelningen, anställd förra året.
För att uppnå det kommer vi att ställa in två villkor och förena dem med AND
logisk operator:
SELECT
last_name,
first_name,
job_title,
hire_year
FROM
employees
WHERE
jobtitle = 'Support' AND
hire_year = 2021;
Utdata:
efternamn | förnamn | jobbtitel | anställningsår |
Räv | Mary | Support | 2021 |
Svart | John | Support | 2021 |
Johnson | Steve | Support | 2021 |
Kodskrivningen i sig tar upp lejonparten av den totala tiden du lägger på databasutveckling och administration. Dubbla din kodningshastighet med den förfinade och optimerade MySQL Server-kodredigeraren som följer med dbForge Studio för MySQL.
WHERE OR operator
Använd OR
logisk operator är en annan metod för att arbeta med flera villkor i MySQL WHERE
klausul. Om vi skickar den här frågan kommer den att returnera data som matchar de kriterier vi ställer in.
Företaget vill kontrollera stamkunderna som kommer från två städer. För det anger vi dessa städer och använder OR
operatör.
SELECT
lastName,
firstName,
city
FROM
customers
WHERE
city = 'Seattle' OR
city = 'Bellevue';
efternamn | förnamn | stad |
Anderson | Mary | Seattle |
Svart | John | Seattle |
Thompson | Steve | Bellevue |
Smith | Diana | Bellevue |
Williams | Katie | Seattle |
Peters | Jake | Seattle |
Använda AND med ELLER-villkor
MySQL gör det möjligt att kombinera MySQL WHERE AND OR
– Båda logiska operatorerna kan finnas i ett enda uttalande. I det här fallet kommer MySQL att kontrollera tre villkor samtidigt.
Till exempel vill biblioteket få information om sina läsare som bor i Bellevue, som blev bibliotekets vanliga läsare 2021 eller har läst mer än 20 böcker.
I det här fallet, MySQL WHERE
strängen blir mer komplex. För att passa och organisera AND
&OR
villkor använder vi parenteserna för att avgöra hur MySQL måste utvärdera dem.
Ta en titt på exemplet nedan:
SELECT *
FROM readers
WHERE (city = 'Bellevue' AND reg_year = '2020')
OR (books_read > 20);
Utdata:
efternamn | förnamn | stad | 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 |
Denna utdata visar några resultat som matchar bosättningsstadens skick + registreringsår. Den innehåller också resultat som matchar det andra villkoret att ha läst mer än 20 böcker.
WHERE MELLAN operator
MELLAN-operatören gör det möjligt att sätta bredare gränser. Antag att biblioteket vill få listan över sina läsare som gick med 2019, 2020 och 2021. Istället för att skicka flera frågor eller använda AND
operatör kan vi ställa in intervallet för WHERE
villkor med BETWEEN
operatör.
För att hämta listan över läsare som går med mellan 2019 och 2022 skickar vi följande fråga:
SELECT
last_Name,
first_Name,
reg_year
FROM
readers
WHERE
reg_year BETWEEN 2019 AND 2021
ORDER BY reg_year;
Utdata:
efternamn | förnamn | reg_år |
Anderson | Mary | 2019 |
Jones | Chris | 2019 |
Thompson | Lora | 2019 |
Farrell | Brian | 2019 |
Smith | Jeff | 2020 |
Peters | Anna | 2020 |
Patterson | John | 2020 |
Williams | Markera | 2021 |
Hiks | Andrew | 2021 |
Bevilja | Valentina | 2021 |
WHERE LIKE operator
Genom att använda LIKE-operatorn kan du använda WHERE-satsen för att välja vissa poster som innehåller ett specifikt mönster. För att definiera det mönstret använder vi procenttecknet (%) för att ersätta ett tecken eller en sträng med flera tecken av valfri längd.
De vanligaste mönstren för MySQL SELECT WHERE LIKE
är följande:
WHERE
värde LIKE 'abc%
’ – hittar och returnerar alla värden som börjar med "abc"
WHERE
värde LIKE '%abc'
– hittar och returnerar alla värden som slutar med "abc"
WHERE
värde LIKE '%abc%'
– hittar och returnerar värden som har "abc" var som helst mellan början och slutet
Låt oss ta en titt på WHERE LIKE
exempel. Företaget vill få listan över sina kunder från USA och Storbritannien. Frågan är som följer:
SELECT ContactName, Country, City
FROM Customers
WHERE Country LIKE 'U%'
ORDER BY ContactName;
Utdata är:
Kontaktnamn | Land | Stad |
Helen Bennett | Storbritannien | Cowes |
Simon Crowther | Storbritannien | London |
Hari Kumar | Storbritannien | 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 exempel
Det finns ett annat fall där du behöver utesluta vissa data från resultaten. Vi kan använda MySQL WHERE NOT LIKE
operatör. Den hittar och returnerar data som inte har specifika tecken.
Företaget vill ha en lista över sina kunder från alla länder utom Storbritannien och USA. Syntaxen för WHERE NOT LIKE
i MySQL kommer att se ut som nedan:
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT LIKE 'U%'
ORDER BY Country;
Utdata:
Kontaktnamn | Land | Stad |
Roland Mendel | Österrike | Graz |
Georg Pipps | Österrike | Salzburg |
Catherine Dewey | Belgien | Bruxelles |
Pascale Cartrain | Belgien | Charleroi |
Elizabeth Lincoln | Kanada | Tsawassen |
Yoshi Tannamuri | Kanada | Vancouver |
Jean Fresnière | Kanada | Montréal |
Jytte Petersen | Danmark | Köbenhavn |
Palle Ibsen | Danmark | Århus |
Pirkko Koskitalo | Finland | Oulu |
Matti Karttunen | Finland | Helsingfors |
Annette Roulet | Frankrike | Toulouse |
Marie Bertrand | Frankrike | Paris |
Maria Anders | Tyskland | Berlin |
Hanna Mooss | Tyskland | Mannheim |
WHERE IN-operatör
Använda IN
och NOT IN
nyckelord är ett annat alternativ för att filtrera raderna och bara hämta en del av data som matchar våra strikta kriterier. Det primära syftet är att minska antalet OR
satser i en SELECT
påstående.
MySQL WHERE IN
vädjar till raderna som innehåller värdena vi angett för WHERE
tillstånd. Vi vill till exempel hämta listan över kunder som bor i flera europeiska länder. WHERE IN
syntaxen är följande i MySQL:
SELECT ContactName, Country, City
FROM Customers
WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Observera att vi bifogar våra värden som anger sökvillkoret inom parentes. När vi arbetar med textvärden måste vi sätta dem alla i enstaka citattecken. Men om våra värden är numeriska, listar vi dem utan enstaka citattecken, t.ex. (25, 35, 45).
Utdata från ovanstående MySQL WHERE IN
sats i SELECT
uttalandet är:
Kontaktnamn | Land | Stad |
Catherine Dewey | Belgien | Bruxelles |
Pascale Cartrain | Belgien | Charleroi |
Frédérique Citeaux | Frankrike | Strasbourg |
Laurence Lebihans | Frankrike | Marseille |
Janine Labrune | Frankrike | Nantes |
Martine Rancé | Frankrike | 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 | Storbritannien | London |
Victoria Ashworth | Storbritannien | London |
Elizabeth Brown | Storbritannien | Manchester |
Ann Devon | Storbritannien | London |
WHERE NOT I exempel
Det motsatta fallet är MySQL WHERE NOT IN
klausul. Den används för att säkerställa att din fråga ignorerar de rader som innehåller de värden som anges för villkoret. I exemplet ovan efterfrågade vi kunder från de fyra bestämda europeiska länderna. MySQL WHERE NOT IN
SELECT
fråga för samma begäran kommer att returnera alla kunder som bor i andra länder förutom de 4 som definierats tidigare.
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Utdata:
Kontaktnamn | Land | Stad |
Patricio Simpson | Argentina | Buenos Aires |
Sergio Gutiérrez | Argentina | Buenos Aires |
Brian Citeaux | Kanada | Montréal |
Laura Smith | Kanada | Toronto |
Jane Green | Kanada | Toronto |
Martine Rancé | Kanada | Vancouver |
Alexander Feuer | Kanada | Århus |
Paolo Accorti | Italien | Rom |
Giovanni Rovelli | Italien | Torino |
Anna Moroni | Italien | Pavia |
Obs :Vi rekommenderar att du använder [NOT] EXISTS
över [NOT] IN
eftersom EXISTS
logisk operator fungerar snabbare än IN
, när man jämför datamängder med hjälp av en underfråga. Dessutom NOT EXISTS
kommer att undvika oväntade resultat när källdata innehåller NULL
värden.
WHERE IS NULL operator
För att kontrollera om ett värde är NULL
eller inte, använd IS NULL
operatör. Följande sats använder WHERE
sats med IS NULL
operatorn för att hämta raderna utan ett värde i books_read
kolumn:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NULL;
Utdatan kommer att se ut så här:
efternamn | förnamn | reg_år | books_read |
Janett | Overacker | 2020 | NULL |
Lidia | Swenson | 2017 | NULL |
Albert | Crepeau | 2018 | NULL |
Anastasia | Johnson | 2021 | NULL |
Kommer | Smith | 2017 | NULL |
WHERE IS NOT NULL exempel
Till skillnad från föregående kommando, WHERE IS NOT NULL
, tvärtom, visar bara de rader som innehåller något slags värde i kolumnen i fråga. I följande exempel kommer vi bara att välja de rader där books_read kolumnen är inte tom:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NOT NULL;
I utgången ser du bara de rader som innehåller ett värde i books_read kolumn:
efternamn | förnamn | 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
operator. 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