Por vezes, pode querer utilizar os resultados de uma consulta como campo em outra consulta, ou como critério para um campo de consultas. Por exemplo, suponha que deseja ver o intervalo entre as encomendas de cada um dos seus produtos. Para criar uma consulta que mostre este intervalo, é necessário comparar cada data de encomenda com outras datas de encomenda para esse produto. Comparar estas datas de encomenda também requer uma consulta. Pode nidificar esta consulta dentro da sua consulta principal utilizando uma subconsulta.

Pode escrever um subquery numa expressão ou numa declaração estruturada de linguagem de consulta (SQL) em vista SQL.

Neste artigo

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

Pode usar um subquery como pseudónimo de campo. Use uma subquery como pseudónimo de campo quando pretender utilizar os resultados da sub-lostão como um campo na sua consulta principal.

Nota: Uma subquery que usa como pseudónimo de campo não pode devolver mais do que um campo.

Pode utilizar um pseudónimo de campo sub-disposto para exibir valores que dependam de outros valores na linha atual, o que não é possível sem utilizar um subquery.

Por exemplo, voltemos ao exemplo onde pretende ver o intervalo entre as encomendas de cada um dos seus produtos. Para determinar este intervalo, é necessário comparar cada data de encomenda com outras datas de encomenda para esse produto. Pode criar uma consulta que mostre esta informação utilizando o modelo de base de dados Northwind.

  1. No separador Ficheiro, clique em Novo.

  2. Nos modelos disponíveis,clique em modelos de amostra.

  3. Clique em Northwinde, em seguida, clique em Criar.

  4. Siga as indicações apresentadas na página Distribuidores Adamastor (no separador de objeto Ecrã de Arranque) para abrir a base de dados e, em seguida, feche a janela da caixa de diálogo de início de sessão.

  5. No separador Criar, no grupo Consultas, clique em Estrutura da Consulta.

  6. Clique no separador Consultas e, em seguida, clique duas vezesem Encomendas de Produto .

  7. Clique duas vezes no campo de ID do produto e no campo Data da Encomenda para os adicionar à grelha de design de consulta.

  8. Na linha Sort da coluna de ID do produto da grelha, selecione Ascendente.

  9. Na linha 'Ordenar' da coluna 'Data de Encomenda' da grelha, selecione Descendente.

  10. Na terceira coluna da grelha, clique com o botão direito na linha De Campo e, em seguida, clique em Zoom no menu de atalho.

  11. Na caixa de diálogo Zoom, escreva 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])

    Esta expressão é a sub-lomis. Para cada linha, o subquery seleciona a data de encomenda mais recente que é menos recente do que a data de encomenda que já está associada à linha. Note como utiliza a palavra-chave AS para criar um pseudónimo de tabela, para que possa comparar valores no sublote com valores na linha atual da consulta principal.

  12. Na quarta coluna da grelha, na linha de campo, escreva a seguinte expressão:

    Interval: [Order Date]-[Prior Date]

    Esta expressão calcula o intervalo entre cada data de encomenda e a data de encomenda prévia para esse produto, utilizando o valor para data anterior que definimos usando um subquery.

  13. No separador Estrutura, no grupo Resultados, clique em Executar.

    1. A consulta executa e apresenta uma lista de nomes de produto, datas de encomenda, datas de encomenda prévias e o intervalo entre datas de encomenda. Os resultados são classificados primeiro pelo ID do produto (por ordem ascendente) e depois pela Data da Encomenda (por ordem descendente).

    2. Nota: Como o ID do produto é um campo de procura, por padrão, o Access apresenta os valores de procura (neste caso, o nome do produto), em vez dos IDs do produto reais. Embora isto altere os valores que aparecem, não altera a ordem de classificação.

  14. Feche a base de dados northwind.

Início da Página

Use um subloy como critério para um campo de consulta

Pode usar um sublote como critério de campo. Utilize uma subquery como critério de campo quando pretender utilizar os resultados do sublote para limitar os valores que o campo apresenta.

Por exemplo, suponha que pretende rever uma lista de encomendas que foram processadas por funcionários que não são representantes de vendas. Para gerar esta lista, é necessário comparar a identificação do colaborador por cada encomenda com uma lista dos IDs dos empregados para funcionários que não são representantes de vendas. Para criar esta lista e usá-la como critério de campo, utilize uma subquery, como mostra o seguinte procedimento:

  1. Abra o Northwind.accdb e permita o seu conteúdo.

  2. Feche o formulário de início de sessão.

  3. No separador Criar, no grupo Outro, clique em Estrutura da Consulta.

  4. No separador Tabelas, clique duas vezes em Encomendas e Colaboradores.

  5. Na tabela Encomendas, clique duas vezes no campo ID do Empregado, no campo ID da Ordem e no campo Data da Ordem para os adicionar à grelha de design de consultas. Na tabela Empregados, clique duas vezes no campo De Título de Emprego para adicioná-lo à grelha de design.

  6. Clique com o botão direito na linha criteriosa da coluna de ID do empregado e, em seguida, clique em Zoom no menu de atalho.

  7. Na caixa Zoom, escreva ou cole a seguinte expressão:

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

    Este é o sub-lo. Seleciona todas as identificações dos empregados onde o trabalhador não tem um cargo de Representante de Vendas, e os fornecimentos que resultam definidos para a consulta principal. A consulta principal verifica então se as identidades dos empregados da tabela Encomendas estão no conjunto de resultados.

  8. No separador Estrutura, no grupo Resultados, clique em Executar.

    A consulta é e os resultados da consulta mostram uma lista de encomendas que foram processadas por funcionários que não são representantes de vendas.

Início da Página

Palavras-chave SQL comuns que pode usar com um sublotey

Existem várias palavras-chave SQL que pode usar com um subquery:

Nota: Esta lista não é exaustiva. Pode utilizar qualquer palavra-chave SQL válida numa subloca, excluindo palavras-chave de definição de dados.

  • TODOS OS    Utilize ALL numa cláusula WHERE para recuperar linhas que satisfaçam a condição quando comparadas com cada linha devolvida pelo subquery.

    Por exemplo, suponha que está a analisar dados de estudantes numa faculdade. Os alunos devem manter uma Média Mínima, que varia de major a major. Os majores e os seus GPAs mínimos estão guardados numa tabela chamada Majors, e as informações relevantes dos estudantes são armazenadas numa tabela chamada Student_Records.

    Para ver uma lista de cursos (e seus GPAs mínimos) para os quais cada aluno com esse curso excede o GPA mínimo, você pode usar 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    Utilize qualquer uma numa cláusula WHERE para recuperar linhas que satisfaçam a condição quando comparadas com pelo menos uma das linhas devolvidas pelo subquery.

    Por exemplo, suponha que está a analisar dados de estudantes numa faculdade. Os alunos devem manter uma Média Mínima, que varia de major a major. Os majores e os seus GPAs mínimos estão guardados numa tabela chamada Majors, e as informações relevantes dos estudantes são armazenadas numa tabela chamada Student_Records.

    Para ver uma lista de cursos (e seus GPAs mínimos) para os quais qualquer aluno com esse curso não cumpre o gpa mínimo, você pode usar a seguinte consulta:

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

    Nota: Também pode utilizar a palavra-chave SOME para o mesmo fim; a palavra-chave SOME é sinónimo de ANY.

  • EXISTS     A utilização existe numa cláusula WHERE que indique que um subquery deve devolver pelo menos uma linha. Também pode prefácio existe com NÃO, para indicar que um subquery não deve devolver nenhuma linha.

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

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

    Utilizando NÃO EXISTE, a consulta devolve uma lista de produtos que não são encontrados em pelo menos uma encomenda existente:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Utilize in in numa cláusula WHERE para verificar se um valor na linha atual da consulta principal faz parte do conjunto que o subquery devolve. Também pode pré-afiar IN com NÃO, para verificar se um valor na linha atual da consulta principal não faz parte do conjunto que o subquery devolve.

    Por exemplo, a seguinte consulta devolve uma lista de encomendas (com datas de encomenda) que foram processadas por empregados 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');

    Ao utilizar o IN, pode 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

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft Office insiders

As informações foram úteis?

Quão satisfeito está com a qualidade do idioma?
O que afetou a sua experiência?

Obrigado pelo seu feedback!

×