IN în MySQL

Condiții în WHERE Toate versiunile MySQL și MariaDB

Verifică dacă o valoare se află într-o listă. Înlocuiește mai multe condiții OR.

Sintaxă
WHERE coloana IN (valoare1, valoare2, ...);

Ce face IN

IN este o scurtătură pentru mai multe comparații legate cu OR: oras IN ('Cluj', 'Arad') este același lucru cu oras = 'Cluj' OR oras = 'Arad'.

Lista poate fi scrisă direct sau poate fi rezultatul unei subinterogări (un alt SELECT între paranteze). NOT IN păstrează rândurile care nu sunt în listă.

Parametri

Parametru Descriere
valoare1, valoare2, ... Lista de valori sau o subinterogare care returnează o singură coloană.

Exemple

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

CREATE TABLE clienti (
  id INT PRIMARY KEY,
  nume VARCHAR(50) NOT NULL,
  oras VARCHAR(30),
  email VARCHAR(100)
);

INSERT INTO clienti VALUES
  (1, 'Ana Pop', 'Cluj', 'ana@exemplu.ro'),
  (2, 'Bogdan Ionescu', 'Sibiu', NULL),
  (3, 'Cristina Marin', 'Cluj', 'cristina@exemplu.ro'),
  (4, 'Dan Stoica', 'Arad', NULL);

CREATE TABLE comenzi (
  id INT PRIMARY KEY,
  client_id INT,
  data DATE,
  total INT
);

INSERT INTO comenzi VALUES
  (101, 1, '2026-09-03', 3580),
  (102, 3, '2026-09-15', 650),
  (103, 1, '2026-10-02', 1200),
  (104, 2, '2026-10-11', 80);

Exemplul 1: O listă de valori

SELECT nume, oras FROM clienti WHERE oras IN ('Sibiu', 'Arad') ORDER BY nume;

Rezultat

+----------------+-------+
| nume           | oras  |
+----------------+-------+
| Bogdan Ionescu | Sibiu |
| Dan Stoica     | Arad  |
+----------------+-------+

Exemplul 2: Cu o subinterogare: clienții care au comandat

SELECT nume
FROM clienti
WHERE id IN (SELECT client_id FROM comenzi)
ORDER BY nume;

Rezultat

+----------------+
| nume           |
+----------------+
| Ana Pop        |
| Bogdan Ionescu |
| Cristina Marin |
+----------------+

Exemplul 3: NOT IN: clienții fără comenzi

SELECT nume
FROM clienti
WHERE id NOT IN (SELECT client_id FROM comenzi);

Rezultat

+------------+
| nume       |
+------------+
| Dan Stoica |
+------------+

Greșeli frecvente

  • Folosești NOT IN cu o subinterogare care poate returna NULL. Dacă lista conține un singur NULL, rezultatul este gol. Adaugă WHERE client_id IS NOT NULL în subinterogare sau folosește NOT EXISTS.

Comenzi înrudite

  • WHERE: Filtrează rândurile: păstrează doar rândurile care îndeplinesc o condiție.
  • BETWEEN: Verifică dacă o valoare este într-un interval, cu tot cu capete.
  • LEFT JOIN: Leagă două tabele și păstrează toate rândurile din primul, chiar dacă nu au pereche în al doilea.