MySQL Clausola WHERE: AND, OR, IN, NOT IN Esempio di query
โก Riepilogo intelligente
MySQL La clausola WHERE filtra le righe prima che raggiungano il set di risultati, applicando criteri precisi alle istruzioni SELECT, UPDATE e DELETE. La comprensione degli operatori AND, OR, IN, NOT IN e di confronto consente anche ai principianti di recuperare esattamente i record richiesti da una query.

Qual รจ la clausola WHERE in MySQL?
Dove la clausola in MySQL รจ una parola chiave usata per specificare i criteri esatti di dati o righe che saranno interessati dall'istruzione SQL specificata. La clausola WHERE puรฒ essere usata con istruzioni SQL come INSERT, UPDATE, SELECT e DELETE per filtrare i record ed eseguire varie operazioni sui dati.
Abbiamo esaminato come interrogare i dati da a banca dati utilizzando l'istruzione SELECT nell'esercitazione precedente. L'istruzione SELECT ha restituito tutti i risultati dalla tabella del database interrogata.
Ci sono, tuttavia, momenti in cui vogliamo limitare i risultati della query a una condizione specificata. La clausola WHERE in SQL รจ utile in tali situazioni e funziona allo stesso modo in una Query di ELIMINAZIONE o AGGIORNAMENTO come avviene in una query SELECT.
Clausola WHERE Sintassi
La sintassi di base della clausola WHERE รจ la seguente.
SELECT * FROM tableName WHERE condition;
QUI
- โSELEZIONA * DA nometabellaโ รจ lo standard Istruzione SELECT
- "DOVE" รจ la parola chiave che restringe il set di risultati e "condizione" Il filtro viene applicato ai risultati. Il filtro puรฒ essere un intervallo, un singolo valore o una sottoquery.
Supponiamo di voler ottenere i dettagli di un membro dalla tabella dei membri, dato il numero di iscrizione 1. Lo script seguente permette di farlo.
SELECT * FROM `members` WHERE `membership_number` = 1;
Esecuzione di questo script in MySQL banco di lavoro La ricerca su โmyflixdbโ produce il risultato seguente.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Una singola condizione raramente รจ sufficiente. Le sezioni seguenti combinano DOVE con operatori logici.
Clausola WHERE combinata con โ and LOGICO Operator
Con l'operatore logico AND, una riga viene restituita solo se TUTTI i criteri specificati sono soddisfatti.
Supponiamo di voler ottenere tutti i film della categoria 2 usciti nel 2008. Lo script seguente permette di farlo.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
L'esecuzione dello script sopra riportato sul database "myflixdb" produce il seguente risultato.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
L'operatore AND restringe l'insieme dei risultati, mentre l'operatore OR lo amplia.
Clausola WHERE combinata con โ OR LOGICO Operator
Con l'operatore OR, viene restituita una riga se viene soddisfatto ALMENO uno dei criteri specificati.
Il seguente script seleziona tutti i film appartenenti alla categoria 1 o alla categoria 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Il set di risultati รจ mostrato di seguito.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Concatenare molte condizioni OR rende il codice difficile da leggere. La parola chiave IN risolve questo problema.
Clausola WHERE combinata con โ IN Parola chiave
La clausola WHERE, se utilizzata con la parola chiave IN, influisce solo sulle righe i cui valori corrispondono all'elenco fornito. IN riduce il numero di clausole OR che altrimenti sarebbero necessarie.
Le seguenti MySQL La query WHERE IN restituisce le righe in cui membership_number รจ uguale a 1, 2 o 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Il set di risultati รจ mostrato di seguito.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT IN esegue il filtro opposto.
Clausola WHERE combinata con โ NON IN Parola chiave
Con la parola chiave NOT IN, la clausola WHERE esclude ogni riga il cui valore corrisponde all'elenco fornito.
La seguente query restituisce le righe in cui membership_number NON รจ 1, 2 o 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Il set di risultati รจ mostrato di seguito.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
La clausola WHERE filtra inoltre i valori in base alla dimensione e all'uguaglianza, utilizzando operatori di confronto.
Clausola WHERE combinata con โ CONFRONTO OperaTors
Gli operatori di confronto minore di (<), uguale a (=), maggiore di (>) e diverso da (<>) possono essere tutti utilizzati con la clausola WHERE.
= Uguale a
Lo script seguente ottiene tutti i membri femminili dalla tabella dei membri utilizzando l'operatore di confronto uguale a.
SELECT * FROM `members` WHERE `gender` = 'Female';
Il set di risultati รจ mostrato di seguito.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Maggiore di
Lo script seguente ottiene tutti i pagamenti superiori a 2,000 dalla tabella dei pagamenti.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Il set di risultati รจ mostrato di seguito.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> Diverso da
Lo script seguente recupera tutti i film il cui ID di categoria รจ diverso da 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Il set di risultati รจ mostrato di seguito.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Riferimento rapido: clausola WHERE OperaTors
Gli operatori piรน spesso abbinati a WHERE sono riassunti di seguito. Le definizioni complete appaiono nel MySQL riferimento dell'operatore.
| Operator | Significato | Esempio di condizione |
|---|---|---|
| = | Uguale a | `genere` = 'Femmina' |
| <> | Non uguale a | `category_id` <> 1 |
| > / | Maggiore di / minore di | `importo_pagato` > 2000 |
| E / O | Tutti i criteri / qualsiasi criterio | `category_id` = 2 E `year_released` = 2008 |
| DENTRO / NON DENTRO | Corrisponde / esclude un elenco | `membership_number` IN (1,2,3) |
| ร NULLO / NON ร NULLO | Test per valori mancanti | `postal_address` ร NULL |
โ ๏ธ Nota: NULL non corrisponde mai a = o <>. Utilizzare IS NULL o IS NOT NULL quando una colonna potrebbe non contenere alcun valore.
Rompicapo: trova i film restituiti in ritardo
Supponiamo di voler recuperare i film noleggiati che non sono stati restituiti entro la data limite del 25/06/2012. Combinando la clausola WHERE con l'operatore "minore di" e l'operatore AND, possiamo ottenere questo risultato.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Eseguendo lo script precedente in MySQL workbench fornisce i seguenti risultati.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

