Bases de Datos - Parte 6/10 Álgebra relacional

36,744 views
36,328 views

Published on

3 Comments
4 Likes
Statistics
Notes
No Downloads
Views
Total views
36,744
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1,239
Comments
3
Likes
4
Embeds 0
No embeds

No notes for slide

Bases de Datos - Parte 6/10 Álgebra relacional

  1. 1. Sistemas de Información II Tema 6. Álgebra relacional Bibliografía: Elmasri y Navathe: “Fundamentos de Sistemas de Bases de Datos” 3ª edición, 2002 (Capítulo 7). Garcia-Molina, Ullman y Widom: “Database systems: the complete book”. Prentice-Hall (Capítulo 5). Carlos Castillo UPF – 2007 1
  2. 2. Operaciones Proyectar () Seleccionar () Producto cartesiano (×) Join ó Reunir ( ) Operaciones de conjuntos Unir (∪) Intersectar (∩) Restar (–) 2
  3. 3. Proyección () Selecciona el valor de ciertos atributos de todas las tuplas de una relación A1,A2,...,An(R) = { t[A1,A2,...,An] : t ∈ R } Selecciona columnas completas 3
  4. 4. Proyección () ejemplos Película Actor ID_Película Nombre Año ID_Actor Nombre Apellido 1 La guerra de las galaxias 1977 1 Mark Hamill 2 El señor de los anillos 1 2001 2 Cristopher Lee 3 Mar Adentro 2004 3 Javier Bardem 4 El viaje de Chihiro 2001 4 Hugo Weaving Año(Película) = {<1977>,<2001>,<2004>,<2001>} ID_Película,Año(Película) = {<1,1977>,<2,2001>,<3,2004>,<4,2001>} Nombre(Actor) = {<Mark>,<Cristopher>,<Javier>,<Hugo>} 4
  5. 5. Proyección () en SQL A1,A2,...,An(R) SELECT A1,A2,...,An FROM R 5
  6. 6. Selección () Selecciona el valor de ciertas tuplas condición(R) = { t∈R : condición(t) es cierto} Selecciona filas completas 6
  7. 7. Selección () ejemplos Película Actor ID_Película Nombre Año ID_Actor Nombre Apellido 1 La guerra de las galaxias 1977 1 Mark Hamill 2 La comunidad del anillo 2001 2 Cristopher Lee 3 Mar Adentro 2004 3 Javier Bardem 4 El viaje de Chihiro 2001 4 Hugo Weaving Apellido=Lee(Actor) = {<2,Cristopher,Lee>} Año>2000(Película) = {<2,La comunidad del anillo,2001>, <4,El viaje de Chihiro,2001>} 7
  8. 8. Selección () en SQL condición(R) SELECT * FROM R WHERE condición 8
  9. 9. Composición de selección y  proyección , Película Actor ID_Película Nombre Año ID_Actor Nombre Apellido 1 La guerra de las galaxias 1977 1 Mark Hamill 2 La comunidad del anillo 2001 2 Cristopher Lee 3 Mar Adentro 2004 3 Javier Bardem 4 El viaje de Chihiro 2001 4 Hugo Weaving Nombre(Apellido=Lee(Actor)) = {<Cristopher>} Nombre(Año>2000(Película)) = {<La comunidad del anillo>, <El viaje de Chihiro>} 9
  10. 10. Composición ( y ) en SQL A1,A2,...,An(condición(R)) SELECT A1,A2,...,An FROM R WHERE condición 10
  11. 11. Eliminar duplicados () Elimina tuplas (R) duplicadas en una relación Película ID_Película Nombre Año ID_Estudio 1 La guerra de las galaxias 1977 3 2 La comunidad del anillo 2001 2 3 Mar adentro 2004 4 4 El viaje de Chihiro 2001 1 (Año(Película) = { 1997, 2001, 2004 } 11
  12. 12. Operación delta en SQL (R) SELECT DISTINCT * FROM R 12
  13. 13. Producto cartesiano (×) A × B = {(a,b): a ∈ A ∧ b ∈ B} Ejemplo: A = {s,t} B = {u,v,w} A × B = {s,t} × {u,v,w} { (s,u),(s,v),(s,w),(t,u),(t,v),(t,w) } La cardinalidad es |A × B| = |A||B| 13
  14. 14. Producto cartesiano (×)  ejemplos Estudio Película ID_Película Nombre Año ID_Estudio ID_Estudio Nombre 1 La guerra de las galaxias 1977 3 1 Ghibli 2 La comunidad del anillo 2001 2 2 New Line Cinema 3 Mar adentro 2004 4 3 Lucasfilms 4 El viaje de Chihiro 2001 1 4 Sogecine Película×Estudio = { <1,La guerra de las galaxias,1977,3,1,Ghibli>, <1,La guerra de las galaxias,1977,3,2,New Line Cinema>, <1,La guerra de las galaxias,1977,3,3,Lucasfilms>, <1,La guerra de las galaxias,1977,3,4,Sogecine>, <2,La comunidad del anillo,2001,2,1,Ghibli>, <2,La comunidad del anillo,2001,2,2,New Line Cinema>, <2,La comunidad del anillo,2001,2,3,Lucasfilms>, <2,La comunidad del anillo,2001,2,4,Sogecine>, <3,Mar adentro,2004,4,1,Ghibli>, <3,Mar adentro,2004,4,2,New Line Cinema>, ... } 14
  15. 15. Producto cartesiano (×) en SQL R1×R2 SELECT * FROM R1,R2 15
  16. 16. Seleccionar combinaciones  correctas Estudio Película ID_Película Nombre Año ID_Estudio ID_Estudio Nombre 1 La guerra de las galaxias 1977 3 1 Ghibli 2 La comunidad del anillo 2001 2 2 New Line Cinema 3 Mar adentro 2004 4 3 Lucasfilms 4 El viaje de Chihiro 2001 1 4 Sogecine Película.ID_estudio=Estudio.ID_Estudio(Película×Estudio) = { <1,La guerra de las galaxias,1977,3,3,Lucasfilms>, <2,La comunidad del anillo,2001,2,2,New Line Cinema>, <3,Mar adentro,2004,4,4,Sogecine>, <4,El viaje de Chihiro,2001,1,1,Ghibli> } 16
  17. 17. Seleccionar combinaciones  correctas en SQL R1.k=R2.k(R1×R2) SELECT * FROM R1,R2 WHERE R1.k=R2.k 17
  18. 18. Notación, operación Reunir (JOIN) R1.k=R2.k (R1×R2) R1 R2 k 18
  19. 19. Operación JOIN en SQL R1 R2 k SELECT * FROM R1,R2 WHERE R1.k=R2.k 19
  20. 20. Operación JOIN en MySQL R1 R2 k SELECT * FROM R1 JOIN R2 USING(k) 20
  21. 21. JOIN natural R1 R2 Omitir el subíndice significa: Unir según todos los atributos que tengan el mismo nombre en las dos tablas 21
  22. 22. Operación NATURAL JOIN en MySQL R1 R2 SELECT * FROM R1 NATURAL JOIN R2 Nota: esto usa todos los atributos que se llamen de la misma manera, a veces no es lo que nosotros queremos  Comunitat( id_comunitat, nom )  Municipi( id_municipi, id_comunitat, nom ) Queremos unir id_comunitat pero no nom 22
  23. 23. Ejemplo de NATURAL JOIN mysql> select comunitat.nom, municipi.nom,  municipi.superficie from comunitat natural join municipi; +­­­­­­­­­+­­­­­­­­­+­­­­­­­­­­­­+ | nom     | nom     | superficie | +­­­­­­­­­+­­­­­­­­­+­­­­­­­­­­­­+ | Ceuta   | Ceuta   |      19.52 | | Melilla | Melilla |      13.96 | +­­­­­­­­­+­­­­­­­­­+­­­­­­­­­­­­+ 2 rows in set (0.14 sec) mysql> select comunitat.nom, municipi.nom,  municipi.superficie from comunitat join municipi  using(ca_id); +­­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­­­­­+ | nom       | nom      | superficie | +­­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­­­­­+ | Andalucía | Abla     |      45.28 | | Andalucía | Abrucena |      83.18 | | Andalucía | Adra     |      89.98 | ... 23
  24. 24. LEFT JOIN JOIN elimina algunos datos Los que no están en las dos tablas LEFT JOIN reemplaza los eliminados por valores nulos en la tabla de la izquierda 24
  25. 25. Operación LEFT JOIN en MySQL R1 R2 k SELECT * FROM R1 LEFT JOIN R2 USING(k) 25
  26. 26. Ejemplo LEFT JOIN Película Estudio ID_Película Nombre Año ID_Estudio ID_Estudio Nombre 1 La guerra de las galaxias 1977 3 1 Ghibli 2 La comunidad del anillo 2001 2 2 New Line Cinema 3 Mar adentro 2004 4 3 Lucasfilms 4 El viaje de Chihiro 2001 1 4 Sogecine 5 Nuevo Estudio CNT Nombre SELECT count(id_pelicula) AS CNT 1 Ghibli 1 New Line Cinema FROM estudio JOIN pelicula 1 Lucasfilms 1 Sogecine USING (id_estudio) CNT Nombre SELECT count(id_pelicula) AS CNT 1 Ghibli 1 New Line Cinema 1 Lucasfilms FROM estudio LEFT JOIN pelicula 1 Sogecine 0 Nuevo Estudio USING (id_estudio) 26
  27. 27. Otro ejemplo LEFT JOIN Viaje id_salida id_llegada Ciudad 1 2 id_ciudad Nombre 1 4 1 Barcelona 5 3 2 Berlin 5 4 3 Roma 5 2 4 Paris 5 1 5 Budapest 2 4 SELECT Nombre CNT  ciudad.nombre,COUNT(viaje.id_salida) Barcelona 2 Berlin 1 FROM Budapest 4  ciudad LEFT JOIN viaje ON Paris 0 Roma 0  (ciudad.id_ciudad=viaje.id_salida) GROUP BY  ciudad.nombre; 27
  28. 28. Ejemplo múltiples JOIN Viaje id_salida id_llegada Ciudad 1 2 id_ciudad Nombre 1 4 1 Barcelona 5 3 2 Berlin 5 4 3 Roma 5 2 4 Paris 5 1 5 Budapest 2 4 Nombre Nombre SELECT cs.nombre, cl.nombre Barcelona Berlin FROM viaje Barcelona Paris Budapest Roma  JOIN ciudad AS cs ON  Budapest Paris Budapest Berlin (viaje.id_salida=cs.id_ciudad) Budapest Barcelona  JOIN ciudad AS cl ON  Berlin Paris (viaje.id_llegada=cl.id_ciudad); 28
  29. 29. Resumen Proyectar (): elegir columnas Seleccionar (): criterio para las filas Producto cartesiano (×): producto tablas Join ó Reunir ( ): combinar tablas 29

×