Documente Academic
Documente Profesional
Documente Cultură
Base de datos
Joins
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Joins
Los join permiten combinar las filas de dos o más
tablas
En base a valores de las columnas usadas para
realizar la combinación
En forma horizontal (el resultado contiene las
columnas de todas las tablas involucradas)
Tipos
INNER JOIN
OUTER JOIN (LEFT, RIGHT Y FULL)
CROSS JOIN (producto cartesiano)
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Tipos de join
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
INNER JOIN
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 10 ACCOUNTING NEW YORK
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 20 RESEARCH DALLAS
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 40 OPERATIONS BOSTON
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 50 FINANCE MIAMI
7698 Asis MANAGER 7839 01/05/1981 2850 30
7782 Edelberto MANAGER 7839 09/06/1981 2450 10
7788 Evangelino ANALYST 7566 19/04/1987 3000 20
7839 Meneo PRESIDENT 17/11/1981 5000 10
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30
7876 Asis CLERK 7788 23/05/1987 1100 20
7900 Daphne CLERK 7698 03/12/1981 950 30
7766 Cecilia MANAGER 7839 29/04/1981 2875 60
7902 Pirra ANALYST 7566 03/12/1981 3000 20
7934 Krin CLERK 7782 23/01/1982 1300 40
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 20 RESEARCH DALLAS
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 30 SALES CHICAGO
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 20 RESEARCH DALLAS
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 30 SALES CHICAGO
7698 Asis MANAGER 7839 01/05/1981 2850 30 30 SALES CHICAGO
7782 Edelberto MANAGER 7839 09/06/1981 2450 10 10 ACCOUNTING NEW YORK
7788 Evangelino ANALYST 7566 19/04/1987 3000 20 20 RESEARCH DALLAS
7839 Meneo PRESIDENT 17/11/1981 5000 10 10 ACCOUNTING NEW YORK
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30 30 SALES CHICAGO
7876 Asis CLERK 7788 23/05/1987 1100 20 20 RESEARCH DALLAS
7900 Daphne CLERK 7698 03/12/1981 950 30 30 SALES CHICAGO
7902 Pirra ANALYST 7566 03/12/1981 3000 20 20 RESEARCH DALLAS
7934 Krin CLERK 7782 23/01/1982 1300 40 40 OPERATIONS BOSTON
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
INNER JOIN
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 10 ACCOUNTING NEW YORK
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 20 RESEARCH DALLAS
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 40 OPERATIONS BOSTON
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 50 FINANCE MIAMI
7698 Asis MANAGER 7839 01/05/1981 2850 30
7782 Edelberto MANAGER 7839 09/06/1981 2450 10
7788 Evangelino ANALYST 7566 19/04/1987 3000 20
7839 Meneo PRESIDENT 17/11/1981 5000 10
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30
7876 Asis CLERK 7788 23/05/1987 1100 20
7900 Daphne CLERK 7698 03/12/1981 950 30
7766 Cecilia MANAGER 7839 29/04/1981 2875 60
7902 Pirra ANALYST 7566 03/12/1981 3000 20
7934 Krin CLERK 7782 23/01/1982 1300 40
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 20 RESEARCH DALLAS
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 30 SALES CHICAGO
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 20 RESEARCH DALLAS
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 30 SALES CHICAGO
7698 Asis MANAGER 7839 01/05/1981 2850 30 30 SALES CHICAGO
7782 Edelberto MANAGER 7839 09/06/1981 2450 10 10 ACCOUNTING NEW YORK
7788 Evangelino ANALYST 7566 19/04/1987 3000 20 20 RESEARCH DALLAS
7839 Meneo PRESIDENT 17/11/1981 5000 10 10 ACCOUNTING NEW YORK
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30 30 SALES CHICAGO
7876 Asis CLERK 7788 23/05/1987 1100 20 20 RESEARCH DALLAS
7900 Daphne CLERK 7698 03/12/1981 950 30 30 SALES CHICAGO
7902 Pirra ANALYST 7566 03/12/1981 3000 20 20 RESEARCH DALLAS
7934 Krin CLERK 7782 23/01/1982 1300 40 40 OPERATIONS BOSTON
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
JOIN – Ejemplo 1
/*
La condición indica qué columnas se van a
comparar para hacer el JOIN
Los alias de tablas se usan para evitar
ambigüedad cuando hay varias columnas
con el mismo nombre
JOIN e INNER JOIN son equivalentes
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
JOIN – Ejemplo 2
/*
La condición de JOIN también se puede
especificar en la cláusula WHERE
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
JOIN – Ejemplo 3
/*
Los JOIN se realizan por pares de tablas
En el ejemplo, se une EMPLOYEES con
DEPARTMENTS y el resultado se une con
LOCATIONS
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
JOIN locations l
ON (d.location_id=l.location_id)
WHERE l.city <> 'Seattle'
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
JOIN – Ejemplo 4
/*
Para hacer join de una tabla consigo
misma, se debe incluir más de una vez
en la cláusula FROM
*/
SELECT e.first_name, e.last_name,
m.last_name manager
FROM employees e JOIN employees m
ON (e.manager_id=m.employee_id)
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 20 RESEARCH DALLAS
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 30 SALES CHICAGO
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 20 RESEARCH DALLAS
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 30 SALES CHICAGO
7698 Asis MANAGER 7839 01/05/1981 2850 30 30 SALES CHICAGO
7782 Edelberto MANAGER 7839 09/06/1981 2450 10 10 ACCOUNTING NEW YORK
7788 Evangelino ANALYST 7566 19/04/1987 3000 20 20 RESEARCH DALLAS
7839 Meneo PRESIDENT 17/11/1981 5000 10 10 ACCOUNTING NEW YORK
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30 30 SALES CHICAGO
7876 Asis CLERK 7788 23/05/1987 1100 20 20 RESEARCH DALLAS
7900 Daphne CLERK 7698 03/12/1981 950 30 30 SALES CHICAGO
7766 Cecilia MANAGER 7839 29/04/1981 2875 60
7902 Pirra ANALYST 7566 03/12/1981 3000 20 20 RESEARCH DALLAS
7934 Krin CLERK 7782 23/01/1982 1300 40 40 OPERATIONS BOSTON
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 20 RESEARCH DALLAS
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 30 SALES CHICAGO
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 20 RESEARCH DALLAS
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 30 SALES CHICAGO
7698 Asis MANAGER 7839 01/05/1981 2850 30 30 SALES CHICAGO
7782 Edelberto MANAGER 7839 09/06/1981 2450 10 10 ACCOUNTING NEW YORK
7788 Evangelino ANALYST 7566 19/04/1987 3000 20 20 RESEARCH DALLAS
7839 Meneo PRESIDENT 17/11/1981 5000 10 10 ACCOUNTING NEW YORK
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30 30 SALES CHICAGO
7876 Asis CLERK 7788 23/05/1987 1100 20 20 RESEARCH DALLAS
7900 Daphne CLERK 7698 03/12/1981 950 30 30 SALES CHICAGO
7766 Cecilia MANAGER 7839 29/04/1981 2875 60
7902 Pirra ANALYST 7566 03/12/1981 3000 20 20 RESEARCH DALLAS
7934 Krin CLERK 7782 23/01/1982 1300 40 40 OPERATIONS BOSTON
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
JOIN – Ejemplo 5
/*
Si se usa LEFT JOIN, se incluye en el
resultado todas las filas de la tabla
que está a la izquierda de la cláusula
JOIN (EMPLOYEES)
LEFT OUTER JOIN es equivalente a LEFT JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e LEFT JOIN departments d
ON (e.department_id=d.department_id)
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 20 RESEARCH DALLAS
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 30 SALES CHICAGO
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 20 RESEARCH DALLAS
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 30 SALES CHICAGO
7698 Asis MANAGER 7839 01/05/1981 2850 30 30 SALES CHICAGO
7782 Edelberto MANAGER 7839 09/06/1981 2450 10 10 ACCOUNTING NEW YORK
7788 Evangelino ANALYST 7566 19/04/1987 3000 20 20 RESEARCH DALLAS
7839 Meneo PRESIDENT 17/11/1981 5000 10 10 ACCOUNTING NEW YORK
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30 30 SALES CHICAGO
7876 Asis CLERK 7788 23/05/1987 1100 20 20 RESEARCH DALLAS
7900 Daphne CLERK 7698 03/12/1981 950 30 30 SALES CHICAGO
7902 Pirra ANALYST 7566 03/12/1981 3000 20 20 RESEARCH DALLAS
7934 Krin CLERK 7782 23/01/1982 1300 40 40 OPERATIONS BOSTON
50 FINANCE MIAMI
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 20 RESEARCH DALLAS
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 30 SALES CHICAGO
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 20 RESEARCH DALLAS
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 30 SALES CHICAGO
7698 Asis MANAGER 7839 01/05/1981 2850 30 30 SALES CHICAGO
7782 Edelberto MANAGER 7839 09/06/1981 2450 10 10 ACCOUNTING NEW YORK
7788 Evangelino ANALYST 7566 19/04/1987 3000 20 20 RESEARCH DALLAS
7839 Meneo PRESIDENT 17/11/1981 5000 10 10 ACCOUNTING NEW YORK
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30 30 SALES CHICAGO
7876 Asis CLERK 7788 23/05/1987 1100 20 20 RESEARCH DALLAS
7900 Daphne CLERK 7698 03/12/1981 950 30 30 SALES CHICAGO
7902 Pirra ANALYST 7566 03/12/1981 3000 20 20 RESEARCH DALLAS
7934 Krin CLERK 7782 23/01/1982 1300 40 40 OPERATIONS BOSTON
50 FINANCE MIAMI
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
JOIN – Ejemplo 6
/*
Si se usa RIGHT JOIN, se incluye en el
resultado todas las filas de la tabla
que está a la derecha de la cláusula
JOIN (DEPARTMENTS)
RIGHT OUTER JOIN es equivalente a RIGHT
JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e RIGHT JOIN departments d
ON (e.department_id=d.department_id)
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 20 RESEARCH DALLAS
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 30 SALES CHICAGO
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 20 RESEARCH DALLAS
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 30 SALES CHICAGO
7698 Asis MANAGER 7839 01/05/1981 2850 30 30 SALES CHICAGO
7782 Edelberto MANAGER 7839 09/06/1981 2450 10 10 ACCOUNTING NEW YORK
7788 Evangelino ANALYST 7566 19/04/1987 3000 20 20 RESEARCH DALLAS
7839 Meneo PRESIDENT 17/11/1981 5000 10 10 ACCOUNTING NEW YORK
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30 30 SALES CHICAGO
7876 Asis CLERK 7788 23/05/1987 1100 20 20 RESEARCH DALLAS
7900 Daphne CLERK 7698 03/12/1981 950 30 30 SALES CHICAGO
7766 Cecilia MANAGER 7839 29/04/1981 2875 60
7902 Pirra ANALYST 7566 03/12/1981 3000 20 20 RESEARCH DALLAS
7934 Krin CLERK 7782 23/01/1982 1300 40 40 OPERATIONS BOSTON
50 FINANCE MIAMI
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
7369 Erminia CLERK 7902 17/12/1980 800 20 20 RESEARCH DALLAS
7499 Fuensanta SALESMAN 7698 20/02/1981 1600 300 30 30 SALES CHICAGO
7521 Margaret SALESMAN 7698 22/02/1981 1250 500 30 30 SALES CHICAGO
7566 Tulla MANAGER 7839 02/04/1981 2975 20 20 RESEARCH DALLAS
7654 Oswaldo SALESMAN 7698 28/09/1981 1250 1400 30 30 SALES CHICAGO
7698 Asis MANAGER 7839 01/05/1981 2850 30 30 SALES CHICAGO
7782 Edelberto MANAGER 7839 09/06/1981 2450 10 10 ACCOUNTING NEW YORK
7788 Evangelino ANALYST 7566 19/04/1987 3000 20 20 RESEARCH DALLAS
7839 Meneo PRESIDENT 17/11/1981 5000 10 10 ACCOUNTING NEW YORK
7844 Sinforoso SALESMAN 7698 08/09/1981 1500 0 30 30 SALES CHICAGO
7876 Asis CLERK 7788 23/05/1987 1100 20 20 RESEARCH DALLAS
7900 Daphne CLERK 7698 03/12/1981 950 30 30 SALES CHICAGO
7766 Cecilia MANAGER 7839 29/04/1981 2875 60
7902 Pirra ANALYST 7566 03/12/1981 3000 20 20 RESEARCH DALLAS
7934 Krin CLERK 7782 23/01/1982 1300 40 40 OPERATIONS BOSTON
50 FINANCE MIAMI
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
JOIN – Ejemplo 7
/*
Si se usa FULL JOIN, se incluye en el
resultado las filas de ambas tablas
involucradas
FULL OUTER JOIN es equivalente a FULL JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e FULL JOIN departments d
ON (e.department_id=d.department_id)
CPEL - CARRERAS UNIVERSITARIAS
PARA PERSONAS CON EXPERIENCIA LABORAL
Funciones de grupo
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Cláusula GROUP BY
Permite aplicar funciones de totalización o
resumen, agrupando las filas según lo
requerido
Devuelve una fila de información
totalizada por cada grupo, aplicando
funciones como SUM, COUNT, AVG, MIN,
MAX, entre otras
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
GROUP BY – Ejemplo 1
/*
GROUP BY va después de WHERE
Primero se aplica el filtro, después se agrupa
En la cláusula GROUP BY deben aparecer todas las
columnas que aparecen en la cláusula SELECT que no
son funciones de grupo
*/
SELECT d.location_id, d.department_id, SUM(e.salary)
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE d.location_id = 1700
GROUP BY d.location_id, d.department_id
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
GROUP BY – Ejemplo 2
/*
HAVING permite filtrar filas después de agrupar
Es "El WHERE del GROUP BY"
*/
SELECT d.location_id, d.department_id, MAX(e.salary)
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE d.location_id = 1700
GROUP BY d.location_id, d.department_id
HAVING COUNT(*) > 5
CPEL - CARRERAS UNIVERSITARIAS
PARA PERSONAS CON EXPERIENCIA LABORAL
La cláusula ORDER BY
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Cláusula ORDER BY
Si no se especifica ORDER BY, no se
puede establecer con seguridad en qué
orden devolverá las filas la base de datos
Cada criterio de ordenación puede ser una
expresión, un alias de columna o la
posición de una columna en la cláusula
SELECT
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
ORDER BY – Ejemplo 1
/*
Ordena por sueldo en forma ascendente
(default)
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
JOIN locations l
ON (d.location_id=l.location_id)
WHERE l.city <> 'Sydney'
ORDER BY e.salary
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
ORDER BY – Ejemplo 2
/*
Especificar criterios para ordenar por
posición de columna en la cláusula SELECT
DESC ordena en forma descendente
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
ORDER BY 4 DESC, 1
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
ORDER BY – Ejemplo 3
/*
Permite ordenar según el valor de una
expresión, incluso basada en columnas
que no aparecen en la cláusula SELECT
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
ORDER BY TO_CHAR(hire_date,'YYYY'),
e.employee_id
CPEL - CARRERAS UNIVERSITARIAS
PARA PERSONAS CON EXPERIENCIA LABORAL
Operadores de conjuntos
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Operadores de conjuntos
UNION y UNION ALL
INTERSECT
MINUS
En Oracle, corresponde al operador
DIFFERENCE
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
UNION …
B
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
… UNION
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
UNION – Ejemplo 1
/*
UNION elimina duplicados
UNION ALL no elimina duplicados
*/
SELECT manager_id
FROM departments
WHERE manager_id IS NOT NULL
UNION
SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
INTERSECT …
B
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
… INTERSECT
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
INTERSECT – Ejemplo 1
/*
INTERSECT devuelve las filas comunes
*/
SELECT manager_id
FROM departments
WHERE manager_id IS NOT NULL
INTERSECT
SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
MINUS …
B–A
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
… MINUS
A minus B
Atención: (A – B) ≠ (B – A)
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
MINUS – Ejemplo 1
/*
MINUS devuelve las filas del resultado del primer
SELECT que no están en el segundo
*/
SELECT manager_id
FROM departments
WHERE manager_id IS NOT NULL
MINUS
SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL
CPEL - CARRERAS UNIVERSITARIAS
PARA PERSONAS CON EXPERIENCIA LABORAL
Subconsultas (subqueries)
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subconsultas o subqueries
Son sentencias SELECT que se utilizan
como parte de otra sentencia SQL
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subquery – Ejemplo 1
/*
Subquery en cláusula WHERE
Este subquery debe devolver sólo un valor
*/
SELECT employee_id, first_name, last_name,
department_id, salary
FROM employees
WHERE salary >= (SELECT salary FROM employees
WHERE first_name = 'Alexander'
AND last_name = 'Hunold')
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subquery – Ejemplo 2
/*
Subquery en cláusula WHERE
Este subquery debe devolver sólo un valor
Condiciones en subqueries se pueden combinar
con otras
*/
SELECT employee_id, first_name, last_name,
department_id, salary
FROM employees
WHERE salary = (SELECT max(salary) FROM employees
WHERE department_id = 30)
AND department_id = 80
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subquery – Ejemplo 3
/*
Subquery en cláusula WHERE
Este subquery puede devolver más de un valor
*/
SELECT d.department_id, d.department_name
FROM departments d
WHERE d.department_id IN (SELECT e.department_id
FROM employees e)
ORDER BY d. department_id
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subquery – Ejemplo 4
/*
Subquery en cláusula WHERE
Este subquery puede devolver más de un valor
ALL significa TODOS
ANY significa POR LO MENOS UNO
*/
SELECT employee_id, first_name, last_name,
department_id, salary
FROM employees
WHERE salary > ALL (SELECT salary FROM employees
WHERE first_name='David')
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subquery – Ejemplo 5
/*
Subquery en cláusula FROM
Este subquery se utiliza como si fuera una tabla
o vista
*/
SELECT e.last_name, e.salary, e.department_id,
m.max_salary
FROM employees e JOIN
(SELECT department_id, max(salary) max_salary
FROM employees
GROUP BY department_id) m
ON e.department_id = m.department_id
WHERE e.salary < m.max_salary
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subquery – Ejemplo 6
/*
Subquery en cláusula SELECT
Este subquery está correlacionado, utiliza columnas
que pertenecen a la sentencia externa
*/
SELECT employee_id, first_name, last_name,
department_id, salary,
(SELECT max(salary)
FROM employees
WHERE department_id=e.department_id) dept_max
FROM employees e
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subquery – Ejemplo 7
/*
Semijoin
Subquery correlacionado
*/
SELECT d.department_id, d.department_name
FROM departments d
WHERE EXISTS
(SELECT 1
FROM employees e
WHERE e.department_id = d.department_id)
ORDER BY d. department_id
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Subquery – Ejemplo 8
/*
Antijoin
Subquery correlacionado
*/
SELECT d.department_id, d.department_name
FROM departments d
WHERE NOT EXISTS
(SELECT 1
FROM employees e
WHERE e.department_id = d.department_id)
ORDER BY d. department_id
CPEL - CARRERAS UNIVERSITARIAS
PARA PERSONAS CON EXPERIENCIA LABORAL
INSERT – Ejemplo 2
/*
INSERT con subquery
*/
INSERT INTO departments_1700
SELECT * FROM departments
WHERE location_id = 1700
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
UPDATE – Ejemplo 2
/*
UPDATE con subquery
*/
UPDATE departments
SET manager_id =
(
SELECT employee_id FROM employees
WHERE first_name = 'Alexander'
AND last_name='Hunold'
)
WHERE department_id=100
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
UPDATE – Ejemplo 3
/*
UPDATE con subquery correlacionado
*/
UPDATE employees e
SET manager_id =
(
SELECT manager_id FROM departments d
WHERE d.department_id = e.department_id
)
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
DELETE – Ejemplo 2
/*
DELETE con subquery en la cláusula WHERE
Las filas a eliminar no deben tener
filas dependientes
*/
DELETE FROM departments
WHERE department_id NOT IN
(SELECT department_id FROM employees)
CPEL - CARRERAS UNIVERSITARIAS
PARA PERSONAS CON EXPERIENCIA LABORAL
Vistas y sinónimos
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Vistas …
Una vista es una consulta nombrada y
almacenada en el diccionario de datos
Una vista se puede utilizar en una consulta
de la misma manera que se hace con una
tabla
Bajo ciertas condiciones, se puede actualizar
datos a través de una vista
No ocupan espacio de almacenamiento
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
… Vistas
Las vistas son útiles para:
Mejorar la seguridad: restringir el acceso a algunas
filas o columnas de una tabla
Ocultar la complejidad: permite ver la combinación de
datos de varias tablas como si fueran una sola o
calcular datos derivados
Presentar los datos de una manera distinta de la
definida en las tablas: cambiar el nombre o el orden
de presentación de las columnas
Aislar las aplicaciones de cambios en la definición de
las tablas
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
Sinónimos …
Un sinónimo es un alias (nombre alterno)
para otro objeto
Tabla
Vista
Subprograma o paquete PL/SQL
Otro sinónimo
Permiten acceder en forma indirecta a los
objetos
CPEL – CARRERAS UNIVERSITARIAS PARA PERSONAS CON EXPERIENCIA LABORAL
… Sinónimos
No ocupan espacio de almacenamiento
Hay sinónimos
Públicos: pertenecen al grupo PUBLIC
Todos los usuarios pertenecen a PUBLIC
Privados: pertenecen a un usuario específico