Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bases de Datos Parte 610 Lgebra Relacional3277
Bases de Datos Parte 610 Lgebra Relacional3277
Bibliografa: Elmasri y Navathe: Fundamentos de Sistemas de Bases de Datos 3 edicin, 2002 (Captulo 7). Garcia-Molina, Ullman y Widom: Database systems: the complete book. Prentice-Hall (Captulo 5). Carlos Castillo UPF 2007
1
Operaciones
Proyectar () Seleccionar () Producto cartesiano () Join Reunir ( ) Operaciones de conjuntos
Unir () Intersectar () Restar ()
2
Proyeccin()
Selecciona el valor de ciertos atributos de todas las tuplas de una relacin
A1,A2,...,An(R) = { t[A1,A2,...,An] : t R }
Proyeccin()ejemplos
Pelcula ID_Pelcula
1 2 3 4 La guerra de las galaxias El seor de los anillos 1 Mar Adentro El viaje de Chihiro
Nombre
Ao
Actor ID_Actor
1 2 3 4
Nombre
Apellido
Hamill Lee Bardem Weaving
Proyeccin()enSQL
A1,A2,...,An(R)
SELECTA1,A2,...,AnFROMR
Seleccin()
Selecciona el valor de ciertas tuplas
condicin(R) = { tR : condicin(t) es cierto}
Seleccin()ejemplos
Pelcula ID_Pelcula
1 2 3 4 La guerra de las galaxias La comunidad del anillo Mar Adentro El viaje de Chihiro
Nombre
Ao
Actor ID_Actor
1 2 3 4
Nombre
Apellido
Hamill Lee Bardem Weaving
Apellido=Lee(Actor) = {<2,Cristopher,Lee>} Ao>2000(Pelcula) = {<2,La comunidad del anillo,2001>, <4,El viaje de Chihiro,2001>}
Seleccin()enSQL
condicin(R)
SELECT*FROMRWHEREcondicin
Composicindeselecciny proyeccin,
Pelcula ID_Pelcula
1 2 3 4 La guerra de las galaxias La comunidad del anillo Mar Adentro El viaje de Chihiro
Nombre
Ao
Actor ID_Actor
1 2 3 4
Nombre
Apellido
Hamill Lee Bardem Weaving
Nombre(Apellido=Lee(Actor)) = {<Cristopher>} Nombre(Ao>2000(Pelcula)) = {<La comunidad del anillo>, <El viaje de Chihiro>}
Composicin( y )enSQL
A1,A2,...,An(condicin(R))
SELECTA1,A2,...,AnFROMRWHEREcondicin
10
Eliminarduplicados()
Elimina tuplas duplicadas en una relacin
Pelcula ID_Pelcula
1 2 3 4 La guerra de las galaxias La comunidad del anillo Mar adentro El viaje de Chihiro
(R)
Nombre
Ao
ID_Estudio
3 2 4 1
11
OperacindeltaenSQL
(R)
SELECTDISTINCT*FROMR
12
Productocartesiano()
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
Pelcula ID_Pelcula
1 2 3 4
Productocartesiano() ejemplos
La guerra de las galaxias La comunidad del anillo Mar adentro El viaje de Chihiro
Nombre
Ao
ID_Estudio
3 2 4 1
Estudio ID_Estudio
1 2 3 4
Nombre
PelculaEstudio =
{ <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
Productocartesiano()enSQL
R1R2
SELECT*FROMR1,R2
15
Seleccionarcombinaciones correctas
Pelcula ID_Pelcula
1 2 3 4 La guerra de las galaxias La comunidad del anillo Mar adentro El viaje de Chihiro
Nombre
Ao
ID_Estudio
3 2 4 1
Estudio ID_Estudio
1 2 3 4
Nombre
Pelcula.ID_estudio=Estudio.ID_Estudio(PelculaEstudio) =
{ <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
Seleccionarcombinaciones correctasenSQL
R1.k=R2.k(R1R2)
SELECT*FROMR1,R2WHERER1.k=R2.k
17
Notacin,operacin Reunir(JOIN)
R1.k=R2.k (R1R2)
R1
R2
18
OperacinJOINenSQL
R1
R2
SELECT*FROMR1,R2WHERER1.k=R2.k
19
OperacinJOIN enMySQL
R1 R2
SELECT*FROMR1JOINR2USING(k)
20
JOINnatural
R1 R2
21
OperacinNATURALJOIN enMySQL
R1 R2
SELECT*FROMR1NATURALJOINR2
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
EjemplodeNATURALJOIN
mysql>selectcomunitat.nom,municipi.nom, municipi.superficiefromcomunitatnaturaljoinmunicipi; ++++ |nom|nom|superficie| ++++ |Ceuta|Ceuta|19.52| |Melilla|Melilla|13.96| ++++ 2rowsinset(0.14sec) mysql>selectcomunitat.nom,municipi.nom, municipi.superficiefromcomunitatjoinmunicipi using(ca_id); ++++ |nom|nom|superficie| ++++ |Andaluca|Abla|45.28| |Andaluca|Abrucena|83.18| |Andaluca|Adra|89.98| ...
23
LEFTJOIN
JOIN elimina algunos datos
Los que no estn en las dos tablas
LEFT JOIN reemplaza los eliminados por valores nulos en la tabla de la izquierda
24
OperacinLEFTJOIN enMySQL
R1 R2
SELECT*FROMR1LEFTJOINR2USING(k)
25
EjemploLEFTJOIN
Pelcula ID_Pelcula
1 2 3 4 La guerra de las galaxias La comunidad del anillo Mar adentro El viaje de Chihiro
Nombre
Ao
ID_Estudio
3 2 4 1
Estudio ID_Estudio
1 2 3 4 5
Nombre
1 1 1 1
CNT
Nombre
1 1 1 1 0
CNT
Nombre
26
OtroejemploLEFTJOIN
Ciudad id_ciudad
1 2 3 4 5
Viaje id_salida
Barcelona Berlin Roma Paris Budapest
Nombre
1 1 5 5 5 5 2
2 4 3 4 2 1 4
id_llegada
Nombre
2 1 4 0 0
CNT
27
EjemplomltiplesJOIN
Ciudad id_ciudad
1 2 3 4 5
Viaje id_salida
Barcelona Berlin Roma Paris Budapest
Nombre
1 1 5 5 5 5 2
2 4 3 4 2 1 4
id_llegada
Nombre
Nombre
28
Resumen
Proyectar (): elegir columnas Seleccionar (): criterio para las filas Producto cartesiano (): producto tablas Join Reunir ( ): combinar tablas
29