Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6....

29
1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 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).

Transcript of Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6....

Page 1: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

1

Sistemas de Información II

Tema 6. Álgebra relacional

Carlos Castillo

UPF – 2007

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).

Page 2: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

2

Operaciones

Proyectar ()

Seleccionar ()

Producto cartesiano (×)

Join ó Reunir ( )

Operaciones de conjuntos

Unir (∪)

Intersectar (∩)

Restar (–)

Page 3: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

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

Page 4: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

4

Proyección () ejemplosPelículaID_Película Nombre Año

1 La guerra de las galaxias 19772 El señor de los anillos 1 20013 Mar Adentro 20044 El viaje de Chihiro 2001

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>}

ActorID_Actor Nombre Apellido

1 Mark Hamill2 Cristopher Lee3 Javier Bardem4 Hugo Weaving

Page 5: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

5

Proyección () en SQL

A1,A2,...,An(R)

SELECT A1,A2,...,An FROM R

Page 6: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

6

Selección ()

Selecciona el valor de ciertas tuplascondición(R) = { t∈R : condición(t) es cierto}

Selecciona filas completas

Page 7: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

7

Selección () ejemplosPelículaID_Película Nombre Año

1 La guerra de las galaxias 19772 La comunidad del anillo 20013 Mar Adentro 20044 El viaje de Chihiro 2001

Apellido=Lee(Actor) =

{<2,Cristopher,Lee>} Año>2000(Película) =

{<2,La comunidad del anillo,2001>, <4,El viaje de Chihiro,2001>}

ActorID_Actor Nombre Apellido

1 Mark Hamill2 Cristopher Lee3 Javier Bardem4 Hugo Weaving

Page 8: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

8

Selección () en SQL

condición(R)

SELECT * FROM R WHERE condición

Page 9: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

9

Composición de selección y proyección ,

PelículaID_Película Nombre Año

1 La guerra de las galaxias 19772 La comunidad del anillo 20013 Mar Adentro 20044 El viaje de Chihiro 2001

Nombre(Apellido=Lee(Actor)) =

{<Cristopher>} Nombre(Año>2000(Película)) =

{<La comunidad del anillo>, <El viaje de Chihiro>}

ActorID_Actor Nombre Apellido

1 Mark Hamill2 Cristopher Lee3 Javier Bardem4 Hugo Weaving

Page 10: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

10

Composición ( y ) en SQL

A1,A2,...,An(condición(R))

SELECT A1,A2,...,An FROM R WHERE condición

Page 11: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

11

Eliminar duplicados ()

(R)Elimina tuplas

duplicadas en una relación

PelículaID_Película Nombre Año ID_Estudio

1 La guerra de las galaxias 1977 32 La comunidad del anillo 2001 23 Mar adentro 2004 44 El viaje de Chihiro 2001 1

(Año(Película) = { 1997, 2001, 2004 }

Page 12: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

12

Operación delta en SQL

SELECT DISTINCT * FROM R

(R)

Page 13: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

13

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|

Producto cartesiano (×)

Page 14: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

14

Producto cartesiano (×) ejemplos

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>,

... }

PelículaID_Película Nombre Año ID_Estudio

1 La guerra de las galaxias 1977 32 La comunidad del anillo 2001 23 Mar adentro 2004 44 El viaje de Chihiro 2001 1

EstudioID_Estudio Nombre1 Ghibli2 New Line Cinema3 Lucasfilms4 Sogecine

Page 15: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

15

Producto cartesiano (×) en SQL

R1×R2

SELECT * FROM R1,R2

Page 16: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

16

Seleccionar combinaciones correctas

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>

}

PelículaID_Película Nombre Año ID_Estudio

1 La guerra de las galaxias 1977 32 La comunidad del anillo 2001 23 Mar adentro 2004 44 El viaje de Chihiro 2001 1

EstudioID_Estudio Nombre1 Ghibli2 New Line Cinema3 Lucasfilms4 Sogecine

Page 17: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

17

Seleccionar combinaciones correctas en SQL

R1.k=R2.k(R1×R2)

SELECT * FROM R1,R2 WHERE R1.k=R2.k

Page 18: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

18

Notación, operaciónReunir (JOIN)

R1.k=R2.k (R1×R2)

R1 k R2

Page 19: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

19

Operación JOIN en SQL

SELECT * FROM R1,R2 WHERE R1.k=R2.k

R1 k R2

Page 20: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

20

Operación JOINen MySQL

SELECT * FROM R1 JOIN R2 USING(k)

R1 k R2

Page 21: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

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

Page 22: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

22

Operación NATURAL JOINen MySQL

SELECT * FROM R1 NATURAL JOIN R2

R1 R2

Nota: esto usa todos los atributos que se llamen de lamisma 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

Page 23: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

23

Ejemplo de NATURAL JOINmysql> 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 |...

Page 24: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

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

Page 25: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

25

Operación LEFT JOINen MySQL

SELECT * FROM R1 LEFT JOIN R2 USING(k)

R1 k R2

Page 26: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

26

Ejemplo LEFT JOINPelículaID_Película Nombre Año ID_Estudio

1 La guerra de las galaxias 1977 32 La comunidad del anillo 2001 23 Mar adentro 2004 44 El viaje de Chihiro 2001 1

EstudioID_Estudio Nombre1 Ghibli2 New Line Cinema3 Lucasfilms4 Sogecine5 Nuevo Estudio

CNT Nombre1 Ghibli1 New Line Cinema1 Lucasfilms1 Sogecine

CNT Nombre1 Ghibli1 New Line Cinema1 Lucasfilms1 Sogecine0 Nuevo Estudio

SELECT count(id_pelicula) AS CNTFROM estudio JOIN peliculaUSING (id_estudio)

SELECT count(id_pelicula) AS CNTFROM estudio LEFT JOIN peliculaUSING (id_estudio)

Page 27: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

27

Otro ejemplo LEFT JOINCiudad

id_ciudad Nombre1 Barcelona2 Berlin3 Roma4 Paris5 Budapest

Nombre CNTBarcelona 2Berlin 1Budapest 4Paris 0Roma 0

SELECT ciudad.nombre,COUNT(viaje.id_salida)FROM ciudad LEFT JOIN viaje ON (ciudad.id_ciudad=viaje.id_salida)GROUP BY ciudad.nombre;

Viajeid_salida id_llegada

1 21 45 35 45 25 12 4

Page 28: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

28

Ejemplo múltiples JOINCiudad

id_ciudad Nombre1 Barcelona2 Berlin3 Roma4 Paris5 Budapest

Nombre NombreBarcelona BerlinBarcelona ParisBudapest RomaBudapest ParisBudapest BerlinBudapest BarcelonaBerlin Paris

SELECT cs.nombre, cl.nombreFROM viaje JOIN ciudad AS cs ON (viaje.id_salida=cs.id_ciudad) JOIN ciudad AS cl ON (viaje.id_llegada=cl.id_ciudad);

Viajeid_salida id_llegada

1 21 45 35 45 25 12 4

Page 29: Sistemas de Información II Tema 6. Álgebra relacional · 1 Sistemas de Información II Tema 6. Álgebra relacional Carlos Castillo UPF – 2007 Bibliografía: Elmasri y Navathe:

29

Resumen

Proyectar (): elegir columnas

Seleccionar (): criterio para las filas

Producto cartesiano (×): producto tablas

Join ó Reunir ( ): combinar tablas