Sunteți pe pagina 1din 22

DML:

SUBCONSULTAS

OBJETIVOS
Al completar esta leccin, deben de ser capaces de realizar lo
siguiente:
Describir los tipos de problemas que las subconsultas pueden
resolver.
Definir subconsultas.
Listar los tipos de subconsultas.
Escribir subconsultas sobre filas individuales y sobre mltiples
filas.

USANDO LAS SUBCONSULTAS PARA LA


RESOLUCIN DE PROBLEMAS
Quines tiene un salario ms alto que el de Jones?

SUBCONSULTAS
SELECT select_list
FROM table
WHERE expression operator
(SELECT select_list
FROM table);

Las subconsultas (inner query, consultas internas) se


ejecutan antes de la consulta principal.
El resultado de la subconsulta es usado por la consulta
principal (outer query, consulta externa).

USANDO UNA SUBCONSULTA


SELECT LAST_NAME||' '||FIRST_NAME "Empleado"
FROM EMPLOYEES
WHERE SALARY >
(SELECT SALARY
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 103);
Empleado
King Steven
Kpchhar Neena
De Haan Lex
Greenberg Nancy
Raphaely Den
Russell John
Partners Karen

GUAS PARA EL USO DE SUBCONSULTAS


Siempre deben de ir encerradas en parntesis.
Se deben de ubicar en el lado derecho del operador de
comparacin.
No se debe de agregar la clusula ORDER BY dentro de
una subconsulta.
Usar operadores sobre filas individuales con
subconsultas que regresen filas individuales.
Usar operadores sobre mltiples filas con subconsultas
que regresen mltiples filas.

TIPOS DE SUBCONSULTAS
Single-row subquery
Clerk

Multiple-row subquery
Clerk
Manager

Multiple-column subquery
Clerk
Manager

7900
7698

SINGLE-ROW SUBQUERIES
Regresan una sola fila.
Usan los operadores de comparacin sobre filas
individuales.
Operador
=
>
>=
<
<=
<>

Descripcin
Igual
Mayor que
Mayor o igual que
Menor que
Menor o igual que
Diferente

EJECUTANDO SINGLE-ROW SUBQUERIES


SELECT LAST_NAME||' '||FIRST_NAME
"Empleado",
JOB_ID, SALARY
FROM
EMPLOYEES
WHERE JOB_ID =
(SELECT JOB_ID
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 103)
AND SALARY >
(SELECT SALARY
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 203)

USANDO FUNCIONES DE GRUPO EN


SUBCONSULTAS
SELECT LAST_NAME||' '||FIRST_NAME "Empleado",
JOB_ID, SALARY
FROM
EMPLOYEES
WHERE SALARY >
(SELECT MIN(SALARY)
FROM EMPLOYEES)

CLUSULA HAVING
EN SUBCONSULTAS
SELECT DEPARTMENT_ID, MIN(SALARY)
FROM
EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING MIN(SALARY) >
(SELECT MIN(SALARY)
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 20)

CUL ES EL ERROR EN ESTE ESTATUTO?


SELECT EMPLOYEE_ID, LAST_NAME
FROM
EMPLOYEES
WHERE SALARY =
(SELECT MIN(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID)

FUNCIONAR STE ESTATUTO?


SELECT LAST_NAME, JOB_ID
FROM
EMPLOYEES
WHERE JOB_ID =
(SELECT JOB_ID
FROM EMPLOYEES
WHERE LAST_NAME = Blake)

MULTIPLE-ROW SUBQUERIES
Regresan ms de una fila.
Usan los operadores de comparacin sobre mltiples
filas.
Operador Descripcin
IN
Igual a cualquier elemento de la
lista
ANY
Compara el valor con cada uno
de los valores regresados por la
subconsulta
ALL
Compara el valor con todos los
valores regresados por la
subconsulta

USANDO EL OPERADOR ANY EN SUBCONSULTAS


DE MLTIPLES FILAS
SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID
FROM EMPLOYEES
WHERE SALARY < ANY
(SELECT SALARY
FROM EMPLOYEES
WHERE JOB_ID LIKE '%_REP')
AND JOB_ID NOT LIKE '%_REP'

USANDO EL OPERADOR ALL EN SUBCONSULTAS


DE MLTIPLES FILAS
SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID
FROM EMPLOYEES
WHERE SALARY > ALL
(SELECT AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID);

Subconsultas de mltiples
columnas

MULTIPLE-COLUMN SUBQUERIES
MANAGER

10

SALESMAN
MANAGER
CLERK
La Consulta
Principal compara

30
10
20

Valores de una subconsulta de


Mltiples filas y columnas
Con

SUBCONSULTAS DE
MLTIPLES COLUMNAS
Muestra el apellido, el salario, la comisin y el nmero
de departamento de cualquier empleado que coincida
en salario y comisin con cualquier empleado del
departamento 30.
(deben coincidir ambas)
SELECT last_name, salary, commision_pct, department_id
FROM
employees
WHERE (salary, NVL(commission_pct, -1)) IN
(SELECT salary, NVL(commission_pct, -1)
FROM employees
WHERE department_id = 30);

COMPARACIN DE COLUMNAS
Pairwise
SAL
1600
1250
1250
2850
1500
950

Nonpairwise

COMM
300
500
1400

En Parejas

SAL
1600
1250
1250
2850
1500
950

COMM
300
500
1400
0

Dispar

COMPARACIN DISPAR
Muestra el apellido, el salario, la comisin y el nmero de
departamento de cualquier empleado que coincida con el
salario o con la comisin de cualquier empleado del
departamento 30.

SELECT last_name, salary, commision_pct, department_id


FROM
employees
WHERE salary IN (SELECT salary
FROM employees
WHERE department_id = 30)
AND NVL(commission_pct,-1) IN (SELECT NVL(commission_pct,-1)
FROM employees
WHERE department_id = 30);

VALORES NULOS EN UNA SUBCONSULTA


SELECT E.LAST_NAME
FROM
EMPLOYEES E
WHERE E.EMPLOYEE_ID NOT IN
(SELECT M.MANAGER_ID
FROM EMPLOYEES M)

S-ar putea să vă placă și