Se connecter avec Microsoft
S'identifier ou créer un compte.
Bonjour,
Sélectionnez un autre compte.
Vous avez plusieurs comptes
Choisissez le compte avec lequel vous voulez vous connecter.

Parfois, vous pouvez utiliser les résultats d’une requête comme champ dans une autre requête ou comme critère pour un champ de requête. Par exemple, supposons que vous souhaitiez voir l’intervalle entre les commandes pour chacun de vos produits. Pour créer une requête qui affiche cet intervalle, vous devez comparer chaque date de commande à d’autres dates de commande pour ce produit. La comparaison de ces dates de commande nécessite également une requête. Vous pouvez imbriquer cette requête à l’intérieur de votre requête main à l’aide d’un sous-requête.

Vous pouvez écrire une sous-requête dans un expression ou dans une instruction langage SQL (SQL) dans mode SQL.

Contenu de cet article

Utiliser les résultats d’une requête comme champ dans une autre requête

Vous pouvez utiliser une sous-requête comme alias de champ. Utilisez une sous-requête comme alias de champ lorsque vous souhaitez utiliser les résultats de la sous-requête en tant que champ dans votre requête main.

Remarque : Une sous-requête que vous utilisez comme alias de champ ne peut pas retourner plusieurs champs.

Vous pouvez utiliser un alias de champ de sous-requête pour afficher des valeurs qui dépendent d’autres valeurs de la ligne active, ce qui n’est pas possible sans utiliser une sous-requête.

Par exemple, revenons à l’exemple où vous souhaitez voir l’intervalle entre les commandes pour chacun de vos produits. Pour déterminer cet intervalle, vous devez comparer chaque date de commande à d’autres dates de commande pour ce produit. Vous pouvez créer une requête qui affiche ces informations à l’aide du modèle de base de données Northwind.

  1. Sous l’onglet Fichier, cliquez sur Nouveau.

  2. Sous Modèles disponibles, cliquez sur Exemples de modèles.

  3. Cliquez sur Northwind, puis sur Créer.

  4. Suivez les instructions fournies dans la page Les Comptoirs (sous l’onglet objet Écran Démarrage) pour ouvrir la base de données, puis fermez la fenêtre Boîte de dialogue de connexion.

  5. Sous l’onglet Créer, dans le groupe Requêtes, cliquez sur Création de requête.

  6. Cliquez sur l’onglet Requêtes , puis double-cliquez sur Commandes de produits.

  7. Double-cliquez sur les champs ID de produit et Date de commande pour les ajouter à la grille de conception de requête.

  8. Dans la ligne Trier de la colonne ID de produit de la grille, sélectionnez Croissant.

  9. Dans la ligne Trier de la colonne Date de l’ordre de la grille, sélectionnez Décroissant.

  10. Dans la troisième colonne de la grille, cliquez avec le bouton droit sur la ligne Champ , puis cliquez sur Zoom dans le menu contextuel.

  11. Dans la boîte de dialogue Zoom , tapez ou collez l’expression suivante :

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    Cette expression est la sous-requête. Pour chaque ligne, la sous-requête sélectionne la date de commande la plus récente qui est moins récente que la date de commande qui est déjà associée à la ligne. Notez que vous utilisez le mot clé AS pour créer un alias de table, afin de pouvoir comparer les valeurs de la sous-requête aux valeurs de la ligne actuelle de la requête main.

  12. Dans la quatrième colonne de la grille, dans la ligne Champ , tapez l’expression suivante :

    Interval: [Order Date]-[Prior Date]

    Cette expression calcule l’intervalle entre chaque date de commande et la date de commande antérieure pour ce produit, en utilisant la valeur de la date antérieure que nous avons définie à l’aide d’une sous-requête.

  13. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

    1. La requête s’exécute et affiche une liste de noms de produits, de dates de commande, de dates de commande antérieures et d’intervalle entre les dates de commande. Les résultats sont triés d’abord par ID de produit (dans l’ordre croissant), puis par Date de commande (dans l’ordre décroissant).

    2. Remarque : Étant donné que l’ID de produit est un champ de recherche, par défaut, Access affiche les valeurs de recherche (dans ce cas, le nom du produit), plutôt que les ID de produit réels. Bien que cela change les valeurs qui s’affichent, cela ne change pas l’ordre de tri.

  14. Fermez la base de données Northwind.

Haut de la page

Utiliser une sous-requête comme critère pour un champ de requête

Vous pouvez utiliser une sous-requête comme critère de champ. Utilisez une sous-requête comme critère de champ lorsque vous souhaitez utiliser les résultats de la sous-requête pour limiter les valeurs affichées par le champ.

Par exemple, supposons que vous souhaitiez passer en revue une liste de commandes qui ont été traitées par des employés qui ne sont pas des représentants commerciaux. Pour générer cette liste, vous devez comparer l’ID d’employé pour chaque commande avec une liste des ID d’employé pour les employés qui ne sont pas des représentants commerciaux. Pour créer cette liste et l’utiliser comme critère de champ, vous utilisez une sous-requête, comme illustré dans la procédure suivante :

  1. Ouvrez Northwind.accdb et activez son contenu.

  2. Fermez le formulaire de connexion.

  3. Sous l’onglet Créer, dans le groupe Autre, cliquez sur Création de requête.

  4. Sous l’onglet Tables , double-cliquez sur Commandes et employés.

  5. Dans la table Commandes, double-cliquez sur le champ ID d’employé , sur le champ ID de commande et sur le champ Date de la commande pour les ajouter à la grille de conception de requête. Dans la table Employés, double-cliquez sur le champ Titre du poste pour l’ajouter à la grille de conception.

  6. Cliquez avec le bouton droit sur la ligne Critères de la colonne ID d’employé, puis cliquez sur Zoom dans le menu contextuel.

  7. Dans la zone Zoom , tapez ou collez l’expression suivante :

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Il s’agit de la sous-requête. Il sélectionne tous les ID d’employé pour lesquels l’employé n’a pas de titre de représentant commercial et fournit ce jeu de résultats à la requête main. La requête main vérifie ensuite si les ID d’employés de la table Orders figurent dans le jeu de résultats.

  8. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

    La requête s’exécute et les résultats de la requête affichent une liste des commandes qui ont été traitées par des employés qui ne sont pas des représentants commerciaux.

Haut de la page

Mots clés SQL courants que vous pouvez utiliser avec une sous-requête

Il existe plusieurs mots clés SQL que vous pouvez utiliser avec une sous-requête :

Remarque : Cette liste n’est pas exhaustive. Vous pouvez utiliser n’importe quelle mot clé SQL valide dans une sous-requête, à l’exception des mots clés de définition de données.

  • TOUS    Utilisez ALL dans une clause WHERE pour récupérer les lignes qui répondent à la condition par rapport à chaque ligne retournée par la sous-requête.

    Par exemple, supposons que vous analysez les données des étudiants d’un collège. Les étudiants doivent maintenir une GPA minimale, qui varie d’une majeure à l’autre. Les majors et leurs APM minimum sont stockés dans une table nommée Majors, et les informations pertinentes sur les étudiants sont stockées dans une table appelée Student_Records.

    Pour afficher la liste des majors (et leurs APM minimum) pour lesquelles chaque étudiant avec cette majeure dépasse la GPA minimale, vous pouvez utiliser la requête suivante :

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • TOUT    Utilisez ANY dans une clause WHERE pour récupérer des lignes qui répondent à la condition par rapport à au moins une des lignes retournées par la sous-requête.

    Par exemple, supposons que vous analysez les données des étudiants d’un collège. Les étudiants doivent maintenir une GPA minimale, qui varie d’une majeure à l’autre. Les majors et leurs APM minimum sont stockés dans une table nommée Majors, et les informations pertinentes sur les étudiants sont stockées dans une table appelée Student_Records.

    Pour afficher la liste des majors (et leurs APM minimum) pour lesquels tout étudiant avec cette majeure ne respecte pas la GPA minimale, vous pouvez utiliser la requête suivante :

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Remarque : Vous pouvez également utiliser l’mot clé SOME dans le même but ; le mot clé SOME est synonyme de ANY.

  • EXISTS     Utilisez EXISTS dans une clause WHERE pour indiquer qu’une sous-requête doit retourner au moins une ligne. Vous pouvez également faire précéder EXISTS de NOT pour indiquer qu’une sous-requête ne doit retourner aucune ligne.

    Par exemple, la requête suivante retourne une liste de produits qui se trouvent dans au moins une commande existante :

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    À l’aide de NOT EXISTS, la requête retourne une liste de produits qui ne se trouvent pas dans au moins une commande existante :

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • DANS    Utilisez IN dans une clause WHERE pour vérifier qu’une valeur de la ligne actuelle de la requête main fait partie du jeu retourné par la sous-requête. Vous pouvez également faire précéder IN de NOT pour vérifier qu’une valeur dans la ligne actuelle de la requête main ne fait pas partie de l’ensemble retourné par la sous-requête.

    Par exemple, la requête suivante retourne une liste de commandes (avec des dates de commande) qui ont été traitées par des employés qui ne sont pas des représentants commerciaux :

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    En utilisant NOT IN, vous pouvez écrire la même requête de cette façon :

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Haut de la page

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.

Les communautés vous permettent de poser des questions et d'y répondre, de donner vos commentaires et de bénéficier de l'avis d'experts aux connaissances approfondies.

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?
En cliquant sur Envoyer, vos commentaires seront utilisés pour améliorer les produits et services de Microsoft. Votre administrateur informatique sera en mesure de collecter ces données. Déclaration de confidentialité.

Nous vous remercions de vos commentaires.

×