[MEU 50º LIVRO]: BANCOS DE DADOS E ACESS - CURSO COMPLETO - DO BÁSICO AO VBA - 1602 páginas

Páginas: 1602 | Autor: Júlio Battisti | 40% de Desconto e 70h de Vídeo Aulas de Bônus

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 »

Best Sellers de Excel do Julio Battisti

Todos com Vídeo Aulas, E-books e Planilhas de Bônus!

Aprenda com Júlio Battisti:
Excel 2010 Básico em 140 Lições - Através de Exemplos Práticos - Passo a Passo

 Aprenda com Júlio Battisti: Excel 2010 Básico em 140 Lições - Através de Exemplos Práticos

 

Autor: Júlio Battisti | Páginas: 540 | Editora: Instituto Alpha

 

[Livro]: Aprenda com Júlio Battisti: Excel 2010 Básico em 140 Lições - Através de Exemplos Práticos

Aprenda com Júlio Battisti: Excel 2010 Avançado, Análise de Dados, Tabelas Dinâmicas, Funções Avançadas, Macros e Programação VBA - Passo a Passo

Livro: Aprenda com Júlio Battisti: Excel 2010 Avançado, Análise de Dados, Tabelas Dinâmicas, Funções Avançadas, Macros e Programação VBA - Passo a Passo

 

Autor: Júlio Battisti | Páginas: 952 | Editora: Instituto Alpha

 

Livro: Aprenda com Júlio Battisti: Excel 2010 Avançado, Análise de Dados, Tabelas Dinâmicas, Funções Avançadas, Macros e Programação VBA - Passo a Passo

Aprenda com Júlio Battisti: Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Úteis - Passo a Passo

 

[LIVRO]: Aprenda com Júlio Battisti: Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Úteis - Passo a Passo

 

Autor: Júlio Battisti | Páginas: 1124 | Editora: Instituto Alpha

 

[LIVRO]: Aprenda com Júlio Battisti: Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Úteis - Passo a Passo

Aprenda com Júlio Battisti: Excel 2010 - Curso Completo - Do Básico ao Avançado, Incluindo Macros e Programação VBA - Através de Exemplos Práticos

 

[A BÍBLIA DO EXCEL]: Aprenda com Júlio Battisti: Excel 2010 - Curso Completo - Do Básico ao Avançado, Incluindo Macros e Programação VBA - Através de Exemplos Práticos Passo a Passo

 

Autor: Júlio Battisti | Páginas: 1338 | Editora: Instituto Alpha

 

[A BÍBLIA DO EXCEL]: Aprenda com Júlio Battisti: Excel 2010 - Curso Completo - Do Básico ao Avançado, Incluindo Macros e Programação VBA - Através de Exemplos Práticos Passo a Passo

Todos os livros com dezenas de horas de vídeo aulas de bônus, preço especial (alguns com 50% de desconto). Aproveite. São poucas unidades de cada livro e por tempo limitado.

Dúvidas?

Utilize a área de comentários a seguir.

Me ajude a divulgar este conteúdo gratuito!

Use a área de comentários a seguir, diga o que achou desta lição, o que está achando do curso.
Compartilhe no Facebook, no Google+, Twitter e Pinterest.

Indique para seus amigos. Quanto mais comentários forem feitos, mais lições serão publicadas.

Quer receber novidades e e-books gratuitos?
›››

Novidades e E-books grátis

Fique por dentro das novidades, lançamento de livros, cursos, e-books e vídeo-aulas, e receba ofertas de e-books e vídeo-aulas gratuitas para download.



Institucional

  • Quem somos
  • Garantia de Entrega
  • Formas de Pagamento
  • Contato
  • O Autor
  • Endereço

  • 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-2017 ®

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

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