Subconsultas Multi-Columna
-
Upload
vuongduong -
Category
Documents
-
view
252 -
download
6
Transcript of Subconsultas Multi-Columna
Copyright Oracle Corporation, 1997. All rights reserved.
77
Subconsultas Multi-ColumnaSubconsultas Multi-Columna
7-2 Copyright Oracle Corporation, 1997. All rights reserved.
ObjetivosObjetivos
Al completar esta lección, debería ser capaz de hacer lo siguiente:
• Escribir una subconsulta multi-columna
• Describir y explicar el comportamiento de las subconsultas cuando se recuperan valores nulos
• Escribir una subconsulta en una cláusula FROM.
Al completar esta lecciAl completar esta leccióón, debern, deberíía ser a ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:
• Escribir una subconsulta multi-columna
• Describir y explicar el comportamiento de las subconsultas cuando se recuperan valores nulos
• Escribir una subconsulta en una cláusula FROM.
7-3 Copyright Oracle Corporation, 1997. All rights reserved.
Subconsultas Multi-ColumnaSubconsultas Multi-Columna
Consulta Principal
MANAGER 10
Subquery
SALESMAN 30
MANAGER 10
CLERK 20
La La C. Principal
compara
MANAGER 10MANAGER 10
Valores de una subc. multiValores de una subc. multi--registroregistro
y multiy multi--columnacolumna
SALESMAN SALESMAN 3030
MANAGER MANAGER 1010
CLERK CLERK 2020
concon
7-4 Copyright Oracle Corporation, 1997. All rights reserved.
Usando 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.
Visualizar el nombre, nVisualizar el nombre, nºº de departamento, de departamento, salario y comisisalario y comisióón de cualquier empleado cuyo n de cualquier empleado cuyo salario y comisisalario y comisióón se correspondan (n se correspondan (ambosambos) ) con la comisicon la comisióón y salario de cualquier empleado n y salario de cualquier empleado del departamento 30.del departamento 30.
SQL> SELECT ename, deptno, sal, comm
2 FROM emp
3 WHERE (sal, NVL(comm,0)) IN
4 (SELECT sal, NVL(comm,0)
5 FROM emp
6 WHERE deptno = 30);
Subconsultas Multi-ColumnaSubconsultas Multi-Columna
7-5 Copyright Oracle Corporation, 1997. All rights reserved.
Comparaciones entre ColumnasComparaciones entre Columnas
Pairwise
SAL COMM
1600 300
1250 500
1250 1400
2850
1500 0
950
Nonpairwise
SAL COMM
1600 300
1250 500
1250 1400
2850
1500 0
950
7-6 Copyright Oracle Corporation, 1997. All rights reserved.
Comparación de Subconsultas “Nonpairwise”
Comparación de Subconsultas “Nonpairwise”
SQL> SELECT ename, deptno, sal, comm
2 FROM emp
3 WHERE sal IN (SELECT sal
4 FROM emp
5 WHERE deptno = 30)
6 AND
7 NVL(comm,-1) IN (SELECT NVL(comm,-1)
8 FROM emp
9 WHERE deptno = 30);
Visualizar el nombre, nº de departamento, salario y comisión de cualquier empleado cuyo salario y comisión se corresponda con la comisión y salario de cualquier empleado del departamento 30.
Visualizar el nombre, nVisualizar el nombre, nºº de departamento, salario y de departamento, salario y comisicomisióón de cualquier empleado cuyo salario y n de cualquier empleado cuyo salario y comisicomisióón se corresponda con la comisin se corresponda con la comisióón y salario n y salario de cualquier empleado del departamento 30.de cualquier empleado del departamento 30.
7-7 Copyright Oracle Corporation, 1997. All rights reserved.
Modificación de la Tabla EMPModificación de la Tabla EMP
• Asuma que el salario y comisión de “Clark”son modificados.
• Asuma que el salario y comisión de “Clark”son modificados.
• El salario se cambia a 1500$ y la comisión a 300$.
• El salario se cambia a 1500$ y la comisión a 300$.
ENAME SAL COMM
---------- --------- ---------
...
CLARK 1500 300
...
ALLEN 1600 300
TURNER 1500 0
...
14 rows selected.
7-8 Copyright Oracle Corporation, 1997. All rights reserved.
Subconsulta “Pairwise”Subconsulta “Pairwise”
SQL> SELECT ename, deptno, sal, comm
2 FROM emp
3 WHERE (sal, NVL(comm,0)) IN
4 (SELECT sal, NVL(comm,0)
5 FROM emp
6 WHERE deptno = 30);
ENAME DEPTNO SAL COMM
---------- --------- --------- ---------
JAMES 30 950
WARD 30 1250 500
MARTIN 30 1250 1400
TURNER 30 1500 0
ALLEN 30 1600 300
BLAKE 30 2850
6 rows selected.
ENAME DEPTNO SAL COMM
---------- --------- --------- ---------
JAMES 30 950
WARD 30 1250 500
MARTIN 30 1250 1400
TURNER 30 1500 0
ALLEN 30 1600 300
BLAKE 30 2850
6 rows selected.
7-9 Copyright Oracle Corporation, 1997. All rights reserved.
SQL> SELECT ename,deptno, sal, comm
2 FROM emp
3 WHERE sal IN (SELECT sal
4 FROM emp
5 WHERE deptno = 30)
6 AND
7 NVL(comm,-1) IN (SELECT NVL(comm,-1)
8 FROM emp
9 WHERE deptno = 30);
Subconsulta “Nonpairwise”Subconsulta “Nonpairwise”
ENAME DEPTNO SAL COMM
---------- --------- --------- ---------
JAMES 30 950
BLAKE 30 2850
TURNER 30 1500 0
CLARK 10 1500 300
...
7 rows selected.
7-10 Copyright Oracle Corporation, 1997. All rights reserved.
Valores Nulos en una SubconsultaValores Nulos en una Subconsulta
SQL> SELECT employee.ename
2 FROM emp employee
3 WHERE employee.empno NOT IN
(SELECT manager.mgr
FROM emp manager);
no rows selected.no rows selected.
7-11 Copyright Oracle Corporation, 1997. All rights reserved.
Uso de un Subconsulta en laCláusula FROM
Uso de un Subconsulta en laClá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;
7-12 Copyright Oracle Corporation, 1997. All rights reserved.
ResumenResumen
• Una subconsulta multi-columna devuelve más de una columna.
• Las comparaciones entre columnas en una comparación multi-columna, pueden ser “pairwise” o “nonpairwise”.
• Una subconsulta multi-columna puede también ser usada en la cláusula FROM de una sentencia SELECT.
• Una subconsulta multi-columna devuelve más de una columna.
• Las comparaciones entre columnas en una comparación multi-columna, pueden ser “pairwise” o “nonpairwise”.
• Una subconsulta multi-columna puede también ser usada en la cláusula FROM de una sentencia SELECT.
7-13 Copyright Oracle Corporation, 1997. All rights reserved.
Visión General de la PrácticaVisión General de la Práctica
Creación de Subconsultas Multi-ColumnaCreación de Subconsultas Multi-Columna