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
« Lição anterior | Δ Página principal | ¤ Capítulos | 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:
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:
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 | Δ Página principal | ¤ Capítulos | Próxima lição » |
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!
Para todos os detalhes, acesse:
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-2024 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI