Está en la página 1de 49

ADM.

DE BASE DE DATOS

UNIDAD 4

Universidad de Guayaquil
Facultad de Ingeniería Industrial
Inner Join con más de dos tablas

Es lo mismo

La cláusula JOIN nos permite asociar 2 o más tablas, en


base a una columna que tengan en común.
Left JOIN:
• Muestra todos los elementos de la primera tabla, en este caso se parte de todos los
elementos que tiene la tabla A y se compara con los elementos de la tabla B, siempre
aparecen todas las filas de la tabla A que están como datos, pero no aparecen
aquellos de la tabla B que no tengan match.
Left JOIN: Ejemplo
Departamentos
Empleados
Left JOIN: Ejemplo haciendo lo contrario
Departamentos
Empleados
Right JOIN:

• Muestra todos los elementos de la segunda tabla, en este caso se


parte de todos los elementos que tiene la tabla B y se compara con
los elementos de la tabla A, siempre aparecen todas las filas de la
tabla B que están como datos, pero no aparecen aquellos de la tabla
A que no tengan match.
Right JOIN: Ejemplo
Departamentos
Empleados
Outer JOIN:

• FULL OUTER JOIN (o simplemente FULL JOIN) se encarga


de mostrar todas las filas de ambas tablas, sin importar que
no existan coincidencias (usará NULL como un valor por
defecto para dichos casos).
Full JOIN: Ejemplo (CROSS - MariaDB)
Departamentos
Empleados
Resumen
Cláusula IN: Ejemplo 1
La cláusula IN sirve para seleccionar los campos que se encuentran
dentro de los parámetros de la sentencia IN
Departamentos
Cláusula IN: Ejemplo 2
La cláusula IN sirve para seleccionar los campos que se encuentran
dentro de los parámetros de la sentencia IN
Departamentos
GROUP BY
La cláusula GROUP BY se usa para generar valores de agregado para
cada fila del conjunto de resultados. Cuando se usan sin una cláusula
GROUP BY, las funciones de agregado sólo devuelven un valor de
agregado para una instrucción SELECT.

Para ello agregaremos el campo sexo en la tabla Empleados:


Agregamos el tipo de sexo al Empleado
Agregamos el sueldo al Empleado
Calculamos el sueldo de los empleados
clasificados o agrupados por género
Cláusula HAVING
Similar al WHERE pero se utiliza con las funciones de agregación (count,
min, max,avg…). Ya que el WHERE no siempre funciona con estas
sentencias, por ello existe la sentencia HAVING
Empleados

Ya no se imprime el
sueldo del género
femenino porque es
menor a 900
Cláusula DISTINCT
Se utiliza para eliminar duplicados del conjunto de resultados. La cláusula
DISTINCT sólo se puede utilizar con sentencias SELECT.

Empleados
VISTAS
Una vista es una consulta que se presenta como una tabla virtual a partir de un conjunto de
tablas en una base de datos relacional.

Tienen la misma estructura que una tabla: filas y columnas, pero la diferencia es que sólo se
almacena de ellas la definición no los datos. Los datos que se recuperan mediante una
consulta a una vista se presentarán igual que los de una tabla.

No abstrae datos sino una consulta

Sintaxis:

Definición
VISTAS
Se pueden llamar como si fueran una tabla
VISTAS: Sentencias

Borrar vista

Subconsulta en una vista

Nota: Tener cuidado si


la vista no contiene
todos los campos o el
nombre de un campo
fue cambiado, ya que
el alias en una vista se
convierte en un campo
Disparadores - Triggers
¿Qué son los triggers?

• Son aquellos que permiten ejecutar eventos en


la base de datos.
• Evento: Acción que se desencadena cuando
ocurre algo

• Acción que se desencadena cuando ocurre algo


en la BD

• Es un objeto que se crea en la BD, tenemos


varios objetos como:
• Tablas
• Consultas
• Vistas
• Etc.
¿Qué son los triggers?

• Siempre va a estar asociado a una tabla.


• Desencadenaría una función cuando ocurra algo
en la tabla a la que se esta asociando:
• ¿Qué puede ocuriir en esa tabla o qué
acción se puede desencadenar?
• Insertar(INSERT)
• Actualizar(UPDATE)
• Eliminar (DELETE)
Ventajas y Desventajas de Utilizar triggers

• Ventajas:
• Los triggers son capaces de validar todos aquellos valores los cuales no
pudieron ser validados mediante un constraints, asegurando así la integreidad
de los datos.
• Los triggers nos permitirán ejecutar reglas de negocios.
• Utilizando la combinación de eventos nosotros podemos realizar acciones
sumamente complejas.
• Los trigger nos permitirán llevar un control de los cambios realizados en una
tabla. Para esto nos debemos de apoyar de una segunda tabla (Comúnmente
una tabla log).
Ventajas y Desventajas de Utilizar triggers

• Desventajas:
• Los triggers al ejecutarse de forma automática puede
dificultar llevar un control sobre qué sentencias MYSQL
fueron ejecutadas.
• Los triggers incrementa la sobrecarga del servidor.
• Un mal uso de triggers puede tornarse en respuestas lentas
por parte del servidor.
Ejemplo:

• ¿Qué usuarios han ingresan, actualizan o eliminan información en una tabla?

• Se puede resolver mediante un Trigger


• Pasos:
• Copiamos o almacenamos en otra tabla
diferente la información pertinente, por
ejemplo:
• Nombre del usuario
• Fecha de creación del registro
Tener en cuenta:
¿Pero…Cuándo se va a ejecutar la acción?

Trigger

Insertar (INSERT) Actualizar (UPDATE) Eliminar (DELETE)

Antes Después Antes Después Antes Después


Casos:
• Si se va a insertar un registro sin restricción:
• No tiene sentido que la ejecución del Trigger sea antes, en este caso sería
Después.
• Si se va a insertar un registro con restricción:
• Por ejemplo que la edad de la persona que se crea no sea menor a 18. En
este caso sería Antes
• Si se va a eliminar un registro:
• Comprobar si existe, eso se puede hacer Antes.
Ejemplo:
•Almacenar el nombre y tiempo exacto en que se
ha creado el producto

Creamos el Trigger:
• El Trigger va a estar asociado a la tabla de Departamentos

Cuando realiza Puede ejecutarse


A->AFTER la acción al insertar un
I->INSERT registro o con
varios registros

Por cada vez que


se inserte un
La tarea del
registro
Trigger
Nuevo valor que le Función para generar el
estamos dando a momento justo en que ocurre
ese campo la acción
Creamos el Trigger:
Creamos un registro nuevo en Departamentos y
de debería crear el registro en reg_Departamentos
• Lo interesante aquí es que podemos programar los triggers de tal
manera que se ejecuten antes o después, de dichas sentencias;
Dando como resultado seis combinaciones de eventos:

•BEFORE INSERT Acciones a realizar antes de insertar uno más o


registros en una tabla.
•AFTER INSERT Acciones a realizar después de insertar uno más o
registros en una tabla.
•BEFORE UPDATE Acciones a realizar antes de actualizar uno más o
registros en una tabla.
•AFTER UPDATE Acciones a realizar después de actualizar uno más o
registros en una tabla.
•BEFORE DELETE Acciones a realizar antes de eliminar uno más o
registros en una tabla.
•AFTER DELETE Acciones a realizar después de eliminar uno más o
registros en una tabla.
• Diferencias entre AFTER Y BEFORE:
•After se ejecutan después de que todos los datos hayan sido
procesados por la etapa y justo antes de finalizar el trabajo, mientras
before se ejecutan cuando se inicia el trabajo y antes de que la etapa
procese los datos.

• Diferencia entre OLD Y NEW:


• NEW almacena el valor que aporta la consulta a la base de datos
mientras que OLD almacena el valor de las columnas que van a ser
borradas o eliminadas.
Ejemplo:
• Supongamos que queremos actualizar el registro
OLD NEW

Trigger
CODIGO NOMBRE PRECIO_ANTES PRECIO_ACTUAL

6 Bufandas 12 20

Si queremos
AFTER
podemos crear
? nuevos campos
BEFORE
También podemos almacenar
el nombre del usuario que
modificó y la fecha con la hora
Ejemplo:
• Creamos la tabla base para ejecutar el Tigger:

Agregar Fecha de modificación,


Usuario y nueva Fecha
Creamos el Trigger:
Creamos el Trigger:
Actualizamos un registro de la tabla Productos
Trigger ejecutado:
Con MYSQL:
Trigger de eliminación

• Eliminación de Triggers
• Modificación de Triggers

1. Creamos la tabla para que almacene los datos generados por el Trigger
Creamos el Trigger
Eliminamos dato de la tabla Productos:
Modificar Trigger:
Para modificar el trigger vamos a conocer el usuario y fecha en
la que fue eliminado el registro, para ello:

1. Crear los nuevos campos de la tabla Eliminacion_Prod

2. Modificamos el Trigger
1. No existe la sentencia ALTER Trigger, por lo tanto
debemos:
1. DROP
2. CREATE
3. O Modificar los datos desde la consola
Modificar Trigger:
Eliminamos el campo para
comprobar:
Eliminar Trigger:
Tarea
Realizar una consulta básica en MySQL a través de PhpMyAdmin utilizando
INNER JOIN, GROUP BY, HAVING, DISTINCT y TRIGGER:

Supongamos que tenemos dos tablas: "clientes" y "pedidos". La tabla


"clientes" tiene los campos "id_cliente", "nombre", "email" y "telefono",
mientras que la tabla "pedidos" tiene los campos "id_pedido", "id_cliente",
"fecha_pedido" y "importe". Queremos obtener el número de pedidos
realizados por cada cliente que ha realizado al menos dos pedidos, ordenados
por el número de pedidos de mayor a menor.
Pasos a seguir
1. Crear las tablas y agregar algunos datos de prueba.

2. Luego utilizar INNER JOIN para unir las dos tablas por el campo "id_cliente", GROUP
BY para agrupar los resultados por "id_cliente" y COUNT para contar el número de
pedidos realizados por cada cliente. Sin embargo, queremos limitar los resultados a
aquellos clientes que han realizado al menos dos pedidos, por lo que usamos HAVING
COUNT(*) >= 2. Por último, utilizamos DISTINCT para evitar contar los pedidos
duplicados y ordenamos los resultados por el número de pedidos de mayor a menor.

3. Crea un trigger llamado "actualizar_ultima_compra" que se activa después de insertar


un nuevo registro en la tabla "pedidos". El trigger actualiza el campo "ultima_compra"
en la tabla "clientes" con la fecha del pedido más reciente para el cliente
correspondiente.

Nota: Es importante destacar que la columna "ultima_compra" debe estar previamente


creada en la tabla "clientes".

También podría gustarte