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.

  • ๐Ÿ” Scopo principale: La clausola WHERE limita le righe su cui un'istruzione puรฒ agire, quindi SELECT, UPDATE e DELETE interessano solo le righe corrispondenti.
  • ๐Ÿ”— and Operare: Le righe vengono restituite solo quando tutte le condizioni risultano vere, restringendo cosรฌ l'insieme dei risultati.
  • ๐Ÿ”€ OR Operare: Vengono restituite delle righe quando una qualsiasi delle condizioni risulta vera, ampliando cosรฌ l'insieme dei risultati.
  • ๐Ÿ“‹ DENTRO e NON DENTRO: La parola chiave IN corrisponde a un elenco di valori in un'espressione, mentre NOT IN esclude lo stesso elenco.
  • ๏ธ Confronto Operatori: Gli operatori Uguale a (=), maggiore di (>), minore di (<) e diverso da (<>) filtrano colonne numeriche, di testo e di data.
  • โš ๏ธ Gestione dei valori NULL: NULL non corrisponde mai a = o <>, quindi IS NULL e IS NOT NULL sono necessari per verificare la presenza di valori mancanti.

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 in MySQL

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 email
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 email
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 email
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 email
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

DOMANDE FREQUENTI

WHERE filtra le singole righe prima del gruppoping, quindi non puรฒ fare riferimento a funzioni aggregate. HAVING filtra i gruppi dopo l'esecuzione di GROUP BY, rendendolo il posto giusto per condizioni come COUNT(*) > 5.

Utilizzare IS NULL o IS NOT NULL. OperaGli operatori come = e <> restituiscono un valore sconosciuto per NULL, quindi `postal_address` = NULL non corrisponde a nulla, mentre `postal_address` IS NULL funziona.

Sรฌ, quando la colonna filtrata รจ indicizzata, MySQL legge solo le righe corrispondenti invece di scansionare la tabella.ping Una colonna in una funzione, come YEAR(`date_of_birth`) = 1980, impedisce l'utilizzo dell'indice.

Sรฌ. Gli assistenti IA trasformano il linguaggio semplice in SQL e MySQL banco di lavoro รจ possibile eseguire il risultato. RevEsamina ogni condizione rispetto al tuo schema, perchรฉ un modello puรฒ inventare i nomi delle colonne.

Provalo prima con SELECT. Una clausola WHERE errata su un Query di ELIMINAZIONE o AGGIORNAMENTO รˆ possibile modificare ogni riga. Visualizza in anteprima le righe corrispondenti, quindi riutilizza la stessa condizione per la scrittura.

Riassumi questo post con: