3.6) Utilização de várias tabelas

Slides:



Advertisements
Apresentações semelhantes
O Comando DROP INDEX Para eliminar um índice definido sobre uma tabela, utilize: Drop Index on ; Ex: No Access: Drop Index X on.
Advertisements

Object Query Language - OQL
Banco de Dados Prof. Antonio.
SQL Avançado Continuação
SQL Structured Query Language (continuação)
Banco de Dados Bruno Rafael de Oliveira Rodrigues.
Prof. Bruno Rafael de Oliveira Rodrigues
Prof.: Bruno Rafael de Oliveira Rodrigues
Visões Marilde Santos.
SGBD.
SQL – Comandos de Agregação
SQL – Consultas Aninhadas e Agregação Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.
Subconsultas ou Consultas Aninhadas
SQL – Consultas Básicas
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
SQL – DML Consulta a dados de uma tabela
Ordenação de Resultados
Operadores Especiais da SQL
Oficina sobre banco de dados
SCC Bancos de Dados e Suas Aplicações
SCC Bancos de Dados e Suas Aplicações
Operação de União “JOIN”
Linguagem de Banco de Dados - SQL
Banco de dados Profª Kelly Medeiros.
Equipe de monitoria Aula prática 2. Apresentação do caso de estudo Conceitual Lógico Algumas informações iniciais Consultas e exercícios Surpresa... =)
Query Tuning Lílian Simão Oliveira.
Comandos de SQL Excel VBA II.
Monitoria GDI Aula Prática
SQL Álvaro Vinícius de Souza Coêlho
Cronograma Formato do Comando SELECT – 1ª Seção Uso de Funções (DATE_FORMAT, DAY, MONTH, NOW, CONCAT, FORMAT, COUNT, AVG, MAX, MIN e FORMAT) AS DISTINCT.
Maio.2002 Sistemas de Informação - Administração Pública1 Organização e Acesso a Dados - Exercício Uma empresa pretende desenvolver uma base de dados que.
BANCO DE DADOS UNIVERSIDADE ESTADUAL DE SANTA CRUZ
Banco de Dados Aplicado ao Desenvolvimento de Software
Oracle 9i: SQL e PL/SQL Bruno Celso Cunha de Freitas
Monitoria GDI Aula Prática
Desenvolvendo um script SQL
Linguagem SQL.
Treinamento sobre SQL.
Baseado no material do Professor Raul Paradeda
Comandos SQL.
REVISÃO Comandos SQL - DML SELECT * FROM ?.
Conceitos básicos de SQL
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Treinamento SQL Server
SQL Server Comando PIVOT.
AULA DE DÚVIDAS 9 de Abril de Especialização  Simplifica-se quando:  especialização é disjunta e  especialização é total e  não há relações.
Fundamentos de Banco de Dados Fundamentos de Banco de Dados Prof. Gale 2º. Semestre 2008.
Banco de Dados I I Comandos SQL
TRABALHO DE BANCO DE DADOS – POSTGRESQL
SQL Parte 02 Prof. Juliano. Manuseando Valores Nulos Um valor nulo é um valor indisponível e desconhecido. O valor nulo não é zero. Zero é um número.
Structured Query Language
IEC Banco de Dados I Aula 04 – SQL (II) Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho
1 Structured Query Language (SQL) 4 SQL é uma linguagem normalizada (ANSI) para consultas e actualizações de bases de dados relacionais.
Subconsultas ou Consultas Aninhadas Forma alternativa de especificar consultas envolvendo relacionamentos entre tabelas Otimização –filtragens prévias.
Aula 09: Comando SELECT: Ligações entre tabelas e Subconsultas
Daniel Paulo SQL Módulo I Daniel Paulo
Daniel Paulo SQL Módulo I Daniel Paulo
Recuperação de Dados Banco de Dados Carina Farias
VBA – Visual Basic para Aplicativos
UCSal – Bacharelado em Informática
Linguagem de definição de dados - SQL
SELECT Professor: Virgílio Fries Müller www. vfm.com.br
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
José Antônio da Cunha CEFET - RN José Antônio -
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
José Antônio da Cunha 2/6/2016 José Antônio - CEFET-RN 1 Disciplina: Banco de Dados.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Capítulo 5 Mais SQL: Consultas Complexas, Triggers e Views.
Álgebra Relacional Prof.: José Antônio da Cunha CEFET-RN
BANCO DE DADOS Araújo Lima Set / 2018 Araújo.
SQL – COMANDOS DML Profª Rosana Traversa.
Transcrição da apresentação:

3.6) Utilização de várias tabelas SUBSELECT com Correlação: É o caso mais complexo onde existe ligação (correlação) de colunas do SELECT mais externo com o SELECT mais interno. O Select interno depende do externo para ser executado. O Select externo seleciona um registro e o Select interno é executado. O Select externo seleciona o próximo registro e o Select interno é executado novamente. Isso se repete até o Select externo chegar ao fim dos registros.

Subselect com Correlação Muito usado na comparação de elementos em relação ao seu grupo Evita comparações distorcidas. É mais caro em termos de performance, mas em determinados casos é a única solução possível

Funcionario Depto matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Depto cod-depto nome-depto 1 Informatica 2 Contabilidade

Ex: Selecione os nomes dos funcionários que ganham o maior salário do seu respectivo departamento Select nome, salario, cod_depto from Funcionario A Where salario = (select max (salario) from funcionario B Where A.cod_depto=B.cod_depto) Pergunta: Quantas vezes o select interno foi executado ? matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Resultado: Nome salario Cod_depto Paulo 4000 1 Luiz 3500 2

Ex: Selecione os nomes dos funcionários que ganham mais do que a média do seu respectivo departamento Select nome, salario, cod_depto from Funcionario A Where salario > (select avg (salario) from funcionario B Where A.cod_depto=B.cod_depto) Média do depto 1 = R$ 2875, média do depto 2 = R$ 2450 matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Resultado: Nome salario Cod_depto Ana 2800 1 Paulo 4000 Luiz 3500 2 Joel 3200

EXISTS / NOT EXISTS EXISTS: testa a existência de linhas que resultariam do subselect. Pode ser substituído pelo IN. EXISTS exige subselect com correlação pois testa a existência da linha inteira no subselect. O resultado de um subselect que sucede um EXISTS é tratado da seguinte forma: Falso, se não encontrou registros Verdadeiro, se encontrou um ou mais registros Os campos selecionados no select interno não são relevantes quando se usa EXISTS Usado para verificar se elementos de mesmo tipo pertencem ou não a conjuntos distintos

Ex: Selecione os distintos cargos que existem no departamento 1, mas não existem no depto 2 Select distinct cargo from Funcionario A Where cod_depto = 1 and not exists (select distinct cargo from funcionario B Where cod_depto = 2 and A.cargo=B.cargo) matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Resultado: Analista Prog. Gerente Contador Cargo analista Prog.

Select distinct cargo from Funcionario A Ex: Selecione os distintos cargos que existem no departamento 1, mas não existem no depto 2 EXISTS e NOT EXISTS podem ser substituídos por IN e NOT IN, dispensando a correlação na maioria das vezes Select distinct cargo from Funcionario A Where cod_depto = 1 and cargo NOT IN (select distinct cargo from funcionario B Where cod_depto = 2) Gerente Analista Prog. Contador Resultado: Cargo analista Prog.

Ex: Selecione os distintos estados que existem entre os funcionários do departamento de Informática e também existem no depto de Contabilidade Select distinct estado from Funcionario A, Depto B Where A.Cod_depto = B.Cod_depto and nome_depto = ‘Informatica’ and exists (Select distinct estado from Funcionario C, Depto D Where C.Cod_depto = D.Cod_depto and nome_depto = ‘Contabilidade’ AND C.Estado= A.Estado) matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Resultado: ES RJ MG Estado MG RJ

Ex: Selecione os distintos estados que existem entre os funcionários do departamento de Informática e também existem no depto de Contabilidade Select distinct estado from Funcionario A, Depto B Where A.Cod_depto = B.Cod_depto and nome_depto = ‘Informatica’ and ESTADO IN (Select distinct estado from Funcionario C, Depto D Where C.Cod_depto = D.Cod_depto and nome_depto = ‘Contabilidade’ ) matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Resultado: ES RJ MG Estado MG RJ

Select nome_depto from Depto Exemplo de ANY ANY possui efeito bastante semelhante ao IN, diferenciando-se apenas na sintaxe Ex: Selecione os nomes dos departamentos que têm funcionários que trabalham no estado de MG Select nome_depto from Depto Where cod_depto IN (select cod_depto from Funcionario where estado = ‘MG’) Where cod_depto = ANY (select cod_depto from Funcionario matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Nome_depto Informatica Contabilidade

Select nome, salario from Funcionario where cod_Depto = 2 Exemplo de ANY Ex: Selecione os nomes dos funcionários do depto 2 que ganham um salário maior do que qualquer funcionário do depto 1 Select nome, salario from Funcionario where cod_Depto = 2 and salario > ANY (select salario from Funcionario where cod_depto = 1) Obs: Neste caso, o ANY não pode ser substituído por IN matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Nome Salario Luiz 3500

ALL ALL: compara um elemento contra todos de seu conjunto. Pode ser usado em substituição ao MAX em consultas analíticas Em consultas sintéticas (uso de Group By), deve-se usar o ALL quando se quer obter o maior ou menor de todos, pois não se aplica Max(sum(salario)), Max(count(*)) SELECT DEPTO, AVG (SALARIO) FROM FUNCIONARIOS GROUP BY DEPTO HAVING AVG(SALARIO) >= ALL (SELECT AVG(SALARIO) GROUP BY DEPTO) (Obs: departamento com a maior média salarial entre todos deptos)

Uso do ALL em consultas analíticas Ex: Selecione o nome do funcionário que tem o maior salário dentre todos os funcionários. Select nome, salario from Funcionario Where salario .>= ALL (Select salario from funcionario) Também pode ser solucionado da seguinte forma Where salario = (Select max(salario) from funcionario) matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria Nome Salario Paulo 4000

1 4 Cod_Depto QtdeFunc 2 QtdeFunc 4 2 Uso do ALL em consultas sintéticas (uso mais frequente) Ex: Selecione o código de departamento que têm o maior número de funcionários Select cod_depto, Count(*) as QtdeFunc from Funcionario Group by cod_depto Having Count (*) >= ALL (Select count(*) from Funcionario Group by cod_depto ) Obs: Neste caso, são gerados dois grupos (select externo e interno) que são comparados entre si. Por isso, existe a necessidade do >= porque o elemento é comparado com os outros e com ele mesmo. No exemplo, apenas o Depto 1 será exibido. Obs: Reparar que o select interno tem apenas uma coluna para que seja possível a comparação. No select interno, é feito um group by pelo código do depto, que é exibido apenas no select externo. Cod_Depto QtdeFunc 1 4 2 QtdeFunc 4 2 matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria

1 2875 Uso do ALL em consultas sintéticas (uso mais frequente) Ex: Selecione o nome do departamento que têm a maior média de salários dentre todos departamentos Select nome_depto, Avg(salario) as MediaSalario from Funcionario A, Depto B where A.cod_depto = B.cod_depto Group by nome_depto Having Count (*) >= ALL (Select Avg(salario) as MediaSalario Group by nome_depto) Nome_Depto MediaSalario 1 2875 2 2450 MediaSalario 2875 2450 matricula nome cargo salario cod-depto comissao estado cidade 10 Ana analista 2800 1 100 null 20 Jose prog. 1500 200 MG BH 30 Paulo gerente 4000 RJ Rio 40 Lucas contador 1400 2 300 50 Luiz 3500 Betim 60 Joel 3200 ES Vitoria