Paul Leger http://pleger.cl Algebra Relacional 2 Paul Leger http://pleger.cl
Repaso (1/4) Proyección (π) Renombrar (ρ) Selección (σ) Producto Cartesiano (x) Unión (U) Intersección (∩) Diferencia (-)
Repasando (2/4): Persona y Ciudad Rut Nombre NombreC 12312312-3 Paul Coquimbo 15123561-3 Renato Peor es nada 12354345-2 Mariana Fucking 13123111-2 NombreC Comentario Coquimbo Buen puerto Chanaral Mucho sol Fucking No muy agradable Peor es nada El nombre basta Chigualoco Para Surf Nueva Columna
Repaso (3/4) Muestre todos los nombres de las personas (no mostrar nombres repetidos) πNombre (Persona) ¿Qué entrega πnombreC (Persona) ∩ Ciudad? ¿Qué entrega πnombreC (Persona) ∩ πnombreC(Ciudad)? Muestre la descripción de la ciudad donde vive cada persona
Repaso (4/4) CHOFER CHOFER Código_C Nombre Comentario 1 Juan Bueno 2 Carlos 3 Pedro 4 Patricio No sabe estacionar 5 Muy lento Código_C Nombre 1 Juan 2 Carlos 3 Pedro 4 Patricio 5 Comentario 1) ¿En ambos casos, muestre los comentarios de cada chofer que contiene? Codigo_c Comentario 1 Bueno 4 No sabe estacionar 5 Malo 2) Muestre los nombres de los choferes que no tienen comentarios
Un más ejemplo para reforzar
Ejemplo (1/3): Muestre por cada nombre de una persona, muestra el comentario de donde vive Ciudad Rut Nombre NombreC 12312312-3 Paul Coquimbo 15123561-3 Renato Peor es nada NombreC Comentario Coquimbo Buen puerto Peor es nada El nombre basta Chigualoco Para Surf R = πNombre, comentario( σPersona.nombreC = Ciudad.nombreC (Persona x Ciudad) ) Temporal1 = Persona x Ciudad Rut Nombre Persona.NombreC Ciudad.NombreC Comentario 12312312-3 Paul Coquimbo Buen Puerto Peor es nada El nombre basta Chigualoco Para Surf 15123561-3 Renato
Ejemplo (2/3): Muestre por cada nombre de una persona, muestra el comentario de donde vive Consulta Original “R = πNombre, comentario( σPersona.nombreC = Ciudad.nombreC (Persona x Ciudad) )” Temporal1 = Persona x Ciudad Rut Nombre Persona.NombreC Ciudad.NombreC Ciomentario 12312312-3 Paul Coquimbo Buen Puerto Peor es nada El nombre basta Chigualoco Para Surf 15123561-3 Renato Temporal2 = σPersona.nombreC = Ciudad.nombreC (Temporal1) Rut Nombre Persona.NombreC Ciudad.NombreC Ciomentario 12312312-3 Paul Coquimbo Buen Puerto 15123561-3 Renato Peor es nada El nombre basta
Temporal2 = σPersona.nombreC = Ciudad.nombreC (Temporal1) Rut Nombre Ejemplo (3/3): Muestre por cada nombre de una persona, muestra el comentario de donde vive Consulta Original “R = πNombre, comentario( σPersona.nombreC = Ciudad.nombreC (Persona x Ciudad) )” Temporal2 = σPersona.nombreC = Ciudad.nombreC (Temporal1) Rut Nombre Persona.NombreC Ciudad.NombreC Comentario 12312312-3 Paul Coquimbo Buen Puerto 15123561-3 Renato Peor es nada El nombre basta R = πNombre, comentario(Temporal2) Nombre Comentario Paul Buen Puerto Renato El nombre basta
¿Cuál es la relación resultante? Ejercicio: Muestre por cada nombre de una persona, su(s) número(s) de teléfono(s) Persona Teléfono Rut Nombre 12312312-3 Paul 15123561-3 Renato Teléfono Rut 6783232 12312312-3 6983235 3785232 15123561-3 ¿Cuál es la consulta? ¿Cuál es la relación resultante?
Hoy veremos más operadores … a divertirse …
(Natural) Join (⋈) Este operador realiza un producto cartesiano entre dos relaciones, y solamente rescata las filas, cuyos atributos con el mismo nombre contienen el mismo valor. Nota: El resultado contendrá dos columnas con el mismo nombre y valores (es decir, dos columnas idénticas). Una de esas dos columna es eliminada Preguntas: ¿Qué es R = Persona ⋈ Ciudad ? ¿Cómo se podría escribir Persona ⋈ Ciudad sin usar join? ¿Para qué sirve ⋈ para una base de datos implementada con un modelo relacional?
Ejercicio 1: Natural Join con tres relaciones Persona Ciudad Rut Nombre NombreC 12312312-3 Paul Coquimbo 15123561-3 Renato Peor es nada NombreC Comentario Coquimbo Buen puerto Peor es nada El nombre basta Chigualoco Para Surf Teléfono ¿Qué es R? R = πNombre, comentario, Telefono (Persona ⋈ Ciudad ⋈ Teléfono) Teléfono Rut 6783232 12312312-3 6983235 3785232 15123561-3
Ejercicio 2: Natural Join con tres relaciones Persona Ciudad Rut Nombre NombreC 12312312-3 Paul Coquimbo 15123561-3 Renato Peor es nada NombreC Comentario Coquimbo Buen puerto Peor es nada El nombre basta Chigualoco Para Surf TipoAuto Modelo Descripción Sedan Grande Deportivo Pequeño ¿Qué es R1? R1 = πNombre, comentario, Descripcion (Persona ⋈ Ciudad ⋈ TipoAuto) ¿Qué es R2? R2 = πNombre, descripción (Persona ⋈ TipoAuto)
Θ-join: El super caso del Natural join Es un join, donde podemos cambiar las condiciones (= Θ) de comparación (ejemplos >, >= , !=) R=T ⋈Θ S ¿Cómo se podría escribir R= T ⋈Θ S sin usar join?
Theta join y Equijoin son más teóricos que prácticos Es un (natural) join sin eliminar una columna con idéntica Theta join y Equijoin son más teóricos que prácticos
Semi Joins (⋉)(⋊) Son un natural joins, sin el contenido (o el resto de los valores de una relación) R1 = T ⋉ S, no incluye los atributos de S R2 = T ⋊ S, no incluye los atributos de T Preguntas: Realice «Persona ⋉ Ciudad”, “Persona ⋊ Ciudad” ¿Cuál es la diferencia de entre ambos? ¿Cómo podemos expresar T ⋉ S, usando solamente ⋊? ¿Cómo se puede expresar en términos de natural join y proyección?
Ejercicio Rut Nombre NombreC 12312312-3 Paul Coquimbo 15123561-3 Renato Fucking 12354345-2 Mariana 13123111-2 NombreC Comentario Coquimbo Buen puerto Fucking Mucho sol Muestre los nombres de las personas que están viviendo en todas las ciudades
Solución C= πnombreC(Ciudad) P= π Rut, nombre(Persona) x C PersonasViveUnaCiudad = π nombre (P – Persona) (analícelo lentamente) Respuesta = π nombre(Persona) – PersonasViveUnaCiudad
División (/) Dada dos relaciones T y S, la división entre T y S (= T/S) retorna … Todas las tuplas de una proyección de S (= πatributos (S)) que … tienen un vinculo (o clave externa) con cada tupla de T
División … Muestre los nombres de las personas que tienen hogares en todas las ciudades T = πnombre,nombreC (Persona) S = πnombreC (Ciudad) Resultado = T/S Persona Rut Nombre NombreC 12312312-3 Paul Coquimbo 15123561-3 Renato Fucking 12354345-2 Mariana 13123111-2 Ciudad NombreC Comentario Coquimbo Buen puerto Fucking Mucho sol Resultado = T/S Nombre Renato
Agregación (G) Permite ejecutar operaciones a grupos de datos Similar al grupo de funciones de Excel (Suma, promedio, etc) G Max(Sueldo) (Persona) Rut Nombre Sueldo 12312312-3 Paul 1000 15123561-3 Renato 2000 12354345-2 Mariana 3000 13123111-2 500 Max 3000
Agregación (G) Permite ejecutar varias operaciones al mismo tiempo G Max(Sueldo), Min(Sueldo), Avg(Sueldo) (Persona) Rut Nombre Sueldo 12312312-3 Paul 1000 15123561-3 Renato 2000 12354345-2 Mariana 3000 13123111-2 500 Max Min Avg 3000 500 1625
Agregación por Agrupación (G) Similar al anterior, pero ahora podemos agrupar por un atributo Rut Nombre Sueldo 12312312-3 Paul 1000 15123561-3 Renato 2000 12354345-2 Mariana 3000 13123111-2 500 Nombre G Max(Sueldo), Min(Sueldo), Avg(Sueldo) (Persona) Nombre Max Min Avg Paul 1000 Renato 2000 500 1250 Mariana 3000
Resumen Aparte de los operadores vistos anteriormente (ej. proyección), tenemos nuevos operadores Se pueden expresar en términos de otros: Natural Join (⋈) Theta (θ) join (θ-⋈) Equi-join (Equi- ⋈) Semi-joins (⋉)(⋊) División (/) No se pueden expresar en términos de otros: Agregación (G) Agrupación para Agregación (G)
Ejercicio: Persona, Ciudad y teléfono Rut Nombre NombreC 12312312-3 Paul Coquimbo 15123561-3 Renato Peor es nada 12354345-2 Mariana Fucking 13123111-2 Ciudad Teléfono Rut Telefono 12312312-3 60340135 60340139 12354345-2 43455678 13123111-2 90091239 NombreC Comentario Coquimbo Buen puerto Chanaral Mucho sol Fucking No muy agradable Peor es nada El nombre basta Chigualoco Para Surf ¿Cuántos teléfonos tiene cada rut?
Ejercicios Dadas las relaciones R(r1,r2,r3) y T(r1,r2,r3), responda V o F: σAσB(R) = σBσA(R) ? 1 2 π r1,r2 (R) – T = π r1,r2 (R - T) ? 3 σA v B(R) = σA(R) U σB(R) ? 4 πr2 (σr1=1 (R)) = σr1=1 (πr2 (R)) ? σR.r1 = 1(RxT) = σR.r1 = 1(R)xT ? 5 πR.r2 (R⋈T) = πR.r2 (R)⋈T ?????????? 6
Consultas