Partilhar via


Como: Criar consultas usando algo além do mais uma tabela

Sempre que você gravar uma consulta de recuperação, você descrever quais colunas você deseja, as linhas você deseja e onde o processador de consultas deve localizar os dados originais.Normalmente, esses dados originais consistem em uma tabela ou várias tabelas unidas.Mas os dados originais podem vir de fontes diferentes de tabelas.Na verdade, ele pode vir de exibições, consultas, sinônimos ou funções definidas pelo usuário que retornam uma tabela.

Usando uma exibição em vez de uma tabela

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

SELECT *
FROM titles
WHERE price > 19.99

Você pode selecionar os livros de psicologia caros simplesmente selecionando os livros de psicologia da exibição LivrosCaros.A SQL resultante pode parecer como este:

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology'

Similarmente, um modo de exibição pode participar em uma operação unir.Por exemplo, você encontrará as vendas de livros caros simplesmente associando a tabela de vendas para o modo de exibição LivrosCaros.A SQL resultante pode parecer como este:

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

Para obter mais informações sobre como adicionar um modo de exibição a uma consulta, consulte Como: Adicionar tabelas a consultas.

Usando uma consulta no lugar de uma tabela

Você pode selecionar linhas de uma consulta.Por exemplo, suponhamos que você já criou uma consulta para recuperar títulos e identificadores de livros com co-autoria — os livros de mais de um autor.O SQL pode parecer com isso:

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

Você pode então gravar outra consulta que toma como base esse resultado.Por exemplo, você pode gravar uma consulta que recupera os livros de psicologia com co-autoria.Para escrever essa nova consulta, você pode usar a consulta existente sistema autônomo a fonte de dados da nova consulta.A SQL resultante pode parecer como este:

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
    ) 
    co_authored_books
WHERE     type = 'psychology'

O texto enfatizado mostra a consulta existente usada sistema autônomo fonte de dados da nova consulta.Observe que a nova consulta usa um alias ("livros_com_co_autoria") para a consulta existente.Para obter mais informações sobre aliases, consulte Como: Criar aliases de tabela e Como: Criar aliases de coluna.

Similarmente, uma consulta pode participar em uma operação unir.Por exemplo, você encontrará as vendas de livros com co-autoria caros simplesmente associando a exibição LivrosCaros à consulta recuperando os livros com co-autoria.A SQL resultante pode parecer como este:

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 Como: Adicionar tabelas a consultas.

Usando uma função definida pelo usuário em vez de uma tabela

No SQL servidor 2000 ou posterior, 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 de funcionários contenha uma coluna adicional gerente_funcionário_id_func e que uma chave estrangeira existe de gerente__id_func para funcionário_id_func.Em cada linha da tabela de funcionários, a coluna gerente_id_func indica o chefe do funcionário.Mais precisamente, ele indica a id_func do chefe do funcionário.Você pode criar uma função definida pelo usuário que retorna uma tabela contendo uma fileira para cada funcionário trabalhando em hierarquia organizacional um alto nível gerente determinada.Você pode chamar a função fn_GetWholeTeam e criá-la para fazer uma variável de entrada — id_emp do gerente cuja equipe deseja recuperar.

Você pode escrever uma consulta que usa a função fn_GetWholeTeam sistema autônomo uma fonte de dados.A SQL resultante pode parecer como este:

SELECT * 
FROM 
     fn_GetWholeTeam ('VPA30890F')

"VPA30890F" é a id_emp do 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 Como: Incluir funções definidas pelo usuário em consultas e Como: Adicionar tabelas a consultas. Para obter uma descrição completa das funções definidas pelo usuário, consulte a documentação do SQL servidor.

Consulte também

Outros recursos

Trabalhando com procedimentos armazenados e funções definidas pelo usuário