sql >> Database teknologi >  >> RDS >> Mysql

WHERE-tilstand i MySQL med 16 forskellige forespørgselseksempler

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:

  1. Evaluer FROM klausul for at identificere måltabellen.
  2. Fortsæt til WHERE klausul for at evaluere kriterierne for dataudvælgelse.
  3. 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

  1. Flere Hibernate-sekvensgeneratorer til én enhed med PostgreSQL

  2. Slut på support for SQL Server 2008 &2008 R2

  3. Grundlæggende om tabeludtryk, del 6 – Rekursive CTE'er

  4. 4 måder at indsætte flere rækker på i Oracle