Yahoo Web Search

Search results

  1. Dans le langage SQL une sous-requête (aussi appelé “requête imbriquée” ou “requête en cascade”) consiste à exécuter une requête à l’intérieur d’une autre requête. Une requête imbriquée est souvent utilisée au sein d’une clause WHERE ou de HAVING pou remplacer une ou plusieurs constante.

  2. People also ask

    • Vue d’ensemble
    • Notions de base de la sous-requête
    • Règles de sous-requête
    • Qualifier les noms de colonnes dans les sous-requêtes
    • Plusieurs niveaux d’imbrication
    • Sous-requêtes corrélées
    • Types de sous-requête

    S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

    Une sous-requête est une requête qui est imbriquée dans une instruction SELECT, INSERT, UPDATE ou DELETE, ou dans une autre sous-requête.

    Cet article requiert l'échantillon de base de données AdventureWorks, que vous pouvez télécharger à partir de la page d'accueil des AdventureWorks2022échantillons et Projects de communautés Microsoft SQL Server.

    Une sous-requête peut être utilisée partout où une expression est autorisée. Dans cet exemple, une sous-requête est utilisée comme expression de colonne nommée MaxUnitPrice dans une SELECT instruction.

    Une sous-requête est également appelée « requête interne » ou « sélection interne » et l'instruction qui la contient est aussi appelée « requête externe » ou « sélection externe ».

    De nombreuses instructions Transact-SQL qui incluent des sous-requêtes peuvent également être formulées en tant que jointures. D'autres questions peuvent uniquement être posées par le biais de sous-requêtes. Dans Transact-SQL, il n’existe généralement aucune différence de performances entre une instruction qui inclut une sous-requête et une version sémantiquement équivalente qui ne le fait pas. Pour plus d’informations architecturales sur la façon dont SQL Server traite les requêtes, consultez traitement des instructions SQL. Toutefois, lorsque vous devez vérifier l'existence, une jointure offre de meilleures performances. En effet, la requête imbriquée doit être traitée pour chaque résultat de la requête externe de façon à éliminer les doublons. Dans de tels cas, une jointure donnera de meilleurs résultats.

    L’exemple suivant montre à la fois une sous-requête SELECT et une jointure SELECT qui retournent le même jeu de résultats et le même plan d’exécution :

    Une sous-requête imbriquée dans l'instruction SELECT externe comporte les éléments suivants :

    •Une requête SELECT standard constituée des éléments standard d’une liste de sélection.

    •Une clause FROM standard comportant les noms d’une ou de plusieurs tables ou vues.

    Une sous-requête est soumise aux restrictions suivantes :

    •La liste de sélection d’une sous-requête introduite par un opérateur de comparaison ne peut contenir qu’une seule expression ou qu’un seul nom de colonne (sauf quand EXISTS et IN opèrent respectivement sur SELECT * ou sur une liste).

    •Si la clause WHERE d’une requête externe comprend un nom de colonne, ce dernier doit pouvoir être joint à la colonne spécifiée dans la liste de sélection de la sous-requête.

    •Les types de données ntext, texte et image ne peuvent pas être utilisés dans la liste de sélection des sous-requêtes.

    •Étant donné qu’ils doivent retourner une valeur unique, les sous-requêtes introduites par un opérateur de comparaison non modifié (un opérateur de comparaison non suivi du mot clé ANY ou ALL) ne peuvent pas inclure GROUP BY et HAVING clauses.

    •Le DISTINCT mot clé ne peut pas être utilisé avec les sous-requêtes qui incluent GROUP BY.

    Dans l’exemple suivant, la colonne BusinessEntityID indiquée dans la clause WHERE de la requête externe est implicitement qualifiée par le nom de table figurant dans la clause FROM de la requête externe, (Sales.Store). La référence à la colonne CustomerID dans la liste de sélection de la sous-requête est qualifiée par la clause FROM de la sous-requête, c’est-à-dire par la table Sales.Customer.

    En règle générale, les noms de colonne précisés dans une instruction sont implicitement qualifiés par la table spécifiée dans la clause FROM appartenant au même niveau d’imbrication. Si une colonne n’existe pas dans la table référencée dans la FROM clause d’une sous-requête, elle est implicitement qualifiée par la table référencée dans la FROM clause de la requête externe.

    Voici à quoi ressemble la requête avec ces hypothèses implicites spécifiées :

    Il n’est jamais incorrect d’indiquer explicitement le nom de la table, et il est toujours possible de remplacer les hypothèses implicites relatives aux noms de tables avec des qualifications explicites.

    Important

    Si une colonne est référencée dans une sous-requête qui n’existe pas dans la table référencée par la clause FROM de la sous-requête, mais qu’elle existe dans une table référencée par la clause FROM de la requête externe, la requête s’exécute sans erreur. SQL Server qualifie implicitement la colonne de la sous-requête avec le nom de la table dans la requête externe.

    Une sous-requête peut imbriquer une ou plusieurs autres sous-requêtes. Le nombre de sous-requêtes imbriquées dans une instruction est illimité.

    La requête ci-après recherche les noms des employés qui sont également vendeurs.

    Voici le jeu de résultats obtenu.

    La requête la plus profonde retourne les numéros d'identification des vendeurs. La requête du niveau supérieur suivant est évaluée en fonction de ces numéros d'identification de vendeurs et retourne les numéros d'identification des employés. Enfin, la requête externe se sert des numéros d'identification des contacts pour rechercher les noms des employés.

    De nombreuses requêtes peuvent être évaluées en exécutant une fois la sous-requête et en entrant la ou les valeurs obtenues dans la clause WHERE de la requête externe. Dans les requêtes qui contiennent une sous-requête en corrélation (aussi appelée sous-requête répétitive), la sous-requête dépend de la requête externe pour ses valeurs. Cela signifie que la sous-requête s'exécute de manière répétitive, une fois pour chaque ligne que la requête externe pourrait sélectionner. Cette requête récupère une instance du prénom et du nom de chaque employé pour lequel la prime est égale à 5 000 dans la table SalesPerson et dont le numéro d’identification se trouve dans les tables Employee et SalesPerson.

    Voici le jeu de résultats obtenu.

    La sous-requête précédente dans cette instruction ne peut pas être évaluée indépendamment de la requête externe. Elle a besoin d’une valeur pour Employee.BusinessEntityID, mais cette valeur change lorsque SQL Server examine différentes lignes dans Employee. C’est exactement la façon dont cette requête est évaluée : SQL Server considère chaque ligne de la table Employee pour l’inclusion dans les résultats en remplaçant la valeur de chaque ligne dans la requête interne. Par exemple, si SQL Server examine d’abord la ligne, Syed Abbasla variable Employee.BusinessEntityID prend la valeur 285, que SQL Server remplace dans la requête interne. Ces deux exemples de requêtes représentent une décomposition de l’exemple précédent avec la sous-requête corrélée.

    Le résultat est 0,00 (Syed Abbas n’a pas reçu de bonus parce qu’il ne s’agit pas d’une personne de vente), de sorte que la requête externe est évaluée à :

    Étant donné que cette valeur est false, la ligne pour Syed Abbas laquelle elle n’est pas incluse dans les résultats de l’exemple de requête précédent avec la sous-requête corrélée. Suivez la même procédure pour la ligne de Pamela Ansman-Wolfe. Vous voyez que cette ligne est incluse dans les résultats, car WHERE 5000 IN (5000) elle inclut des résultats.

    Les sous-requêtes corrélées peuvent aussi inclure des fonctions table dans la clause FROM en référençant des colonnes d’une table dans la requête externe sous la forme d’argument de cette fonction table. Dans ce cas, pour chaque ligne de la requête externe, la fonction table est évaluée en fonction de la sous-requête.

    Les sous-requêtes peuvent être spécifiées dans de nombreux endroits :

    •Avec des alias. Pour plus d’informations, consultez Sous-requêtes avec des alias de table.

    •Avec IN ou NOT IN. Pour plus d’informations, consultez Sous-requêtes introduites par IN et Sous-requêtes introduites par NOT IN.

    •Dans les instructions UPDATE, DELETE et INSERT. Pour plus d’informations, consultez Sous-requêtes dans les instructions UPDATE, DELETE et INSERT.

    •Avec des opérateurs de comparaison. Pour plus d’informations, consultez Sous-requêtes avec des opérateurs de comparaison.

    •Avec ANY, SOME ou ALL. Pour plus d’informations, consultez Les opérateurs de comparaison modifiés par ANY, SOME ou ALL.

  3. Jul 4, 2022 · Voici 5 exemples de sous-requêtes SQL montrant comment utiliser des sous-requêtes scalaires, multirangs et corrélées dans les clauses WHERE, FROM, JOIN et SELECT.

  4. Jan 10, 2024 · Besoin de pratiquer les sous-requêtes SQL ? Découvrez comment intégrer des requêtes dans des requêtes et comment effectuer des extractions de données complexes en utilisant des sous-requêtes à plusieurs niveaux.

  5. Jul 4, 2022 · Cet article décrit ce qu'est une sous-requête et à quoi ressemblent ces instructions utiles. Nous aborderons des exemples de base avec les opérateurs IN, EXISTS, ANY et ALL, nous examinerons les sous-requêtes dans les clauses FROM et WHERE et nous étudierons la différence entre les sous-requêtes corrélées et imbriquées.

  6. Nov 13, 2023 · E. Utilisation de sous-requêtes corrélées. Une sous-requête corrélée est une requête dont les valeurs dépendent de la requête externe. Cette requête peut être exécutée de manière répétée, une fois pour chaque ligne susceptible d'être sélectionnée par la requête externe.

  7. Découvrez comment utiliser les sous-requêtes pour combiner plusieurs instructions SELECT et composer des requêtes imbriquées.

  1. People also search for