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 ou NOT IN
  • Avec ANY ou ALL
  • Avec EXISTS ou NOT EXISTS
  • Dans UPDATE, DELETE, ou INSERT 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:

  1. Tout dabord, la requête interne renvoie une liste de numéros didentification de catégorie qui correspondent aux noms Mountain Bikes et code Vélos de route.
  2. 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *