Está en la página 1de 36

SQL

SUBCONSULTAS
Jorge Iván Triviño Arbeláez
Administración de Bases de Datos
SQL
Lenguaje Estructurado de Consultas, es un lenguaje
para el acceso y manipulación de Bases de datos.

Se compone de diferentes sub-lenguajes, los mas


representativos son:
 DDL – Lenguaje de Definición de Datos

 DML – Lenguaje de Manipulación de Datos

 DCL – Lenguaje de Control de Datos


DDL
 Permite definir la estructura de la base de datos, es
decir, la estructura de almacenamiento,
implementar el modelo entidad – relación.
 Creación , modificación y eliminación de objetos.
 Tabla
 Restricciones
 Vistas
 Procedimiento y funciones
 Disparadores
 Índices
TIPOS DE DATOS
Creación de Tablas
CREATE TABLE nombre_tabla( COLUMNA TIPO [NOT NULL], COLUMNA TIPO [NOT NULL],
...
{CONSTRAINT nombre_clave_primaria PRIMARY KEY (columnas_clave)}
{CONSTRAINT nombre_clave_foránea
FOREIGN KEY(columnas_clave) REFERENCES tabla_detalle(columnas_clave )
{ON DELETE CASCADE} } )
Ejemplo creación de tabla

CREATE TABLE FACTURA(


REFERENCIA VARCHAR2(10) NOT NULL,
DESCRIPCION VARCHAR2(50),
C_PAIS NUMBER(3),
C_CLIENTE NUMBER(5),
IMPORTE NUMBER(12),
CONSTRAINT PK_FACTURA PRIMARY KEY( REFERENCIA )
CONSTRAINT FK_CLIENTE(C_PAIS,C_CLIENTE) REFERENCES
CLIENTE(C_PAIS, C_CLIENTE)
ON DELETE CASCADE);
MANEJO DE FK
 CLAUSULA ON DELETE Y ON UPDATE
 ACCION SET NULL Y CASCADE.

 ON DELETE Set Null Significa que si se borra algún


departamento de la tabla departamentos el campo
departamento de las filas de la tabla areas que le
reverenciaban se pone como Null.
 ON UPDATE CASCADE Significa que si se modifica el
código_dpto de una fila de la tabla departamento,
también se modificara en las filas de la tabla áreas
que le referencian.
Restricciones
Restricciones de columnas:
 NOT NULL: La columna no permitirá valores nulos.
 CONSTRAINT: Permite asociar un nombre a una restricción.
 DEFAULT valor: La columna tendrá un valor por defecto. El SBGD utiliza este valor cuando no
se especifica un valor para dicha columna.
 PRIMARY KEY: Permite indicar que esta columna es la clave primaria.
 UNIQUE: Obliga a que los valores de una columna tomen valores únicos (no puede haber dos
filas con igual valor). Se implementa creando un índice para dicha(s) columna(s).
 CHECK (condición): Permite indicar una condición que debe de cumplir esa columna.

Restricciones de tablas:

 PRIMARY KEY (columna1, columna2...): Permite indicar las columnas que forman la clave
primaria.
 FOREIGN KEY (columna1, columna2....) REFERENCES NombreTabla: Indica las
columnas que son clave ajena referenciando a una clave candidata de otra tabla.
 UNIQUE (columna1, columna2...): El valor combinado de una o varias columnas es único.
EJERCICIO
 Empleado(cod, nombre, fechaNac, email, cargo,
jefe)
 Cargo(cod, descripcion, sueldo)
 Proyecto(cod, nombre, duracion, liderProyecto,
valor)
 EmpleadoProyecto(cod_empleado, cod_proyecto,
horasdedicadas)
Modificación de Tablas
ALTER TABLE <nombre table>
{ ADD <nombre columna nueva> <tipo de dato> [NOT NULL]
MODIFY <nombre columna> [DEFAULT valor | DROP DEFAUL| tipo de dato]
DROP COLUMN<nombre columna> [CASCADE | RESTRICT]
ADD [PRIMARY KEY (nombre columna) |
FOREIGN KEY (nombre columna) REFERENCES nombre_tabla
|UNIQUE (nombre columna) | CHECK (condición)
Renombrar una tabla:
 RENAME TABLE <nombre tabla existente> TO <nuevo
nombre tabla>
EJEMPLOS
Agregar a la tabla áreas el campo Responsable de
tipo varchar2(30)
 alter table areas ADD responsable varchar2(30)
not null;
Modificar el campo nombre de la tabla
departamentos a char(50)
 alter table departamentos MODIFY nombre
varchar2(50);
Eliminación Tablas
DROP TABLE <nombre tabla> [CASCADE, RESTRICT]

– DROP TABLE DEPARTAMENTOS CASCADE


(La tabla se borra, así como las posibles restricciones relativas a
esta tabla)

– DROP TABLE DEPARTAMENTOS RESTRICT


(La tabla se borra sólo si no se hace referencia a ella en
ninguna restricción, p.e. en la definición de claves ajenas)
EJERCICIO
Libro (LI_id, autor, titulo, editor, clase, precio) Usuario (carnet, nombre, direccion)
Clase (CL_id, tiempo_de_prestamo) Prestamo (numero, carnet, fecha_inicio, fecha_fin)

Con las siguientes claves ajenas:


 Libro.clase → Clase
 Prestamo.signatura → Libro
 Prestamo.carnet → Usuario

La información de la tablas referidas debe manejarse en cascada para la eliminación.


1. Cree las tablas del esquema anterior.
2. Agregar a la tabla Usuario el campo Fecha_Ingreso (que sea obligatorio).
3. Agregar a la tabla Libro el campo Prestado (que sea obligatorio), y asignarle por
defecto el valor 1.
4. Agregar al campo clase la condición de que debe ser un entero entre 0 y 5.
5. Imagínese que el tablespace principal se quedo sin espacio, que haría?
DML
El lenguaje de manipulación de datos es el conjunto de
instrucciones utilizados para la insertar, eliminar,
actualizar y seleccionar registros, no procesa objetos,
solo información
Insertar Datos

 INSERT INTO tabla[( campos )] VALUES( lista de valores );

Ejemplo
 INSERT INTO FACTURA VALUES('A111', 'Factura nueva', 1, 5,

50000);
 INSERT INTO FACTURA(C_PAIS, C_CLIENTE) (SELECT C_PAIS,

C_CLIENTE FROM CLIENTE);


Eliminar Datos
 DELETE {FROM} tabla {WHERE condición};

Ejemplo

Delete from Personas;

Delete from Personas where edad<18;


Consultas simples
SELECT [Distinct] lista-del-select FROM nombre-tabla
[WHERE condición]

 SELECT DISTINC codigo_cliente FROM ventas;


Codigo_Cliente
1
2
3
4

 SELECT codigo_cliente FROM ventas


WHERE total > 40000 and total < 300000;
Codigo_Cliente
1
2
Operadores Para Condición
Ordenación en Consultas
 Esta clausula se utiliza para ordenar el resultado de una consulta según la
o las columnas seleccionadas, esta clausula se escribe al final de la
consulta.
 Sintaxis: … ORDER BY CAMPO1 [DESC|ASC][,CAMPON [DESC|ASC]].
(valor por defecto e

 Ejemplo
 SELECT * FROM ventas ORDER BY codigo_cliente DESC, total ASC;
Ventas
Referencia Codigo_Cliente Codigo_Ciudad Total
5 4 13 3200323,01
4 3 11 23750000,2
2 2 11 34000,00
6 2 12 234000,00
3 1 10 23500,12
1 1 12 50000,12
Consultas con agrupación
se utiliza para considerar los registros cuyos ciertos campos tienen el mismo valor, y
procesarlos de la misma manera, para contarlos, sumarlos, hacer la media…,
esto quiere que los valores iguales se agrupan en uno solo.
 Max(campo): calcula el máximo valor almacenado en el campo indicado.

 Min(campo): calcula el mínimo valor almacenado en el campo indicado.

 Sum(campo): Suma los valores almacenados en el campo indicado.

 Avg(campo): calcula el valor medio o promedio de los valores almacenados en


el campo indicado.
 Sintaxis

SELECT [campos|funcion] FROM tabla [WHERE condicion] ;

Ejemplo:
 calcular el total comprado por cada cliente. (el grupo lo forma el
codigo_cliente)
 SELECT codigo_cliente, sum(total) FROM ventas GROUP BY codigo_cliente;
having
 No se pueden usar funciones de agrupación en la cláusula
WHERE de un SELECT, las condiciones relacionadas al
resultado de la función se indican en la clausula having.
 SELECT [campos|funcion] FROM tabla [WHERE condicion]
GROUP BY campos_grupo HAVING function condición valor;

Ejemplo: Mostrar el total comprado por cada cliente, pero que


superen un 1000000 de pesos. (el grupo lo forma el
codigo_cliente)
 SELECT codigo_cliente, sum(total) FROM ventas GROUP BY
codigo_cliente;
Todas las explicaciones que están a continuación utilizan las siguientes dos tablas para ilustrar el efecto de diferentes clases de uniones JOIN.
Tabla Empleado
Tabla Departamento

Consultas multitablas
Consultas realizadas sobre múltiples tablas.

Las siguientes Entidades son utilizadas en los ejemplos explicativos de cada uno
de los tipos de join.

NombreDepartamento IDDepartame Apellido IDDepartamento


nto Rafferty 31 31
Ventas 31 Jordán 33
Ingeniería 33 Steinberg 33
Producción 34 Róbinson 34
Marketing 35 Smith 34
Gaspar 36
Inner Join
Hay dos formas de realizarlo

A. Ejemplo de la sentencia INNER JOIN explícita:

SELECT * FROM empleado INNER JOIN departamento


ON empleado.IDdepartamento = departamento.IDdepartamento

B. Ejemplo de la sentencia JOIN implícita:


SELECT * FROM empleado, departamento
WHERE empleado.IDdepartamento = departamento.IDDepartamento

Resultado
Empleado.Apellido Empleado.IDdepartamento departamento.NombreDepartament departamento.IDDepartamento
o

Smith 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Steinberg 33 Ingeniería 33
Rafferty 31 Ventas 31
Natural join
Es una especialización de la combinación de equivalencia,
anteriormente mencionada. En este caso se comparan todas
las columnas que tengan el mismo nombre en ambas tablas.

Ejemplo de combinación natural:


SELECT * FROM empleado NATURAL JOIN departamento
Empleado.Apellido Empleado.IDdepartamento departamento.NombreDepartame
nto

Smith 34 Producción
Jordán 33 Ingeniería
Róbinson 34 Producción
Steinberg 33 Ingeniería
Rafferty 31 Ventas
Outer join
Mediante esta operación no se requiere que cada
registro en las tablas a tratar tenga un registro
equivalente en la otra tabla. El registro es
mantenido en la tabla combinada así no existe otro
registro que le corresponda.
Existen varios tipos:
 Left join

 Right join

 Full join
Left join
 El resultado de esta operación siempre contiene todos los
registros de la tabla de la izquierda (la primera tabla que se
menciona en la consulta), aun cuando no exista un registro
correspondiente en la tabla de la derecha, para uno de la
izquierda.
SELECT distinct * FROM empleado LEFT OUTER JOIN
departamento ON empleado.IDDepartamento =
departamento.IDDepartamento;
Empleado.Apellido Empleado.IDdepartamento departamento.NombreDepartamento departamento.IDDepartamento

Jordán 33 Ingeniería 33
Rafferty 31 Ventas 31
Róbinson 34 Producción 34
Smith 34 Producción 34
Gaspar 36 NULL NULL
Steinberg 33 Ingeniería 33
Right join
Esta operación inversa a la anterior; el resultado de esta operación siempre contiene
todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la
consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda,
para uno de la derecha.

SELECT * FROM empleado RIGHT OUTER JOIN departamento


ON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido Empleado.IDdepartamento departamento.NombreDepartamento departamento.IDDepartamento

Smith 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Steinberg 33 Ingeniería 33
Rafferty 31 Ventas 31
NULL NULL Marketing 35
Full join
Esta operación presenta los resultados de tabla izquierda y tabla derecha
aunque no tengan correspondencia en la otra tabla. La tabla combinada
contendrá, entonces, todos los registros de ambas tablas y presentará
valores nulos NULLs para registros sin pareja.

SELECT * FROM empleado FULL OUTER JOIN departamento ON


empleado.IDDepartamento= departamento.IDDepartamento
Empleado.Apellido Empleado.IDdepartamento departamento.NombreDepart departamento.IDDepartament
amento o
Smith 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Gaspar 36 NULL NULL
Steinberg 33 Ingeniería 33
Rafferty 31 Ventas 31
NULL NULL Marketing 35
La consulta anterior es equivalente a esta:

SELECT * FROM empleado LEFT JOIN departamento


ON empleado.IDDepartamento = departamento.IDDepartamento
UNION
SELECT * FROM empleado RIGHT JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
WHERE empleado.IDDepartamento IS NULL
Subconsultas

Consultas que contienen otra consulta en su ejecución.


Subconsultas en el select
 Consulta que se ejecuta por cada fila de la consulta
principal, los campos de la subconsulta se muestran en el
resultado general

Ejemplo
 SELECT CO_EMPLEADO, NOMBRE, (SELECT
MIN(FECHA_NOMINA) FROM NOMINAS
WHERE CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO)
PRIMERA_NOMINA
FROM EMPLEADOS;
Subconsultas en el from
 Se utiliza para formar una tabla virtual con el
resultado de la consulta, y procesar su resultado
como una tabla real.

SELECT CO_EMPLEADO, NOMBRE FROM EMPLEADOS JOIN (SELECT


CO_EMPLEADO MIN(FECHA_NOMINA) FROM NOMINAS WHERE
CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO) PRIMERA_NOMINA
ON EMPLEADOS.CO_EMPLEADO=PRIMERA_NOMINA. CO_EMPLEADO
Operadores relacionados de conjnto
OPERADOR EXPLICACION
IN Genera verdadero si el campo esta al
menos una vez en el resultado de la
subconsulta. Se niega con el not
EXIST Igual que el in Se niega con el not
ALL Se utiliza junto con operadores
relacionales como el >,<,>=, <=, ALL
indica que el valor del campo debe ser
siempre por ejemplo > que todos los
datos arrojados en la subconsulta.
SOME O ANY Se utiliza junto con operadores
relacionales como el >,<,>=, <=, ALL
indica que el valor del campo debe ser en
algún momento por ejemplo > que todos
los datos arrojados en la subconsulta.
Subconsultas en el where
Se compara el resultado de una subconsulta en el where

 SELECT descripcion FROM categoría WHERE clasificacion=(SELECT


clasificacion FROM titulo WHERE desc_titulo=’EL AMOR...’)

Cuando la subconsulta genera mas de un campo, para la comparación del


resultado se utiliza operadores relacionales de conjunto
Subconsultas en el having
 Funciona igual que en el where, pero la subconsulta
se ubica en el having para comparar el resultado
de una función de agrupamiento,

SELECT CO_EMPLEADO, SUM (VALOR) AS SUMA FROM NOMINAS GROUP BY


CO_EMPLEADO HAVING SUMA > (SELECT AVG(VALOR) FROM NOMINAS);
EJERCICIOS
Con el esquema HR realizar las siguientes subconsultas:
1. Mostrar por departamento el nombre del jefe, cantidad de empleados y
el maximo salario del pais en la cual esta ubicado.
2. Listar los empleados que tengan un salario mayor al promedio de salarios
del departamento de SALES
3. Listar el departamento con mas empleados
4. Mostrar los compañeros de oficina (que tengan el mismo jefe)de Neena
5. Listar los departamentos en los cuales hayan al menos la misma cantidad
de empleados de que el departamento Marketing y que su jefe tenga un
salario mayor al promedio de los salarios de todos los jefes.

También podría gustarte