IF() în MySQL

Alege între două valori după o condiție, ca un operator ternar.

Sintaxă
IF(conditie, valoare_daca_da, valoare_daca_nu)

Ce face IF()

IF() returnează al doilea argument dacă condiția este adevărată și al treilea în rest (inclusiv când condiția este NULL). Pentru mai multe ramuri folosește CASE.

Nu confunda funcția IF() cu instrucțiunea IF ... THEN ... END IF din procedurile stocate.

Parametri

Parametru Descriere
conditie Condiția verificată.
valoare_daca_da Rezultatul pentru adevărat.
valoare_daca_nu Rezultatul pentru fals sau NULL.

Ce returnează

Una dintre cele două valori.

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: Stoc disponibil

SELECT nume, IF(stoc > 0, 'în stoc', 'epuizat') AS disponibilitate
FROM produse
ORDER BY id;

Rezultat

+---------+-----------------+
| nume    | disponibilitate |
+---------+-----------------+
| Laptop  | în stoc         |
| Mouse   | în stoc         |
| Birou   | epuizat         |
| Scaun   | în stoc         |
| Monitor | în stoc         |
+---------+-----------------+

Exemplul 2: Numărare condiționată

SELECT SUM(IF(stoc > 0, 1, 0)) AS in_stoc, SUM(IF(stoc = 0, 1, 0)) AS epuizate FROM produse;

Rezultat

+---------+----------+
| in_stoc | epuizate |
+---------+----------+
|       4 |        1 |
+---------+----------+

Greșeli frecvente

  • Imbrici multe IF()-uri. Devin greu de citit; de la trei ramuri, folosește CASE.

Comenzi înrudite

  • CASE: Alege o valoare în funcție de condiții, ca un if / else în interiorul interogării.
  • NULLIF(): Returnează NULL dacă cele două valori sunt egale, altfel prima valoare.