Operatorii de filtrare
Operatorul IN
Operatorul IN determină un set de valori pe care trebuie să le aibă coloanele:
WHERE expresie [NOT] IN (expresie)
Expresia în paranteze după IN determină un set de valori. Acest set poate fi calculat dinamic pe baza, de exemplu, a încă unei interogări, sau pot fi valori constante.
De exemplu, să selectăm produsele ale căror firme producătoare sunt fie Samsung, fie Xiaomi, fie Huawei:
SELECT * FROM Products
WHERE Manufacturer IN (Samsung, HTC, Huawei);

Operatorul NOT, dimpotrivă, permite selectarea tuturor rândurilor ale căror coloane nu au anumite valori:
SELECT * FROM Products
WHERE Manufacturer NOT IN (Samsung, HTC, Huawei);

Operatorul BETWEEN
Operatorul BETWEEN definește un interval de valori folosind o valoare de început și o valoare de sfârșit la care trebuie să se potrivească expresia:
WHERE expresie [NOT] BETWEEN valoare_de_iceput AND valoare_finala
De exemplu, vom obține toate produsele cu prețul cuprins între 20 000 și 50 000 (valorile de început și sfârșit sunt, de asemenea, incluse în interval):
SELECT * FROM Products
WHERE Price BETWEEN 20000 AND 50000;

Dacă doriți să selectați rândurile care nu se încadrează în acest interval, se adaugă operatorul NOT:
SELECT * FROM Products
WHERE Price NOT BETWEEN 20000 AND 50000;
De asemenea, puteți utiliza expresii mai complexe. De exemplu, să obținem produsele în funcție de costul total (prețul * cantitatea):
SELECT * FROM Products
WHERE Price * ProductCount BETWEEN 90000 AND 150000;
Operatorii LIKE și REGEXP
Operatorul LIKE acceptă un șablon de șir de caractere căruia trebuie să corespundă expresia.
WHERE expresie [NOT] LIKE sablonul_coloanei
Pentru a defini un șablon, pot fi utilizate anumite caractere speciale de substituție:
- %: se potrivește oricărei subșiruri care poate avea orice număr de caractere, iar subșirul poate să nu conțină niciun caracter. De exemplu, expresia WHERE ProductName LIKE Galaxy% se potrivește valorilor precum "Galaxy Ace 2" sau "Galaxy S7"
- _: se potrivește oricărui singur caracter. De exemplu, expresia WHERE ProductName LIKE Galaxy S_ se potrivește valorilor precum "Galaxy S7" sau "Galaxy S8"
Vom aplica acum operatorul LIKE:
SELECT * FROM Products
WHERE ProductName LIKE iPhone%;

Operatorul REGEXP permite definirea unei expresii regulate (regex) la care trebuie să corespundă valoarea din coloană. Din acest punct de vedere, REGEXP oferă un mod mai sofisticat și complex de filtrare decât operatorul LIKE. REGEXP are un sintaxă similară:

Expresia regulată poate să includă următoarele caractere speciale:
- ^: indică începutul șirului
- $: indică sfârșitul șirului
- .: se potrivește oricărui singur caracter
- [simboluri]: se potrivește oricărui singur caracter din interiorul parantezelor
- [primul_simbol-simbolul_final]: se potrivește oricărui singur caracter dintr-un interval de caractere
- |: separă două șabloane de șiruri, iar valoarea trebuie să corespundă unuia dintre aceste șabloane
Exemple REGEXP:
- WHERE ProductName REGEXP Phone: șirul trebuie să conțină "Phone", de exemplu, iPhone X, Nokia Phone N, iPhone
- WHERE ProductName REGEXP ^Phone: șirul trebuie să înceapă cu "Phone", de exemplu, Phone 34, PhoneX
- WHERE ProductName REGEXP Phone$: șirul trebuie să se termine cu "Phone", de exemplu, iPhone, Nokia Phone
- WHERE ProductName REGEXP iPhone [78]: șirul trebuie să conțină fie iPhone 7, fie iPhone 8
- WHERE ProductName REGEXP iPhone [6-8]: șirul trebuie să conțină fie iPhone 6, fie iPhone 7, fie iPhone 8
De exemplu, să găsim produsele ale căror nume conțin fie "Phone", fie "Galaxy":
SELECT * FROM Products
WHERE ProductName REGEXP Phone|Galaxy;

Operatorul IS NULL
Operatorul IS NULL permite selectarea tuturor rândurilor ale căror coloane au valoarea NULL:
SELECT * FROM Products
WHERE ProductCount IS NULL;
Adăugând operatorul NOT, poți, dimpotrivă, selecta rândurile ale căror coloane nu au valoarea NULL:
SELECT * FROM Products
WHERE ProductCount IS NOT NULL;