Compartilhar via


Criar consultas usando algo além de uma tabela (Visual Database Tools)

Aplica-se a:SQL Server

Sempre que você escreve uma consulta de recuperação, você articula as colunas e as linhas que você quer, e onde o processador de consulta deve procurar os dados originais. Tipicamente, esses dados originais consistem em uma tabela ou várias tabelas unidas. Mas os dados originais podem vir de fontes diferentes de tabelas. Na realidade, podem vir de exibições, consultas, sinônimos ou funções definidas pelo usuário que retornam uma tabela.

Usar uma exibição no lugar de uma tabela

Você pode selecionar linhas de uma exibição. Por exemplo, suponha que o banco de dados inclui uma exibição chamada "ExpensiveBooks" na qual cada linha descreve um título cujo preço excede 19,99. A definição da exibição pode ter esta aparência:

SELECT *
FROM titles
WHERE price > 19.99;

Você pode selecionar os livros caros de psicologia selecionando apenas os livros de psicologia da exibição ExpensiveBooks. O SQL resultante pode ter esta aparência:

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';

Da mesma forma, um modo de exibição pode participar de uma JOIN operação. Por exemplo, você pode achar as vendas de livros caros unindo somente a tabela de vendas à exibição ExpensiveBooks. O SQL resultante pode ter esta aparência:

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

Para obter mais informações sobre como adicionar uma exibição a uma consulta, consulte Adicionar tabelas a consultas (Visual Database Tools).

Usar uma consulta no lugar de uma tabela

Você pode selecionar linhas de uma consulta. Por exemplo, suponha você já escreveu uma consulta que recupera títulos e identificadores dos livros de coautoria, ou seja, livros com mais de um autor. O SQL pode ter esta aparência:

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;

Depois, você pode escrever outra consulta com base nesse resultado. Por exemplo, é possível escrever uma consulta que recupera os livros de psicologia com coautoria. Para escrever essa consulta nova, você pode usar a consulta existente como fonte de dados da nova consulta. O SQL resultante pode ter esta aparência:

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';

O texto enfatizado mostra a consulta existente usada como fonte de dados da nova consulta. A nova consulta usa um alias ("co_authored_books") para a consulta existente. Para obter mais informações sobre aliases, consulte Criar aliases de tabela (Visual Database Tools) e Criar aliases de coluna (Visual Database Tools).

Da mesma forma, uma consulta pode participar de uma JOIN operação. Por exemplo, você pode encontrar as vendas de livros caros com coautoria unindo somente a exibição ExpensiveBooks à consulta para recuperar a consulta de livros com coautoria. O SQL resultante pode ter esta aparência:

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
        )

Para obter mais informações sobre como adicionar uma consulta a uma consulta, consulte Adicionar tabelas a consultas (Visual Database Tools).

Usar uma função definida pelo usuário no lugar de uma tabela

Você pode criar uma função definida pelo usuário que retorna uma tabela. Tais funções são úteis para executar lógica complexa ou de procedimento.

Por exemplo, suponha que a tabela do funcionário contenha uma coluna employee.manager_emp_idadicional e que exista uma chave estrangeira de manager_emp_id para employee.emp_id. Em cada linha da tabela de funcionários, a manager_emp_id coluna indica o chefe do funcionário. Mais precisamente, indica o chefe emp_iddo funcionário. Você pode criar uma função definida pelo usuário que retorna a tabela contendo uma linha para cada funcionário que trabalha em uma determinada hierarquia organizacional de gerenciamento de alto nível. Você pode chamar a função fn_GetWholeTeam e projetá-la para usar uma variável de entrada , a emp_id do gerente cuja equipe você deseja recuperar.

Você pode escrever uma consulta que use a função fn_GetWholeTeam como uma fonte de dados. O SQL resultante pode ter esta aparência:

SELECT *
FROM fn_GetWholeTeam('VPA30890F');

VPA30890F é o emp_id gerente cuja organização você deseja recuperar. Para obter mais informações sobre como adicionar uma função definida pelo usuário a uma consulta, consulte Adicionar tabelas a consultas (Visual Database Tools). Para obter uma descrição completa das funções definidas pelo usuário, consulte funções definidas pelo usuário.