Curso
Bagde
del curso Práctico de SQL
Israel Vázquez
Breve historia de SQL
Bases
Espacio para imagen
Modelo y álgebra
relacional de Codd
IBM
Fue creada en los años 70.
Originalmente llamada
SEQUEL. Espacio para imagen
● System/38 (1979)
● SQL/DS (1981)
● DB2 (1983)
Relational
company
Espacio para imagen
Creó el software
Oracle V2 en 1979
ANSI / ISO
1989, 1992, 1996,
1999, 2003, 2006,
2008, 2011 and 2016
Álgebra relacional
Proyección
Select
SELECT *;
SELECT field AS alias;
SELECT COUNT(id), SUM(quantity),
AVG(age);
SELECT MIN(date), MAX(quantity);
SELECT IF(500<1000, "YES", "NO");
SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN "Over 30"
WHEN Quantity = 30 THEN "Equal 30"
ELSE "Under 30"
END AS QuantityText
Origen
From
SELECT *
FROM tabla_diaria;
SELECT *
FROM tabla_diaria AS td
JOIN tabla_mensual AS tm
ON td.pk = tm.fk;
SELECT *
FROM dblink('
dbname=somedb
port=5432 host=someserver
user=someuser
password=somepwd',
'SELECT gid, area, perimeter,
state, county,
tract, blockgroup,
block, the_geom
FROM massgis.cens2000blocks')
AS blockgroups
Productos cartesianos
Join
SELECT *
FROM tabla_diaria AS td
JOIN tabla_mensual AS tm
ON td.pk = tm.fk;
Left Join
A B
Right Join
A B
Exclusive Left Join
A B
Exclusive Right Join
A B
Full Outer Join
A B
Exclusive Full Outer Join
A B
Inner Join
A B
Selección
Where
SELECT *
FROM tabla_diaria
WHERE id = 1;
SELECT *
FROM tabla_diaria
WHERE cantidad > 10;
SELECT *
FROM tabla_diaria
WHERE cantidad < 100;
SELECT *
FROM tabla_diaria
WHERE cantidad > 10
AND cantidad < 100;
SELECT *
FROM tabla_diaria
WHERE cantidad BETWEEN 10
AND 100;
SELECT *
FROM users
WHERE name = "Israel"
AND (
lastname = "Vázquez"
OR
lastname = "López"
);
SELECT *
FROM users
WHERE name = "Israel"
AND lastname = "Vázquez"
OR lastname = "López";
SELECT *
FROM users
WHERE name LIKE "Is%";
SELECT *
FROM users
WHERE name LIKE "Is_ael";
SELECT *
FROM users
WHERE name NOT LIKE "Is_ael";
SELECT *
FROM users
WHERE name IS NULL;
SELECT *
FROM users
WHERE name IS NOT NULL;
SELECT *
FROM users
WHERE name IN ('Israel','Laura',
'Luis');
Ordenamiento
Order By
SELECT *
FROM tabla_diaria
ORDER BY fecha;
SELECT *
FROM tabla_diaria
ORDER BY fecha ASC;
SELECT *
FROM tabla_diaria
ORDER BY fecha DESC;
Índices
Excelentes para
búsquedas y Espacio para imagen
ordenamientos.
Cuidar para alta
transaccionalidad.
Agregación
Group By
SELECT *
FROM tabla_diaria
GROUP BY marca;
SELECT *
FROM tabla_diaria
GROUP BY marca, modelo;
Limitantes
Limit
SELECT *
FROM tabla_diaria
LIMIT 1500;
SELECT *
FROM tabla_diaria
OFFSET 1500
LIMIT 1500;
El primero
El segundo más alto
Seleccionar de un set
de opciones
En mis tiempos
Seleccionar por año
Double trouble
Selectores de rango
Eres lo máximo
Egoísta (Selfish)
Resolviendo
diferencias
Todas las uniones
Triangulando
Generando rangos
Regularizando
expresiones
Bases de datos
distribuidas
¿Qué es?
Es una colección
de múltiples bases Espacio para imagen
de datos separadas
físicamente que se
comunican mediante
una red informática.
Ventajas
● Desarrollo modular.
● Incrementa la Espacio para imagen
confiabilidad.
● Mejora el
rendimiento.
● Mayor disponibilidad.
● Rapidez de respuesta.
Desventajas
● Manejo de seguridad.
● Complejidad de Espacio para imagen
procesamiento.
● Integridad de datos
más compleja.
● Costo.
Homogéneas
y heterogéneas
● OS Espacio para imagen
● Sistema de base
de datos
● Modelos de datos
Arquitecturas
● Cliente - servidor. Espacio para imagen
● Par a par
(Peer 2 Peer).
● Multi manejador
de base de datos.
Estrategias
de diseño
Espacio para imagen
● Top down
● Bottom up
Almacenamiento
distribuido
Espacio para imagen
● Fragmentación
● Replicación
● Distribución
Fragmentación
Espacio para imagen
● Horizontal
● Vertical
● Mixta
Replicación
Espacio para imagen
● Completa
● Parcial
● Sin replicación
Distribución de
los datos
Espacio para imagen
● Centralizada
● Particionada
● Replicada
Queries distribuidos
Proveedores(P) P# Ciudad 10,000 Región A
Repuestos (R) R# Color 100,000 Región B
Prov-Rep(PR) P# R# 1,000,000 Región A
● Cada tupla tiene 25B (200b).
● El query será: obtener los números de proveedor
de Bogotá que tienen repuestos de color rojo.
● P >< PR >< R.
Proveedores(P) P# Ciudad 10,000 Región A
Repuestos (R) R# Color 100,000 Región B
Prov-Rep(PR) P# R# 1,000,000 Región A
● Suposiciones ● Suposiciones
de cardinalidad: de comunicación:
- Repuestos rojos: 10. - Tasa de transferencia:
- Número de pedidos 50,000 bits por segundo.
hechos por proveedores - Latencia de acceso: 0.1s.
de Bogotá: 100,000.
Proveedores(P) P# Ciudad 10,000 Región A
Repuestos (R) R# Color 100,000 Región B
Prov-Rep(PR) P# R# 1,000,000 Región A
● Retraso total en la comunicación = (retraso total de
acceso) + (volumen total de datos/tasa de transferencia).
● Retraso total en la comunicación = (número
de mensajes/10) + (número de bits/50,000).
1 Mover R a Región A (0.1) + 6.67 min
(100,000*200)/50,000=400s=6.67min
2 Mover P y PR a (0.2) + 1.12 h
Región B ((10,000+1,000,000)*200)/50,000 =
4,040s = 1.12h
3 Revisar repuestos Join de P y PR en A filtrar los 5.56 h
rojos para cada proveedores de Bogotá y hacer un join
proveedor de Bogotá con R en B
4 Por cada repuesto Filtrar R en B y por los 10 resultados 2s
rojo revisar si hay un hacer un join remoto con PR en A
proveedor en Bogotá
5 Mover los pedidos 0.1 + (100,000*200)/50,000 = 400s = 6.67 min
de Bogotá a B 6.67min
6 Mover los repuestos 0.1 + (10*200)/50,000 = 0.10s 0.10 s
rojos a A
Sharding
Problemas
● Joins entre shards. Espacio para imagen
● Baja elasticidad
● Reemplaza PK
Window Functions
¿Qué son?
Espacio para imagen
Realizan cálculos en
algunas tuplas que se
encuentran relacionadas
con la tupla actual.
¿Para qué sirven?
Evitan el uso de self Espacio para imagen
joins y reduce la
complejidad alrededor
de la analítica,
agregaciones y uso de
cursores.
Window Functions:
Particiones y
agregación
El futuro de SQL