Operatori logici: AND, OR, NOT, XOR în MySQL

Operatori MySQL 5.0+

Combină condiții: AND (ambele), OR (măcar una), NOT (inversul), XOR (exact una).

Sintaxă
a AND b   a OR b   NOT a   a XOR b

Ce face Operatori logici: AND, OR, NOT, XOR

AND e adevărat dacă ambele condiții sunt adevărate, OR dacă măcar una este, XOR dacă exact una este, iar NOT inversează. MySQL lucrează cu logică pe trei valori: o condiție poate fi și NULL (necunoscută).

Variantele &&, || și ! sunt depreciate: afișează avertisment și vor fi eliminate. Folosește cuvintele AND, OR, NOT.

Parametri

Parametru Descriere
a, b Condițiile combinate.

Ce returnează

1, 0 sau NULL.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE produse (
  id INT PRIMARY KEY,
  nume VARCHAR(30),
  pret DECIMAL(10,2),
  stoc INT,
  reducere INT
);

INSERT INTO produse VALUES
  (1, 'Laptop', 3499.90, 4, NULL),
  (2, 'Mouse', 79.50, 25, 10),
  (3, 'Birou', 899.00, 0, 15),
  (4, 'Scaun', 649.99, 7, NULL),
  (5, 'Monitor', 1199.00, 3, 5);

Exemplul 1: Logica pe trei valori

SELECT TRUE AND NULL AS si_cu_null,
       FALSE AND NULL AS fals_si_null,
       TRUE OR NULL AS sau_cu_null,
       NOT NULL AS nu_null,
       1 XOR 0 AS sau_exclusiv;

Rezultat

+------------+--------------+-------------+---------+--------------+
| si_cu_null | fals_si_null | sau_cu_null | nu_null | sau_exclusiv |
+------------+--------------+-------------+---------+--------------+
|       NULL |            0 |           1 |    NULL |            1 |
+------------+--------------+-------------+---------+--------------+

Exemplul 2: Condiții combinate, cu paranteze

SELECT nume, pret, stoc
FROM produse
WHERE stoc > 0 AND (pret < 100 OR reducere IS NOT NULL)
ORDER BY id;

Rezultat

+---------+---------+------+
| nume    | pret    | stoc |
+---------+---------+------+
| Mouse   |   79.50 |   25 |
| Monitor | 1199.00 |    3 |
+---------+---------+------+

Exemplul 3: Operatorii vechi afișează avertisment

SELECT 1 && 1 AS si_vechi, !0 AS nu_vechi;

Rezultat

+----------+----------+
| si_vechi | nu_vechi |
+----------+----------+
|        1 |        1 |
+----------+----------+
Warning (Code 1287): '&&' is deprecated and will be removed in a future release. Please use AND instead
Warning (Code 1287): '!' is deprecated and will be removed in a future release. Please use NOT instead

Greșeli frecvente

  • Uiți parantezele: AND are prioritate față de OR. a OR b AND c înseamnă a OR (b AND c).
  • Scrii 'a' || 'b' ca să lipești texte. În MySQL, || este SAU logic (dacă nu e activ modul PIPES_AS_CONCAT); folosește CONCAT().

Comenzi înrudite

  • Operatori de comparație: Compară două valori și returnează 1 (adevărat), 0 (fals) sau NULL.
  • WHERE: Filtrează rândurile: păstrează doar rândurile care îndeplinesc o condiție.
  • IF(): Alege între două valori după o condiție, ca un operator ternar.