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 INcu o subinterogare care poate returnaNULL. Dacă lista conține un singurNULL, rezultatul este gol. AdaugăWHERE client_id IS NOT NULLîn subinterogare sau foloseșteNOT EXISTS.