18
Copyright © Oracle Corporation, 1999. Todos os direitos reservados. 6 6 Subconsultas

Sub-Consultas Oracle

Embed Size (px)

DESCRIPTION

Sub-Consultas SQL Oracle

Citation preview

Page 1: Sub-Consultas Oracle

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

66

SubconsultasSubconsultas

Page 2: Sub-Consultas Oracle

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

Page 3: Sub-Consultas Oracle

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

Page 4: Sub-Consultas Oracle

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);

Page 5: Sub-Consultas Oracle

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

Page 6: Sub-Consultas Oracle

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.

Page 7: Sub-Consultas Oracle

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

Page 8: Sub-Consultas Oracle

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

Page 9: Sub-Consultas Oracle

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);

Page 10: Sub-Consultas Oracle

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);

Page 11: Sub-Consultas Oracle

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);

Page 12: Sub-Consultas Oracle

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

Page 13: Sub-Consultas Oracle

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');

Page 14: Sub-Consultas Oracle

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

Page 15: Sub-Consultas Oracle

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';

Page 16: Sub-Consultas Oracle

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);

Page 17: Sub-Consultas Oracle

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);

Page 18: Sub-Consultas Oracle

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