0% encontró este documento útil (0 votos)
7 vistas

SQLIntro 2020

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas

SQLIntro 2020

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 105

EL LENGUAJE

ESTÁNDAR
SQL
INTRODUCCIÓN
SQL (por sus siglas en ingles Structured
Query Language; en español lenguaje de
consulta estructurada) es un utilizado en
programación, diseñado para administrar, y
recuperar información de sistemas de bases
de datos relacional.​Una de sus principales
características es el manejo del algebra y el
calculo relacional para efectuar consultas
con el fin de recuperar, de forma sencilla,
información de bases de datos, así como
realizar cambios en ellas.
Características:
Estructuras de datos simples (tablas)
Operadores potentes
Periodos de aprendizaje inicial cortos
Mejora de la independencia de datos
Modo de uso dual (interactivo sobre el
gestor de base de datos o inmerso
dentro de un lenguaje de programación)
Optimización (para mantener la
eficiencia de la BD por ejemplo índices)
Las sentencias SQL pueden dividirse
en cuatro tipos:
Lenguaje de manipulación de datos
(DML)
Lenguaje de definición de datos
(DDL)
Control de Transacciones.
Lenguaje de control de datos (DCL)
Sentencias SQL

• SELECT recupero de Datos

• INSERT
• UPDATE
• DELETE lenguaje de manipulación de datos (DML)

• CREATE
• ALTER
• DROP
Lenguaje de definición de datos (DDL)

• COMMIT
• ROLLBACK
Control de Transacciones

• GRANT
• REVOKE Lenguaje de Control de Dato (DCL)
DDL
Proporciona órdenes para definir
esquemas de relación, eliminar
relaciones, crear índices y modificar
esquemas de relación, etc.

DCL
Incluye órdenes que permiten especificar
controles de seguridad a los datos
almacenados como definición de vistas,
especificación de privilegios de acceso,
comprobación de condiciones de
integridad y control de concurrencia.
DML
 Interactivo: lenguaje de consulta
basado en el álgebra relacional y el
calculo relacional de tuplas. También
incluye ordenes para insertar, suprimir y
modificar tuplas de la base de datos
 Inmerso: lenguaje diseñado para utilizar
dentro de otros lenguajes.
Control de Transacciones
Porción del lenguaje que permite confirmar
o deshacer procesos de actualización de
muchos datos.
El sistema de administración de Base de datos DBMS

Server

Tablas de los Diccionario de


usuarios Datos
(esquema SYS)
(esquemas
varios)
Comunicación con el Servidor
Se ingresa la sentencia
SQL por
SQL>
SQL> SELECT
SELECT localidad
localidad
22 FROM
FROM dept;
dept;

La sentencia es
enviada via un archivo
Buffer
Base de
Datos

LOCALIDAD
LOCALIDAD
-------------
-------------
CORDOBA
CORDOBA
ROSARIO
ROSARIO
Los Datos son MENDOZA
MENDOZA
mostrados en el BUENOS
BUENOS AIRES
AIRES
reporte
Una sentencia básica Comando SELECT

SELECT
SELECT lista
lista de
de columnas
columnas (cada
(cada campo
campo separado
separado por
por una
una coma
coma
FROM
FROM lista
lista de
de tablas
tablas (cada
(cada tabla
tabla separada
separada por
por una
una coma)
coma)

• SELECT identifica qué columnas.


• FROM identifica cuál tabla.

Ejemplo
SELECT legajo, apellido, nombre
FROM Alumnos
SELECT <lista_campos>
FROM <lista_tablas>
WHERE <condiciones>

El resultado de la ejecución de


una sentencia SELECT es
siempre otra tabla. Las columnas
de la tabla resultante serán las
que figuren enumeradas tras la
cláusula SELECT, y en el mismo
orden en el que figuran tras ella.
SELECT: (sentencia) se utiliza para listar
los atributos que se desean en el resultado
de una consulta. La lista de atributos puede
sustituirse por * para seleccionar todos los
atributos de todas las relaciones que
aparezcan en la clausula from.
FROM: (clausula) lista las relaciones
(tablas) que se van a examinar en la
evaluación de la expresión.
• Ejemplos
 SELECT talla, color FROM articulos;
• SQL no elimina tuplas (filas) duplicadas
a menos que se indique con la cláusula
opcional DISTINCT
 SELECT DISTINCT codigo_p, cantidad
FROM suministros;
Usando Operadores Aritméticos

SQL> SELECT ename, sal, sal+300


2 FROM emp;

ENAME SAL SAL+300


---------- --------- ---------
KING 5000 5300
BLAKE 2850 3150
CLARK 2450 2750
JONES 2975 3275
MARTIN 1250 1550
ALLEN 1600 1900
...
14 rows selected.
Definición Importante: valores Nulls

• Un valor nulo es un valor que no esta disponible,


no asignado, desconocido o inaplicable.
• Un null no es lo mismo que cero o un espacio en
blanco.

SQL> SELECT ename, job, comm


2 FROM emp;

ENAME JOB COMM


---------- --------- ---------
KING PRESIDENT nulls
BLAKE MANAGER
...
TURNER SALESMAN 0
...
14 rows selected.
Uso de Alias de Columnas

SQL> SELECT ename AS name, sal salary


2 FROM emp;

NAME SALARY
------------- ---------
...

SQL> SELECT ename "Name",


2 sal*12 "Annual Salary"
3 FROM emp;

Name Annual Salary


------------- -------------
...
Eliminando la duplicación de filas

Eliminar filas duplicadas usando DISTINCT


en la cláusula SELECT
SQL> SELECT DISTINCT deptno
2 FROM emp;

DEPTNO
---------
10
20
30
Como limitamos las filas a seleccionar

• Restricción de las filas retornadas usando la


cláusula WHERE.
• La cláusula WHERE sigue a la cláusula FROM

SELECT [DISTINCT] {*| column [alias], ...}


FROM table
[WHERE condition(s)];
Operadores de Comparación

Operador Significado

= Igual a

> Mayor a

>= Mayor que o igual a

< Menos que

<= Menos que o igual a

<> No igual a
Otros Operadores de Comparación

Operador Significado

BETWEEN Entre dos valores (inclusive)


...AND...

IN(list) Igual a uno de una lista de valores

LIKE Igual a un patron de caracteres

IS NULL Es un valor null


Usando el Operador OR
Requiere que alguna condición sea TRUE
para devolver una fila
SQL> SELECT empno, ename, job, sal
2 FROM emp
3 WHERE sal>=1100
4 OR job='CLERK';
EMPNO ENAME JOB SAL
--------- ---------- --------- ---------
7839 KING PRESIDENT 5000
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
...
7900 JAMES CLERK 950
...
14 rows selected.
Usando el operador NOT

SQL> SELECT ename, job


2 FROM emp
3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');

ENAME JOB
---------- ---------
KING PRESIDENT
MARTIN SALESMAN
ALLEN SALESMAN
TURNER SALESMAN
WARD SALESMAN
Reglas de Precedencia

Orden de Evaluación Operador


1 Todos los operadores de
comparación

2 NOT

3 AND
4 OR

• Reemplace las reglas de precedencia usando


paréntesis.
Cláusula ORDER BY
• Ordene las filas con la cláusula ORDER BY
• ASC: orden ascendente, es el default
• DESC: orden descendente
• La cláusula ORDER BY es la última en la
sentencia SELECT.

SQL> SELECT ename, job, deptno, hiredate


2 FROM emp
3 ORDER BY hiredate;

ENAME JOB DEPTNO HIREDATE


---------- --------- --------- ---------
SMITH CLERK 20 17-DEC-80
ALLEN SALESMAN 30 20-FEB-81
...
14 rows selected.
Práctica
Obteniendo datos desde Múltiples Tablas
EMP DEPT
EMPNO ENAME ... DEPTNO DEPTNO DNAME LOC
------ ----- ... ------ ------ ---------- --------
7839 KING ... 10 10 ACCOUNTING NEW YORK
7698 BLAKE ... 30 20 RESEARCH DALLAS
... 30 SALES CHICAGO
7934 MILLER ... 10 40 OPERATIONS BOSTON

EMPNO
EMPNO DEPTNO
DEPTNO LOC
LOC
----- ------- --------
----- ------- --------
7839
7839 10
10 NEW
NEW YORK
YORK
7698
7698 30 CHICAGO
30 CHICAGO
7782
7782 10
10 NEW
NEW YORK
YORK
7566
7566 20 DALLAS
20 DALLAS
7654
7654 30
30 CHICAGO
CHICAGO
7499
7499 30 CHICAGO
30 CHICAGO
...
...
14
14 rows
rows selected.
selected.
Qué es un Join?

• Use un join para consultar datos de mas de una


tabla.
• Escribir la condición en la cláusulaWHERE.
• Prefije el nombre de la columna con el nombre de la
tabla, cuando la misma aparece en mas de una
tabla.

SELECT
SELECT table1.column,
table1.column, table2.column
table2.column
FROM
FROM table1,
table1, table2
table2
WHERE
WHERE table1.column1
table1.column1 == table2.column2;
table2.column2;
Generación de un Producto Cartesiano

EMP (14 filas) DEPT (4 filas)


EMPNO
EMPNO ENAME
ENAME ...
... DEPTNO
DEPTNO DEPTNO
DEPTNO DNAME
DNAME LOC
LOC
------ ----- ...
------ ----- ... ------
------ ------
------ ----------
---------- --------
--------
7839
7839 KING
KING ...... 10
10 10
10 ACCOUNTING
ACCOUNTING NEW
NEW YORK
YORK
7698
7698 BLAKE
BLAKE ...
... 30
30 20
20 RESEARCH
RESEARCH DALLAS
DALLAS
...
... 30
30 SALES
SALES CHICAGO
CHICAGO
7934
7934 MILLER
MILLER ...
... 10
10 40
40 OPERATIONS
OPERATIONS BOSTON
BOSTON

ENAME
ENAME DNAME
DNAME
------
------ ----------
----------
KING
KING ACCOUNTING
ACCOUNTING
“producto BLAKE
BLAKE ACCOUNTING
ACCOUNTING
Cartesiano: ...
...
KING
KING RESEARCH
RESEARCH
14*4=56 filas” BLAKE RESEARCH
BLAKE RESEARCH
...
...
56
56 rows
rows selected.
selected.
Tipos de Joins

Equijoin Non-equijoin Outer join Self join


Extrayendo registros con Equijoins

SQL> SELECT emp.empno, emp.ename, emp.deptno,


2 dept.deptno, dept.loc
3 FROM emp, dept
4 WHERE emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC


----- ------ ------ ------ ---------
7839 KING 10 10 NEW YORK
7698 BLAKE 30 30 CHICAGO
7782 CLARK 10 10 NEW YORK
7566 JONES 20 20 DALLAS
...
14 rows selected.
Uso de Alias de Tabla

• Simplificar consultas usando alias de tablas.

SQL> SELECT emp.empno, emp.ename, emp.deptno,


2 dept.deptno, dept.loc
3 FROM emp, dept
4 WHERE emp.deptno=dept.deptno;

SQL> SELECT e.empno, e.ename, e.deptno,


2 d.deptno, d.loc
3 FROM emp e, dept d
4 WHERE e.deptno=d.deptno;
Recuperando Registros con Non-Equijoins

SQL> SELECT e.ename, e.sal, s.grade


2 FROM emp e, salgrade s
3 WHERE e.sal
4 BETWEEN s.losal AND s.hisal;

ENAME SAL GRADE


---------- --------- ---------
JAMES 950 1
SMITH 800 1
ADAMS 1100 1
...
14 rows selected.
Outer Joins

EMP DEPT
ENAME DEPTNO DEPTNO DNAME
----- ------ ------ ----------
KING 10 10 ACCOUNTING
BLAKE 30 30 SALES
CLARK 10 10 ACCOUNTING
JONES 20 20 RESEARCH
... ...
40 OPERATIONS

No existe en employee
OPERATIONS 40 en
department
Uso de Outer Joins

SQL> SELECT e.ename, d.deptno, d.dname


2 FROM emp e, dept d
3 WHERE e.deptno(+) = d.deptno
4 ORDER BY e.deptno;

ENAME DEPTNO DNAME


---------- --------- -------------
KING 10 ACCOUNTING
CLARK 10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.
Self Joins

EMP (WORKER) EMP (MANAGER)


EMPNO ENAME MGR EMPNO ENAME
----- ------ ---- ----- --------
7839 KING
7698 BLAKE 7839 7839 KING
7782 CLARK 7839 7839 KING
7566 JONES 7839 7839 KING
7654 MARTIN 7698 7698 BLAKE
7499 ALLEN 7698 7698 BLAKE

“MGR en la tabla WORKER es igual a EMPNO en la


tabla MANAGER”
Join de una tabla sobre sí misma

SQL> SELECT worker.ename||' works for '||manager.ename


2 FROM emp worker, emp manager
3 WHERE worker.mgr = manager.empno;

WORKER.ENAME||'WORKSFOR'||MANAG
WORKER.ENAME||'WORKSFOR'||MANAG
-------------------------------
-------------------------------
BLAKE
BLAKE works
works for
for KING
KING
CLARK
CLARK works
works for
for KING
KING
JONES
JONES works
works for
for KING
KING
MARTIN
MARTIN works
works for
for BLAKE
BLAKE
...
...
13
13 rows
rows selected.
selected.
Práctica
Que son las funciones de Grupo?

• Las funciones de Grupo operan en conjuntos de


filas para dar un resultado.
EMP
DEPTNO SAL
--------- ---------
10 2450
10 5000
10 1300
20 800
20 1100
20 3000 “el máximo MAX(SAL)
20 3000 salario en la ---------
20 2975 tabla EMP ” 5000
30 1600
30 2850
30 1250
30 950
30 1500
30 1250
Tipos de funciones de grupo

• Funciones de Promedio AVG


agregación:
Permite obtener Suma SUM
valores
agregados, es Mínimo MIN
decir, un solo
valor que resume
la información de
Máximo MAX
varias filas.
Cantidad COUNT

Agrupación GROUP BY
Uso de las funciones AVG y SUM

• Se puede usar AVG y SUM para datos numéricos.

SQL> SELECT AVG(sal), MAX(sal),


2 MIN(sal), SUM(sal)
3 FROM emp
4 WHERE job LIKE 'SALES%';

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)


-------- --------- --------- ---------
1400 1600 1250 5600
Uso de funciones MIN y MAX

• Se puede usar MIN y MAX con todos los tipos de datos.

SQL> SELECT MIN(hiredate), MAX(hiredate)


2 FROM emp;

MIN(HIRED MAX(HIRED
--------- ---------
17-DEC-80 12-JAN-83
Uso de la función COUNT

• COUNT(*) devuelve el número de filas en una tabla.

SQL> SELECT COUNT(*)


2 FROM emp
3 WHERE deptno = 30;

COUNT(*)
---------
6
Creación de grupos de Datos

EMP
DEPTNO SAL
--------- ---------
10 2450
10 5000 2916.6667
10 1300
20 800 “average DEPTNO AVG(SAL)
20 1100 salary
------- ---------
20 3000 2175 in EMP
20 3000 table 10 2916.6667
20 2975 for each 20 2175
30 1600 department” 30 1566.6667
30 2850
30 1250 1566.6667
30 950
30 1500
30 1250
Uso de la cláusula GROUP BY

• Todas las columnas en la lista de SELECT que no están


en una función de grupos deben estar en la cláusula
GROUP BY.

SQL> SELECT deptno, AVG(sal)


2 FROM emp
3 GROUP BY deptno;

DEPTNO AVG(SAL)
--------- ---------
10 2916.6667
20 2175
30 1566.6667
Agrupando por más de una columna

EMP
DEPTNO JOB SAL
--------- --------- ---------
10 MANAGER 2450
DEPTNO JOB SUM(SAL)
10 PRESIDENT 5000
-------- --------- ---------
10 CLERK 1300
10 CLERK 1300
20 CLERK 800 “suma sal de 10 MANAGER 2450
20 CLERK 1100 la tabla EMP
10 PRESIDENT 5000
20 ANALYST 3000 para cada cargo,
20 ANALYST 6000
20 ANALYST 3000 agrupados por
20 CLERK 1900
20 MANAGER 2975 departmento”
20 MANAGER 2975
30 SALESMAN 1600
30 CLERK 950
30 MANAGER 2850
30 MANAGER 2850
30 SALESMAN 1250
30 SALESMAN 5600
30 CLERK 950
30 SALESMAN 1500
30 SALESMAN 1250
Consulta illegal usando funciones de grupos

• Cualquier columna o expresión en la lista de SELECT


que no es una función de grupo debe estar en la
cláusula GROUP BY.

SQL>
SQL> SELECT deptno,
deptno, COUNT(ename)
SELECT COUNT(ename)
RO UP BY
2FROM
FROM2 emp;
;emp áusula G
t e en l a cl á
n a f altan
Co l u m
SELECT
SELECT deptno,
deptno, COUNT(ename)
COUNT(ename)
**
ERROR
:ERRORatatline
line1:1
ORA-00937:
ORA-00937: not
not aa single-group
single-group group
group function
function
Excluyendo resultados de Grupos: cláusula HAVING

• Usar la cláusula HAVING para restringir grupos


• Las filas se agrupan.
• La funcion de grupo es aplicada.
• Los grupos que cumplen con la clausula HAVING son
mostradas.

SELECT column, group_function


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Uso de la cláusula HAVING

SQL> SELECT job, SUM(sal) PAYROLL


2 FROM emp
3 WHERE job NOT LIKE 'SALES%'
4 GROUP BY job
5 HAVING SUM(sal)>5000
6 ORDER BY SUM(sal);

JOB PAYROLL
--------- ---------
ANALYST 6000
MANAGER 8275
Anidando funciones de Grupos

• Mostrar el máximo promedio de sueldos.

SQL> SELECT max(avg(sal))


2 FROM emp
3 GROUP BY deptno;

MAX(AVG(SAL))
-------------
2916.6667
Uso de una subconsulta para resolver un problema

• “Quién tiene el sueldo mayor que Jones?”

Consulta principal

“Qué empleados tienen sueldo mayor que


? el de Jones?”

Subconsulta

?
“Cuál es el sueldo de Jones?”
Subconsultas

SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);

• La subconsulta (consulta interna) se ejecuta una vez,


antes de la principal.
• El resultado de la subconsulta es usado por la principal
(consulta externa).
Uso de Subconsulta

SQL> SELECT ename


2 FROM emp 2975
3 WHERE sal >
4 (SELECT sal
5 FROM emp
6 WHERE empno=7566);

ENAME
ENAME
----------
----------
KING
KING
FORD
FORD
SCOTT
SCOTT
Guías para usar subconsultas

• Encierre las subconsultas entre paréntesis.


• Ubique las subconsultas en el lado derecho del
operador de comparación.
• No agregue la cláusula ORDER BY clause a la
subconsulta.
• Usar operadores de fila-simple con subconsultas
de fila simple.
• Usar operadores de fila múltiple con subconsultas
de filas múltiple.
Subconsultas de fila simple

• Devuelven una sola fila


• Usan operadores de comparación de fila-simple

Operator Meaning

= Equal to

> Greater than

>= Greater than or equal to

< Less than

<= Less than or equal to

<> Not equal to


Uso de Funciones de Grupo en una subconsulta

SQL> SELECT ename, job, sal


800
2 FROM emp
3 WHERE sal =
4 (SELECT MIN(sal)
5 FROM emp);

ENAME
ENAME JOB
JOB SAL
SAL
----------
---------- ---------
--------- ---------
---------
SMITH
SMITH CLERK
CLERK 800
800
Cláusula HAVING con Subconsultas

• Oracle Server ejecuta las subconsultas primero.


• El servidor Oracle retorna los resultados dentro
de la cláusula Having en la consulta principal.

SQL> SELECT deptno, MIN(sal)


2 FROM emp
3 GROUP BY deptno
800
4 HAVING MIN(sal) >
5 (SELECT MIN(sal)
6 FROM emp
7 WHERE deptno = 20);
Subconsultas de fila Múltiple

• Devuelven más de una fila


• Usar operadores de comparación de fila múltiple

Operador Significado

IN Igual a cualquier miembro de la lista

ANY Igual a algun valor retornado por la


subconsulta

Debe ser igual a todos los valores


ALL
retornados por la subconsulta
Uso del operador ANY en Subconsultas de múltiples filas

SQL> SELECT empno, ename, job 1300


2 FROM emp 1100
800
3 WHERE sal < ANY 950
4 (SELECT sal
5 FROM emp
6 WHERE job = 'CLERK')
7 AND job <> 'CLERK';

EMPNO
EMPNO ENAME
ENAME JOB
JOB
---------
--------- ----------
---------- ---------
---------
7654
7654 MARTIN
MARTIN SALESMAN
SALESMAN
7521
7521 WARD
WARD SALESMAN
SALESMAN
Usando el operador ALL en consultas de filas múltiples

SQL> SELECT empno, ename, job 1566.6667


2 FROM emp 2175
2916.6667
3 WHERE sal > ALL
4 (SELECT avg(sal)
5 FROM emp
6 GROUP BY deptno);

EMPNO
EMPNO ENAME
ENAME JOB
JOB
---------
--------- ----------
---------- ---------
---------
7839
7839 KING
KING PRESIDENT
PRESIDENT
7566
7566 JONES
JONES MANAGER
MANAGER
7902
7902 FORD
FORD ANALYST
ANALYST
7788
7788 SCOTT
SCOTT ANALYST
ANALYST
Comparación de Columnas

En subconsultas de múltiples columnas pueden hacerse

• Comparaciones apareadas (Pairwise)


• Comparaciones no apareadas (Nonpairwise)
Subconsultas con comparación apareada (Pairwise)

Mostrar los detalles de los empleados que son


administrados por el mismo jefe y trabajan en el mismo
departamento que los empleados con legajo 7654 o 7856.

SELECT empno, mgr, deptno


FROM emp
WHERE (mgr, deptno) IN
(SELECT mgr, deptno
FROM emp
WHERE empno IN (7654,7856))
AND empno NOT IN (7654,7856)
Subconsulta con comparación no apareada (Nonpairwise)

Muestra los datos de los empleados que son supervisados


por los mismos jefes que los empleados 174 o 141 y
trabajan en el mismo departamento que los empleados174 o
141.

SELECT employee_id, manager_id, department_id


FROM employees
WHERE manager_id IN
(SELECT manager_id
FROM employees
WHERE employee_id IN (174,141))
AND department_id IN
(SELECT department_id
FROM employees
WHERE employee_id IN (174,141))

AND employee_id NOT IN(174,141);


Uso de una Subconsulta en la cláusula FROM

SELECT a.ename, a.sal,


a.deptno, b.salavg
FROM emp a, (SELECT deptno,
AVG(sal) salavg
FROM emp
GROUP BY deptno) b
WHERE a.deptno = b.deptno
AND a.sal > b.salavg;
Subconsultas Correlacionadas
Son utilizadas por su proceso fila a fila. Cada subconsulta
es ejecutada una vez por cada fila de la consulta
externa.

TOMA
fila candidata de la query principal

EJECUTA
Subconsulta usando el valor de la fila candidata

USA
valores de la subconsulta para calificar
o descalificar la fila candidata
Subconsultas Correlacionadas

SELECT column1, column2, ...


FROM table1 outer
WHERE column1 operator
(SELECT colum1, column2
FROM table2
WHERE expr1 =
.expr2); outer

La subconsulta referencias una columna de una


tabla de la consulta principal
Uso de subconsultas correlacionadas

Encontrar todos los empleados que ganan mas que el


promedio de su departamento.
SELECT ename, sal, deptno
FROM emp outer
WHERE sal >
(SELECT AVG(sal)
FROM emp
WHERE deptno =
outer.deptno) ;

Por cada fila procesada


del la consulta externa
la subconsulta es evaluada.
Uso de Subconsultas Correlacionadas

Mostrar detalles de los empleados que han cambiado


por lo menos dos veces.

SELECT e.empno, ename,e.job


FROM emp e
WHERE 2 <= (SELECT COUNT(*)
FROM job_history
WHERE empno = e.empno);
Uso del operador EXISTS

• El operador EXISTS prueba la existencia de las filas


en el conjunto de resultados de las subconsultas.
• Si un valor de una fila de la subconsulta es hallado:
• La búsqueda no continúa en la subconsulta
• La condicion es marcada como TRUE
• Si una subconsulta no encontro una fila:
• La condición es marcada FALSE
• La búsqueda continúa en la subconsulta
Uso del operador EXISTS

Encontrar los empleados que tienen al menos una persona


reportándole.
SELECT empno, ename, job, deptno
FROM emp outer
WHERE EXISTS ( SELECT 'X'
FROM emp
WHERE mgr =
outer.empno);

EMPNO ENAME JOB DEPTNO


7566 JONES MANAGER 20
7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7788 SCOTT ANALYST 20
7839 KING PRESIDENT 10
7902 FORD ANALYST 20

6 rows selected.
Uso del operador NOT EXISTS

Encuentre todos los departamentos que no tienen


empleados
SELECT deptno, dname
FROM dept d
WHERE NOT EXISTS (SELECT 'X'
FROM emp
WHERE deptno
= d.deptno);
Práctica
Los operadores de conjuntos

A B A B

UNION/UNION ALL

A B

INTERSECT

A B

MINUS
El operador UNION ALL

A B

El operador UNION ALL retorna los resultados


de ambas consultas, incluyendo las duplicadas.
Uso del operador UNION ALL

Mostrar los departamentos actuales y anteriores de


todos los empleados.
SELECT employee_id, job_id, department_id
FROM employees
UNION ALL
SELECT employee_id, job_id, department_id
FROM job_history
ORDER BY employee_id;


Uso del operador INTERSECT

Mostrar el nro de empleado y el trabajo de los que


actualmente tienen un trabajo que ya poseian en su
historia laboral.

SELECT empno, job


FROM emp
INTERSECT
SELECT empno, job
FROM job_history;
El operador MINUS

A B
El operador MINUS

Muestra el nro de empleado de aquellos que no han


cambiado nunca sus trabajos.
SELECT empno,job
FROM emp
MINUS
SELECT empno,job
FROM job_history;


Guias de los operadores de conjuntos

• Las expresiones en la lista del SELECT deben


coincidir en numero de columnas y tipo de dato.
• Se pueden usar parentesis para alterar la secuencia
de ejecución.
• La cláusula ORDER BY :
• Puede aparecer sólo al final de la sentencia
• Aceptara el nombre de la columna, alias o la
posición
Oracle Server y los operadores de conjuntos

• Las filas duplicadas son automáticamente eliminadas


excepto con UNION ALL.
• Los nombre de las columnas de la primera consulta
son las que aparecen en el resultado.
• La salida es ordenad en orden ascendente por
defecto excepto en UNION ALL.
Haciendo coincidir con sentencias SELECT

Uso del operador UNION, mostrar el id de departmento,


localización y fecha de ingreso de todos lo empleados

SELECT deptno, TO_NUMBER(null)


location, hiredate
FROM empl
UNION
SELECT deptno, loc, TO_DATE(null)
FROM dept;


Haciendo coincidir con sentencias SELECT
• Usando el operador UNION, mostrar el id de empleado,
trabajo y sueldo de todos los empleados.

SELECT empno, job,sal


FROM emp
UNION
SELECT empno, job,0
FROM job_history;


Control del orden de las filas

Producir una frase usando dos operadores UNION.

COLUMN a_dummy NOPRINT


SELECT 'cantar' AS "Mi sueño", 3 dummy
FROM dual
UNION
SELECT 'Me gustaria enseñar', 1
FROM dual
UNION
SELECT 'al mundo a', 2
FROM dual
ORDER BY 2;
Práctica
Lenguaje de Manipulación de Datos

• Una sentencia DML es ejecutada cuando:


• Se agregan nuevas filas a una tabla
• Se modifican filas existentes en una tabla
• Se Remueven filas de una tabla
• Una transacción consiste en una colección de
sentencias DML que forman una unidad lógica de
trabajo.
Agregando una nueva fila a la tabla

50 DEVELOPMENT
DETROIT
Nueva Fila
“…inserta una nueva
DEPT fila en la tabla DEPT”
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS DEPT
30 SALES CHICAGO DEPTNO DNAME LOC
40 OPERATIONS BOSTON ------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 DEVELOPMENT
DETROIT
La sentencia INSERT

• Agregue nuevas filas a una tabla usando la


sentencia INSERT.

• Sólo una fila es insertada por vez con esta


sintaxis.

INSERT
INSERT INTO
INTO table
table [(column
[(column [,
[, column...])]
column...])]
VALUES
VALUES (value
(value [,
[, value...]);
value...]);
Inserción de filas con valores Null

• Método Implícito: Omiten la columna de la lista


de columnas.

SQL> INSERT INTO dept (deptno, dname )


2 VALUES (60, 'MIS');
1 row created.

• Metodo explícito:especificar la palabra


clave NULL .
SQL> INSERT INTO dept
2 VALUES (70, 'FINANCE', NULL);
1 row created.
Inserción de valores especiales

• La función SYSDATE registra las fecha y hora actual.

SQL> INSERT INTO emp (empno, ename, job,


2 mgr, hiredate, sal, comm,
3 deptno)
4 VALUES (7196, 'GREEN', 'SALESMAN',
5 7782, SYSDATE, 2000, NULL,
6 10);
1 row created.
Inserción de valores específicos de Fecha

• Agregar un empleado nuevo.


SQL> INSERT INTO emp
2 VALUES (2296,'AROMANO','SALESMAN',7782,
3 TO_DATE('FEB 3, 97', 'MON DD, YY'),
4 1300, NULL, 10);
1 row created.

• Verifique su agregado.

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


----- ------- -------- ---- --------- ---- ---- ------
2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10
Inserción de valores específicos usanado variables de
substitución

• Creamos un script interactivo usando parámetros de


substitución de SQL*Plus.

SQL> INSERT INTO dept (deptno, dname, loc)


2 VALUES (&department_id,
3 '&department_name', '&location');

Enter value for department_id: 80


Enter value for department_name: EDUCATION
Enter value for location: ATLANTA

1 row created.
Creación de un Script con prompts customizados

• ACCEPT almacena el valor en una variable.


• PROMPT mostrar un prompt customizado.
ACCEPT department_id PROMPT 'Please enter the -
department number:'
ACCEPT department_name PROMPT 'Please enter -
the department name:'
ACCEPT location PROMPT 'Please enter the -
location:'
INSERT INTO dept (deptno, dname, loc)
VALUES (&department_id, '&department_name',
'&location');
Copiar filas de otra tabla

• Escribir la sentencia INSERT con la subconsulta.

SQL> INSERT INTO managers(id, name, salary, hiredate)


2 SELECT empno, ename, sal, hiredate
3 FROM emp
4 WHERE job = 'MANAGER';
3 rows created.

• No usa la cláusula VALUES.


• Hacer coincidir los números de columnas en la
sentencia INSERT a aquellos en la subconsulta.
La sentencia UPDATE

• Modificar las filas existentes con las sentencias


UPDATE.

UPDATE
UPDATE table
table
SET
SET column
column == value
value [,
[, column
column == value,
value, ...]
...]
[WHERE
[WHERE condition];
condition];

• Actualizar mas de una fila por vez, si es


requerido.
Actualización de filas en una Tabla

• Fila/s específica/s son modificadas cuando se


muestra la cláusula WHERE.

SQL> UPDATE emp


2 SET deptno = 20
3 WHERE empno = 7782;
1 row updated.

• Todas las filas en la tabla son actualizadas si se


omite la cláusula WHERE.

SQL>
SQL> UPDATE
UPDATE employee
employee
22 SET
SET deptno
deptno == 20;
20;
14
14 rows
rows updated.
updated.
Actualización con subconsultas de columnas
múltiples

• Actualizar el trabajo y departamento del empleado


7698’s con los correpondientes al empleado 7499.

SQL> UPDATE emp


2 SET (job, deptno) =
3 (SELECT job, deptno
4 FROM emp
5 WHERE empno = 7499)
6 WHERE empno = 7698;
1 row updated.
Actualización de filas basadas en otra tabla

• Usar subconsultas en sentencias UPDATE para


actualizar filas en una tabla basado en valores de otras
tablas.

>SQL
SQL> UPDATE
UPDATE employee
employee
22 SET
SET deptno
deptno == (SELECT
(SELECT deptno
deptno
33 FROM
FROM emp
emp
44 WHERE
WHERE )empno
empno == 7788)
7788
55 WHERE
WHERE job
job == (SELECT
(SELECT job
job
66 FROM
FROM emp
emp
77 WHERE
WHERE empno
;)empno= 7788);
= 7788
2.rows
rows updated
updated.2
La sentencia DELETE

• Remover las filas existentes en una tabla usando la


sentencia DELETE.

DELETE
DELETE [FROM]
[FROM] table
table
[WHERE
[WHERE condition];
condition];
Borrando filas de una tabla

• Filas específicas son borradas cuando se


especifica la cláusula WHERE.

SQL>
SQL> DELETE
DELETE FROM
FROM department
department
22 WHERE
WHERE dname
dname == 'DEVELOPMENT';
'DEVELOPMENT';
11 row
row deleted.
deleted.

• Todas las filas en una tabla son borradas si se


omite la cláusula WHERE.

SQL>
SQL> DELETE
DELETE FROM
FROM department;
department;
44 rows
rows deleted.
deleted.
Borrando filas basado en otra tabla

• Usar subconsultas en las sentencias DELETE para


remover filas de una tabla basado en valores desde
otras tablas.

SQL> DELETE FROM employee


2 WHERE deptno =
3 (SELECT deptno
4 FROM dept
5 WHERE dname ='S
6 rows deleted.
UPDATE Correlacionado

UPDATE table1 alias1


SET column = (SELECT expression
FROM table2 alias2
WHERE alias1.column =
Use a correlated subquery to update rows in one table based on rows from another table.
alias2.column);
UPDATE Correlacionado

• Desnormalizar la tabla EMPLOYEES agregando la


columna para almacenar el nombre del
departmento.
• Poblar la tabla usando un update correlacionado.

ALTER TABLE employees


ADD(department_name VARCHAR2(14));

UPDATE employees e
SET department_name =
(SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);
DELETE Correlacionado

DELETE FROM table1 alias1


WHERE column operator
(SELECT expression
FROM table2 alias2
WHERE alias1.column = alias2.column);

Use una subconsulta correlacionada para borrar filas


en una tabla basad en filas de otra tabla.
DELETE Correlacionado

Use una subconsulta correlacionada para borrar sólo


aquellas fils de la tabla EMP también esten en la tabla
EMP_HISTORY.
DELETE FROM employees E
WHERE employee_id =
(SELECT employee_id
FROM emp_history
WHERE employee_id = E.employee_id);
Práctica

También podría gustarte