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
FROMklausul for at identificere måltabellen. - Fortsæt til
WHEREklausul for at evaluere kriterierne for dataudvælgelse. - Tjek
SELECTsæ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