Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Sempre que você escreve uma consulta de recuperação, articula quais colunas deseja, quais linhas deseja e onde o processador de consultas deve encontrar os dados originais. Normalmente, esses dados originais consistem em uma tabela ou várias tabelas unidas. Mas os dados originais podem vir de outras fontes que não tabelas. Na verdade, ele pode vir de modos de exibição, consultas, sinônimos ou funções definidas pelo usuário que retornam uma tabela.
Utilizar uma vista em vez de uma tabela
Você pode selecionar linhas de uma vista. Por exemplo, suponha que o banco de dados inclua uma exibição chamada "Expensive Books", na qual cada linha descreve um título cujo preço excede 19,99. A definição 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 na visualização Expensive Books. O SQL resultante pode ter esta aparência:
SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';
Da mesma forma, uma exibição pode participar de uma JOIN operação. Por exemplo, você pode encontrar as vendas de livros caros simplesmente juntando a tabela de vendas à visualização Expensive Books. 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 um modo de 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 que você já tenha escrito uma consulta recuperando títulos e identificadores dos livros em coautoria - os 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;
Em seguida, você pode escrever outra consulta que se baseia nesse resultado. Por exemplo, você pode escrever uma consulta que recupere os livros de psicologia em coautoria. Para escrever essa nova consulta, você pode usar a consulta existente como a fonte dos 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 dos 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 em coautoria simplesmente juntando a visualização Expensive Books à consulta que recupera os livros em 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 processual.
Por exemplo, suponha que a tabela employee contenha uma coluna employee.manager_emp_idadicional e que exista uma chave estrangeira de manager_emp_id para employee.emp_id. Dentro de cada linha da tabela de funcionários, a manager_emp_id coluna indica o chefe do funcionário. Mais precisamente, indica o patrão emp_iddo empregado. Você pode criar uma função definida pelo usuário que retorna uma tabela contendo uma linha para cada funcionário que trabalha dentro da hierarquia organizacional de um determinado gerente de alto nível. Você pode chamar a função de fn_GetWholeTeam e projetá-la para tomar uma variável de entrada - a emp_id do gerente cuja equipe você deseja recuperar.
Você pode escrever uma consulta que usa a função fn_GetWholeTeam como fonte de dados. O SQL resultante pode ter esta aparência:
SELECT *
FROM fn_GetWholeTeam('VPA30890F');
VPA30890F é o emp_id 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 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.