Como: Criar consultas usando algo além do mais uma tabela
Sempre que você escrever uma consulta de recuperação, articular quais colunas deseja, quais 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 associadas. Mas os dados originais podem vir de fontes diferentes de tabelas. Na verdade, podem vir de exibições, consultas, sinônimos ou funções definidas pelo usuário que retornam uma tabela.
Usando um modo de exibição no lugar 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" no 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 com isso:
SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology'
Similarmente, um modo de exibição pode participar em uma operação JOIN. Por exemplo, você pode encontrar as vendas de livros caros simplesmente associando a tabela de vendas à exibição LivrosCaros. A SQL resultante pode parecer com isso:
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 para uma consulta, consulte Como: Adicionar tabelas, consultas.
Usando uma consulta no lugar de uma tabela.
Você pode selecionar linhas de uma consulta. Por exemplo, suponha que você já tenha escrito uma consulta para recuperar títulos e identificadores de livros com co-autoria — os livros de 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
Você pode então escrever outra consulta que se baseia nesse resultado. Por exemplo, você pode escrever uma consulta que recupera os livros de psicologia com co-autoria. Para escrever essa nova consulta, você pode usar a consulta existente como a fonte de dados da nova consulta. A SQL resultante pode parecer com isso:
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 destacado mostra a consulta existente como a 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 JOIN. Por exemplo, você pode encontrar as vendas de livros com co-autoria caros simplesmente associando a exibição LivrosCaros com a consulta recuperando os livros com co-autoria. A SQL resultante pode parecer com isso:
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, consultas.
Usando uma função definida pelo usuário no lugar de uma tabela.
Em 2000 de SQL Server ou superior, você pode criar uma função definida pelo usuário que retorna uma tabela. Tais funções são úteis para executar lógica de procedimento ou complexa.
Por exemplo, suponha que a tabela de funcionários contenha uma coluna adicional gerente_funcionário_id_func e que exista uma chave externa de gerente _ _ id_func para funcionário_id_func. Dentro de 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 que contém uma linha para cada funcionário trabalhar dentro a hierarquia organizacional do Gerenciador de alto nível específico. Você pode chamar o fn_ObterA de EquipeInteira de função e estruturá-la para levar a uma variável de entrada — a id_func do gerente cuja equipe que você deseja recuperar.
Você pode escrever uma consulta que usa a função fn_ObterA EquipeInteira como uma fonte de dados. A SQL resultante pode parecer com isso:
SELECT *
FROM
fn_GetWholeTeam ('VPA30890F')
"VPA30890F" é a id_func do gerente cuja organização você deseja recuperar. Para obter mais informações sobre como adicionar uma função definida pelo usuário para uma consulta, consulte Como: Incluir funções definidas pelo usuário em consultas e Como: Adicionar tabelas, consultas. Para obter uma descrição completa das funções definidas pelo usuário, consulte a documentação do SQL Server.
Consulte também
Outros recursos
Trabalhando com procedimentos armazenados e funções definidas pelo usuário