In questo articolo parleremo del WHERE
clausola e come usarlo in MySQL. Oltre a SELECT
, l'ambito di WHERE
la clausola include il UPDATE
e DELETE
dichiarazioni. Il WHERE
è indispensabile per un lavoro di qualità con i database MySQL. Ecco perché il presente articolo tratterà questa clausola ed esplorerà in modo approfondito le sue caratteristiche distintive.
Quando abbiamo a che fare con MySQL, abbiamo bisogno di clausole condizionali per le istruzioni SELECT nella maggioranza assoluta dei casi. Tali clausole determinano i criteri di selezione, quindi otteniamo solo i dati di cui abbiamo bisogno.
MySQL WHERE
La clausola è il mezzo più pratico per filtrare i risultati. È flessibile, consentendo agli utenti di specificare varie condizioni per la selezione dei dati e combinare diverse condizioni in un'unica istruzione. Per rendere ancora più piacevole la routine lavorativa quotidiana, è sempre meglio ricorrere alla profilazione MySQL e all'ottimizzazione delle query.
Contenuti
- Sintassi di MySQL WHERE
- Utilizzare WHERE in MySQL
- WHERE query esempio di condizione singola
- Condizioni WHERE multiple Operatore
- DOVE E Operatore
- WHERE OR
- Utilizzo di AND con condizioni OR
- WHERE BETWEEN operatore Operatore
- WHERE LIKE
- Esempio DOVE NON MI PIACE Operatore
- WHERE IN
- DOVE NON IN esempio
- Operatore WHERE IS NULL
- Esempio WHERE IS NOT NULL
- DOVE NON ESISTE
- DOVE ESISTE
- Utilizzo della clausola MySQL WHERE con operatori di confronto
- Riepilogo
MySQL WHERE sintassi
Per cominciare, diamo un'occhiata più da vicino all'utilizzo di WHERE
nel SELECT
dichiarazione. La sintassi di base è la seguente:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT … FROM
è l'istruzione standard che definisce quali colonne e quale tabella target. Il WHERE
la parola chiave identifica i criteri di selezione dei dati. Può essere presente un singolo valore, l'intervallo tra i valori, la sottoquery e più di una condizione.
Automatizza il tuo lavoro con criteri di query. Guardali e modificali visivamente nelle schede separate del nostro visual Strumento di query MySQL dove stai disegnando la tua query. Non è necessario digitare i nomi delle colonne o ricordare regole complesse. Basta selezionare i dati richiesti dagli elenchi e godersi i risultati.
Utilizzo di WHERE in MySQL
MySQL funziona nel modo seguente durante l'esecuzione di SELECT
dichiarazione contenente il WHERE
clausola:
- Valuta il
FROM
clausola per identificare la tabella di destinazione. - Procedi al
WHERE
clausola per valutare i criteri per la selezione dei dati. - Controlla il
SELECT
istruzione per definire le colonne da recuperare.
Nota :Il SELECT
l'istruzione spesso include ORDER BY
clausola che mette i risultati in ordine crescente o decrescente. Se è così, MySQL lo valuterà alla fine.
Il principio di funzionamento di MySQL WHERE
è simile a IF
condizione nei linguaggi di programmazione. Confronta i valori che forniamo con quelli della tabella MySQL di destinazione. Quando questi valori corrispondono, RDBMS recupera quei record agli utenti.
Quando la condizione per il WHERE
clausola è un valore di testo, mettiamo quel testo tra virgolette singole. Tuttavia, non sono necessarie virgolette per i valori numerici.
SELECT first_name, last_name, city
FROM Readers
WHERE City = ‘Seattle’;
SELECT *
FROM Readers
WHERE CustomerID = 24;
Migliora le tue capacità di scripting con il formattatore MySQL avanzato che consente di abbellire il tuo codice per ottenerlo esattamente come ti piace.
Ora, esaminiamo l'utilizzo di WHERE
clausola. Coinvolge molti casi specifici. Il modo migliore per esplorarli è fare riferimento a un pratico MySQL WHERE
esempio per ogni scenario.
WHERE query esempio di condizione singola
Lo scenario più semplice dell'utilizzo di questa clausola è MySQL WHERE
avere un unico criterio per la selezione dei dati. Si supponga che un'azienda voglia recuperare l'elenco dei suoi dipendenti che lavorano nel reparto Assistenza clienti come responsabili dell'assistenza:
SELECT
last_name,
first_name,
job_title
FROM
employees
WHERE
jobtitle = 'Support';
La query recupererà i dati dai dipendenti tabella e filtrare i record in base al valore in job_title colonna. Dovrebbe restituire l'elenco di tutti i cognomi e nomi di tutti i dipendenti che lavorano come responsabili dell'assistenza. L'output è il seguente:
last_name | first_name | job_title |
Volpe | Maria | Supporto |
Nero | Giovanni | Supporto |
Johnson | Steve | Supporto |
Hudson | Diana | Supporto |
Williams | Katie | Supporto |
Verde | Jake | Supporto |
Nota :Сode meno e ottieni di più con il controllo della sintassi MySQL. dbForge Studio per MySQL è un IDE ricco di funzionalità progettato per facilitare lo sviluppo, la manutenzione e l'amministrazione di database MySQL e MariaDB.
Condizioni WHERE multiple
L'esempio fornito sopra dimostra che MySQL WHERE
clausola porta dati che soddisfano la condizione. In questo caso, ha filtrato tutti quei dipendenti con il titolo di lavoro specificato. Tuttavia, spesso è necessario impostare diversi criteri per recuperare i dati. È fattibile:dobbiamo applicare MySQL WHERE
con gli operatori specifici – il AND
operatore e il OR
operatore.
operatore WHERE AND
Rendiamo un po' più complicato il nostro esempio precedente. Vogliamo l'elenco dei dipendenti che lavorano nel reparto Assistenza, assunti l'anno scorso.
A tal fine, imposteremo due condizioni e le uniremo a AND
operatore logico:
SELECT
last_name,
first_name,
job_title,
hire_year
FROM
employees
WHERE
jobtitle = 'Support' AND
hire_year = 2021;
L'uscita:
last_name | first_name | job_title | anno_di_assunzione |
Volpe | Maria | Supporto | 2021 |
Nero | Giovanni | Supporto | 2021 |
Johnson | Steve | Supporto | 2021 |
La stessa scrittura del codice occupa la parte del leone del tempo totale che dedichi allo sviluppo e all'amministrazione del database. Raddoppia la velocità di codifica con l'editor di codice MySQL Server raffinato e ottimizzato fornito con dbForge Studio per MySQL.
operatore WHERE OR
Usando il OR
L'operatore logico è un altro metodo per lavorare con diverse condizioni in MySQL WHERE
clausola. Se inviamo questa query, verranno restituiti dati che corrispondono ai criteri impostati.
L'azienda vuole controllare i clienti abituali provenienti da due città. Per questo, specificheremo quelle città e useremo OR
operatore.
SELECT
lastName,
firstName,
city
FROM
customers
WHERE
city = 'Seattle' OR
city = 'Bellevue';
last_name | first_name | città |
Anderson | Maria | Seattle |
Nero | Giovanni | Seattle |
Thompson | Steve | Bellevue |
Smith | Diana | Bellevue |
Williams | Katie | Seattle |
Peters | Jake | Seattle |
Utilizzo di AND con condizioni OR
MySQL consente di combinare MySQL WHERE AND OR
– entrambi gli operatori logici possono essere presenti in una singola istruzione. In questo caso, MySQL verificherà tre condizioni contemporaneamente.
Ad esempio, la biblioteca vuole ottenere informazioni sui suoi lettori che risiedono a Bellevue, che sono diventati lettori abituali della biblioteca nel 2021 o hanno letto più di 20 libri.
In questo caso, MySQL WHERE
stringa diventa più complessa. Per adattare e organizzare AND
&OR
condizioni, usiamo le parentesi per determinare come MySQL deve valutarle.
Dai un'occhiata all'esempio seguente:
SELECT *
FROM readers
WHERE (city = 'Bellevue' AND reg_year = '2020')
OR (books_read > 20);
L'uscita:
last_name | first_name | città | reg_year | books_read |
Anderson | Maria | 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 | Giovanni | Bellevue | 2020 | 11 |
Questo output mostra alcuni risultati corrispondenti alla condizione della città di residenza + anno di registrazione. Include anche risultati che soddisfano la seconda condizione di aver letto più di 20 libri.
WHERE BETWEEN operatore
L'operatore BETWEEN consente di impostare limiti più ampi. Si supponga che la biblioteca voglia ottenere l'elenco dei suoi lettori che si sono uniti nel 2019, 2020 e 2021. Invece di inviare diverse domande o utilizzare il AND
operatore, possiamo impostare l'intervallo per il WHERE
condizione utilizzando il BETWEEN
operatore.
Per recuperare l'elenco dei lettori che si sono iscritti tra il 2019 e il 2022, inviamo la seguente domanda:
SELECT
last_Name,
first_Name,
reg_year
FROM
readers
WHERE
reg_year BETWEEN 2019 AND 2021
ORDER BY reg_year;
L'uscita:
last_name | first_name | reg_year |
Anderson | Maria | 2019 |
Jones | Chris | 2019 |
Thompson | Lora | 2019 |
Farrell | Brian | 2019 |
Smith | Jeff | 2020 |
Peters | Anna | 2020 |
Patterson | Giovanni | 2020 |
Williams | Segna | 2021 |
Escursioni | Andrew | 2021 |
Concedi | Valentina | 2021 |
operatore WHERE LIKE
L'applicazione dell'operatore LIKE consente di utilizzare la clausola WHERE per selezionare determinati record che includono un modello specifico. Per definire quel modello, utilizziamo il segno di percentuale (%) per sostituire un carattere o una stringa di più caratteri di qualsiasi lunghezza.
I modelli più comuni per MySQL SELECT WHERE LIKE
sono i seguenti:
WHERE
valore LIKE 'abc%
' – trova e restituisce tutti i valori che iniziano con "abc"
WHERE
valore LIKE '%abc'
– trova e restituisce tutti i valori che terminano con "abc"
WHERE
valore LIKE '%abc%'
– trova e restituisce valori con "abc" ovunque tra l'inizio e la fine
Diamo un'occhiata al WHERE LIKE
esempio. L'azienda vuole ottenere l'elenco dei suoi clienti dagli Stati Uniti e dal Regno Unito. La query è la seguente:
SELECT ContactName, Country, City
FROM Customers
WHERE Country LIKE 'U%'
ORDER BY ContactName;
L'output è:
ContactName | Paese | Città |
Helen Bennett | Regno Unito | Cowe |
Simon Crowther | Regno Unito | Londra |
Hari Kumar | Regno Unito | Londra |
Howard Snyder | USA | Eugene |
Yoshi Latimer | USA | Elgin |
John Steel | USA | Walla Walla |
Jaime Torres | USA | San Francisco |
Fran Wilson | USA | Portland |
esempio WHERE NOT LIKE
C'è un altro caso in cui è necessario escludere alcuni dati dai risultati. Possiamo usare MySQL WHERE NOT LIKE
operatore. Trova e restituisce i dati che non hanno caratteri specifici.
L'azienda desidera un elenco dei suoi clienti di tutti i paesi ad eccezione del Regno Unito e degli Stati Uniti. La sintassi di WHERE NOT LIKE
in MySQL apparirà come di seguito:
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT LIKE 'U%'
ORDER BY Country;
L'uscita:
ContactName | Paese | Città |
Roland Mendel | Austria | Graz |
Georg Pipps | Austria | Salisburgo |
Catherine Dewey | Belgio | Bruxelles |
Carrello Pascale | Belgio | Charleroi |
Elizabeth Lincoln | Canada | Tsawassen |
Yoshi Tannamuri | Canada | Vancouver |
Jean Fresnière | Canada | Montréal |
Jytte Petersen | Danimarca | København |
Palle Ibsen | Danimarca | Århus |
Pirkko Koskitalo | Finlandia | Oulu |
Matti Karttunen | Finlandia | Helsinki |
Annette Roulet | Francia | Tolosa |
Marie Bertrand | Francia | Parigi |
Maria Anders | Germania | Berlino |
Hanna Mooss | Germania | Mannheim |
operatore WHERE IN
Usando il IN
e NOT IN
le parole chiave sono un'altra opzione per filtrare le righe e recuperare solo una parte dei dati che soddisfa i nostri criteri rigorosi. Lo scopo principale è ridurre il numero di OR
clausole in un SELECT
dichiarazione.
MySQL WHERE IN
fa appello alle righe contenenti i valori che abbiamo specificato per WHERE
condizione. Ad esempio, vogliamo recuperare l'elenco dei clienti che risiedono in diversi paesi europei. Il WHERE IN
la sintassi è la seguente in MySQL:
SELECT ContactName, Country, City
FROM Customers
WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Tieni presente che racchiudiamo i nostri valori che specificano la condizione di ricerca tra parentesi. Nel caso di lavoro con valori di testo, dobbiamo metterli tutti tra virgolette singole. Tuttavia, se i nostri valori sono numerici, li elencheremo senza virgolette singole, ad esempio (25, 35, 45).
L'output del precedente MySQL WHERE IN
clausola nel SELECT
affermazione è:
ContactName | Paese | Città |
Catherine Dewey | Belgio | Bruxelles |
Carrello Pascale | Belgio | Charleroi |
Frédérique Citeaux | Francia | Strasburgo |
Laurence Lebihans | Francia | Marsiglia |
Janine Labrune | Francia | Nantes |
Martine Rancé | Francia | Lilla |
Alexander Feuer | Germania | Lipsia |
Henriette Pfalzheim | Germania | Köln |
Horst Kloss | Germania | Cunewalde |
Karin Josephs | Germania | Münster |
Rita Müller | Germania | Stoccarda |
Thomas Hardy | Regno Unito | Londra |
Victoria Ashworth | Regno Unito | Londra |
Elizabeth Brown | Regno Unito | Manchester |
Ann Devon | Regno Unito | Londra |
WHERE NOT IN esempio
Il caso opposto è MySQL WHERE NOT IN
clausola. Viene utilizzato per assicurarsi che la query ignori le righe contenenti i valori specificati per la condizione. Nell'esempio sopra, abbiamo richiesto clienti dai 4 paesi europei definiti. Il MySQL WHERE NOT IN
SELECT
query per la stessa richiesta restituirà tutti i clienti residenti in altri paesi ad eccezione di quelli 4 definiti in precedenza.
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
L'uscita:
ContactName | Paese | Città |
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 | Italia | Roma |
Giovanni Rovelli | Italia | Torino |
Anna Moroni | Italia | Pavia |
Nota :Ti consigliamo di utilizzare [NOT] EXISTS
su [NOT] IN
poiché EXISTS
l'operatore logico funziona più velocemente di IN
, quando si confrontano i set di dati utilizzando una sottoquery. Inoltre, NOT EXISTS
eviterà risultati imprevisti quando i dati di origine contengono NULL
valori.
Operatore WHERE IS NULL
Per verificare se un valore è NULL
oppure no, usa IS NULL
operatore. La seguente istruzione usa il WHERE
clausola con IS NULL
operatore per ottenere le righe senza un valore in books_read
colonna:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NULL;
L'output sarà simile a questo:
last_name | first_name | reg_year | books_read |
Janett | Overacker | 2020 | NULL |
Lidia | Swenson | 2017 | NULL |
Albert | Crepeau | 2018 | NULL |
Anastasia | Johnson | 2021 | NULL |
Sarà | Smith | 2017 | NULL |
WHERE IS NOT NULL esempio
A differenza del comando precedente, WHERE IS NOT NULL
, al contrario, mostra solo quelle righe che contengono una sorta di valore nella colonna in questione. Nell'esempio seguente, selezioneremo solo le righe in cui books_read la colonna non è vuota:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NOT NULL;
Nell'output vedrai solo le righe che contengono un valore in books_read colonna:
last_name | first_name | reg_year | books_read |
Cory | Baster | 2021 | 8 |
Maddison | Winston | 2022 | 3 |
Isabella | Garsia | 2014 | 45 |
Jeremy | Koh | 2022 | 1 |
Aaron | Peterson | 2021 | 15 |
WHERE EXISTS
Il 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
operatore. 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