TOP

SQL-Lecția 4. Filtrarea datelor (WHERE)

În cele mai multe cazuri, este necesar să primiți nu toate înregistrările, ci doar pe cele care îndeplinesc anumite criterii. De aceea există un operator special WHERE în SQL pentru filtrarea eșantionării.


1. Filtrare simplă prin operatorul WHERE.

Să selectăm din tabelul nostru, de exemplu, înregistrări care se referă doar la un anumit produs. Pentru a face acest lucru, specificăm un parametru de selecție suplimentar care va filtra valorile după coloana Produs.

Un exemplu de interogare pentru selectarea valorilor de text:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes'

După cum puteți vedea, condiția de selecție este inclusă între ghilimele simple, ceea ce este obligatoriu la filtrarea valorilor textului. Ghilimelele nu sunt necesare la filtrarea valorilor numerice.

Un exemplu de interogare pentru selectarea valorilor numerice:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 
ORDER BY Amount

În acest exemplu, am selectat înregistrări în care venitul din vânzări a fost mai mare de 40.000 USD și, în plus, am sortat toate înregistrările în ordine crescătoare după câmpul Sumă.

Tabelul de mai jos listează instrucțiunile condiționate acceptate de SQL:

Знак операції Значення
= Дорівнює
<> Не дорівнює
< Менше
<= Менше або рівне
> Більше
>= Більше або рівне
BETWEEN Між двома значеннями
IS NULL Відсутній запис

2. Filtrarea după intervalul de valori (BETWEEN)

Operatorul BETWEEN este utilizat pentru a selecta date care se află într-un anumit interval. În următoarea interogare, vor fi selectate toate valorile care se situează între 1.000 USD și 2.000 USD, inclusiv, în câmpul Sumă.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount BETWEEN 1000 AND 2000

Ordinea sortării va depinde de ordinea câmpurilor din cerere. Adică, în cazul nostru, datele vor fi mai întâi sortate după coloana Sumă, iar apoi după City.

3. Selectarea înregistrărilor goale (IS NULL)

În SQL, există un operator special pentru selectarea înregistrărilor goale (numit NULL). O intrare goală este orice celulă din tabel în care nu este introdus niciun caracter. Dacă în celulă se introduce 0 sau un spațiu, se consideră că câmpul este completat.

SELECT * 
FROM Sumproduct 
WHERE Amount IS NULL

În exemplul de mai sus, am eliminat în mod intenționat două valori din câmpul Sumă pentru a demonstra operatorul NULL.

4. Filtrare avansată (AND, OR)

Limbajul SQL nu se limitează la filtrarea după o singură condiție, în propriile scopuri puteți folosi construcții destul de complexe pentru a selecta datele simultan după mai multe criterii. Pentru aceasta, SQL are operatori suplimentari care extind capacitățile operatorului WHERE. Astfel de operatori sunt: AND, OR, IN, NOT. Vom da mai multe exemple de funcționare a acestor operatori.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 AND City = 'Toronto'
Run SQLSELECT * 
FROM Sumproduct 
WHERE Month = 'April' OR Month = 'March'

Să combinăm operatorii AND și OR. Pentru a face acest lucru, vom face o selecție de biciclete (Biciclete) și patine (Skates), care au fost vândute în martie.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes' OR Product = 'Skates' AND Month = 'March'

Putem vedea că multe valori au fost incluse în eșantionul nostru (pe lângă martie, și ianuarie, februarie și aprilie). Care este motivul? Și faptul că SQL are priorități de execuție a comenzilor. Adică operatorul AND are o prioritate mai mare decât operatorul OR, așa că primele au fost selectate înregistrările cu patine vândute în martie, urmate de toate înregistrările legate de biciclete.

Deci, pentru a obține eșantionarea corectă, trebuie să schimbăm prioritățile de execuție a comenzii. Pentru aceasta, vom folosi paranteze, ca la matematică. Apoi, operatorii din paranteze vor fi procesați mai întâi și apoi restul.

Run SQLSELECT * 
FROM Sumproduct 
WHERE (Product = 'Bikes' OR Product = 'Skates') AND Month = 'March'

5. Filtrare avansată (operator IN)

Run SQLSELECT * 
FROM Sumproduct 
WHERE ID IN (4, 12, 58, 67)

Operatorul IN îndeplinește aceeași funcție ca și OR, dar are câteva avantaje:

  • Când lucrați cu liste lungi, propozițiile cu IN sunt mai ușor de citit;
  • Sunt utilizați mai puțini operatori, ceea ce accelerează procesarea cererilor;
  • Cel mai important avantaj al IN este că în construcția sa puteți utiliza construcția suplimentară SELECT, care
  • відкриває великі можливості для створення складних підзапитів.

    6. Filtrare avansată (operator NOT)

    Run SQLSELECT * 
    FROM Sumproduct 
    WHERE NOT City IN ('Toronto', 'Montreal')
    

    Cuvântul cheie NOT vă permite să eliminați valorile inutile din eșantion. De asemenea, caracteristica sa este că este plasat înaintea numelui coloanei implicate în filtrare, și nu după.