La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Copyright  Oracle Corporation, 1997. All rights reserved. 6 Subconsultas."— Transcripción de la presentación:

1 Copyright  Oracle Corporation, 1997. All rights reserved. 6 Subconsultas

2 6-2 Copyright  Oracle Corporation, 1997. All rights reserved. Objetivos 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 una sola fila y de varias filas. 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 una sola fila y de varias filas.

3 6-3 Copyright  Oracle Corporation, 1997. All rights reserved. Uso de una Subconsulta para Resolver un Problema “¿Quié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

4 6-4 Copyright  Oracle Corporation, 1997. All rights reserved. Subconsultas La subconsulta se ejecuta una vez y antes de la consulta principal. La subconsulta se ejecuta una vez y antes de la consulta principal. El resultado de la subconsulta es usado por la consulta principal externa. El resultado de la subconsulta es usado por la consulta principal externa. La subconsulta se ejecuta una vez y antes de la consulta principal. La subconsulta se ejecuta una vez y antes de la consulta principal. El resultado de la subconsulta es usado por la consulta principal externa. El resultado de la subconsulta es usado por la consulta principal externa. SELECTselect_list FROMtable WHEREexpr operator (SELECTselect_list FROMtable);

5 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 subconsulta ENAME ---------- KING FORD SCOTT ENAME ---------- KING FORD SCOTT

6 6-6 Copyright  Oracle Corporation, 1997. All rights reserved. Instrucciones para las subconsultas Escriba las subconsultas entre paréntesis. Una subconsulta debe aparecer a la derecha del operador. No añada 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. Escriba las subconsultas entre paréntesis. Una subconsulta debe aparecer a la derecha del operador. No añada 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.

7 6-7 Copyright  Oracle Corporation, 1997. All rights reserved. Tipos de subconsultas Subconsulta de una sola fila Cons. Principal Subquery devuelve CLERK Subconsulta de varias filas CLERKMANAGER Cons. Principal Subquery devuelve

8 6-8 Copyright  Oracle Corporation, 1997. All rights reserved. Subconsultas de una sola fila Devuelven una sola fila. Utilizan comparadores de una sola fila. Devuelven una sola fila. Utilizan comparadores de una sola fila. Operador = > >= < <= <> Significado Igual a Mayor que Mayor que o igual a Menor que Menor que o igual a No igual a

9 6-9 Copyright  Oracle Corporation, 1997. All rights reserved. Ejecución de subconsultas de una sola fila 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 9FROMemp 10WHEREempno = 7876);

10 6-10 Copyright  Oracle Corporation, 1997. All rights reserved. Uso de funciones de grupo en una subconsulta 800 ENAME JOB SAL ---------- --------- --------- SMITH CLERK 800 ENAME JOB SAL ---------- --------- --------- SMITH CLERK 800 SQL> SELECTename, job, sal 2 FROMemp 3 WHEREsal = 4(SELECTMIN(sal) 5FROMemp);

11 6-11 Copyright  Oracle Corporation, 1997. All rights reserved. La cláusula HAVING en subconsultas Oracle ejecuta primero las subconsultas. Oracle devuelve el resultado a la cláusula HAVING de la consulta principal. Oracle ejecuta primero las subconsultas. Oracle devuelve el resultado a la cláusula HAVING de la consulta principal. 800 SQL> SELECTdeptno, MIN(sal) 2 FROMemp 3 GROUP BYdeptno 4 HAVINGMIN(sal) > 5(SELECTMIN(sal) 6FROMemp 7WHEREdeptno = 20);

12 6-12 Copyright  Oracle Corporation, 1997. All rights reserved. ¿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) 5FROM emp 6GROUP BY deptno); “Operador de una sola fila en subconsulta de varias filas”

13 6-13 Copyright  Oracle Corporation, 1997. All rights reserved. ¿Funcionaría esta sentencia? no rows selected La Subconsulta NO devuelve registros SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4(SELECTjob 5FROMemp 6WHEREename='SMYTHE');

14 6-14 Copyright  Oracle Corporation, 1997. All rights reserved. Subconsultas de varias filas Devuelven más de una fila. Usa comparadores de varias filas. Devuelven más de una fila. Usa comparadores de varias filas. 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

15 6-15 Copyright  Oracle Corporation, 1997. All rights reserved. Uso del operador ANY en 950 800 1100 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(SELECTsal 5 FROMemp 6WHEREjob = 'CLERK') 7 AND job <> 'CLERK'; subconsultas multi-registro

16 6-16 Copyright  Oracle Corporation, 1997. All rights reserved. Uso 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 (SELECTavg(sal) 5 FROMemp 6GROUP BYdeptno) subconsultas multi-registro

17 6-17 Copyright  Oracle Corporation, 1997. All rights reserved. Valores nulos en una subconsulta SELECTemp.last_name FROMemployees emp WHEREemp.employeed_id NOT IN (SELECT mgr.manager_id FROM employees mgr); No rows selected NOT IN  <> ALL. IN  =ANY NOT IN  <> ALL. IN  =ANY

18 6-18 Copyright  Oracle Corporation, 1997. All rights reserved. Subconsultas multi-columna Consulta Principal MANAGER 10 Subquery SALESMAN 30 MANAGER 10 CLERK 20 La La C. Principal compara MANAGER 10 Valores de una subc. multi-registro y multi-columna SALESMAN 30 MANAGER 10 CLERK 20 con

19 6-19 Copyright  Oracle Corporation, 1997. All rights reserved. Usando Visualizar el nombre, nº de departamento, salario y comisión de cualquier empleado cuyo salario y comisión se correspondan (ambos) con la comisión y salario de cualquier empleado del departamento 30. SQL> SELECTename, deptno, sal, comm 2 FROMemp 3 WHERE (sal, NVL(comm,0)) IN 4 (SELECT sal, NVL(comm,0) 5 FROM emp 6 WHERE deptno = 30); subconsultas multi-columna

20 6-20 Copyright  Oracle Corporation, 1997. All rights reserved. Uso de un subconsulta en la cláusula FROM ENAME SAL DEPTNO SALAVG ---------- --------- --------- ---------- KING 5000 10 2916.6667 JONES 2975 20 2175 SCOTT 3000 20 2175... 6 rows selected. ENAME SAL DEPTNO SALAVG ---------- --------- --------- ---------- KING 5000 10 2916.6667 JONES 2975 20 2175 SCOTT 3000 20 2175... 6 rows selected. SQL> SELECT a.ename, a.sal, a.deptno, b.salavg 2 FROM emp a, (SELECT deptno, avg(sal) salavg 3 FROM emp 4 GROUP BY deptno) b 5 WHERE a.deptno = b.deptno 6 AND a.sal > b.salavg;

21 6-21 Copyright  Oracle Corporation, 1997. All rights reserved. Resumen En esta lección: Identificar cuándo una subconsulta puede ayudar a resolver una pregunta. Escribir subconsultas cuando una consulta está basada en valores desconocidos. En esta lección: Identificar cuándo una subconsulta puede ayudar a resolver una pregunta. Escribir subconsultas cuando una consulta está basada en valores desconocidos. SELECTselect_list FROMtable WHEREexpr operator (SELECT select_list FROM table);

22 6-22 Copyright  Oracle Corporation, 1997. All rights reserved. Visión general de la práctica Crear subconsultas para recuperar valores basados en criterios desconocidos. Usar subconsultas para recuperar valores que existen en un conjunto de datos y que no existen en otro.


Descargar ppt "Copyright  Oracle Corporation, 1997. All rights reserved. 6 Subconsultas."

Presentaciones similares


Anuncios Google