Está en la página 1de 13

7

Subqueries de múltiples
columnas

Copyright  Developware, 2008. All rights reserved.


Objetivos

Después
Después de de completar
completar esta
esta lección
lección podrá
podrá
ser
ser capaz
capaz de:
de:
•• Escribir
Escribir un
un subquery
subquery concon múltiples
múltiples
columna
columna
•• Describir
Describir yy explicar
explicar la
la conducta
conducta dede los
los
subqueries
subqueries cuando
cuando valores
valores nulos
nulos son
son
recuperados.
recuperados.
•• Escribir
Escribir un
un subquery
subquery en en la
la cláusula
cláusula
FROM.
FROM.
Copyright  Developware, 2008. All rights reserved.
Subqueries de múltiples columnas

Main query
MANAGER 10

Subquery
SALESMAN 30
MANAGER 10
CLERK 20

El query
principal se con Valores de una fila múltiple y
compara un subquery de múltiples columnas.

SALESMAN 30
MANAGER 10
MANAGER 10
CLERK 20
Copyright  Developware, 2008. All rights reserved.
Usando Subqueries de múltiples
columnas
Despliegue
Despliegue elel nombre,
nombre, el el número
número de de
departamento,
departamento, el
el sueldo,
sueldo, yy la
la comisión
comisión de de
cualquier
cualquier empleado
empleado cuyo
cuyo sueldo
sueldo yy comisión
comisión
igualen
igualen ambos
ambos lala comisión
comisión yy el
el sueldo
sueldo de
de
cualquier
cualquier empleado
empleado enen el
el departamento
departamento 3030
.. SQL> SELECT ename, deptno, sal, comm
2 FROM emp
3 WHERE (sal, NVL(comm,-1)) IN
4 (SELECT sal, NVL(comm,-1)
5 FROM emp
6 WHERE deptno = 30);

Copyright  Developware, 2008. All rights reserved.


Comparaciones de Columnas

Pairwise Nonpairwise
SAL COMM SAL COMM
1600 300 1600 300
1250 500 1250 500
1250 1400 1250 1400
2850 2850
1500 0 1500 0
950 950

Copyright  Developware, 2008. All rights reserved.


La comparación no por parejas
de un Subquery
Muestre
Muestre el
el nombre,
nombre, elel número
número de
de departamento,
departamento,
el
el sueldo,
sueldo, yy la
la comisión
comisión de
de cualquier
cualquier empleado
empleado
cuyo
cuyo sueldo
sueldo yy comisión
comisión iguale
iguale la
la comisión
comisión yy el
el
sueldo
sueldo de de cualquier
cualquier empleado
empleado en en el el
departamento
departamento 30. 30.
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);

Copyright  Developware, 2008. All rights reserved.


Modificando la Tabla EMP
•• Asuma
Asuma que
que el
el sueldo
sueldo yy la
la comisión
comisión para
para Clark
Clark
son
son modificados.
modificados.
•• El
El sueldo
sueldo es
es incrementado
incrementado aa $$ 1,500
1,500 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.

Copyright  Developware, 2008. All rights reserved.


Subquery por parejas
SQL> SELECT ename, deptno, sal, comm
2 FROM emp
3 WHERE (sal, NVL(comm,-1)) IN
4 (SELECT sal, NVL(comm,-1)
5 FROM emp
6 WHERE deptno = 30);

ENAME
ENAME DEPTNO
DEPTNO SAL
SAL COMM
COMM
----------
---------- ---------
--------- ---------
--------- ---------
---------
JAMES
JAMES 30
30 950
950
WARD
WARD 30
30 1250
1250 500
500
MARTIN
MARTIN 30
30 1250
1250 1400
1400
TURNER
TURNER 30
30 1500
1500 00
ALLEN
ALLEN 30
30 1600
1600 300
300
BLAKE
BLAKE 30
30 2850
2850

66 rows
rows selected.
selected.
Copyright  Developware, 2008. All rights reserved.
Subquery no por parejas
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);

ENAME DEPTNO SAL COMM


---------- --------- --------- ---------
JAMES 30 950
BLAKE 30 2850
TURNER 30 1500 0
CLARK 10 1500 300
...
7 rows selected.

Copyright  Developware, 2008. All rights reserved.


Valores nulos en un Subquery

SQL> SELECT employee.ename


2 FROM emp employee
3 WHERE employee.empno NOT IN
4 (SELECT manager.mgr
5 FROM emp manager);
no rows selected.

Copyright  Developware, 2008. All rights reserved.


Usar un Subquery
en la Cláusula FROM
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;

ENAME
ENAME SAL
SAL DEPTNO
DEPTNO SALAVG
SALAVG
----------
---------- ---------
--------- ---------
--------- ----------
----------
KING
KING 5000
5000 10
10 2916.6667
2916.6667
JONES
JONES 2975
2975 20
20 2175
2175
SCOTT
SCOTT 3000
3000 20
20 2175
2175
...
...
66 rows
rows selected.
selected.

Copyright  Developware, 2008. All rights reserved.


Resumen
•• Un
Un subquery
subquery de de múltiples
múltiples columnas
columnas
devuelve
devuelve más
más de
de una
una columna.
columna.
•• Las
Las comparaciones
comparaciones de de múltiples
múltiples
columnas
columnas pueden
pueden efectuase
efectuase por
por
parejas
parejas o
o no
no por
por parejas.
parejas.
•• Un
Un subquery
subquery de de múltiples
múltiples columnas
columnas
también
también puede
puede ser
ser usado
usado en
en la
la cláusula
cláusula
FROM
FROM dede una
una sentencia
sentencia SELECT.
SELECT.

Copyright  Developware, 2008. All rights reserved.


Practica

Creando
Creando subqueries
subqueries de
de múltiples
múltiples
columnas
columnas

Copyright  Developware, 2008. All rights reserved.

También podría gustarte