Professional Documents
Culture Documents
1
Ignacio Despujol Zabala
Objetivos
Al final de este vídeo serás capaz de:
• Realizar consultas multi tabla complejas
Estructura base de datos de ejemplo
Total por cada orden
SELECT OrderID, SUM(Total) AS Ordertotal FROM
(SELECT O.OrderDetailID,O.OrderID, O.Quantity*P.Price AS Total
FROM OrderDetails O
INNER JOIN Products P
ON P.ProductID=O.ProductID
) AS Orderdetailswithprice
GROUP BY OrderID
Total por cada orden
https://www.w3schools.com/sql/trysql.asp?filename=trysql_asc
Total por línea de orden con cliente
SELECT OD.OrderDetailID, O.OrderID, C.CustomerName, OD.Quantity*P.Price AS Total
FROM OrderDetails OD
LEFT JOIN Products P
ON P.ProductID=OD.ProductID
LEFT JOIN Orders O
ON OD.OrderID=O.OrderID
LEFT JOIN Customers C
ON O.CustomerID=C.CustomerID
Total por línea de orden con cliente
https://www.w3schools.com/sql/trysql.asp?filename=trysql_asc
5 suministradores que más negocio generan
SELECT
SupplierName, Country, ROUND(SUM(Total)) AS Suppliertotal FROM
(SELECT S.SupplierName, S.Country,O.Quantity*P.Price AS Total
FROM OrderDetails O
LEFT JOIN Products P
ON P.ProductID=O.ProductID
LEFT JOIN Suppliers S
ON P.SupplierID=S.SupplierID
) AS Orderdetailswithprice
GROUP BY SupplierName
ORDER BY Suppliertotal DESC
LIMIT 5
5 suministradores que más negocio generan
https://www.w3schools.com/sql/trysql.asp?filename=trysql_asc
Número de productos por grupo de precios
SELECT GrupoPrecio, COUNT(Grupoprecio) AS Numero_de_Productos FROM
(SELECT *,
CASE
WHEN Price <= 10 THEN 'Grupo 1’
WHEN Price > 10 AND Price <= 50 THEN 'Grupo 2’
WHEN Price > 50 AND Price <= 100 THEN 'Grupo 3’
WHEN Price > 100 AND Price <= 200 THEN 'Grupo 4’
ELSE 'Grupo 5’
END AS GrupoPrecio
FROM Products
) as congrupos
GROUP BY GrupoPrecio;
https://www.w3schools.com/sql/trysql.asp?filename=trysql_asc
Número de productos por grupo de precios
https://www.w3schools.com/sql/trysql.asp?filename=trysql_asc
Total por categoría para mayo de 1997
SELECT
Categoryname, ROUND(SUM(Total)) AS Categorytotal
FROM
(SELECT
O.OrderDate, C.CategoryName, OD.Quantity*P.Price AS Total
FROM OrderDetails OD
LEFT JOIN Products P
ON P.ProductID=OD.ProductID
LEFT JOIN Categories C
ON P.CategoryID=C.CategoryID
LEFT JOIN Orders O
ON OD.OrderID=O.OrderID
WHERE MONTH(OrderDate)=5 AND YEAR(OrderDate)=1997
) AS OrderDetailwithPrice
GROUP BY Categoryname
Total por categoría para mayo de 1997
https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_month
Resumen
Ahora puedes:
• Realizar consultas multi tabla complejas
Atribución
La fuentes de las imágenes son:
15
Introducción a SQL y bases de datos relacionales
16
Ignacio Despujol Zabala
Objetivos
Al final de este vídeo serás capaz de:
• Reconocer cómo se puede realizar un ataque de inyección SQL
• Describir algunas medidas a tomar para evitarlos
• Poner un ejemplo de las consecuencias
Ataque de inyección SQL
• Se realiza contra aplicaciones web que trabajan con una base de datos
• Consiste en utilizar un formulario de la web que use la base de datos y
añadir código SQL al final de la respuesta que se envía a ese formulario
• Es una de las técnicas de hacking más utilizadas
• Puede incluso borrar una base de datos
Cómo se ejecuta un ataque
Un formulario web recibe un parámetro "nombreUsuario" que contiene el nombre de usuario a
consultar y lo pasa al siguiente código SQL:
consulta := "SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "’; "
Uso normal
SELECT * FROM usuarios WHERE nombre = 'Pepe’;
Consulta generada
SELECT * FROM usuarios WHERE nombre = ‘’ OR ''='’;
Se vuelcan todos los datos de la tabla (también se puede usar Pepe OR 1=1 )
https://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL
Cómo se ejecuta un ataque
Un formulario web recibe un parámetro "nombreUsuario" que contiene el nombre de usuario a
consultar y lo pasa al siguiente código SQL:
consulta := "SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "’; "
Uso normal
SELECT * FROM usuarios WHERE nombre = 'Pepe’;
Consulta generada
SELECT * FROM usuarios WHERE nombre = 'Alicia'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE ‘% ’;
Cualquier dato de la base de datos puede quedar disponible para ser leído o modificado por un
usuario malintencionado.
https://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL
Como evitar un ataque de inyección SQL
• Asegurándonos por programa de que el campo suministrado por el
formulario web no puede contener ningún carácter peligroso
• Usando parámetros SQL que se añaden de forma controlada a la
consulta cuando se ejecuta
• Guardando encriptados en la base de datos los campos sensibles y
usando hashes
Ejemplo
https://www.eoi.es/blogs/ciberseguridad/2016/04/18/sql-injection-objetivo-sony/
Resumen
Ahora puedes:
• Reconocer cómo se puede realizar un ataque de inyección SQL
• Describir algunas medidas a tomar para evitarlos
• Poner un ejemplo de las consecuencias
Atribución
La fuentes de las imágenes son:
24
Introducción a SQL y bases de datos relacionales
Clientes SQL
25
Ignacio Despujol Zabala
Objetivos
Al final de este vídeo conocerás:
• Diversos clientes para acceder a distintas bases de datos con SQL
HeidiSQL
https://www.heidisql.com/
phpMyAdmin
https://www.phpmyadmin.net/
Oracle SQL Developer
https://www.oracle.com/es/database/technologies/appdev/sqldeveloper-landing.html
Librerías para PHP
https://www-w3schools-com.translate.goog/Php/php_mysql_connect.asp?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es
Librerías para Python DB-API
https://www-tutorialspoint-com.translate.goog/python/python_database_access.htm?_x_tr_sl=auto&_x_tr_tl=es&_x_tr_hl=es
Resumen
Ahora conoces diversos clientes para acceder a bases de datos usando SQL
Atribución
La fuentes de las imágenes son:
33