Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMaría Dolores Arroyo Saavedra Modificado hace 7 años
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.
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.