Upload
pablo-garcia
View
2.441
Download
7
Embed Size (px)
DESCRIPTION
Sub-Consultas SQL Oracle
Citation preview
Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
66
SubconsultasSubconsultas
6-2 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
ObjetivosObjetivos
Depois de completar esta lição, você poderá Depois de completar esta lição, você poderá fazer o seguinte:fazer o seguinte:
• Descrever os tipos de problemas que as subconsultas podem resolver
• Definir as subconsultas
• Listar os tipos de subconsultas
• Criar subconsultas de uma única linha e de várias linhas
Depois de completar esta lição, você poderá Depois de completar esta lição, você poderá fazer o seguinte:fazer o seguinte:
• Descrever os tipos de problemas que as subconsultas podem resolver
• Definir as subconsultas
• Listar os tipos de subconsultas
• Criar subconsultas de uma única linha e de várias linhas
6-3 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Usando uma Subconsulta para Resolver um Problema
Usando uma Subconsulta para Resolver um Problema
"Quem tem um salário maior que o de Jones?""Quem tem um salário maior que o de Jones?""Quem tem um salário maior que o de Jones?""Quem tem um salário maior que o de Jones?"
"Que funcionários têm um salário maior que o salário de Jones?"
Consulta principal
??
"Qual é o salário de Jones?" ??
Subconsulta
6-4 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
SubconsultasSubconsultas
• A subconsulta (consulta interna) é executada uma vez antes da consulta principal.
• O resultado da subconsulta é usado pela consulta principal (consulta externa).
• A subconsulta (consulta interna) é executada uma vez antes da consulta principal.
• O resultado da subconsulta é usado pela consulta principal (consulta externa).
SELECT select_listFROM tabelaWHERE operador expr
(SELECT select_list FROM tabela);
6-5 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
2975
SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566);
Usando uma SubconsultaUsando uma Subconsulta
ENAME----------KINGFORDSCOTT
ENAME----------KINGFORDSCOTT
6-6 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Diretrizes para o Uso de Subconsultas
Diretrizes para o Uso de Subconsultas
• Coloque as subconsultas entre parênteses.
• Coloque as subconsultas no lado direito do operador de comparação.
• Não adicione uma cláusula ORDER BY a uma subconsulta.
• Use operadores de uma única linha com subconsultas de uma única linha.
• Use operadores de várias linhas com subconsultas de várias linhas.
• Coloque as subconsultas entre parênteses.
• Coloque as subconsultas no lado direito do operador de comparação.
• Não adicione uma cláusula ORDER BY a uma subconsulta.
• Use operadores de uma única linha com subconsultas de uma única linha.
• Use operadores de várias linhas com subconsultas de várias linhas.
6-7 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Tipos de SubconsultasTipos de Subconsultas• Subconsulta de uma única linha• Subconsulta de uma única linha
Consulta principal
Subconsulta retornaretorna
CLERKCLERK
Consulta principal
Subconsulta
• Subconsulta de várias linhas• Subconsulta de várias linhas
CLERK CLERK MANAGERMANAGER
retornaretorna
• Subconsulta de várias colunas• Subconsulta de várias colunas
CLERK 7900CLERK 7900MANAGER 7698MANAGER 7698
Main query
Subquery retornaretorna
Consulta principal
Subconsulta
6-8 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Subconsultas de uma Única LinhaSubconsultas de uma Única Linha
• Retorne somente uma linha
• Use operadores de comparação de uma única linha
• Retorne somente uma linha
• Use operadores de comparação de uma única linha
Operador
=
>
>=
<
<=
<>
Significado
Igual a
Maior do que
Maior do que ou igual a
Menor do que
Menor ou igual a
Diferente de
6-9 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Executando Subconsultas de uma Única Linha
Executando Subconsultas de uma Única Linha
CLERK
1100
ENAME JOB---------- ---------MILLER CLERK
ENAME JOB---------- ---------MILLER CLERK
SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8 (SELECT sal 9 FROM emp 10 WHERE empno = 7876);
6-10 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Usando Funções de Grupo em uma Subconsulta
Usando Funções de Grupo em uma Subconsulta
800
ENAME JOB SAL---------- --------- ---------SMITH CLERK 800
ENAME JOB SAL---------- --------- ---------SMITH CLERK 800
SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp);
6-11 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Cláusula HAVING com Subconsultas
Cláusula HAVING com Subconsultas
• O Oracle Server primeiro executa as subconsultas.
• O Oracle Server retorna os resultados para a cláusula HAVING da consulta principal.
• O Oracle Server primeiro executa as subconsultas.
• O Oracle Server retorna os resultados para a cláusula HAVING da consulta principal.
800
SQL> SELECT deptno, MIN(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING MIN(sal) > 5 (SELECT MIN(sal) 6 FROM emp 7 WHERE deptno = 20);
6-12 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
O que Há de Errado com esta Instrução? O que Há de Errado com esta Instrução?
SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno);
ERROR:ORA-01427: A subconsulta de uma única linha retorna mais de uma linha (Single-row subquery returns more than one row)
no rows selected
ERROR:ORA-01427: A subconsulta de uma única linha retorna mais de uma linha (Single-row subquery returns more than one row)
no rows selected
Operador de uma única linha com
Operador de uma única linha com
subconsulta de várias
subconsulta de várias linhaslinhas
6-13 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Esta Instrução Irá Funcionar? Esta Instrução Irá Funcionar?
no rows selectedno rows selected
A subconsulta não
A subconsulta não retornaretorna nenhum
nenhum valorvalor
SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE ename='SMYTHE');
6-14 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Subconsultas de Várias LinhasSubconsultas de Várias Linhas
• Retorne mais de uma linha
• Use operadores de comparação de várias linhas
• Retorne mais de uma linha
• Use operadores de comparação de várias linhas
Operador
IN
ANY
ALL
Significado
Igual a qualquer membro na lista
Compare o valor a cada valor retornado
pela subconsulta
Compare o valor a todo valor retornado
pela subconsulta
6-15 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Usando o Operador ANY em Subconsultas de Várias Linhas
Usando o Operador ANY em Subconsultas de Várias Linhas
9508001100
1300
EMPNO ENAME JOB--------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN
EMPNO ENAME JOB--------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN
SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK';
6-16 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Usando o Operador ALL em Subconsultas de Várias Linhas
Usando o Operador ALL em Subconsultas de Várias Linhas
2916.6667
2175
1566.6667
EMPNO ENAME JOB--------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST
EMPNO ENAME JOB--------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST
SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno);
6-17 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
SumárioSumário
As subconsultas são úteis quando uma As subconsultas são úteis quando uma consulta baseia-se em valores desconhecidos.consulta baseia-se em valores desconhecidos.As subconsultas são úteis quando uma As subconsultas são úteis quando uma consulta baseia-se em valores desconhecidos.consulta baseia-se em valores desconhecidos.
SELECT select_listFROM tabelaWHERE operador expr
(SELECT select_list FROM tabela);
6-18 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Visão Geral do ExercícioVisão Geral do Exercício
• Criando subconsultas para valores de consulta com base em critérios desconhecidos
• Usando subconsultas para descobrir quais valores existem em um conjunto de dados e não em outro
• Criando subconsultas para valores de consulta com base em critérios desconhecidos
• Usando subconsultas para descobrir quais valores existem em um conjunto de dados e não em outro