Partager via


Créer des requêtes à l’aide d’un élément en plus d’une table (Visual Database Tools)

s’applique à : SQL Server

Chaque fois que vous écrivez une requête de récupération, vous articulez les colonnes souhaitées, les lignes souhaitées et l’emplacement où le processeur de requêtes doit trouver les données d’origine. En règle générale, ces données d’origine se composent d’une table ou de plusieurs tables jointes. Toutefois, les données d’origine peuvent provenir de sources autres que des tables. En fait, il peut provenir de vues, de requêtes, de synonymes ou de fonctions définies par l’utilisateur qui retournent une table.

Utiliser une vue à la place d’une table

Vous pouvez sélectionner des lignes dans une vue. Par exemple, supposons que la base de données inclut une vue appelée « ExpensiveBooks », dans laquelle chaque ligne décrit un titre dont le prix dépasse 19,99. La définition d’affichage peut ressembler à ceci :

SELECT *
FROM titles
WHERE price > 19.99;

Vous pouvez sélectionner les livres de psychologie coûteux simplement en sélectionnant les livres de psychologie à partir de la vue ExpensiveBooks. Le code SQL résultant peut ressembler à ceci :

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';

De même, une vue peut participer à une JOIN opération. Par exemple, vous pouvez trouver les ventes de livres coûteux simplement en joignant la table des ventes à la vue ExpensiveBooks. Le code SQL résultant peut ressembler à ceci :

SELECT *
FROM sales
     INNER JOIN ExpensiveBooks
         ON sales.title_id = ExpensiveBooks.title_id;

Pour plus d’informations sur l’ajout d’une vue à une requête, consultez Ajouter des tables à des requêtes (Visual Database Tools).

Utiliser une requête à la place d’une table

Vous pouvez sélectionner des lignes à partir d’une requête. Par exemple, supposons que vous avez déjà écrit une requête récupérant des titres et des identificateurs des livres co-écrits , les livres avec plusieurs auteurs. Le code SQL peut ressembler à ceci :

SELECT titles.title_id,
       title,
       type
FROM titleauthor
     INNER JOIN titles
         ON titleauthor.title_id = titles.title_id
GROUP BY titles.title_id, title, type
HAVING COUNT(*) > 1;

Vous pouvez ensuite écrire une autre requête qui s’appuie sur ce résultat. Par exemple, vous pouvez écrire une requête qui récupère les livres de psychologie coécrits. Pour écrire cette nouvelle requête, vous pouvez utiliser la requête existante comme source des données de la nouvelle requête. Le code SQL résultant peut ressembler à ceci :

SELECT title
FROM (SELECT titles.title_id,
             title,
             type
      FROM titleauthor
           INNER JOIN titles
               ON titleauthor.title_id = titles.title_id
      GROUP BY titles.title_id, title, type
      HAVING COUNT(*) > 1) AS co_authored_books
WHERE type = 'psychology';

Le texte mis en évidence montre la requête existante utilisée comme source des données de la nouvelle requête. La nouvelle requête utilise un alias (« co_authored_books ») pour la requête existante. Pour plus d’informations sur les alias, consultez Créer des alias de table (Visual Database Tools) et Créer des alias de colonne (Visual Database Tools).

De même, une requête peut participer à une JOIN opération. Par exemple, vous pouvez trouver les ventes de livres coûteux co-écrits simplement en associant la vue ExpensiveBooks à la requête qui récupère les livres co-écrits. Le code SQL résultant peut ressembler à ceci :

SELECT
    ExpensiveBooks.title
FROM
    ExpensiveBooks
        INNER JOIN
        (
        SELECT
            titles.title_id,
            title,
            type
        FROM
            titleauthor
                INNER JOIN
                titles
                ON titleauthor.title_id
                =  titles.title_id
        GROUP BY
            titles.title_id,
            title,
            type
        HAVING COUNT(*) > 1
        )

Pour plus d’informations sur l’ajout d’une requête à une requête, consultez Ajouter des tables à des requêtes (Visual Database Tools).

Utiliser une fonction définie par l’utilisateur à la place d’une table

Vous pouvez créer une fonction définie par l’utilisateur qui retourne une table. Ces fonctions sont utiles pour effectuer une logique complexe ou procédurale.

Par exemple, supposons que la table employee contient une colonne supplémentaire, employee.manager_emp_idet qu’une clé étrangère existe de manager_emp_id à employee.emp_id. Dans chaque ligne de la table employé, la manager_emp_id colonne indique le patron de l’employé. Plus précisément, il indique le patron de l’employé emp_id. Vous pouvez créer une fonction définie par l’utilisateur qui retourne une table contenant une ligne pour chaque employé travaillant dans la hiérarchie organisationnelle d’un responsable général particulier. Vous pouvez appeler la fonction fn_GetWholeTeam et la concevoir pour prendre une variable d’entrée , le emp_id responsable dont vous souhaitez récupérer l’équipe.

Vous pouvez écrire une requête qui utilise la fonction fn_GetWholeTeam comme source de données. Le code SQL résultant peut ressembler à ceci :

SELECT *
FROM fn_GetWholeTeam('VPA30890F');

VPA30890F est le emp_id responsable dont vous souhaitez récupérer l’organisation. Pour plus d’informations sur l’ajout d’une fonction définie par l’utilisateur à une requête, consultez Ajouter des tables à des requêtes (Visual Database Tools). Pour obtenir une description complète des fonctions définies par l’utilisateur, consultez les fonctions définies par l’utilisateur.