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

Bases de Datos - Parte 6/10 Álgebra relacional

Embed Size (px)

Citation preview

Page 1: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

2

Operaciones

Proyectar ()

Seleccionar ()

Producto cartesiano (×)

Join ó Reunir ( )

Operaciones de conjuntos

Unir (∪)

Intersectar (∩)

Restar (–)

Page 3: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

5

Proyección () en SQL

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

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

Page 6: Bases de Datos - Parte 6/10 Álgebra relacional

6

Selección ()

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

Selecciona filas completas

Page 7: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

8

Selección () en SQL

condición(R)

SELECT * FROM R WHERE condición

Page 9: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

10

Composición ( y ) en SQL

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

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

Page 11: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

12

Operación delta en SQL

SELECT DISTINCT * FROM R

(R)

Page 13: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

15

Producto cartesiano (×) en SQL

R1×R2

SELECT * FROM R1,R2

Page 16: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

17

Seleccionar combinaciones correctas en SQL

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

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

Page 18: Bases de Datos - Parte 6/10 Álgebra relacional

18

Notación, operaciónReunir (JOIN)

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

R1 k R2

Page 19: Bases de Datos - Parte 6/10 Álgebra relacional

19

Operación JOIN en SQL

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

R1 k R2

Page 20: Bases de Datos - Parte 6/10 Álgebra relacional

20

Operación JOINen MySQL

SELECT * FROM R1 JOIN R2 USING(k)

R1 k R2

Page 21: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

25

Operación LEFT JOINen MySQL

SELECT * FROM R1 LEFT JOIN R2 USING(k)

R1 k R2

Page 26: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

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: Bases de Datos - Parte 6/10 Álgebra relacional

29

Resumen

Proyectar (): elegir columnas

Seleccionar (): criterio para las filas

Producto cartesiano (×): producto tablas

Join ó Reunir ( ): combinar tablas