7 Subconsultas Multi-Columna Copyright Oracle Corporation, 1997. All rights reserved. Objetivos Al ón, deber ía ser Al completar completar esta esta lecci lección, debería ser capaz capaz de de hacer hacer lo lo siguiente: siguiente: •• Escribir Escribir una una subconsulta subconsulta multi-columna multi-columna •• Describir Describir yy explicar explicar el el comportamiento comportamiento de de las las subconsultas subconsultas cuando cuando se se recuperan recuperan valores valores nulos nulos •• Escribir Escribir una una subconsulta subconsulta en en una una cláusula cláusula FROM. FROM. 7-2 Copyright Oracle Corporation, 1997. All rights reserved. Subconsultas Multi-Columna Consulta Principal MANAGER 10 Subquery SALESMAN MANAGER CLERK La C. Principal compara MANAGER 10 7-3 con 30 10 20 Valores de una subc. multi-registro y multi-columna SALESMAN 30 MANAGER 10 CLERK 20 Copyright Oracle Corporation, 1997. All rights reserved. Usando Subconsultas Multi-Columna Visualizar Visualizar el el nombre, nombre, nnºº de de departamento, departamento, salario ón de salario yy comisi comisión de cualquier cualquier empleado empleado cuyo cuyo salario ón se ambos) salario yy comisi comisión se correspondan correspondan ((ambos) con ón yy salario con la la comisi comisión salario de de cualquier cualquier empleado empleado del del departamento departamento 30. 30. SQL> SELECT 2 FROM 3 WHERE 4 5 6 7-4 ename, deptno, sal, comm emp (sal, NVL(comm,0)) IN (SELECT sal, NVL(comm,0) FROM emp WHERE deptno = 30); Copyright Oracle Corporation, 1997. All rights reserved. Comparaciones entre Columnas Pairwise SAL 1600 1250 1250 2850 1500 950 7-5 Nonpairwise COMM 300 500 1400 0 SAL 1600 1250 1250 2850 1500 950 Copyright Oracle Corporation, 1997. All rights reserved. COMM 300 500 1400 0 Comparación de Subconsultas “Nonpairwise” Visualizar Visualizar el el nombre, nombre, nnºº de de departamento, departamento, salario salario yy comisi ón de comisión de cualquier cualquier empleado empleado cuyo cuyo salario salario yy comisi ón se ón yy salario comisión se corresponda corresponda con con la la comisi comisión salario de de cualquier cualquier empleado empleado del del departamento departamento 30. 30. SQL> 2 3 4 5 6 7 8 9 7-6 SELECT FROM WHERE ename, deptno, sal, comm emp sal IN (SELECT sal FROM emp WHERE deptno = 30) AND NVL(comm,-1) IN (SELECT NVL(comm,-1) FROM emp WHERE deptno = 30); Copyright Oracle Corporation, 1997. All rights reserved. Modificación de la Tabla EMP •• Asuma Asuma que que el el salario salario yy comisión comisión de de “Clark” “Clark” son son modificados. modificados. •• El El salario salario se se cambia cambia aa 1500$ 1500$ yy la la comisión comisión aa 300$. 300$. ENAME SAL COMM ---------- --------- --------... CLARK 1500 300 ... ALLEN 1600 300 TURNER 1500 0 ... 14 rows selected. 7-7 Copyright Oracle Corporation, 1997. All rights reserved. Subconsulta “Pairwise” SQL> SELECT 2 FROM 3 WHERE 4 5 6 ename, deptno, sal, comm emp (sal, NVL(comm,0)) IN (SELECT sal, NVL(comm,0) FROM emp WHERE deptno = 30); ENAME DEPTNO SAL COMM ENAME DEPTNO SAL COMM ------------------- ----------------- ----------------- ----------------JAMES 30 950 JAMES 30 950 WARD 30 1250 500 WARD 30 1250 500 MARTIN 30 1250 1400 MARTIN 30 1250 1400 TURNER 30 1500 00 TURNER 30 1500 ALLEN 30 1600 300 ALLEN 30 1600 300 BLAKE 30 2850 BLAKE 30 2850 66 rows rows selected. selected. 7-8 Copyright Oracle Corporation, 1997. All rights reserved. Subconsulta “Nonpairwise” SQL> 2 3 4 5 6 7 8 9 SELECT FROM WHERE ename,deptno, sal, comm emp sal IN (SELECT sal FROM emp WHERE deptno = 30) AND NVL(comm,-1) IN (SELECT NVL(comm,-1) FROM emp WHERE deptno = 30); ENAME DEPTNO SAL COMM ---------- --------- --------- --------JAMES 30 950 BLAKE 30 2850 TURNER 30 1500 0 CLARK 10 1500 300 ... 7 rows selected. 7-9 Copyright Oracle Corporation, 1997. All rights reserved. Valores Nulos en una Subconsulta SQL> SELECT 2 FROM 3 WHERE employee.ename emp employee employee.empno NOT IN (SELECT manager.mgr FROM emp manager); no rows selected. 7-10 Copyright Oracle Corporation, 1997. All rights reserved. Uso de un Subconsulta en la Cláusula FROM SQL> 2 3 4 5 6 SELECT FROM WHERE AND a.ename, a.sal, a.deptno, b.salavg emp a, (SELECT deptno, avg(sal) salavg FROM emp GROUP BY deptno) b a.deptno = b.deptno a.sal > b.salavg; ENAME SAL DEPTNO SALAVG ENAME SAL DEPTNO SALAVG ------------------- ----------------- ----------------- ------------------KING 5000 10 KING 5000 10 2916.6667 2916.6667 JONES 2975 20 2175 JONES 2975 20 2175 SCOTT 3000 20 2175 SCOTT 3000 20 2175 ... ... 66 rows rows selected. selected. 7-11 Copyright Oracle Corporation, 1997. All rights reserved. Resumen •• Una Una subconsulta subconsulta multi-columna multi-columna devuelve devuelve más más de de una una columna. columna. •• Las Las comparaciones comparaciones entre entre columnas columnas en en una una comparación comparación multi-columna, multi-columna, pueden pueden ser ser “pairwise” “pairwise” o o “nonpairwise”. “nonpairwise”. •• Una Una subconsulta subconsulta multi-columna multi-columna puede puede también también ser ser usada usada en en la la cláusula cláusula FROM FROM de de una una sentencia sentencia SELECT. SELECT. 7-12 Copyright Oracle Corporation, 1997. All rights reserved. Visión General de la Práctica Creación Creación de de Subconsultas Subconsultas Multi-Columna Multi-Columna 7-13 Copyright Oracle Corporation, 1997. All rights reserved.