18
Copyright Oracle Corporation, 1997. All rights reserved. 6 6 Subconsultas Subconsultas

Copyright Oracle Corporation, 1997. All rights reserved. Microsoft PowerPoint - Les06.ppt Author: ANDREU Created Date: 4/7/2008 3:17:53 PM

Embed Size (px)

Citation preview

Copyright Oracle Corporation, 1997. All rights reserved.

66

SubconsultasSubconsultas

6-2 Copyright Oracle Corporation, 1997. All rights reserved.

ObjetivosObjetivos

Al completar esta lección, debería ser capaz de hacer lo siguiente:

• Describir los tipos de problemas que las subconsultas pueden resolver.

• Definir subconsultas.

• Enumerar los tipos de subconsultas.

• Escribir subconsultas que afecten a un solo registro, o a más de uno.

Al completar esta lecciAl completar esta leccióón, debern, deberíía ser a ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Describir los tipos de problemas que las subconsultas pueden resolver.

• Definir subconsultas.

• Enumerar los tipos de subconsultas.

• Escribir subconsultas que afecten a un solo registro, o a más de uno.

6-3 Copyright Oracle Corporation, 1997. All rights reserved.

Uso de una Subconsulta para Resolver un Problema

Uso de una Subconsulta para Resolver un Problema

“¿Quién tiene un salario superior al de Jones?”“¿“¿QuiQuiéén tiene un salario superior al de Jones?n tiene un salario superior al de Jones?””

“¿Qué empleados tienen un salario superior al salrio de Jones?”

Consulta Principal

??

“¿Cuál es el salario de Jones?”??

Subconsulta

6-4 Copyright Oracle Corporation, 1997. All rights reserved.

SubconsultasSubconsultas

•• La subconsulta se ejecuta una vez y La subconsulta se ejecuta una vez y antes de la consulta principal.antes de la consulta principal.

•• El resultado de la subconsulta es usado El resultado de la subconsulta es usado por la consulta principal externa.por la consulta principal externa.

SELECT select_list

FROM table

WHERE expr operator

(SELECT select_list

FROM table);

6-5 Copyright Oracle Corporation, 1997. All rights reserved.

2975

SQL> SELECT ename

2 FROM emp

3 WHERE sal >

4 (SELECT sal

5 FROM emp

6 WHERE empno=7566);

Usando una SubconsultaUsando una Subconsulta

ENAME

----------

KING

FORD

SCOTT

ENAME

----------

KING

FORD

SCOTT

6-6 Copyright Oracle Corporation, 1997. All rights reserved.

Guía para el Uso de SubconsultasGuía para el Uso de Subconsultas

• Encierre las subconsultas entre paréntesis.

• Una subconsulta debe aparecer a la derecha del operador.

• No añada una cláusula ORDER BY a una subconsulta.

• Utilice operadores a nivel de fila para subconsultas que devuelvan solo una fila.

• Utilice operadores que actúan sobre varios registros para subconsultas que devuelvan más de una fila.

• Encierre las subconsultas entre paréntesis.

• Una subconsulta debe aparecer a la derecha del operador.

• No añada una cláusula ORDER BY a una subconsulta.

• Utilice operadores a nivel de fila para subconsultas que devuelvan solo una fila.

• Utilice operadores que actúan sobre varios registros para subconsultas que devuelvan más de una fila.

6-7 Copyright Oracle Corporation, 1997. All rights reserved.

Tipos de SubconsultasTipos de Subconsultas• Subconsulta mono-registro• Subconsulta mono-registro

Cons. Principal

Subquerydevuelvedevuelve

CLERKCLERK

• Subconsulta multi-registro• Subconsulta multi-registro

CLERKCLERK

MANAGERMANAGER

Cons. Principal

Subquerydevuelvedevuelve

• Subconsulta multi-columna• Subconsulta multi-columna

CLERK 7900CLERK 7900

MANAGER 7698MANAGER 7698

Cons. Principal

Subquerydevuelvedevuelve

6-8 Copyright Oracle Corporation, 1997. All rights reserved.

Subconsultas Mono-registroSubconsultas Mono-registro

• Devuelven un único registro.

• Se utilizan operadores de comparación.

• Devuelven un único registro.

• Se utilizan operadores de comparación.

Operador

=

>

>=

<

<=

<>

Significado

Igual a

Mayor que

Mayor que o igual a

Menor que

Menor que o igual a

No igual a

6-9 Copyright Oracle Corporation, 1997. All rights reserved.

Ejecución de Subc. Mono-registroEjecución de Subc. Mono-registro

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, 1997. All rights reserved.

Uso de Funciones de Grupo en una Subconsulta

Uso de Funciones de Grupo en una 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, 1997. All rights reserved.

La Cláusula HAVING en SubconsultasLa Cláusula HAVING en Subconsultas

• El Servidor Oracle8 ejecuta primero las subconsultas.

• El Servidor Oracle8 devuelve el resultado a la cláusula HAVING de la consulta principal.

• El Servidor Oracle8 ejecuta primero las subconsultas.

• El Servidor Oracle8 devuelve el resultado a la cláusula HAVING de la 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, 1997. All rights reserved.

¿Qué está mal en esta Sentencia?¿Qué está mal en esta Sentencia?

ERROR:

ORA-01427: single-row subquery returns more than

one row

no rows selected

ERROR:

ORA-01427: single-row subquery returns more than

one row

no rows selected

SQL> SELECT empno, ename

2 FROM emp

3 WHERE sal =

4 (SELECT MIN(sal)

5 FROM emp

6 GROUP BY deptno);

““Oper

ador m

ono

Oper

ador m

ono--reg

istro e

n subco

nsulta

multi

regis

tro e

n subco

nsulta

multi

--reg

istro

regis

tro””

6-13 Copyright Oracle Corporation, 1997. All rights reserved.

¿Funcionaría esta Sentencia?¿Funcionaría esta Sentencia?

no rows selectedno rows selected

La Subco

nsulta

NO

dev

uelve

regis

tros

La Subco

nsulta

NO

dev

uelve

regis

tros

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, 1997. All rights reserved.

Subconsultas Multi-registroSubconsultas Multi-registro

• Devuelven más de un registro.

• Use comparadores multi-registro.

• Devuelven más de un registro.

• Use comparadores multi-registro.

Operador

IN

ANY

ALL

Significado

Igual a los valores de cierta lista

Compara los valores con cada valor

devuelto por la subconsulta

Compara los valores con cada uno de los

valores devueltos por la subconsulta

6-15 Copyright Oracle Corporation, 1997. All rights reserved.

Uso del Operador ANY enUso del Operador ANY en

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

Subconsultas Multi-registroSubconsultas Multi-registro

6-16 Copyright Oracle Corporation, 1997. All rights reserved.

Uso del Operador ALL enUso del Operador ALL en

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)

Subconsultas Multi-registroSubconsultas Multi-registro

6-17 Copyright Oracle Corporation, 1997. All rights reserved.

ResumenResumen

Las Subconsulas resultan muy útiles cuando una consulta esta basada en valores que no conocemos.

Las Subconsulas resultan muy Las Subconsulas resultan muy úútiles tiles cuando una consulta esta basada en cuando una consulta esta basada en valores que no conocemos.valores que no conocemos.

SELECT select_list

FROM table

WHERE expr operator

(SELECT select_list

FROM table);

6-18 Copyright Oracle Corporation, 1997. All rights reserved.

Visión General de la PrácticaVisión General de la Práctica

•• Crear subconsultas para recuperar Crear subconsultas para recuperar valores basados en criterios valores basados en criterios desconocidos.desconocidos.

•• Usar subconsultas para recuperar Usar subconsultas para recuperar valores que existen en un conjunto de valores que existen en un conjunto de datos y que no existen en otro.datos y que no existen en otro.