Buscar

SQL ORACLE SUBCONSULTAS

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

*
Marcelo Hely
*
SQL ORACLE - AULA 6
SUBCONSULTAS
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Sintaxe da Subconsulta
Uma subconsulta é uma instrução SELECT que é incorporada a uma cláusula de outra instrução SELECT.
Uma subconsulta (consulta interna) é executada uma vez antes da consulta principal.
O resultado da subconsulta é usado pela consulta principal (consulta externa)
Pode ser chamada de SELECT aninhada, sub-SELECT ou SELECT interna.
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Sintaxe da Subconsulta
Poderão ser úteis quando você precisar selecionar linhas de uma tabela com uma condição que dependa dos dados da própria tabela.
Pode-se colocar a subconsulta com cláusulas incluindo: WHERE, HAVING e FROM
As condições de comparação dividem-se em duas classes:
Operadores de uma única linha (>,=, >=,<,<>,<=)
Operadores de várias linhas (IN, ANY, ALL)
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Utilizando uma Subconsulta
SELECT ename
FROM emp
where sal > (SELECT sal
	 from emp
	 where ename = 'ADAMS')
No exemplo, a consulta interna determina o salário de ADAMS. A consulta externa obtém o resultado da consulta interna e o utiliza para exibir todos os funcionários que recebam mais que essa quantia.
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Diretrizes para o uso de subconsulta
Coloque as subconsultas entre parênteses.
Coloque as subconsultas no lado direito da condição de comparação.
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Tipos de Subconsultas
Subconsultas de um única linha 
Retorna somente uma linha.
Utiliza-se operadores de comparação de uma única linha. (=, >,<, etc..)
SQL> SELECT ename, job
 2 from emp
 3 where job = (SELECT job
 4 	FROM emp
 5 	WHERE empno = 7499);
O exemplo exibe os funcionários cujo cargo seja o mesmo do funcionário 7499.
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Executando Subconsultas de uma única linha
1 SELECT ename, job, sal
2 FROM emp
3 WHERE job = (SELECT job
4 		FROM emp
5 		where empno = 7499)
6 AND sal > (SELECT sal
7 	 FROM emp
8* 	 WHERE empno = 7876)
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Executando Subconsultas de uma única linha
O exemplo mostra os funcionários cujo cargo seja o mesmo que do funcionário 7499 e cujo salário seja maior que do funcionário 7876.
O exemplo consiste em três blocos de consulta: a consulta externa e duas consultas internas. Os blocos de consulta interna são executados primeiro, gerando os resultados de consulta SALESMAN e 1100. Essa instrução é chamada de subconsulta de uma única linha
O bloco de consulta externa é então processado e usa os valores retornados pelas consultas internas para completar suas condições de pesquisa.
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Usando Funções de grupo em uma Subconsulta
1 SELECT ename, job, sal
2 FROM emp
3 WHERE sal = ( SELECT MIN(sal)
4* FROM emp)
O exemplo no slide exibe o nome, o cargo e o salário de todos os funcionários cujo salário seja igual ao salário mínimo. A função de grupo MIN retorna um único valor para a consulta externa. 
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Usando a cláusula HAVING com Subconsultas
*
Marcelo Hely
*
 1 SELECT deptno, MIN(sal)
 2 FROM emp
 3 GROUP BY deptno
 4 HAVING MIN (sal) > ( SELECT MIN(sal)
 5 	 FROM emp
 6* 		 WHERE deptno = 20)
 A instrução SQL exibe todos os departamentos que tenham um salário mínimo maior que o departamento 20. O servidor Oracle executa primeiro as subconsultas e retorna os resultados para a cláusula HAVING.
Marcelo Hely
*
Marcelo Hely
*
Usando Funções de grupo em uma Subconsulta
Localize o cargo com o menor salário
1 SELECT job, AVG(sal)
2 FROM emp
3 GROUP BY job
4 HAVING AVG (sal) = ( SELECT 							 MIN(AVG(sal))
5 		 FROM emp
6* 			 GROUP BY job)
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Erros em Subconsultas
1 SELECT empno, ename
2 FROM emp
3 WHERE sal = (SELECT MIN(sal)
4 FROM emp
5* GROUP BY deptno)
Esta instrução gera um erro, pois, o operador de comparação de uma única linha espera somente um valor. A subconsulta contém a cláusula GROUP BY, o que indica que a subconsulta retornará várias linhas.
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Erros em Subconsultas
Para corrigir esse erro, altere o operador = para IN.
1 SELECT empno, ename
2 FROM emp
3 WHERE sal IN (SELECT MIN(sal)
4 FROM emp
5* GROUP BY deptno)
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Problemas nas Subconsultas
*
Marcelo Hely
*
 1 SELECT ename, job
 2 FROM emp
 3 WHERE job = (SELECT job
 4 FROM emp
 5* WHERE ename = 'HELY')
 A subconsulta não retorna nenhum valor.
Marcelo Hely
*
Marcelo Hely
*
Problemas nas Subconsultas
*
Marcelo Hely
*
A intenção é localizar o funcionário cujo nome seja HELY. A instrução está correta, mas não seleciona linhas quando é executada. A consulta externa não localiza nenhum funcionário com um cargo igual a nulo e, assim não retorna linhas.
Marcelo Hely
*
Marcelo Hely
*
Subconsultas de várias linhas
Retorna mais de uma linha
Utiliza operadores de comparação de várias linhas
Operadores:
IN – Igual a qualquer membro da lista
ANY – Compare o valor a cada valor retornado pela subconsulta
ALL – Compare o valor a todo valor retornado pela subconsulta.
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Subconsultas de várias linhas
Localize os funcionários que recebam o mesmo salário que o salário mínimo de cada departamento.
1 SELECT ename, sal, deptno
2 FROM emp
3 WHERE sal IN (SELECT MIN(sal)
4 	 FROM emp
5* 	 GROUP BY deptno)
*
Marcelo Hely
*
Marcelo Hely
*
Marcelo Hely
*
Usando o Operador ANY em subconsultas de várias linhas
*
Marcelo Hely
*
1 SELECT empno,ename, job, sal
2 FROM emp
3 WHERE sal < ANY (SELECT sal
4 	 FROM emp
5 	 WHERE job = 'ANALYST')
6* AND job <> 'ANALYST'
Marcelo Hely
*
*
*
*
*
*
*
*

Outros materiais