Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-- Símbolo de la ESEN:
--El distintivo de la ESEN es el árbol de roble, que se caracteriza por su
fortaleza. Para la ESEN hay una clara asociación
--entre la fuerza del roble y la fuerza de la educación como elemento primordial
para el desarrollo económico y
-- social de El Salvador y de la región.
-- 1
--------------------------------Generar el backup de la base de
datos-----------------------------------------
-- Documentación: https://www.postgresql.org/docs/14/backup.html
-- Copias de seguridad y restauración de base de datos
-- Hacer la prueba con la configuración por defecto
-- Preferences- Binary Path-PostgreSQL14
-- En caso de que no sea la dirección correcta, habría que cambiarla a una
dirección como la de abajo
-- Verificar dirección: C:\Program Files\PostgreSQL\14\bin
-- Una vez que el backup con la configuración por defecto está hecho
-- Eliminamos la base de ordenes
-- Debemos crearla de nuevo para luego restaurar el backup que ya creamos
-- 2
----------------------------------------------
Ciberseguridad--------------------------------------------------
-- Ver las diapositivas
-- https://www.vpnmentor.com/blog/how-to-secure-website-database/
-- https://websitesecuritystore.com/blog/how-to-secure-database-from-cyber-attacks/
-- 3
------------------------------Creando usuario con acceso limitado a
Postgres----------------------------------
-- https://www.postgresqltutorial.com/postgresql-administration/
-- Documentación:
https://www.postgresqltutorial.com/postgresql-administration/postgresql-roles/
SELECT rolname FROM pg_roles;
-- Vamos a crear un rol que se pueda loguear
CREATE ROLE maria
LOGIN
PASSWORD 'password';
-- Luego vamos a darle permisos para que pueda ejecutar un Select en una tabla
-- No va a poder ejecutar otras acciones...
-- https://www.postgresqltutorial.com/postgresql-administration/postgresql-grant/
-- Haremos que tenga permiso de ver dos tablas
-- El usuario debe poder usar el esquema ord
GRANT USAGE ON SCHEMA ord TO maria;
-- GRANT some_or_all_privileges ON ALL TABLES TO role;
GRANT SELECT
ON ord.ciudades, ord.departamentos
TO maria;
SELECT current_database();
-- Warning: Usted puede unir las tablas como usted desee, haga la prueba en su
sesión de estudio
-- Los join que veremos son Inner join, outer join, full outer
-- Tabla 1: Mandemos a llamar la data de departamentos
SELECT * FROM ord.departamentos; -- Este es el caso feliz de pañales Huggies, 1
sola tabla
-- Colocar nombre resumido de tabla y hacer consulta...
-------------------------------------------Caso
3---------------------------------------------------------------
-- Obteniendo TODOS los registros entre ambas tablas con FULL OUTER JOIN
-----------------------------------------------
WHERE---------------------------------------------------
-- Documentación:
https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-where/
-- Prestar atención a los símbolos con los que se puede armar
-- >, <, >=, <=, <> or !=, AND, OR, IN
--Tabla a usar (la misma tabla a la que deberíamos haber llegado en el paso
anterior)
SELECT dep.departamento, ciu.ciudad,cli.nombre,
cli.apellido,cli.direccion,tran.fecha
,det_trans.cantidad
FROM ord.departamentos dep
LEFT JOIN ord.ciudades ciu ON dep.id_departamento=ciu.id_departamento
LEFT JOIN ord.clientes cli ON ciu.id_ciudad=cli.id_ciudad
LEFT JOIN ord.transacciones tran ON cli.id_cliente=tran.id_cliente
LEFT JOIN ord.detalle_transacciones det_trans ON
tran.id_orden=det_trans.id_orden;
-- IN nos da la posibilidad de proveer una lista de valores con los cuales hacer el
filtrado de datos
-- Documentación:
https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-in/
-- Obtengamos solo aquellos registros del año 2022
-- ¿De dónde podemos obtener el año de las transacciones para hacer el filtrado
-- (Imaginemos que tenemos transacciones de 10 años...)
-- WHERE EXTRACT(YEAR FROM tran.fecha) IN (2022)
----------------------------------------------------GROUP
BY----------------------------------------------------------
-- Documentación: https://www.postgresql.org/docs/14/functions-aggregate.html
-- Cálculos agregados de cajón: Suma, Promedio, Máximo, Mínimo
-- Armar una tabla con clientes, transacciones, detalle_transacciones y productos
-- Solo obtener los campos nombre, apellido y los campos necesarios para el cálculo
de la venta
-- Calcular las ventas por cliente y sumemos por nombre y apellido del cliente
-- Usaremos una función de agregación llamada SUM la cual nos ayudará a sumar
-- La venta es un campo calculado: Q*Precio
-- ¡Qué poderoso es el lenguaje SQL!
----------------------------------------------------
HAVING----------------------------------------------------------
-- Documentación:
https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-having/
-- Filtremos por aquellas ventas superiores a 200
-- Filtraremos por un cálculo ejecutado en el servidor
-- HAVING SUM(dtr.cantidad* pr.precio) >=200
-- Tabla a usar:
SELECT cl.nombre, cl.apellido, SUM(dtr.cantidad* pr.precio) AS Venta
FROM ord.clientes cl
LEFT JOIN ord.transacciones tr ON cl.id_cliente = tr.id_cliente
LEFT JOIN ord.detalle_transacciones dtr ON tr.id_orden = dtr.id_orden
LEFT JOIN ord.productos pr ON dtr.id_producto = pr.id_producto
GROUP BY cl.nombre, cl.apellido;
------------------------------------------SELECT, ORDER,
LIMIT----------------------------------------------------------
-- Son los últimos 3 comandos que el servidor ejecuta
-- SELECT, ORDER, LIMIT
-- Tabla a usar:
SELECT cl.nombre, cl.apellido, dtr.cantidad, pr.precio
FROM ord.clientes cl
LEFT JOIN ord.transacciones tr ON cl.id_cliente = tr.id_cliente
LEFT JOIN ord.detalle_transacciones dtr ON tr.id_orden = dtr.id_orden
LEFT JOIN ord.productos pr ON dtr.id_producto = pr.id_producto;
-- Por ejemplo, digamos que queremos ordenar la cantidad de menor a mayor
-- El orden puede ser ascendente con ASC y descendente con DESC
-- ORDER BY dtr.cantidad ASC
-- De mayor a menor
-- ORDER BY dtr.cantidad DESC
-- Tarea
-- ¿Qué ejemplo se les ocurre para ordenar los registros de forma alfabética?
-- ¿Tiene sentido que le pongamos ASC o DESC con campos de texto?