Curso DB Clase I SQL .Ipynb - Colab
Curso DB Clase I SQL .Ipynb - Colab
# install
!a
pt install postgresql postgresql-contrib &>log# INSTALAR POSTGRESQL Y CONTRIB
!s
ervice postgresql start# INICIA EL EL SERVICIO POSTGRESQL EN ENTORNO COOLAB
!s
udo -u postgres psql -c"CREATE USER root WITH SUPERUSER"# CREA UN USUARIO LLAMADO
"root"
# CON PRIVILEGIO DE SUPERUSUARIO
# set connection
"""Carga la extensión SQL en Colab, permitiendo ejecutar consultas
SQL directamente en las celdas de codigo. Luego, se importan las
bibliotecas necesarias, incluidas SQLAlchemy para la conexión y
Pandas para el manejo de datos."""
%reload_extsql
importsqlalchemy
importpandasaspd
engine = sqlalchemy.create_engine('postgresql+psycopg2://@/postgres')
""" Creación de la función exec_sql: Esta función se utiliza para ejecutar consultas
SQL en la base de datos. Toma una consulta como argumento, la ejecuta y devuelve
los resultados si la consulta es un SELECT, o bien, confirma la transacción si
es una consulta de modificación de datos."""
defexec_sql(q
uery):
text_query = sqlalchemy.sql.text(query)
withengine.connect()asconn:
res = conn.execute(text_query)
ifquery.strip().lower().startswith('select'):
returnpd.DataFrame(res)
else:
conn.commit()
Crear base de datos
exec_sql(create_schema)
Tabla Customers
create_customers = """
REATE TABLE IF NOT EXISTS humai.Customers (
C
customer_id INT NOT NULL,
customer_name VARCHAR(50) NOT
NULL, fecha_inicio DATE NOT NULL,
fecha_fin DATE,
RIMARY KEY (customer_id));
P
"""
exec_sql(create_customers)
Tabla Orders
CREATE TABLE IF NOT EXISTS humai.Orders (
order_id INT NOT NULL,
customer_id INT NOT NULL,
order_date DATE NOT NULL,
order_price DECIMAL(8,2),
PRIMARY KEY (order_id),
OREIGN KEY (customer_id) REFERENCES humai.Customers(customer_id)
F
);
reate_orders = """
c
CREATE TABLE IF NOT EXISTS humai.Orders (
order_id INT NOT NULL,
customer_id INT NOT NULL, order_date DATE NOT NULL,
order_price DECIMAL(8,2), PRIMARY KEY (order_id),
FOREIGN KEY (customer_id) REFERENCES humai.Customers(customer_id)
) ;
"""
exec_sql(create_orders)
Tabla Shipments
reate_shipments = """
c
CREATE TABLE IF NOT EXISTS humai.Shipments (
shipment_id INT NOT NULL,
order_id INT NOT NULL,
hipment_date DATE NOT
s
NULL, shipment_city
VARCHAR(50),
PRIMARY KEY (shipment_id),
FOREIGN KEY (order_id) REFERENCES humai.Orders(order_id)
) ;
"""
exec_sql(create_shipments)
insert_customers = """
INSERT INTO humai.Customers VALUES
(1, 'Eugenio', '08/21/1998', Null),
(2, 'Mario', '05/05/2005', Null),
(3, 'Pedro', '03/08/2020', '02/05/2022') """
exec_sql(insert_customers)
insert_orders = """
INSERT INTO humai.Orders VALUES
(1, 1, '06/05/2022', 45),
(2, 1, '06/05/2021', 60),
(3, 1, '06/06/2022', 70),
(4, 2, '01/05/2022', 5),
(5, 3, '06/10/2022', 145),
(6, 3, '03/02/2022', 2);
"""
exec_sql(insert_orders)
customers ASE
B
0 postgres humai
TABL
E
orders ASE
B
1 postgres humai
TABL
E
BASE
2 postgres humai shipments
SELECT *
FROM humai.Customers;
exec_sql(select_customers)
Barrio Envios
Envios a Belgrano
0 3
SELECT *
FROM humai.Orders
WHERE order_price > 50;
6.Y que si queremos ver el nombre del cliente? Dato que se
encuentra en otra tabla.
elect = """
s
SELECT c.customer_name, sum(order_price) as \"Total gastado\"
FROM humai.Orders o
FULL JOIN humai.Customers c
N o.customer_id = c.customer_id
O
GROUP BY c.customer_name
ORDER BY sum(order_price)
DESC LIMIT 1;
"""
exec_sql(select)
customer_name Total gastado
0 Eugenio 175.00
SELECT
customer_name FROM
humai.Customers
WHERE customer_name LIKE '%e%';
customer_name
0 Eugenio
1 Pedro
insert_customers = """
INSERT INTO humai.Customers VALUES
(4, 'Gustavo', '2024-04-20', NULL),
(5, 'Florencia', '2024-04-20', NULL); """
exec_sql(insert_customers)
insert_customers = """
INSERT INTO humai.Customers VALUES
(6, 'Santiago', '2004-01-11', NULL) """
exec_sql(insert_customers)
insert_customers = """
INSERT INTO humai.Customers VALUES
(7, 'Lautaro', '2004-01-13', '2004-03-12'),
(8, 'Ines', '2004-01-15', '2004.03.18'); """
exec_sql(insert_customers)# Conjunto de comandos con la función INSERT para
# incorporar Datos a una Tabla
Ejercicios 2 DML
Ejercicio 3 DML
Ejercicio 4 DML
insert_orders = """
INSERT INTO humai.Orders
VALUES
(12, 1, '2024-01-02', '135'); """
exec_sql(insert_orders)
insert_shipments = """
INSERT INTO
humai.Shipments VALUES
(10, 6, '2024-01-03', 'La Plata'); """
exec_sql(insert_shipments)
Ejercicio 1 DDL
elect_orders = """
s
SELECT COUNT (*) as "Ventas 2022"
FROM humai.Orders
WHERE EXTRACT (YEAR FROM order_date) =
2022; """
exec_sql(select_orders)
Ventas 2022
0 5
Ejercicio 2 DDL
Retornar la fecha de la primera venta registrada
elect_order = """
s
SELECT MIN (order_date) as "Primera Venta"
FROM humai.Orders;
"""
exec_sql(select_order)
Primera Venta
0 2021-06-05
Ejercicio 3 DLL
elect_order = """
s
SELECT MAX (order_price) as "Mayor Venta x Cliente"
FROM humai.Orders
GROUP BY (order_id);
"""
exec_sql(select_order)
0 60.00
1 70.00
2 200.00
3 5.00
4 2.00
5 45.00
Ejercicio 4 DDL
elect_shipment = """
s
SELECT shipment_city as "Ciudad", count (*) as "Cant Envios"
FROM humai.Shipments
WHERE shipment_city <> 'Belgrano'
ROUP BY
G
shipment_city """
exec_sql(select_shipment)
Ejercicio 5 DDL
Calcular la cantidad de dias activos que tiene cada cliente que aún no se
han dado de baja
elect_customer = """
s
SELECT (fecha_fin-fecha_inicio) as "Dias Activos", customer_name as "Cliente" FROM
humai.Customers
WHERE fecha_fin IS NOT
NULL """
exec_sql(select_customer)
Ejercicio 6 DDL
alcular el promedio de cantidad de dias activos que tienen los clientes que
C
aún no se han dado de baja
elect_customer = """
s
SELECT AVG(fecha_fin-fecha_inicio) as "Promedio Total dias"
FROM humai.Customers
WHERE fecha_inicio IS NOT NULL
"""
exec_sql(select_customer)
Ejercicio 7 DDL
Retornar la cantidad de envios realizados entre enero y junio del 2022 para
Mar del Plata
elect_shipment = """
s
SELECT count(*)
FROM humai.Shipments
HERE shipment_date >= '01-01-2022'
W
AND shipment_date <= '06-01-2022'
AND shipment_city = 'Mar del Plata' """
exec_sql(select_shipment)
count
0 1
Ejercicio 8 DDL
antidad gastada por cliente con sus nombres para aquellos clientes que
C
hayan gastado mas de $20
uery = """
q
SELECT customer_name, SUM(order_price) AS total_order_price
FROM Humai.Customers
INNER JOIN Humai.Orders
N Humai.Customers.customer_id = Humai.Orders.customer_id
O
WHERE order_price > 20
GROUP BY Humai.Customers.customer_id
;
"""
exec_sql(query)
customer_name total_order_price