Baixe o app para aproveitar ainda mais
Prévia do material em texto
02/03/2018 AVA UNINOVE https://ava.uninove.br/seu/AVA/topico/container_impressao.php 1/5 Criação de relatórios utilizando subqueries ou subconsultas CRIAR RELATÓRIOS A PARTIR DE DADOS EXISTENTES NO BANCO DE DADOS UTILIZANDO COMANDOS DE SELEÇÃO E ANINHANDO AS CONSULTAS POR MEIO DE SUBQUERIES OU SUBCONSULTAS. Uma sub-consulta é um comando "select", que é aninhado dentro de outro "select" e que devolve resultados intermediários. Regras para construção de subconsultas: 1. A consulta interna tem de estar entre parênteses e sempre é executada primeiro. 2. Admite o aninhamento de N consultas internas ou conjuntamente a operadores lógicos. 3. Retorna uma ou várias linhas ou colunas. 4. Usualmente é usada na cláusula WHERE dos comandos SELECT, DELETE e UPDATE. 5. Pode ser usada na cláusula FROM do comando SELECT. 6. Não pode conter ORDER BY. Elas podem ser: Simples: é aquela que retorna no máximo uma linha. Nesse caso existem alguns operadores que devem ser utilizados, são os operadores lógicos que usamos em aulas anteriores. Exemplo:Exiba o nome do funcionário que tem o maior salário.Existem algumas alternativas que fogem à lógica, a melhor é uso da função de grupo MAX para identificar qual o maior salário, mas não é possível, com uma função de grupo, usar uma coluna simples, o mecanismo irá tentar exibir mais de uma linha, por exemplo, no uso da coluna nome e uma linha para o maior valor, tornando incompatível o uso da instrução, vamos verificar: 1. SELECT nome, MAX(salario) from funcionario1; Criação de relatórios utilizando subqueries ou subconsultas 01 / 04 02/03/2018 AVA UNINOVE https://ava.uninove.br/seu/AVA/topico/container_impressao.php 2/5 Podemos também criar dois relatórios, analisar os resultados e escrever no papel, ou ainda, passar para um editor de textos o resultado, vejamos: 1. SELECT nome, salario from funcionario1 order by salario desc; Nesse caso a primeira linha do relatório seria a informação procurada, mas se analisarmos, caso a tabela que armazena esses dados tiver umas100.000 linhas, nosso relatório terá também 100.000 linhas, que não é o correto ainda. A solução é o uso de duas instruções aninhadas para conseguir chegar ao resultado esperado. Primeiro criamos separadamente as instruções e depois podemos juntá-las. A primeira instrução é voltada à exibição dos dados que se quer: 1. SELECT nome, salario from funcionario1; A segunda o filtro a ser seguido: 1. SELECT max(salario) from funcionario1; Agora é só aninhá-las ou encadê-las: 1. SELECT nome, salario from funcionario1 where salario = (SELECT 2.MAX(salario) from funcionario1); Criação de relatórios utilizando subqueries ou subconsultas 02 / 04 02/03/2018 AVA UNINOVE https://ava.uninove.br/seu/AVA/topico/container_impressao.php 3/5 Agora a instrução ficou perfeita. Caso se queira o contrário agora, exibir o nome do funcionário que possui o menor salário cadastrado: 1. SELECT nome, salario from funcionario1 where salario = (SELECT MIN(salario) from funcionario1); Outro exemplo é usando um cálculo e, a partir do resultado desse cálculo, a exibição fica vinculada a uma condição. 1. SELECT nome, salario from funcionario1 where salario < (SELECT AVG(salario) from funcionario1); Multilinhas: é aquela que retorna mais que uma linha. Isso implica uma construção diferente e com operadores diferentes, com capacidade de manipular mais elementos. Estes são os operadores que devem ser usados: Exemplo: 1. SELECT matricula, nome from funcionario where n_depto in (select id from depto where nome_depto = 'RH'); Criação de relatórios utilizando subqueries ou subconsultas 03 / 04 02/03/2018 AVA UNINOVE https://ava.uninove.br/seu/AVA/topico/container_impressao.php 4/5 A instrução trará o nome do funcionário e o seu salário, isso somente se ele for menor que a média salarial calculada. O contrário também funciona. Ao SELECT nome, salario from funcionario where salario > (SELECT AVG(salario) from funcionario); O exemplo seguinte devolve todos os produtos cujo preço unitário for maior que o de qualquer produto vendido com um desconto igual ou maior a 25 por cento: 1. SELECT * from Produtos where PrecoUnidade ANY ( SELECT PrecoUnidade from DetalhePedido whereDesconto = 0 .25) Suponhamos que desejamos recuperar todos aqueles clientes que tiverem realizado pelo menos um pedido: 1. SELECT Clientes.Companhia, Clientes.Telefone from Clientes where EXISTS ( SELECT IdPedido from Pedidos where Pedidos.IdPedido = Clientes.IdCliente ) Agora que você já estudou esta aula, resolva os exercícios e verifique seu conhecimento. Caso fique alguma dúvida, leve a questão ao Fórum e divida com seus colegas e professor. EXERCÍCIO (https://ead.uninove.br/ead/disciplinas/web/_g/desbado80_100/a15ex01_desbado80_100.htm) Estimule seu raciocínio com o jogo da forca, clique no botão a seguir. EXERCÍCIO (https://ead.uninove.br/ead/disciplinas/web/_g/desbado80_100/a15ex02_desbado80_100.htm) REFERÊNCIA Criação de relatórios utilizando subqueries ou subconsultas 04 / 04 02/03/2018 AVA UNINOVE https://ava.uninove.br/seu/AVA/topico/container_impressao.php 5/5
Compartilhar