MySQL WHERE Clauza: AND, OR, IN, NOT IN Exemplu de interogare

โšก Rezumat inteligent

MySQL Clauza WHERE filtreazฤƒ rรขndurile รฎnainte ca acestea sฤƒ ajungฤƒ la setul de rezultate, aplicรขnd criterii precise instrucศ›iunilor SELECT, UPDATE ศ™i DELETE. รŽnศ›elegerea operatorilor AND, OR, IN, NOT IN ศ™i de comparaศ›ie permite รฎncepฤƒtorilor sฤƒ recupereze exact รฎnregistrฤƒrile necesare unei interogฤƒri.

  • ๐Ÿ” Scop principal: Clauza WHERE restricศ›ioneazฤƒ rรขndurile pe care le atinge o instrucศ›iune, astfel รฎncรขt SELECT, UPDATE ศ™i DELETE afecteazฤƒ doar rรขndurile corespondente.
  • ๐Ÿ”— AND Operator: Rรขndurile sunt returnate numai atunci cรขnd fiecare condiศ›ie este evaluatฤƒ ca adevฤƒratฤƒ, restrรขngรขnd setul de rezultate.
  • ๐Ÿ”€ OR Operator: Rรขndurile sunt returnate atunci cรขnd o singurฤƒ condiศ›ie se evalueazฤƒ ca adevฤƒratฤƒ, lฤƒrgind setul de rezultate.
  • ๐Ÿ“‹ รŽN ศ™i NU รŽN: Cuvรขntul cheie IN se potriveศ™te cu o listฤƒ de valori dintr-o expresie, รฎn timp ce NOT IN exclude aceeaศ™i listฤƒ.
  • ๐Ÿ‡ง๐Ÿ‡ท Comparaลฃie Operators: Egal cu (=), mai mare decรขt (>), mai mic decรขt (<) ศ™i diferit de (<>) filtreazฤƒ coloanele numerice, de text ศ™i de datฤƒ.
  • โš ๏ธ Tratarea valorilor NULL: NULL nu se potriveศ™te niciodatฤƒ cu = sau <>, aศ™adar IS NULL ศ™i IS NOT NULL sunt necesare pentru a testa valorile lipsฤƒ.

รŽn ce se aflฤƒ clauza WHERE MySQL?

UNDE Clauza in MySQL este un cuvรขnt cheie folosit pentru a specifica criteriile exacte de date sau rรขnduri care vor fi afectate de instrucศ›iunea SQL specificatฤƒ. Clauza WHERE poate fi utilizatฤƒ cu instrucศ›iuni SQL precum INSERT, UPDATE, SELECT ศ™i DELETE pentru a filtra รฎnregistrฤƒrile ศ™i a efectua diverse operaศ›ii asupra datelor.

Am analizat cum sฤƒ interogฤƒm datele de la a Baza de date folosind instrucศ›iunea SELECT din tutorialul anterior. Instrucศ›iunea SELECT a returnat toate rezultatele din tabelul bazei de date interogat.

Existฤƒ, totuศ™i, momente cรขnd dorim sฤƒ restricศ›ionฤƒm rezultatele interogฤƒrii la o condiศ›ie specificatฤƒ. Clauza WHERE din SQL este utilฤƒ รฎn astfel de situaศ›ii ศ™i funcศ›ioneazฤƒ la fel รฎntr-un Interogare DELETE sau UPDATE aศ™a cum se รฎntรขmplฤƒ รฎntr-o interogare SELECT.

WHERE clauza รฎn MySQL

Clauza WHERE Sintaxฤƒ

Sintaxa de bazฤƒ a clauzei WHERE este urmฤƒtoarea.

SELECT * FROM tableName WHERE condition;

AICI

  • โ€žSELECT * FROM tableNameโ€ este standardul instrucศ›iunea SELECT
  • "UNDE" este cuvรขntul cheie care restricศ›ioneazฤƒ setul de rezultate ศ™i "condiศ›ie" este filtrul aplicat rezultatelor. Filtrul poate fi un interval, o singurฤƒ valoare sau o subinterogare.

Sฤƒ presupunem cฤƒ dorim detaliile unui membru din tabela membri, avรขnd รฎn vedere numฤƒrul de membru 1. Scriptul de mai jos realizeazฤƒ acest lucru.

SELECT * FROM `members` WHERE `membership_number` = 1;

Executarea acestui script รฎn MySQL banc de lucru pe โ€žmyflixdbโ€ produce rezultatul de mai jos.

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

O singurฤƒ condiศ›ie este rareori suficientฤƒ. Secศ›iunile de mai jos combinฤƒ WHERE cu operatori logici.

Clauza WHERE combinatฤƒ cu โ€“ AND LOGIC OperaTdR

Cu operatorul logic AND, un rรขnd este returnat numai dacฤƒ sunt รฎndeplinite TOATE criteriile specificate.

Sฤƒ presupunem cฤƒ vrem toate filmele din categoria 2 care au fost lansate รฎn 2008. Scenariul de mai jos realizeazฤƒ acest lucru.

SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;

Executarea scriptului de mai sus asupra โ€žmyflixdbโ€ produce urmฤƒtorul rezultat.

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2

ศ˜I restrรขnge un set de rezultate. SAU รฎl lฤƒrgeศ™te.

Clauza WHERE combinatฤƒ cu โ€“ OR LOGIC OperaTdR

Cu operatorul SAU, un rรขnd este returnat dacฤƒ este รฎndeplinit ORICARE dintre criteriile specificate.

Urmฤƒtorul scenariu include toate filmele din categoria 1 sau din categoria 2.

SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;

Setul de rezultate este prezentat mai jos.

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

รŽnlฤƒnศ›uirea mai multor condiศ›ii SAU devine dificil de citit. Cuvรขntul cheie IN rezolvฤƒ aceastฤƒ problemฤƒ.

Clauza WHERE combinatฤƒ cu โ€“ IN Cuvรขnt cheie

Clauza WHERE, atunci cรขnd este utilizatฤƒ cu cuvรขntul cheie IN, afecteazฤƒ doar rรขndurile ale cฤƒror valori corespund listei furnizate. IN reduce numฤƒrul de clauze OR pe care le-aศ›i scrie altfel.

Urmฤƒtoarele MySQL Interogarea WHERE IN dฤƒ rรขnduri unde membership_number este fie 1, 2, fie 3.

SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);

Setul de rezultate este prezentat mai jos.

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 efectueazฤƒ filtrul opus.

Clauza WHERE combinatฤƒ cu โ€“ NU รŽN Cuvรขnt cheie

Cu ajutorul cuvรขntului cheie NOT IN, clauza WHERE exclude fiecare rรขnd a cฤƒrui valoare corespunde cu lista furnizatฤƒ.

Urmฤƒtoarea interogare oferฤƒ rรขnduri unde membership_number NU este 1, 2 sau 3.

SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);

Setul de rezultate este prezentat mai jos.

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

WHERE filtreazฤƒ, de asemenea, valorile dupฤƒ dimensiune ศ™i egalitate, utilizรขnd operatori de comparaศ›ie.

Clauza WHERE combinatฤƒ cu โ€“ COMPARAลขIE Operatori

Operatorii de comparaศ›ie โ€žmai mic decรขtโ€ (<), โ€žegal cuโ€ (=), โ€žmai mare decรขtโ€ (>) ศ™i โ€ždiferent deโ€ (<>) pot fi utilizaศ›i cu clauza WHERE.

= Egal cu

Urmฤƒtorul script preia toศ›i membrii femei din tabelul de membri folosind operatorul de comparaศ›ie.

SELECT * FROM `members` WHERE `gender` = 'Female';

Setul de rezultate este prezentat mai jos.

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

> Mai mare ca

Urmฤƒtorul script primeศ™te toate plฤƒศ›ile care sunt mai mari de 2,000 din tabelul de plฤƒศ›i.

SELECT * FROM `payments` WHERE `amount_paid` > 2000;

Setul de rezultate este prezentat mai jos.

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

<> Diferit de

Urmฤƒtorul script primeศ™te toate filmele al cฤƒror id de categorie nu este 1.

SELECT * FROM `movies` WHERE `category_id` <> 1;

Setul de rezultate este prezentat mai jos.

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

Referinศ›ฤƒ rapidฤƒ: Clauza WHERE Operatori

Operatorii cel mai des asociaศ›i cu WHERE sunt rezumaศ›i mai jos. Definiศ›iile complete apar รฎn MySQL referinศ›ฤƒ operator.

OperaTdR Sens Condiศ›ie exemplu
= Egal cu `gen` = 'Feminin'
<> Nu este egal cu `id_categorie` <> 1
> / Mai mare decรขt / mai mic decรขt `sumฤƒ_plฤƒtitฤƒ` > 2000
ศ˜I / SAU Toate criteriile / orice criterii `id_categorie` = 2 ศ˜I `an_lansare` = 2008
รŽN / NU รŽN Se potriveศ™te cu / exclude o listฤƒ `numฤƒr_membru` IN (1,2,3)
ESTE NUL / NU ESTE NUL Teste pentru valori lipsฤƒ `adresฤƒ_poศ™talฤƒ` ESTE NUL

โš ๏ธ Notฤƒ: NULL nu se potriveศ™te niciodatฤƒ cu = sau <>. Se foloseศ™te IS NULL sau IS NOT NULL atunci cรขnd o coloanฤƒ nu poate conศ›ine nicio valoare.

Joc de inteligenศ›ฤƒ: Gฤƒseศ™te filme returnate tรขrziu

Sฤƒ presupunem cฤƒ dorim filmele รฎnchiriate care nu au fost returnate pรขnฤƒ la data limitฤƒ de 25/06/2012. Combinarea operatorilor WHERE cu operatorii โ€žmai puศ›in decรขtโ€ ศ™i AND realizeazฤƒ acest lucru.

SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;

Executarea scriptului de mai sus รฎn MySQL workbench dฤƒ urmฤƒtoarele rezultate.

reference_number transaction_date return_date membership_number movie_id movie_returned
14 21-06-2012 24-06-2012 2 2 0

รŽntrebฤƒri frecvente

WHERE filtreazฤƒ rรขndurile individuale รฎnainte de grupareping, deci nu poate face referire la funcศ›ii agregate. HAVING filtreazฤƒ grupurile dupฤƒ rularea GROUP BY, ceea ce o face locul potrivit pentru condiศ›ii precum COUNT(*) > 5.

Foloseศ™te IS NULL sau IS NOT NULL. OperaInstrumentele precum = ศ™i <> returneazฤƒ o valoare necunoscutฤƒ pentru NULL, deci `postal_address` = NULL nu se potriveศ™te cu nimic, รฎn timp ce `postal_address` IS NULL funcศ›ioneazฤƒ.

Da, cรขnd coloana filtratฤƒ este indexatฤƒ, MySQL citeศ™te doar rรขndurile corespondente รฎn loc sฤƒ scaneze tabelul. Wrapping o coloanฤƒ dintr-o funcศ›ie, cum ar fi YEAR(`data_naศ™terii`) = 1980, รฎmpiedicฤƒ utilizarea indexului.

Da. Asistenศ›ii inteligenศ›i artificiali transformฤƒ limba englezฤƒ simplฤƒ รฎn SQL ศ™i MySQL Banc de lucru poate rula rezultatul. RevVizualizaศ›i fiecare condiศ›ie faศ›ฤƒ de schema dvs., deoarece un model poate inventa nume de coloane.

Testeazฤƒ-l mai รฎntรขi cu SELECT. O clauzฤƒ WHERE greศ™itฤƒ pe un Interogare DELETE sau UPDATE poate modifica fiecare rรขnd. Previzualizaศ›i rรขndurile potrivite, apoi reutilizaศ›i aceeaศ™i condiศ›ie pentru scriere.

Rezumaศ›i aceastฤƒ postare cu: