NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosSQL Server 2005 › Capítulo 10 : 25
Quer receber novidades e e-books gratuitos?
« Lição anterior Curso Completo de SQL Server 2005 - Júlio Battisti Δ Página principal Curso Completo de SQL Server 2005 - Júlio Battisti ¤ Capítulos Curso Completo de SQL Server 2005 - Júlio Battisti Próxima lição »
SQL Server 2005 - CURSO COMPLETO
Autor: Júlio Battisti
Lição 180 - Capítulo 10 - Utilizando Subconsultas

Uma sub-consulta é um comando SELECT dentro de outro comando SELECT, ou seja, uma consulta dentro da outra. Uma consulta pode ser utilizada em qualquer local onde uma expressão seja aceita.

Em alguns casos, podemos obter os mesmos resultados utilizando Joins ao invés de sub-consultas. Um detalhe que devemos estar atentos quando utilizamos sub-consultas é em relação ao desempenho. De uma forma geral, devemos utilizar sub-consultas quando quisermos dividir uma consulta complexa, em uma série de passos mais simples, mas que combinados geram o resultado da consulta complexa.

Alguns detalhes a serem considerados quando utilizamos sub-consultas:

  • Sub-consultas devem estar dentro de parênteses.
  • Podemos ter diversos níveis de sub-consultas, isto é, uma consulta dentro da outra, dentro da outra e assim por diante. Porém, mais uma vez quero chamar atenção para a questão do desempenho.

Para vermos as sub-consultas em ação, vamos a um exemplo prático.

Exemplo: Criar uma listagem onde são exibidos os campos NúmeroDoPedido da tabela Pedidos, o campo DataDoPedido da tabela Pedidos e o maior preço unitário dentre os itens que fazem parte do pedido. Para criar esta consulta, utilizamos o seguinte comando:

SELECT [Pedidos].[NúmeroDoPedido], [Pedidos].[DataDoPedido],

       (SELECT MAX([Detalhes do Pedido].[PreçoUnitário]) FROM [Detalhes do Pedido]

        WHERE [Pedidos].[NúmeroDoPedido] = [Detalhes do Pedido].[NúmeroDoPedido]) AS MaiorPreçoUnitário

FROM [Pedidos]

Na Figura 10.13, temos a parte inicial do resultado retornado:

Curso Completo de SQL Server 2005 - Júlio Battisti
Figura 10.13 O primeiro exemplo com sub-consultas.

Observe a sub-consulta:

(SELECT MAX([Detalhes do Pedido].[PreçoUnitário]) FROM [Detalhes do Pedido]

        WHERE [Pedidos].[NúmeroDoPedido] = [Detalhes do Pedido].[NúmeroDoPedido]) AS MaiorPreçoUnitário

Esta consulta pesquisa os diversos itens para cada pedido e retorna o maior preço unitário.

Outro uso típico de uma sub-consulta é como parâmetro da filtragem da consulta principal. Considere o comando a seguir:

SELECT NúmeroDoPedido, CódigoDoCliente,DataDoPedido As MaisRecente

FROM Pedidos

WHERE DataDoPedido=(Select MAX(DataDoPedido) FROM Pedidos)

Este comando retorna os pedidos mais recentes, ou seja, para o valor máximo da data. O valor máximo da data significa a data mais recente no Banco de Dados. O resultado desta consulta é o seguinte:

NúmeroDoPedido      CódigoDoCliente          MaisRecente

11074               SIMOB                   1998-05-06 00:00:00.000

11075               RICSU                   1998-05-06 00:00:00.000

11076               BONAP                   1998-05-06 00:00:00.000

11077               RATTC                   1998-05-06 00:00:00.000

A sub-consulta determina a data mais recente, data esta que é utilizada como critério para a cláusula WHERE. Em resumo, o resultado retornado pela sub-consulta é passado como critério de filtragem para a cláusula WHERE.

Se trocarmos o MAX por MIN, teremos uma listagem dos pedidos mais antigos. Execute o seguinte comando:

SELECT NúmeroDoPedido, CódigoDoCliente,DataDoPedido As MaisAntigo

FROM Pedidos

WHERE DataDoPedido=(Select MIN(DataDoPedido) FROM Pedidos)

Com este comando obtemos o seguinte resultado:

NúmeroDoPedido    CódigoDoCliente     MaisAntigo

10248              VINET                1996-07-04 00:00:00.000

Temos um tipo especial de sub-consulta chamada de “Sub-consulta correlacionada” (Correlated subqueries). Neste tipo de sub-consulta, são utilizadas informações da consulta principal e é executada para cada linha retornada pela consulta externa. Neste tipo de sub-consulta é que temos que tomar cuidados com o desempenho. Por exemplo, se a consulta principal retorna 5000 registros, a sub-consulta será executada 5000 vezes.

Mais uma vez vamos utilizar um exemplo para ilustrar este conceito.

Exemplo: Criar uma consulta que liste o nome de todos os funcionários que fizeram pedidos para o Brasil, em que o campo DataDoPedido é para o ano de 1997. Para obter esta listagem, utilizamos o seguinte comando:

SELECT

   [Funcionários].[Nome]+ ‘ ‘+[Funcionários].[Sobrenome] As NomeCompleto, CódigoDoFuncionário

   FROM Funcionários

WHERE EXISTS

(   SELECT * FROM [Pedidos]

    WHERE

           [Funcionários].[CódigoDoFuncionário]=[Pedidos].[CódigoDoFuncionário]

           AND  Year([DataDoPedido])=‘1997’)

ORDER BY [Funcionários].[Nome]

Vamos explicar o funcionamento desta sub-consulta em quatro passos:

1. Os valores obtidos pela consulta externa (primeiro SELECT) são passados para a consulta interna. Lembre que, para cada registro obtido pela consulta externa, a consulta interna é executada.

2. A consulta interna (segundo SELECT) utiliza o valor passado pela consulta externa e executa o comando SELECT da sub-consulta interna.

3. Após a execução, a sub-consulta interna retorna o seu resultado para a consulta principal.

4. Com base no valor retornado pela sub-consulta, em conjunto com a função EXISTS, o registro retornado pela consulta externa é incluído ou descartado do resultado final. O próximo registro retornado pela consulta externa é passado para a consulta interna, a qual executa novamente. E o processo continua, até que todos os registros da consulta principal tenham sido passados para a consulta interna. Desta maneira vemos que a consulta interna é executada tantas vezes, quantos forem os registros retornados pela consulta externa.

A seguir, temos os resultados do comando deste exemplo:

NomeCompleto     CódigoDoFuncionário

Andrew Fuller  2

Anne Dodsworth 9

Janet Leverling 3

Laura Callahan 8

Margaret Peacock 4

Michael Suyama 6

Nancy Davolio  1

Robert King    7

Steven Buchanan  5

A correta utilização de sub-consultas pode facilitar a obtenção de resultados aparentemente complexos de se obter com um único comando SELECT. Porém, mais uma vez, vou ressaltar o cuidado em relação ao desempenho quando tratamos com sub-consultas.

« Lição anterior Curso Completo de SQL Server 2005 - Júlio Battisti Δ Página principal Curso Completo de SQL Server 2005 - Júlio Battisti ¤ Capítulos Curso Completo de SQL Server 2005 - Júlio Battisti Próxima lição »

você conhece a universidade do access?

Universidade do Access - Curso Completo de Access
com tudo para você dominar o Access - do Básico ao
Avançado - até a Criação de Sistemas Profissionais
Completos - Passo a Passo - Tela a Tela

Aplica-se ao Access 2019, 2016, 2013 e 2010!

13 Cursos - 574 Vídeo-Aulas - 63:32 horas

Para todos os detalhes, acesse:

https://juliobattisti.com.br/universidade-do-access.asp

Quer receber novidades e e-books gratuitos?

Cursos Online

  • Banco de Dados
  • Carreira
  • Criação/Web
  • Excel/Projetos
  • Formação
  • + Todas as categorias
  • Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

    Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

    Todos os direitos reservados, Júlio Battisti 2001-2019 ®

    [LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

    APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI