Sous-requêtes SQL

Remarque : Nous faisons de notre mieux pour vous fournir le contenu d’aide le plus récent aussi rapidement que possible dans votre langue. Cette page a été traduite automatiquement et peut donc contenir des erreurs grammaticales ou des imprécisions. Notre objectif est de faire en sorte que ce contenu vous soit utile. Pouvez-vous nous indiquer en bas de page si ces informations vous ont aidé ? Voici l’article en anglais à des fins de référence aisée.

Une sous-requête est une instruction SELECT imbriquée dans une instruction SELECT, SELECT... INSÉRER... INTO, supprimer ou mettre à jour ou à l’intérieur d’une autre sous-requête.

Syntaxe

Vous pouvez utiliser trois formes de syntaxe pour créer une sous-requête :

comparaison [TOUT | TOUS LES | Certains] (sqlstatement)

expression [NOT] DANS (sqlstatement)

[NOT] EXISTS (sqlstatement)

Une sous-requête comprend les éléments suivants :

Élément

Description

comparaison

Un expression et un opérateur de comparaison qui compare l’expression avec les résultats de la sous-requête.

expression

Une expression pour lequel le jeu de résultats de la sous-requête est recherché.

sqlstatement

Une instruction SELECT, suivant les règles et la même mise en forme en tant que les autres instructions SELECT. Il doit être placé entre parenthèses.


Remarques

Vous pouvez utiliser une sous-requête au lieu d’une expression dans la liste des champs d’une instruction SELECT ou dans un emplacement ou de la clause HAVING. Dans une sous-requête, vous utilisez une instruction SELECT pour fournir un ensemble d’une ou plusieurs valeurs spécifiques à évaluer dans WHERE ou HAVING expression de la clause.

Utilisez les prédicats ANY ou SOME, qui sont synonymes, pour rechercher les enregistrements de la requête principale satisfaisant à la comparaison avec tous les enregistrements de la sous-requête. L’exemple suivant retourne tous les produits dont le prix unitaire est supérieur à celle de tous les produits vendus avec une remise de 25 % ou plus :

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Utilisez le prédicat ALL pour rechercher uniquement les enregistrements de la requête principale satisfaisant à la comparaison avec tous les enregistrements de la sous-requête. Si vous avez modifié un à l’ensemble dans l’exemple précédent, la requête renvoie uniquement les produits dont le prix unitaire est supérieur à celle de tous les produits vendus avec une remise de 25 % ou plus. Il s’agit beaucoup plus restrictive.

Utilisez le prédicat in pour récupérer uniquement les enregistrements de la requête principale pour lesquels des enregistrements de la sous-requête contient une valeur équivalente. L’exemple suivant retourne tous les produits avec une remise de 25 % ou plus :

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

En revanche, vous pouvez utiliser NOT IN pour récupérer uniquement les enregistrements de la requête principale pour lesquelles aucun enregistrement dans la sous-requête ne contient une valeur équivalente.

Utilisez le prédicat EXISTS (avec l’option non réservée word) dans les comparaisons vrai/faux pour déterminer si la sous-requête renvoie tous les enregistrements.

Vous pouvez également utiliser des alias de nom de table dans une sous-requête pour faire référence à des tables répertoriées dans une clause FROM en dehors de la sous-requête. L’exemple suivant retourne les noms des employés dont le salaire égale ou supérieure à la moyenne des salaires de tous les employés occupant le même poste. La table employés se voit attribuer l’alias « T1 » :

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

Dans l’exemple précédent, la en tant que mot réservé est facultative.

Certaines sous-requêtes sont autorisées dans les requêtes analyse croisée, en particulier, comme prédicats (ceux de la clause WHERE). Sous-requêtes sorties (dans la liste de sélection) ne sont pas autorisées dans les requêtes analyse croisée.



Développez vos compétences dans Office
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoignez le programme Office Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×