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

SQL - Ejemplos Sentencias

Este documento proporciona una introducción a las principales cláusulas y funciones de SQL para consultas, uniones de tablas, ordenamiento, agregación y resumen de datos, incluidas SELECT, WHERE, ORDER BY, GROUP BY, JOIN, SUBQUERY, BETWEEN y más. También cubre funciones matemáticas, lógicas y de fecha como SUM, COUNT, MAX, MIN, AVG, IF, CASE y DATE_DIFF. Por último, presenta conceptos avanzados como triggers, almacenamiento de datos JSON y EXPLAIN para analizar consultas.

Cargado por

Maria Paz
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 DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
48 vistas

SQL - Ejemplos Sentencias

Este documento proporciona una introducción a las principales cláusulas y funciones de SQL para consultas, uniones de tablas, ordenamiento, agregación y resumen de datos, incluidas SELECT, WHERE, ORDER BY, GROUP BY, JOIN, SUBQUERY, BETWEEN y más. También cubre funciones matemáticas, lógicas y de fecha como SUM, COUNT, MAX, MIN, AVG, IF, CASE y DATE_DIFF. Por último, presenta conceptos avanzados como triggers, almacenamiento de datos JSON y EXPLAIN para analizar consultas.

Cargado por

Maria Paz
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 DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 38

Contenido

SELECT................................................................................................................................................4
WHERE...............................................................................................................................................4
UNION DE TABLAS CON WHERE Y ALIAS...........................................................................................5
Alias en campos.............................................................................................................................5
Alias en tablas................................................................................................................................5
ORDER BY...........................................................................................................................................6
Order By con union de Tablas.......................................................................................................7
FUNCIONES DE MATEMÁTICA FINANCIERA......................................................................................7
SUM – Sumar.................................................................................................................................7
COUNT - Contar.............................................................................................................................8
MAX – Valor máximo.....................................................................................................................8
MIN – Valor mínimo......................................................................................................................8
AVG – Promedio............................................................................................................................8
GROUP BY – segmentar la información y poder utilizar funciones matemáticas............................9
GROUP BY - Suma..........................................................................................................................9
GROUP BY – Suma por año y mes.................................................................................................9
GROUP BY – Máximo de ventas por año y mes..........................................................................10
GROUP BY – Mínimo de ventas por año y mes...........................................................................10
GROUP BY – Promedio de ventas por año y mes........................................................................11
GROUP BY – con WHERE..............................................................................................................11
GROUP BY – Todas las combinaciones matemáticas..................................................................12
CLÁUSA IN / NOT IN.........................................................................................................................12
NOT IN con Sub-query.................................................................................................................12
NOT IN – Sub-query + WHERE.....................................................................................................13
NOT IN – Sub-query + WHERE + ORDER BY.................................................................................14
NOT IN + Unión de Tablas............................................................................................................15
BETWEEN.........................................................................................................................................15
LIKE..................................................................................................................................................16
LIKE con Metacaracter %.............................................................................................................16
LIKE con una CONCATENACIÓN previa........................................................................................17
INNER JOIN – UNION DE TABLAS.....................................................................................................18
JOIN con operación matemática dentro de un paréntesis.........................................................18
LEFT JOIN.....................................................................................................................................19
RIGHT JOIN...................................................................................................................................19
FULL JOIN – CLÁUSALA UNION....................................................................................................20
FUNCIONES BÁSICAS EN MYSQL.....................................................................................................20
IF..................................................................................................................................................20
CASE.............................................................................................................................................21
SUBSTR.........................................................................................................................................21
SUBSTR + CASE.............................................................................................................................22
CURRENT_DATE...........................................................................................................................22
CURRENT_TIME...........................................................................................................................22
CURRENT_TIMESTAMP................................................................................................................22
DATE DIFF.....................................................................................................................................22
HAVING – CLÁUSA...........................................................................................................................23
INSERT..............................................................................................................................................24
UPDATE............................................................................................................................................25
DELETE.............................................................................................................................................26
SUBCONSULTAS...............................................................................................................................26
Ejercicios..........................................................................................................................................27
Ejercicio 1 – JOIN, CONCAT, LIKE.................................................................................................27
Ejercicio 2 – WHERE – SUBCONSULTA - LIKE...............................................................................28
Ejercicio 3 – COUNT.....................................................................................................................28
Ejercicio 4 – SUM – JOIN - BETWEEN...........................................................................................28
Ejercicio 5 – MAX - JOIN..............................................................................................................28
FUNCIONES MYSQL.........................................................................................................................29
AADDATE.....................................................................................................................................29
AES_ENCRYPT..............................................................................................................................29
AES_DECRYPT..............................................................................................................................29
LENGHT........................................................................................................................................30
DATEDIFF.....................................................................................................................................30
RUTINA ALMACENADA....................................................................................................................31
TRIGGER...........................................................................................................................................31
Ejemplo INSERT1..........................................................................................................................31
Ejemplo INSERT2..........................................................................................................................32
Ejemplo UPDATE..........................................................................................................................32
JSON.................................................................................................................................................33
INSERT dato JSON........................................................................................................................33
SELECT – búsqueda dato JSON....................................................................................................33
UPDATE – a un valor de JSON......................................................................................................33
UPDATE – eliminar un valor de JSON..........................................................................................34
EXPLAIN...........................................................................................................................................35
EJERCICIOS AVANZADOS.................................................................................................................36
Ejercicio 1 – COUNT EN SELECT – JOIN - WHERE.........................................................................36
Ejercicio 2 JOIN – GROUP BY - ODER BY - LIMIT..........................................................................36
Ejercicio 3 – JOIN – WHERE – GROUP BY – ORDER BY - LIMIT....................................................37
Ejercicio 4 – Subconsulta Encapsulada – lo mas complejo.........................................................38
SELECT
SELECT * FROM productos
WHERE Prod_Precio>0 AND (Prod_Status=0 OR (Prod_Status = 1 AND
Prod_ProvId=97))

WHERE
SELECT Ventas_Fecha, Ventas_CliId, Ventas_Total FROM ventas
WHERE Ventas_Fecha > '2018-01-03' AND Ventas_Fecha < '2018-01-10' AND
Ventas_CliId<>1
AND Ventas_Total > 1000
UNION DE TABLAS CON WHERE Y ALIAS
Alias en campos
SELECT Ventas_Fecha AS 'Fecha', Ventas_NroFactura AS 'Nro. Factura',
Ventas_CliID AS 'ID. Cliente',
Cli_RazonSocial AS 'Razón Social', Ventas_Total AS 'Total'
FROM ventas, clientes
WHERE Ventas_CliID=Cli_Id

Alias en tablas
SELECT Ventas_CliID, Cli_RazonSocial, Ventas_NroFactura, Ventas_Fecha,
VD_ProdID, prod_descripcion,
prod_color, vd_cantidad, vd_precio
FROM clientes AS c, ventas AS v, ventas_detalle AS d, productos AS P
WHERE v.Ventas_CliId=c.Cli_Id AND
d.VD_ProdId=P.Prod_Id AND
v.Ventas_Id=d.VD_VentasId
ORDER BY
SELECT * FROM clientes ORDER BY Cli_RazonSocial

SELECT * FROM Productos ORDER BY Prod_Status, Prod_Precio DESC

SELECT * FROM Productos ORDER BY Prod_ProvId DESC


Order By con union de Tablas
SELECT * FROM ventas_detalle, productos WHERE VD_ProdID=Prod_Id
ORDER BY Prod_ProvId DESC

FUNCIONES DE MATEMÁTICA FINANCIERA


SUM – Sumar
SELECT SUM(Ventas_Total) AS 'Total ventas' FROM Ventas

Traer la lista de productos vendidos (solo su ID) sin repeticiones y con el total vendido
por cada uno
SELECT VD_ProdID AS Producto, SUM((VD_Precio * VD_Cantidad)) AS Total
FROM ventas_detalle
GROUP BY Producto

SELECT SUM(Ventas_Total) AS 'Total ventas' FROM ventas


WHERE MONTH(Ventas_Fecha)=1 AND YEAR(ventas_Fecha)=2018
COUNT - Contar
SELECT COUNT(*) AS 'Cantidad ventas' FROM ventas
WHERE MONTH(Ventas_Fecha)=1 AND YEAR(ventas_Fecha)=2018

MAX – Valor máximo


SELECT MAX(Ventas_Total) AS 'Venta Máxima' FROM ventas
WHERE MONTH(Ventas_Fecha)=1 AND YEAR(ventas_Fecha)=2018

MIN – Valor mínimo


SELECT MIN(Ventas_Total) AS 'Venta Mínima' FROM ventas
WHERE MONTH(Ventas_Fecha)=1 AND YEAR(ventas_Fecha)=2018

AVG – Promedio
SELECT AVG(Ventas_Total) AS 'Venta Promedio' FROM ventas
WHERE MONTH(Ventas_Fecha)=1 AND YEAR(ventas_Fecha)=2018
GROUP BY – segmentar la información y poder utilizar funciones
matemáticas
GROUP BY - Suma
SELECT Ventas_Fecha, sum(Ventas_Total) AS Total
FROM Ventas
GROUP BY Ventas_Fecha

GROUP BY – Suma por año y mes


SELECT year(Ventas_Fecha) AS Año,
Month(Ventas_Fecha) AS Mes,
sum(Ventas_Total) AS Total
FROM Ventas
GROUP BY Año, Mes
GROUP BY – Máximo de ventas por año y mes
SELECT year(Ventas_Fecha) AS Año,
Month(Ventas_Fecha) AS Mes,
max(Ventas_Total) AS Máximo
FROM Ventas
GROUP BY Año, Mes

GROUP BY – Mínimo de ventas por año y mes


SELECT year(Ventas_Fecha) AS Año,
Month(Ventas_Fecha) AS Mes,
min(Ventas_Total) AS Mínimo
FROM Ventas
GROUP BY Año, Mes
GROUP BY – Promedio de ventas por año y mes
SELECT year(Ventas_Fecha) AS Año,
Month(Ventas_Fecha) AS Mes,
AVG(Ventas_Total) AS Promedio
FROM Ventas
GROUP BY Año, Mes

GROUP BY – con WHERE


SELECT year(Ventas_Fecha) AS Año,
Month(Ventas_Fecha) AS Mes,
sum(Ventas_Total) AS Total
FROM Ventas
WHERE Ventas_CliID=1
GROUP BY Año, Mes
GROUP BY – Todas las combinaciones matemáticas
SELECT year(Ventas_Fecha) AS Año,
Month(Ventas_Fecha) AS Mes,
sum(Ventas_Total) AS Total,
MIN(Ventas_Total) AS Mínimo,
MAX(Ventas_Total) AS Máximo,
AVG(Ventas_Total) AS Promedio,
COUNT(*) AS Operaciones
FROM Ventas
WHERE Ventas_CliID=1
GROUP BY Año, Mes

CLÁUSA IN / NOT IN
Lista de todos los clientes que no han comprado
Se utiliza una subquery, donde la subquery irá a buscar el listado DISTINTO de clientes que
hayan tenido una venta. A su vez, se generará una consulta para identificar a TODOS los
clientes que NO se encuentren en la subquery, de esta forma, se identifican los clientes
que no han comprado. Así se podrían llamar para fidelizarlos
NOT IN con Sub-query
SELECT Cli_ID AS 'Nro. Cliente', Cli_RAzonSocial AS Nombre
FROM Clientes
WHERE Cli_Id NOT IN (SELECT DISTINCT(Ventas_CliID) AS Cliente FROM
ventas)
NOT IN – Sub-query + WHERE
LISTA de todos los clientes que NO han comprado en Febrero-2018
SELECT Cli_ID AS 'Nro. Cliente', Cli_RAzonSocial AS Nombre
FROM Clientes
WHERE Cli_Id NOT IN (SELECT DISTINCT(Ventas_CliID) AS Cliente FROM ventas
WHERE Ventas_Fecha >= '2018-02-01' AND Ventas_Fecha < '2018-03-01')

LISTA de clientes que SI han comprado en Febrero-2018


SELECT Cli_ID AS 'Nro. Cliente', Cli_RAzonSocial AS Nombre
FROM Clientes
WHERE Cli_Id IN (SELECT DISTINCT(Ventas_CliID) AS Cliente FROM ventas
WHERE Ventas_Fecha >= '2018-02-01' AND Ventas_Fecha < '2018-03-01')
NOT IN – Sub-query + WHERE + ORDER BY
LISTA de clientes que SI han comprado en Febrero-2018 ORDENADOS por su ID
SELECT Cli_ID AS 'Nro. Cliente', Cli_RAzonSocial AS Nombre
FROM Clientes
WHERE Cli_Id IN (SELECT DISTINCT(Ventas_CliID) AS Cliente FROM ventas
WHERE Ventas_Fecha >= '2018-02-01' AND Ventas_Fecha < '2018-03-01')
ORDER BY Cli_Id

TODOS los Productos que NO se han vendido


SELECT Prod_Id, Prod_Descripcion
FROM productos
WHERE Prod_Id NOT IN
(SELECT DISTINCT(VD_ProdID) FROM ventas_detalle)
NOT IN + Unión de Tablas
TODOS los Productos que NO se han vendido en una fecha
SELECT Prod_Id, Prod_Descripcion
FROM productos
WHERE Prod_Id NOT IN
(SELECT DISTINCT(VD_ProdID) FROM ventas_detalle, ventas
WHERE VD_VentasId=Ventas_Id AND Ventas_Fecha > '2018-01-01')

BETWEEN
SELECT Ventas_Fecha, Ventas_CliID, Ventas_Total
FROM ventas
WHERE Ventas_Fecha BETWEEN '2018-01-01' AND '2018-01-04'
LIKE
Se utiliza para buscar palabras dentro de un texto

LIKE con Metacaracter %


Buscar las descripciones que terminen con AD
SELECT Prod_Id, Prod_Descripcion, Prod_Color
FROM productos
WHERE Prod_Descripcion LIKE '%AD'

Buscar las descripciones que comiencen con AD (tiene más sentido)


SELECT Prod_Id, Prod_Descripcion, Prod_Color
FROM productos
WHERE Prod_Descripcion LIKE 'AD%'
TODOS los registros que tengan en cualquier parte de la descripción AD
SELECT Prod_Id, Prod_Descripcion, Prod_Color
FROM productos
WHERE Prod_Descripcion LIKE '%AD%'

LIKE con una CONCATENACIÓN previa


Se concatenará la búsqueda de un texto en una descripción para dos campos distintos.
Esto quiere decir que si en campo 1 no encuentra el texto AD pero si lo encuentra en
campo 2, mostrará de todas formas el resultado
SELECT Prod_Id, Prod_Descripcion, Prod_Color
FROM productos
WHERE CONCAT(Prod_Descripcion, Prod_Color) LIKE '%AD%'
INNER JOIN – UNION DE TABLAS
JOIN [Tabla que quiero unir] ON [Campos que unen esas tablas]

Es importante mantener el orden de unión de tablas en el caso que queramos unir más de una. Se
ejecutará con error si no se mantiene el orden de las tablas que se van a unir.

FROM ventas
JOIN ventas_detalle ON VD_VentasId = Ventas_Id
JOIN productos ON VD_ProdId=Prod_Id
JOIN proveedores ON Prod_ProvID=Prov_ID
JOIN clientes ON Ventas_CLiID=Cli_ID

En este ejemplo, lo primero es mirar la Tabla Ventas


Luego se unirá la tabla Ventas con la tabla Ventas_Detalle
Luego se unirá la tabla Ventas_Detalle con Productos
Luego se unirá la tabla Producto con Proveedores
Finaliza uniendo la tabla Ventas con Cliente

INNER JOIN es lo mismo que JOIN

JOIN con operación matemática dentro de un paréntesis


SELECT Ventas_Fecha, Ventas_NroFactura, Ventas_CliID, Cli_RazonSocial,
VD_ProdId, Prod_Descripcion, Prod_ProvId,
Prov_Nombre, VD_Cantidad, VD_Precio, (VD_Cantidad * VD_Precio) AS
Parcial
FROM ventas
JOIN ventas_detalle ON VD_VentasId = Ventas_Id
JOIN productos ON VD_ProdId=Prod_Id
JOIN proveedores ON Prod_ProvID=Prov_ID
JOIN clientes ON Ventas_CLiID=Cli_ID
LEFT JOIN
Se utiliza para ordenar desde la izquierda los campos de la table principal que busco.

Otra diferencia, es que si ordeno desde la izquiera la tabla que busco, me traerá todos los datos de
esa tabla, incluso si no tienen datos guardados (NULL). En cambio, si se utiliza solo JOIN, solo
arrojará los datos existentes, dejará los NULL fuera

Query con LEFT JOIN


SELECT * FROM Alumnos
LEFT JOIN Cursos ON Curso_AlumnoID=Alumno_Id

Query con JOIN


SELECT * FROM Alumnos
JOIN Cursos ON Curso_AlumnoID=Alumno_Id

RIGHT JOIN
SELECT * FROM Alumnos
RIGHT JOIN Cursos ON Curso_AlumnoID=Alumno_Id
FULL JOIN – CLÁUSALA UNION
Es la unión entre el LEFT JOIN y el RIGHT JOIN

FULL JOIN no es soportado por el motor MySQL asi que se hará una simulación, se unirá con una
cláusala llamada UNION. La condición es que se deben unir de 2 tablas distintas

Se ejecutará 2 Select y se unirán


SELECT * FROM alumnos LEFT JOIN cursos ON Curso_AlumnoID=Alumno_ID
UNION
SELECT * FROM alumnos RIGHT JOIN cursos ON Curso_AlumnoID=Alumno_Id

FUNCIONES BÁSICAS EN MYSQL


IF
IF se utiliza para entregar una condición.

Ejemplo, si tenemos un campo estado, que arroja solo 1 y 0, el usuario no entiende qué significan
esos nros, por lo mismo, se utiliza una condición para mostrar la descripción de esos números.

IF(Campo=1,’inmediamente después de la coma viene el valor VERDADERO’,’luego viene el valor


FALSO’)
SELECT Prod_Id, Prod_Descripcion,
IF(Prod_Status=1,'Habilitado','Deshabilitado') AS Estado
FROM Productos
CASE
Si se necesita evaluar más de 2 condiciones, se debe usar CASE. Utilizar CASE es más prolijo que
utilizar IF
SELECT Prod_Id, Prod_Descripcion,
CASE WHEN Prod_StatuS=1
THEN 'Habilitado'
WHEN Prod_StatuS=0 THEN 'Deshabilitado'
WHEN Prod_StatuS=2 THEN 'Otro Estado'
END AS Estado
FROM Productos

OTRA FORMA DE ESCRIBIRLO PERO TRAE EL MISMO RESULTADO


SELECT Prod_Id, Prod_Descripcion,
CASE Prod_status WHEN 1 THEN 'Habilitado'
WHEN 0 THEN 'Deshabilitado'
WHEN 2 THEN 'Otro Estado'
END AS Estado
FROM Productos

SUBSTR
Divide texto dentro de una descripción. Se incorpora el largo del texto a dividir dentro de SUBSTR
SELECT Prod_Id, Prod_Descripcion, SUBSTR(Prod_Descripcion,1,10) AS Parte
FROM Productos
SUBSTR + CASE
SELECT Prod_Id, Prod_Descripcion, CASE SUBSTR(Prod_Descripcion,1,1)

WHEN 'A' THEN 'Letra A'


WHEN 'B' THEN 'Letra B'
END AS Ejercicio
FROM Productos

CURRENT_DATE
SELECT CURRENT_DATE

CURRENT_TIME
SELECT CURRENT_TIME

CURRENT_TIMESTAMP
SELECT CURRENT_TIMESTAMP

DATE DIFF
Diferencia en día entre fechas
SELECT DATEDIFF('2018-06-01','2018-01-01') AS 'Diferencia en días'
Diferencia en días desde la fecha de hoy en comparación con la fecha en campo Ventas_Fecha
asociado al nro de Factura
SELECT DATEDIFF(CURRENT_DATE,Ventas_Fecha) AS 'Diferencia en días',
Ventas_NroFactura FROM Ventas

HAVING – CLÁUSA
Es el WHERE que se ejecuta después del GROUP BY

HAVING se utiliza para poder utilizar los Alias, con los resultados de salida y no los de entrada. Ej:
si tengo un dato de salida AS Total, ese Total lo puedo utilizar con HAVING, cosa que no podría ser
utilizado por un WHERE
SELECT YEAR(Ventas_Fecha) AS Ano, MONTH(Ventas_Fecha) AS Mes,
SUM(Ventas_Total) AS Total
FROM ventas
GROUP BY Ano, Mes
HAVING Total > 1000000

SELECT YEAR(Ventas_Fecha) AS Ano, MONTH(Ventas_Fecha) AS Mes,


SUM(Ventas_Total) AS Total
FROM ventas
GROUP BY Ano, Mes
HAVING Mes > 4
SELECT Prod_Id, Prod_Descripcion, Prod_Color, SUM(VD_Cantidad) AS
Unidades
FROM productos
JOIN ventas_detalle ON Prod_Id=VD_ProdID
JOIN ventas ON VD_VentasID=Ventas_ID
WHERE Prod_ProvID=1 AND Ventas_Fecha BETWEEN '2018-01-01' AND '2018-02-
14'
GROUP BY Prod_Id
HAVING Unidades >20
ORDER BY Unidades DESC

INSERT
Insertar datos en una tabla
INSERT INTO Alumnos (Alumno_Nombre) VALUES ('Pedro Narvaja')
UPDATE
Actualiza los datos de las tablas.

Ej: Deshabilitar todos los productos


UPDATE productos SET Prod_Status = 0

Habilitar SOLO los que tengan precio cargado

Habilita los que tengan precio mayo a 0 y le incorpora un 1 a VentaSuspendida


UPDATE productos SET Prod_Status = 1, Prod_VentaSuspendida=1
WHERE Prod_Precio > 0

La siguiente sentencia, no tengo imagen porque me faltó agragar campo Prov_CompraSuspendida


en Tabla Proveedores
UPDATE productos SET Prod_Precio = 100
WHERE Prod_ProvId IN
(SELECT Prod_Id FROM proveedores WHERE Prov_CompraSuspendida=0)
DELETE
Borrar registros de una tabla
DELETE FROM alumnos WHERE Alumno_Id=4

NO tengo imagen a esto porque creo que no me funcionó xD


DELETE FROM ventas_detalle
WHERE VD_ProdId IN (SELECT Prod_Id FROM productos WHERE Prod_Status = 1)

SUBCONSULTAS
No entendí ninguno de los 2 ejemplos xDDDD

SELECT Prod_Id AS 'Articulo',


Prod_Descripcion AS 'Descripción',
(SELECT MAX(Ventas_Fecha) AS UltF FROM ventas
JOIN ventas_detalle ON Ventas_ID=VD_VentasID
WHERE Prod_Id=1633) AS UltFecha
FROM productos
WHERE Prod_Id=1633
SELECT Prod_Id AS 'Articulo',
Prod_Descripcion AS 'Descripción',
(SELECT MAX(Ventas_Fecha) AS UltF FROM ventas
JOIN ventas_detalle ON Ventas_ID=VD_VentasID
WHERE Prod_Id=1633) AS UltFecha,
(SELECT COUNT(DISTINCT(Ventas_CliId)) AS xdddd FROM
Ventas
JOIN ventas_detalle ON Ventas_ID=VD_VentasID
WHERE Prod_Id=1633) AS CantCli
FROM productos
WHERE Prod_Id=1633

Ejercicios
Ejercicio 1 – JOIN, CONCAT, LIKE
Traer todos los artículos que en su descripción o color o nombre de proveedor tenga el string
FERRO
SELECT Prod_ID, Prod_descripcion, Prod_color, Prov_ID, Prov_nombre
FROM proveedores
JOIN productos ON Prov_ID = Prod_ProvID
WHERE CONCAT (prod_descripcion, prod_color, prov_nombre) LIKE '%FERRO%'
Ejercicio 2 – WHERE – SUBCONSULTA - LIKE
Traer todos los artículos cuya descripción tenga el string CINTA y que tenga ventas realizadas
SELECT Prod_ID, Prod_descripcion
FROM productos
WHERE Prod_Id IN (SELECT VD_ProdId FROM ventas_detalle) AND
Prod_Descripcion LIKE '%CINTA%'

NO TENGO IMAGENES porque la BD no tenía los datos que tenía el profe

Ejercicio 3 – COUNT
Traer la cantidad de productos que se han vendido
SELECT COUNT(DISTINCT (VD_ProdID)) AS Cantidad
FROM productos
JOIN ventas_detalle ON Prod_ID = VD_ProdId

Ejercicio 4 – SUM – JOIN - BETWEEN


Traer el total vendido de los productos que fueron vendidos entre el 02/01/2018 y el 10/01/2018 y
cuyo proveedor se encuentre entre el 2 y el 100
SELECT SUM((VD_precio * VD_Cantidad)) AS 'Total Vendido'
FROM ventas_detalle
JOIN productos ON VD_ProdID = Prod_ID
JOIN ventas ON VD_VentasId = Ventas_Id
WHERE (Ventas_Fecha BETWEEN '2018-01-02' AND '2018-01-10') AND
(Prod_ProvId BETWEEN 2 AND 100)

Ejercicio 5 – MAX - JOIN


Traer la factura de valor máximo que haya tenido en sus ítems vendidos, el producto 656
SELECT MAX(Ventas_total) AS 'Valor Máximo'
FROM ventas
JOIN ventas_detalle ON VD_VentasID = Ventas_Id
WHERE VD_ProdID = 656
FUNCIONES MYSQL
AADDATE
Para incorporar cantidad de días a una fecha
SELECT Ventas_Fecha AS Fecha, ADDDATE(Ventas_Fecha,30) AS
Fecha_Vencimiento
FROM ventas

AES_ENCRYPT
Encriptación de datos, muy importante recordar cuál fue la clave se puso para encriptar los datos,
esa clave va como 2do dato dentro de la función entre ‘ ‘
SELECT Prod_Descripcion, AES_ENCRYPT(Prod_Descripcion, 'Masters del
Desarrollo') AS DescripEncrypt
FROM productos

AES_DECRYPT
Desencriptación de datos
SELECT Prod_Descripcion, AES_DECRYPT(AES_ENCRYPT(Prod_Descripcion,
'Masters del Desarrollo'),
'Masters del Desarrollo') AS Desencriptado
FROM productos
LENGHT
Visualizar el largo de una descripción
SELECT Prod_descripcion, LENGTH(prod_descripcion) AS Largo
FROM Productos

DATEDIFF
Intervalo de fechas
SELECT DATEDIFF(Ventas_Fecha, NOW()) AS Intervalo
FROM Ventas
RUTINA ALMACENADA
La llamada de Rutina se hace con un CALL si tiene parámetros la rutina, se debe incluir dentro del
paréntesis, en este ejemplo, BorroAlumno se dedicará a borrar el ID del alumno 4
CALL BorroAlumno(4);

TRIGGER
Son disparadores. Primero se debe crear el disparador asociado a la tabla donde se desea realizar
un cambio y se inserta la sentencia SQL que se desea ejecutar.

Ejemplo INSERT1
Por ejemplo, si se desea insertar nombres en la tabla Alumnos, pero queremos que los datos
INSERT sean en MAYUSCULO, sería de la siguiente manera:
BEGIN
SET NEW.Alumno_Nombre = UCASE(NEW.Alumno_Nombre);
END
NEW es para insertar
OLD es para los datos ya ingresados
Los OLD se usan en los UPDATES
UCASE es la función que cambia el nombre a MAYUSCULA

Una vez con el Trigger creado, se debe realizar la sentencia SQL de INSERT para probar el Trigger
INSERT INTO alumnos (Alumno_Id, Alumno_Nombre) VALUES (8, 'mariana')
Ejemplo INSERT2
Trigger para insertar Ventas y obligar a que si el dato sea negativo, dejarlo en positivo con un 0
BEGIN
IF NEW.Ventas_Total<0 THEN SET NEW.Ventas_Total=0;
END IF;
END

INSERT INTO ventas (Ventas_Fecha, Ventas_NroFactura, Ventas_Total)


VALUES ('2019-03-04', 158, -156.58)

Ejemplo UPDATE
Si un Trigger está asociado a una tabla con un UPDATE eso significa que cada vez que se realice un
UPDATE ese Trigger se ejecutará, por lo tanto, hay que ser cuidadoso en cómo generar la
sentencia del Trigger.
En este ejemplo, SI un NUEVO Precio es distinto a un Precio ANTIGUO, se continua con la
sentencia del Trigeer
BEGIN
IF NEW.Prod_Precio <> OLD.Prod_Precio THEN
INSERT INTO productos_historial (PH_ProdId, PH_PrecioANT, PH_PrecioNEW,
PH_Usuario)
VALUES (NEW.Prod_Id, OLD.Prod_Precio, NEW.Prod_Precio, CURRENT_USER);
END IF;
END
JSON
INSERT dato JSON
INSERT INTO productos (Prod_descripcion, Prod_Propiedades) VALUES
('Producto con JSON', '{"propiedades": {"electrico":true,
"garantia":true, "nuevo":false, "presentaFalla":true}}')

SELECT – búsqueda dato JSON


SELECT Prod_Id, Prod_Descripcion, Prod_Propiedades-
>'$.propiedades.electrico' AS Electrico
FROM Productos

UPDATE – a un valor de JSON


UPDATE productos SET Prod_Propiedades =
JSON_REPLACE(Prod_Propiedades,'$.propiedades.electrico','false')
WHERE Prod_Id=6993
UPDATE – eliminar un valor de JSON
UPDATE productos SET Prod_propiedades =
JSON_REMOVE(Prod_Propiedades,'$.propiedades.presentaFalla')
WHERE Prod_Id = 6993
EXPLAIN
LA IDEA DE EXPLAIN es para revisar y mejorar nuestras consultas. La performance de nuestras
consultas, para saber si hemos creados los índices correctos
SELECT Prod_id, Prod_descripcion, Ventas_Fecha, SUM(VD_Cantidad *
VD_Precio) AS Vendidos
FROM productos
JOIN ventas_detalle ON VD_ProdID=Prod_Id
JOIN ventas ON VD_VentasID=Ventas_ID
WHERE ventas_fecha BETWEEN '2018-01-02' AND '2018-01-07'
GROUP BY Prod_Id, Prod_descripcion, Ventas_Fecha
ORDER BY Prod_Id

ESTAS SON LAS TABLAS QUE TUVO QUE CONSULTAR PARA CORRER EL SELECT ANTERIOR
EXPLAIN SELECT Prod_id, Prod_descripcion, Ventas_Fecha, SUM(VD_Cantidad *
VD_Precio) AS Vendidos
FROM productos
JOIN ventas_detalle ON VD_ProdID=Prod_Id
JOIN ventas ON VD_VentasID=Ventas_ID
WHERE ventas_fecha BETWEEN '2018-01-02' AND '2018-01-07'
GROUP BY Prod_Id, Prod_descripcion, Ventas_Fecha
ORDER BY Prod_Id

VENTAS_FECHA NO ES UN INDICE, por lo tanto el Explain, indica que en Rows tuvo que ir a leer la
cantidad total de registros 7.019.

Si hacemos un índice en VENTAS_FECHA y volvemos a correr la MISMA consulta, podemos ver que
no recorrerá todos los registros:
EJERCICIOS AVANZADOS
Ejercicio 1 – COUNT EN SELECT – JOIN - WHERE
Con cuantas 'Comedias' trabajamos en la empresa?
SELECT COUNT(*) AS 'Cantidad Comedias' FROM film F
JOIN film_category FC ON FC.film_id = F.film_id
JOIN category C ON C.category_id = FC.category_id
WHERE C.name = 'Comedy'

Ejercicio 2 JOIN – GROUP BY - ODER BY - LIMIT


Cual es el actor o actriz que mas películas ha filmado ?
SELECT FA.actor_id AS ID, A.first_name AS NOMBRE, A.last_name AS APELLIDO
FROM film_actor FA
JOIN actor A ON FA.actor_id=A.actor_id
GROUP BY FA.actor_id
ORDER BY COUNT(*) DESC
LIMIT 1

Por qué el COUNT(*) no se pone dentro del SELECT? Porque el planteo del problema no pide una
cantidad, sino que pide el Actor, no se debe poner mas cosas que las que se solicita.

EL GROUP BY lo que hace es que agrupa los actores para que no se repitan, considerando que 1
actor puede estar asociado a más de 1 película

En el ORDER BY se utiliza el COUNT(*) DESC contando de forma descendente

Y la función LIMIT lo que hace, es traer la cantidad de registros que uno determine para la
consulta. En este caso, lo que se pide en el planteo es el ACTOR con más películas, por lo tanto se
debe ingresar un 1, de esta forma la función LIMIT extrae el PRIMER actor con más películas.
Ahora, se puede poner un 10 por ejemplo para traer los 10 actores con más películas, pero no es el
fin del planteo del problema
PARA CORROBORAR QUE REALMENTE LA ACTRIZ 107 ES LA QUE TIENE MÁS PELÍCULAS:
SELECT COUNT(*) AS Peliculas, FA.actor_id
FROM film_actor FA
GROUP BY FA.actor_id
ORDER BY Peliculas DESC

Ejercicio 3 – JOIN – WHERE – GROUP BY – ORDER BY - LIMIT


¿Qué empleado del staff ha alquilado más películas de la actriz del ejercicio 2?
SELECT S.staff_id, S.first_name, S.last_name
FROM staff S
JOIN rental R ON R.staff_id=S.staff_id
JOIN inventory I ON R.inventory_id=I.inventory_id
JOIN film F ON F.film_id=I.film_id
JOIN film_actor FA ON FA.film_id=F.film_id
WHERE FA.actor_id=107
GROUP BY S.staff_id
ORDER BY COUNT(*) DESC
LIMIT 1

AQUÍ da la casualidad que el staff_ID es el nro 1


Ejercicio 4 – Subconsulta Encapsulada – lo mas complejo
cuantas películas con rating PG-13 que hay en el store nro 2 ha alquilado el mejor cliente de
todos?

Se debe encapsular un subconsulta para poder utilizar la función LIMIT, de lo contrario, dará un
error, no se puede utilizar un LIMIT dentro de una subconsulta por sintaxis.

También podría gustarte