IN, ANY ou ALL
Comparez avec des ensembles de valeurs.
IN, ANY ou ALL est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Que sont IN, ANY et ALL ?
Lors de la rédaction de requêtes SQL, vous devez souvent comparer une valeur à un ensemble de valeurs. SQL fournit trois opérateurs puissants pour cela : IN, ANY et ALL.
Les trois peuvent fonctionner avec des sous-requêtes qui renvoient une liste de valeurs. Ils se ressemblent, mais leur comportement diffère : choisir le bon opérateur peut rendre votre requête beaucoup plus expressive et efficace.
L'opérateur IN
L'opérateur IN vérifie si une valeur correspond à l'une des valeurs d'une liste ou du résultat d'une sous-requête. C'est le plus simple des trois.
L'exemple ci-dessous récupère les employés qui travaillent dans les services Commercial, HR ou Ingénierie.
SELECT name, department
FROM employees
WHERE department IN ('Sales', 'HR', 'Engineering');IN avec une sous-requête
IN devient particulièrement puissant lorsqu'il est associé à une sous-requête. Au lieu d'une liste codée en dur, vous pouvez récupérer les valeurs de comparaison directement depuis une autre table.
Nous trouvons ici tous les employés appartenant à un service dont le budget dépasse 100 000.
SELECT name, department
FROM employees
WHERE department IN (
SELECT dept_name
FROM departments
WHERE budget > 100000
);L'opérateur ANY
ANY (également écrit SOME) compare une valeur à chacune des valeurs renvoyées par une sous-requête à l'aide d'un opérateur de comparaison tel que =, >, <, >= ou <=.
La condition est vraie si la comparaison est vraie pour au moins une valeur du résultat de la sous-requête.
SELECT name, salary
FROM employees
WHERE salary > ANY (
SELECT salary
FROM employees
WHERE department = 'HR'
);= ANY équivaut à IN
Une équivalence importante à connaître : = ANY (subquery) est logiquement identique à IN (subquery). Les deux renvoient vrai lorsque la valeur correspond à au moins un résultat de la sous-requête.
Ces deux requêtes produisent le même résultat :
-- Using IN
SELECT name FROM employees
WHERE department_id IN (SELECT id FROM departments WHERE location = 'NYC');
-- Using = ANY
SELECT name FROM employees
WHERE department_id = ANY (SELECT id FROM departments WHERE location = 'NYC');L'opérateur ALL
ALL compare une valeur à chaque valeur d'un résultat de sous-requête. La condition est vraie uniquement si la comparaison est vérifiée pour toutes les valeurs renvoyées.
Cet exemple trouve les employés dont le salaire est supérieur à tous les salaires du niveau des stagiaires — autrement dit, ils gagnent plus que le stagiaire le mieux payé.
SELECT name, salary
FROM employees
WHERE salary > ALL (
SELECT salary
FROM employees
WHERE job_grade = 'Intern'
);ANY et ALL — comparaison côte à côte
La différence essentielle : ANY exige que la condition soit vraie pour au moins une valeur, tandis que ALL exige qu'elle soit vraie pour chaque valeur.
Considérez cela ainsi : ANY équivaut à OR pour l'ensemble des comparaisons, et ALL à AND pour l'ensemble des comparaisons.
-- Returns rows where salary > at least one value in the subquery
SELECT name, salary FROM employees
WHERE salary > ANY (SELECT salary FROM employees WHERE department = 'Support');
-- Returns rows where salary > every value in the subquery
SELECT name, salary FROM employees
WHERE salary > ALL (SELECT salary FROM employees WHERE department = 'Support');NOT IN et <> ALL
Tout comme = ANY reflète IN, l'opérateur <> ALL est équivalent à NOT IN. Les deux ne renvoient vrai que lorsque la valeur ne correspond à aucune valeur de la sous-requête.
Attention toutefois : si la sous-requête renvoie ne serait-ce qu'un NULL, NOT IN ne renverra aucune ligne en raison de la logique à trois valeurs de SQL.
-- Using NOT IN
SELECT name FROM employees
WHERE department_id NOT IN (SELECT id FROM departments WHERE location = 'Remote');
-- Using <> ALL (equivalent)
SELECT name FROM employees
WHERE department_id <> ALL (SELECT id FROM departments WHERE location = 'Remote');Le piège des valeurs NULL avec NOT IN
Un piège crucial : si la sous-requête utilisée avec NOT IN renvoie un NULL, toute la condition NOT IN s'évalue à UNKNOWN pour chaque ligne, ce qui renvoie un ensemble de résultats vide.
Pour éviter cela, excluez les valeurs NULL de la sous-requête ou utilisez NOT EXISTS, qui gère les NULL en toute sécurité.
-- Dangerous: if manager_id has any NULL, no rows are returned
SELECT name FROM employees
WHERE id NOT IN (SELECT manager_id FROM employees);
-- Safe: filter NULLs explicitly
SELECT name FROM employees
WHERE id NOT IN (
SELECT manager_id FROM employees
WHERE manager_id IS NOT NULL
);Exemple pratique : trouver les mieux rémunérés
Voyons les trois opérateurs appliqués à un scénario réaliste. Nous disposons d'une table employees avec les colonnes name, department et salary.
Nous voulons les employés qui gagnent plus que le salaire moyen d'au moins un service — c'est-à-dire plus que la moyenne d'un service quelconque.
SELECT name, salary
FROM employees
WHERE salary > ANY (
SELECT AVG(salary)
FROM employees
GROUP BY department
)
ORDER BY salary DESC;Lequel utiliser, et quand ?
Voici un guide rapide pour choisir entre les trois opérateurs :
- IN — lorsque vous avez une liste statique ou que vous devez effectuer une comparaison par égalité avec une sous-requête.
- = ANY — équivalent à IN, mais permet d'utiliser d'autres opérateurs de comparaison comme
>et<. - ALL — lorsque la condition doit être vraie pour chaque valeur, par exemple supérieure au maximum sans utiliser MAX.
- NOT IN — pratique, mais faites attention aux valeurs NULL ; préférez
NOT EXISTSlorsque la sous-requête peut contenir des valeurs NULL.
Vérification rapide
Évaluez votre compréhension de IN, ANY et ALL.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris à comparer des valeurs à un ensemble à l'aide de IN, ANY et ALL.
Points à retenir :
INvérifie l'appartenance : vrai si la valeur correspond à n'importe quel élément de la liste ou de la sous-requête.= ANYest équivalent àIN; utiliser d'autres opérateurs comme> ANYsignifie que la condition est vraie pour au moins une correspondance.ALLsignifie que la condition doit être vraie pour chaque valeur renvoyée par la sous-requête.NOT INne renvoie silencieusement aucune ligne lorsque la sous-requête contient des valeurs NULL — protégez-vous toujours contre ce cas.- Utilisez
NOT EXISTScomme alternative plus sûre àNOT INlorsque des valeurs NULL peuvent être présentes.
Questions Fréquemment Posées
La leçon « IN, ANY ou ALL » est-elle gratuite ?
Oui — le texte complet de « IN, ANY ou ALL » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « IN, ANY ou ALL » ?
Comparez avec des ensembles de valeurs. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « IN, ANY ou ALL » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.