Aninhar uma consulta dentro de outra consulta ou em uma expressão utilizando uma subconsulta

Importante :  Este artigo foi traduzido por um sistema de tradução automática, leia o aviso de isenção de responsabilidade. Para sua referência, veja a versão em inglês deste artigo aqui.

Às vezes, convém usar os resultados de uma consulta como um campo em outra consulta ou como um critério para um campo de consulta. Por exemplo, suponhamos que que você deseje ver o intervalo entre os pedidos de cada um dos seus produtos. Para criar uma consulta que mostre esse intervalo, você precisará comparar cada data de pedido com as outras datas de pedido desse produto. A comparação das datas de pedido também requer uma consulta. Você pode aninhar essa consulta dentro da consulta principal usando uma subconsulta.

Você pode gravar uma subconsulta em uma expressão ou em uma instrução SQL no modo SQL.

Observação :  Este artigo não se aplica aos aplicativos do Access – o novo tipo de banco de dados que você cria com o Access e publica online. Consulte Criar um aplicativo do Access para saber mais.

Neste artigo

Usar os resultados de uma consulta como um campo em outra consulta

Usar uma subconsulta como critério para um campo de consulta

Palavras-chave SQL comuns que podem ser utilizadas em uma subconsulta

Usar os resultados de uma consulta como um campo em outra consulta

Você pode usar uma subconsulta como um alias de campo. Use uma subconsulta como um alias de campo quando desejar usar os resultados de subconsulta como um campo em sua consulta principal.

Observação : Uma subconsulta utilizada como alias de campo não pode retornar mais de um campo.

Você pode usar um alias de campo de subconsulta para exibir os valores que dependem de outros valores na linha atual, o que não é possível sem uma subconsulta.

Por exemplo, vamos voltar para o exemplo em que você deseja ver o intervalo entre os pedidos de cada um dos seus produtos. Para determinar esse intervalo, você precisará comparar cada data de pedido com as outras datas de pedido desse produto. É possível criar uma consulta que mostre essas informações usando o modelo de banco de dados do Northwind.

Mostrar como configurar o Northwind

  1. Na guia Arquivo, clique em Novo.

  2. Em Modelos Disponíveis, clique em Modelos de Exemplo.

  3. Clique em Northwind e em Criar.

  4. Siga as instruções na página Northwind Traders (na guia de objeto Tela de Inicialização) para abrir o banco de dados e então feche a janela Caixa de Diálogo de Logon.

  1. Na guia Criar, no grupo Consultas, clique em Design da Consulta.

  2. Na caixa de diálogo Mostrar Tabela, clique em Consultas e, em seguida, clique duas vezes em Pedidos de Produto.

  3. Feche a caixa de diálogo Mostrar Tabela.

  4. Clique duas vezes nos campos ID do Produto e Data do Pedido para adicioná-los à grade de design da consulta.

  5. Na linha Classificar da coluna ID do Produto da grade, selecione Crescente.

  6. Na linha Classificar da coluna Data do Pedido da grade, selecione Decrescente.

  7. Na terceira coluna da grade, clique com o botão direito do mouse na linha Campo e, em seguida, clique em Zoom no menu de atalho.

  8. Na caixa de diálogo Zoom, digite ou cole a seguinte expressão:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

Essa expressão é a subconsulta. Para cada linha, a subconsulta seleciona a data de pedido mais recente, que é menos recente que a data de pedido já associada à linha. Observe como a palavra-chave AS deve ser usada para criar um alias de tabela, a fim de que você possa comparar valores da subconsulta aos valores contidos na linha atual da consulta principal.

  1. Na quarta coluna da grade, na linha Campo, digite a expressão a seguir:

    Interval: [Order Date]-[Prior Date]

Essa expressão calcula o intervalo entre cada data de pedido e a data de pedido anterior desse produto, utilizando o valor da data anterior que definimos através de uma subconsulta.

  1. Na guia Design, no grupo Resultados, clique em Executar.

    1. A consulta é executada e exibe uma lista de nomes de produto, datas de pedido, datas de pedido anterior e o intervalo entre as datas de pedido. Os resultados são classificados primeiro pela ID do produto (em ordem crescente) e, em seguida, pela data do pedido (em ordem decrescente).

    2. Observação : Como ID do Produto é um campo de pesquisa, por padrão, o Access exibe os valores de pesquisa (neste caso, o nome do produto), em vez das IDs de produto reais. Embora isso altere os valores exibidos, ele não altera a ordem de classificação.

  2. Feche o banco de dados Northwind.

Início da página

Usar uma subconsulta como critério para um campo de consulta

Você pode usar uma subconsulta como critério de campo. Use uma subconsulta como critério campo quando desejar usar os resultados da subconsulta para limitar os valores que o campo exibe.

Por exemplo, suponhamos que você deseje revisar a lista de pedidos processados pelos funcionários que não são representantes de vendas. Para gerar essa lista, você precisará comparar a ID de funcionário de cada pedido com uma lista de IDs dos funcionários que não são representantes de vendas. Para criar essa lista e usá-la como um critério de campo, use uma subconsulta, conforme mostrado no procedimento a seguir:

  1. Abra o banco de dados Northwind e habilite seu conteúdo.

  2. Feche o formulário de logon.

  3. Na guia Criar, no grupo Outros, clique em Design da Consulta.

  4. Na caixa de diálogo Mostrar Tabela, na guia Tabelas, clique duas vezes em Pedidos e em Funcionários

  5. Feche a caixa de diálogo Mostrar Tabela.

  6. Na tabela Pedidos, clique duas vezes nos campos ID do Funcionário, ID do Pedido e Data do Pedido para adicioná-los à grade de design da consulta. Na tabela Funcionários, clique duas vezes no campo Cargo para adicioná-lo à grade de design.

  7. Clique com o botão direito do mouse na linha Critérios da coluna ID do Funcionário e, em seguida, clique em Zoom no menu de atalho.

  8. Na caixa Zoom, digite ou cole a seguinte expressão:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Essa é a subconsulta. Ela seleciona todas as IDs dos funcionários que não são representantes de venda e fornece esse conjunto de resultados à consulta principal. Em seguida, a consulta principal verifica se as IDs de funcionário contidas na tabela Pedidos estão no conjunto de resultados.

  9. Na guia Design, no grupo Resultados, clique em Executar.

    A consulta é executada e os resultados da consulta exibem uma lista dos pedidos processados pelos funcionários que não são representantes de vendas.

Início da página

Palavras-chave SQL comuns que podem ser utilizadas em uma subconsulta

Existem várias palavras-chave SQL que podem ser utilizadas em uma subconsulta:

Observação : Esta lista não é completa. Você pode usar qualquer palavra-chave SQL válida em uma subconsulta, excluindo as palavras-chave de definição de dados.

  • ALL    Use ALL em uma cláusula WHERE para recuperar linhas que satisfaçam a condição quando comparadas a todas as linhas retornadas pela subconsulta.

    Por exemplo, suponhamos que você esteja analisando dados do aluno em uma faculdade. Os alunos devem manter uma média mínima, que varia de uma matéria principal para outra. As matérias principais e as médias mínimas são armazenadas em uma tabela chamada Matérias Principais, e as informações relevantes do aluno são armazenadas em uma tabela chamada Registros_Aluno.

    Para ver uma lista de matérias principais (e suas médias mínimas) nas quais cada aluno com essa matéria principal ultrapassa a média mínima, use a seguinte consulta:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Use ANY em um cláusula WHERE para recuperar linhas que satisfaçam a condição quando comparadas a, pelo menos, uma das linhas retornadas pela subconsulta.

    Por exemplo, suponhamos que você esteja analisando dados do aluno em uma faculdade. Os alunos devem manter uma média mínima, que varia de uma matéria principal para outra. As matérias principais e as médias mínimas são armazenadas em uma tabela chamada Matérias Principais, e as informações relevantes do aluno são armazenadas em uma tabela chamada Registros_Aluno.

    Para ver uma lista de matérias principais (e suas médias mínimas) para as quais um aluno com essa matéria principal não atinge a média mínima, use a seguinte consulta:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Observação : Você também pode usar a palavra-chave SOME para o mesmo fim. A palavra-chave SOME é sinônimo de ANY.

  • EXISTS    Use EXISTS em uma cláusula WHERE para indicar que uma subconsulta deve retornar, pelo menos, uma linha. Você também precede EXISTS com NOT para indicar que uma subconsulta não deve retornar nenhuma linha.

    Por exemplo, a seguinte consulta retorna uma lista de produtos que são encontrados em, pelo menos, um pedido existente:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Usando NOT EXISTS, a consulta retornará uma lista dos produtos que não são encontrados em, pelo menos, um pedido existente:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Use IN em uma cláusula WHERE para verificar se um valor na linha atual da consulta principal é parte do conjunto retornado pela subconsulta. Você também pode preceder IN com NOT para verificar se um valor na linha atual da consulta principal não é parte do conjunto retornado pela subconsulta.

    Por exemplo, a seguinte consulta retorna uma lista dos pedidos (com datas de pedido) processados por funcionários que não são representantes de vendas:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Usando NOT IN, você poderá escrever a mesma consulta desta forma:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Início da página

Observação : Aviso de Isenção de Tradução Automática: Este artigo foi traduzido por computador, sem intervenção humana. A Microsoft oferece essas traduções automáticas para ajudar as pessoas que não falam inglês a aproveitar os textos escritos sobre produtos, serviços e tecnologias da Microsoft. Como este artigo foi traduzido automaticamente, é possível que contenha erros de vocabulário, sintaxe ou gramática.

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Office Insider

Essas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×