Iniciar sessão com a Microsoft
Iniciar sessão ou criar uma conta.
Olá,
Selecione uma conta diferente.
Tem várias contas
Selecione a conta com a qual pretende iniciar sessão.

Por vezes, poderá querer utilizar os resultados de uma consulta como um campo noutra consulta ou como critério para um campo de consulta. Por exemplo, suponha que pretende ver o intervalo entre as encomendas de cada um dos seus produtos. Para criar uma consulta que mostre este intervalo, tem de comparar cada data de encomenda com outras datas de encomenda desse produto. Comparar estas datas de encomenda também requer uma consulta. Pode aninhar esta consulta dentro da consulta principal com um subconsulta.

Pode escrever uma subconsulta numa expressão ou numa instrução linguagem SQL (Structured Query Language) (SQL) no vista SQL.

Neste artigo

Utilizar os resultados de uma consulta como um campo noutra consulta

Pode utilizar uma subconsulta como alias de campo. Utilize uma subconsulta como alias de campo quando quiser utilizar os resultados da subconsulta como um campo na consulta principal.

Nota: Uma subconsulta que utiliza como alias de campo não pode devolver mais do que um campo.

Pode utilizar um alias de campo de subconsulta para apresentar valores que dependem de outros valores na linha atual, o que não é possível sem utilizar uma subconsulta.

Por exemplo, voltemos ao exemplo em que pretende ver o intervalo entre encomendas de cada um dos seus produtos. Para determinar este intervalo, tem de comparar cada data de encomenda com outras datas de encomenda desse produto. Pode criar uma consulta que mostre estas informações com o modelo de base de dados Northwind.

  1. No separador Ficheiro, clique em Novo.

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

  3. Clique em Northwind e, 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, faça duplo clique em Encomendas de Produtos.

  7. Faça duplo clique no campo ID do Produto e no campo Data da Encomenda para adicioná-los à grelha de estrutura da consulta.

  8. Na linha Ordenar da coluna ID do Produto da grelha, selecione Ascendente.

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

  10. Na terceira coluna da grelha, clique com o botão direito do rato na linha 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 subconsulta. Para cada linha, a subconsulta seleciona a data de encomenda mais recente que é menos recente do que a data da encomenda que já está associada à linha. Tenha em atenção como utiliza a palavra-chave AS para criar um alias de tabela, para que possa comparar valores na subconsulta com os valores na linha atual da consulta principal.

  12. Na quarta coluna da grelha, na linha 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 da encomenda anterior para esse produto, utilizando o valor da data anterior que definimos através de uma subconsulta.

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

    1. A consulta é executada e apresenta uma lista de nomes de produtos, datas de encomenda, datas de encomendas anteriores e o intervalo entre datas de encomenda. Os resultados são ordenados primeiro pelo ID do Produto (por ordem ascendente) e, em seguida, por Data da Encomenda (por ordem descendente).

    2. Nota: Como o ID do Produto é um campo de pesquisa, por predefinição, o Access apresenta os valores de pesquisa (neste caso, o nome do produto), em vez dos IDs de Produto reais. Embora isto altere os valores apresentados, não altera a sequência de ordenação.

  14. Feche a base de dados da Northwind.

Início da Página

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

Pode utilizar uma subconsulta como critério de campo. Utilize uma subconsulta como critério de campo quando quiser utilizar os resultados da subconsulta para limitar os valores apresentados pelo campo.

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, tem de comparar o ID do colaborador para cada encomenda com uma lista dos IDs dos colaboradores que não são representantes de vendas. Para criar esta lista e utilizá-la como critério de campo, utilize uma subconsulta, conforme mostrado no seguinte procedimento:

  1. Abra Northwind.accdb e ative o respetivo 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 , faça duplo clique em Encomendas e Funcionários.

  5. Na tabela Encomendas, faça duplo clique no campo ID do Funcionário , no campo ID da Encomenda e no campo Data da Encomenda para adicioná-los à grelha de estrutura da consulta. Na tabela Funcionários, faça duplo clique no campo Cargo para adicioná-lo à grelha de estrutura.

  6. Clique com o botão direito do rato na linha Critérios da coluna ID do Funcionário 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')

    Esta é a subconsulta. Seleciona todos os IDs de colaborador em que o funcionário não tem um cargo de Representante de Vendas e fornece esse resultado definido para a consulta principal. Em seguida, a consulta principal verifica se os IDs dos funcionários da tabela Encomendas estão no conjunto de resultados.

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

    A consulta é executada 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 comuns do SQL que pode utilizar com uma subconsulta

Existem várias palavras-chave SQL que pode utilizar com uma subconsulta:

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

  • TUDO    Utilize ALL numa cláusula WHERE para obter linhas que satisfaçam a condição quando comparadas com todas as linhas devolvidas pela subconsulta.

    Por exemplo, suponha que está a analisar dados de estudantes numa faculdade. Os estudantes devem manter um GPA mínimo, que varia de major para major. Os cursos principais e as respetivas GPAs mínimas são armazenados numa tabela denominada Majors e as informações relevantes dos estudantes são armazenadas numa tabela chamada Student_Records.

    Para ver uma lista de majors (e os respetivos GPAs mínimos) para os quais cada estudante com esse curso excede o GPA mínimo, pode utilizar a seguinte consulta:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • QUALQUER    Utilize ANY numa cláusula WHERE para obter linhas que satisfaçam a condição quando comparadas com, pelo menos, uma das linhas devolvidas pela subconsulta.

    Por exemplo, suponha que está a analisar dados de estudantes numa faculdade. Os estudantes devem manter um GPA mínimo, que varia de major para major. Os cursos principais e as respetivas GPAs mínimas são armazenados numa tabela denominada Majors e as informações relevantes dos estudantes são armazenadas numa tabela chamada Student_Records.

    Para ver uma lista de majors (e os respetivos GPAs mínimos) para os quais qualquer estudante com esse curso não cumpre o GPA mínimo, pode utilizar 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     Utilize EXISTS numa cláusula WHERE para indicar que uma subconsulta deve devolver, pelo menos, uma linha. Também pode prefácio EXISTS com NOT, para indicar que uma subconsulta não deve devolver linhas.

    Por exemplo, a consulta seguinte devolve uma lista de produtos que se encontram em, pelo menos, uma encomenda existente:

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

    Ao utilizar NOT EXISTS, a consulta devolve uma lista de produtos que não se encontram 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 numa cláusula WHERE para verificar se um valor na linha atual da consulta principal faz parte do conjunto devolvido pela subconsulta. Também pode prefácio IN com NÃO, para verificar se um valor na linha atual da consulta principal não faz parte do conjunto que a subconsulta devolve.

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

    Ao utilizar NOT 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?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.

Estas informações foram úteis?

Quão satisfeito está com a qualidade do idioma?
O que afetou a sua experiência?
Ao selecionar submeter, o seu feedback será utilizado para melhorar os produtos e serviços da Microsoft. O seu administrador de TI poderá recolher estes dados. Declaração de Privacidade.

Obrigado pelo seu feedback!

×