Sous-requête SQL Server
Résumé: dans ce didacticiel, vous découvrirez la sous-requête SQL Server et comment utiliser la sous-requête pour interroger des données.
Introduction à la sous-requête SQL Server
Une sous-requête est une requête imbriquée dans une autre instruction telle que SELECT
, INSERT
, UPDATE
, ou DELETE
.
Voyons lexemple suivant.
Considérons le orders
et customers
tables de la base de données exemple.
Linstruction suivante montre comment utiliser une sous-requête dans la clause WHERE
dun SELECT
instruction pour trouver les commandes clients des clients qui se trouvent dans New York
:
Voici le résultat:
Dans cet exemple, linstruction suivante est une sous-requête:
Code language: SQL (Structured Query Language) (sql)
Notez que vous devez toujours inclure le SELECT
requête dune sous-requête entre parenthèses ()
.
Une sous-requête est également appelée requête interne ou sélection interne tandis que linstruction contenant la sous-requête est appelée sélection externe ou requête externe:
SQL Le serveur exécute tout lexemple de requête ci-dessus comme suit:
Tout dabord, il exécute la sous-requête pour obtenir une liste des numéros didentification des clients qui se trouvent dans New York
.
Code language: SQL (Structured Query Language) (sql)
Deuxièmement, SQL Server remplace les numéros didentification client renvoyés par la sous-requête dans lopérateur IN
et exécute la requête externe pour obtenir le jeu de résultats final.
Comme vous pouvez s ee, en utilisant la sous-requête, vous pouvez combiner deux étapes ensemble. La sous-requête supprime la nécessité de sélectionner les numéros didentification du client et de les connecter à la requête externe. De plus, la requête elle-même sajuste automatiquement chaque fois que les données client changent.
Sous-requête dimbrication
Une sous-requête peut être imbriquée dans une autre sous-requête. SQL Server prend en charge jusquà 32 niveaux dimbrication. Prenons lexemple suivant:
Premièrement, SQL Server exécute la sous-requête suivante pour obtenir une liste des numéros didentification de marque des marques Strider
et Trek
:
Deuxièmement, SQL Server calcule la liste de prix moyenne de tous les produits qui appartiennent à ces marques.
Code language: SQL (Structured Query Language) (sql)
Troisièmement, SQL Server recherche les produits dont le prix catalogue est supérieur au prix catalogue moyen de tous les produits avec le Strider
ou Trek
marque.
Types de sous-requêtes SQL Server
Vous pouvez utiliser une sous-requête à de nombreux endroits:
- À la place dune expression
- Avec
IN
ouNOT IN
- Avec
ANY
ouALL
- Avec
EXISTS
ouNOT EXISTS
- Dans
UPDATE
,DELETE
, ouINSERT
instruction - Dans la
FROM
clause
sous-requête SQL Server est utilisé à la place dune expression
Si une sous-requête renvoie une seule valeur, elle peut être utilisée partout où une expression est utilisée.
Dans lexemple suivant, une sous-requête est utilisée comme un expression de colonne nommée max_list_price
dans une instruction SELECT
.
La sous-requête SQL Server est utilisée avec lopérateur IN
Une sous-requête utilisée avec IN
renvoie un ensemble de zéro ou plusieurs valeurs. Une fois que la sous-requête a renvoyé des valeurs, la requête externe les utilise.
La requête suivante recherche les noms de tous les vélos de montagne et de vélos de route vendus par les magasins de vélos.
Cette requête est évaluée en deux étapes:
- Tout dabord, la requête interne renvoie une liste de numéros didentification de catégorie qui correspondent aux noms
Mountain Bikes
etcode
Vélos de route. - Deuxièmement, ces valeurs sont remplacées dans la requête externe qui recherche les noms de produits dont le numéro didentification de catégorie correspond à lune des valeurs de la liste.
La sous-requête SQL Server est utilisée avec lopérateur ANY
La sous-requête est introduite avec lopérateur ANY
a la syntaxe suivante:
Code language: SQL (Structured Query Language) (sql)
En supposant que la sous-requête renvoie une liste de valeurs v1, v2,… vn. Lopérateur ANY
renvoie TRUE
si lune des paires de comparaison (scalar_expression
, vi) évalue à TRUE
; sinon, elle renvoie FALSE
.
Par exemple, la requête suivante recherche les produits dont les prix catalogue sont supérieurs ou égaux au prix catalogue moyen de toute marque de produit .
Pour chaque marque, la sous-requête trouve le prix catalogue maximum. La requête externe utilise ces prix maximaux et détermine quel prix catalogue de produit individuel est supérieur ou égal au prix catalogue maximum de toute marque.
La sous-requête SQL Server est utilisée avec lopérateur ALL
Le ALL
a la même syntaxe que lopérateur ANY
:
Code language: SQL (Structured Query Language) (sql)
Lopérateur ALL
renvoie TRUE
si toutes les paires de comparaison (scalar_expression
, vi) évaluent à TRUE
; sinon, elle renvoie FALSE
.
La requête suivante recherche les produits dont le prix catalogue est supérieur ou égal au prix catalogue moyen renvoyé par la sous-requête:
La sous-requête SQL Server est utilisée avec EXISTS ou NOT EXISTANT
Ce qui suit illustre la syntaxe dune sous-requête introduite avec lopérateur EXISTS
:
Code language: SQL (Structured Query Language) (sql)
Lopérateur EXISTS
renvoie TRUE
si la sous-requête renvoie des résultats; sinon, il renvoie FALSE
.
Par contre, le NOT EXISTS
est opposé au EXISTS
.
La requête suivante recherche les clients qui ont acheté des produits en 2017:
Si vous utilisez NOT EXISTS
au lieu de EXISTS
, vous pouvez trouver les clients qui nont acheté aucun produit en 2017.
Sous-requête SQL Server dans la clause FROM
Supposons que vous souhaitiez trouver la moyenne de la somme des commandes de tous les commerciaux. Pour ce faire, vous pouvez dabord trouver le nombre de commandes par personnel:
Ensuite, vous pouvez appliquer la fonction AVG()
à cet ensemble de résultats. Puisquune requête renvoie un jeu de résultats qui ressemble à une table virtuelle, vous pouvez placer la requête entière dans la clause FROM
dune autre requête comme celle-ci:
La requête que vous placez dans le FROM
doit avoir un alias de table. Dans cet exemple, nous avons utilisé le t comme alias de table pour la sous-requête. Pour obtenir le résultat final, SQL Server exécute les étapes suivantes:
- Exécutez la sous-requête dans la clause
FROM
. - Utilisez le résultat de la sous-requête et exécutez la requête externe.
Dans ce didacticiel, vous avez découvert le concept de sous-requête SQL Server et comment utiliser divers types de sous-requête pour interroger des données.