tema 6. Álgebra relacional
TRANSCRIPT
![Page 1: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/1.jpg)
1
Sistemas de Información II
Tema 6. Álgebra relacional
Carlos Castillo
UPF – 2008
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/2.jpg)
2
Operaciones
Proyectar ()
Seleccionar ()
Producto cartesiano (×)
Join ó Reunir ( )
Operaciones de conjuntos
Unir (∪)
Intersectar (∩)
Restar (–)
![Page 3: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/3.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/4.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/5.jpg)
5
Proyección () en SQL
A1,A2,...,An(R)
SELECT A1,A2,...,An FROM R
![Page 6: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/6.jpg)
6
Selección ()
Selecciona el valor de ciertas tuplascondición(R) = { t∈R : condición(t) es cierto}
Selecciona filas completas
![Page 7: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/7.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/8.jpg)
8
Selección () en SQL
condición(R)
SELECT * FROM R WHERE condición
![Page 9: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/9.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/10.jpg)
10
Composición ( y ) en SQL
A1,A2,...,An(condición(R))
SELECT A1,A2,...,An FROM R WHERE condición
![Page 11: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/11.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/12.jpg)
12
Operación delta en SQL
SELECT DISTINCT * FROM R
(R)
![Page 13: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/13.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/14.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/15.jpg)
15
Producto cartesiano (×) en SQL
R1×R2
SELECT * FROM R1,R2
![Page 16: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/16.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/17.jpg)
17
Seleccionar combinaciones correctas en SQL
R1.k=R2.k(R1×R2)
SELECT * FROM R1,R2 WHERE R1.k=R2.k
![Page 18: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/18.jpg)
18
Notación, operaciónReunir (JOIN)
R1.k=R2.k (R1×R2)
R1 k R2
![Page 19: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/19.jpg)
19
Operación JOIN en SQL
SELECT * FROM R1,R2 WHERE R1.k=R2.k
R1 k R2
![Page 20: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/20.jpg)
20
Operación JOINen MySQL
SELECT * FROM R1 JOIN R2 USING(k)
R1 k R2
![Page 21: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/21.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/22.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/23.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/24.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/25.jpg)
25
Operación LEFT JOINen MySQL
SELECT * FROM R1 LEFT JOIN R2 USING(k)
R1 k R2
![Page 26: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/26.jpg)
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 CNT
FROM estudio JOIN pelicula
USING (id_estudio)
SELECT count(id_pelicula) AS CNT
FROM estudio LEFT JOIN pelicula
USING (id_estudio)
![Page 27: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/27.jpg)
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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/28.jpg)
28
Ejemplo múltiples JOIN
Ciudadid_ciudad Nombre
1 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: Tema 6. Álgebra relacional](https://reader031.vdocuments.net/reader031/viewer/2022021416/586f79bb1a28ab33578b4dea/html5/thumbnails/29.jpg)
29
Resumen
Proyectar (): elegir columnas
Seleccionar (): criterio para las filas
Producto cartesiano (×): producto tablas
Join ó Reunir ( ): combinar tablas