Professional Documents
Culture Documents
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
Nombre
La guerra de las galaxias El seor de los anillos 1 Mar Adentro El viaje de Chihiro
Ao
1977 2001 2004 2001
Actor ID_Actor
1 2 3 4
Nombre
Mark Cristopher Javier Hugo
Apellido
Hamill Lee Bardem Weaving
Proyeccin () en SQL
(R) 1,A2,...,An
Seleccin ()
Selecciona el valor de ciertas tuplas
condicin(R) = { tR : condicin(t) es cierto}
Seleccin () ejemplos
Pelcula ID_Pelcula
1 2 3 4
Nombre
La guerra de las galaxias La comunidad del anillo Mar Adentro El viaje de Chihiro
Ao
1977 2001 2004 2001
Actor ID_Actor
1 2 3 4
Nombre
Mark Cristopher Javier Hugo
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 () en SQL
condicin(R)
Nombre
La guerra de las galaxias La comunidad del anillo Mar Adentro El viaje de Chihiro
Ao
1977 2001 2004 2001
Actor ID_Actor
1 2 3 4
Nombre
Mark Cristopher Javier Hugo
Apellido
Hamill Lee Bardem Weaving
Nombre(Apellido=Lee(Actor)) = {<Cristopher>} Nombre(Ao>2000(Pelcula)) = {<La comunidad del anillo>, <El viaje de Chihiro>}
Composicin ( y ) en SQL
A1,A2,...,An(condicin(R))
10
Eliminar duplicados ()
Elimina tuplas duplicadas en una relacin
Pelcula ID_Pelcula
1 2 3 4
(R)
Nombre
La guerra de las galaxias La comunidad del anillo Mar adentro El viaje de Chihiro
Ao
1977 2001 2004 2001
ID_Estudio
3 2 4 1
11
Operacin en SQL
(R)
12
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
Pelcula ID_Pelcula
1 2 3 4
Ao
1977 2001 2004 2001
ID_Estudio
3 2 4 1
Estudio ID_Estudio
1 2 3 4
Nombre
Ghibli New Line Cinema Lucasfilms Sogecine
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
R1R2
15
Nombre
La guerra de las galaxias La comunidad del anillo Mar adentro El viaje de Chihiro
Ao
1977 2001 2004 2001
ID_Estudio
3 2 4 1
Estudio ID_Estudio
1 2 3 4
Nombre
Ghibli New Line Cinema Lucasfilms Sogecine
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
17
R1
R2
18
R1
R2
19
20
JOIN natural
R1 R2
21
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
LEFT JOIN
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
25
Nombre
La guerra de las galaxias La comunidad del anillo Mar adentro El viaje de Chihiro
Ao
1977 2001 2004 2001
ID_Estudio
3 2 4 1
Estudio ID_Estudio
1 2 3 4 5
Nombre
Ghibli New Line Cinema Lucasfilms Sogecine Nuevo Estudio
CNT
1 1 1 1
Nombre
Ghibli New Line Cinema Lucasfilms Sogecine
CNT
Nombre
Ghibli New Line Cinema Lucasfilms Sogecine Nuevo Estudio
SELECT count(id_pelicula) AS CNT FROM estudio LEFT JOIN pelicula USING (id_estudio)
1 1 1 1 0
26
Viaje id_salida
Nombre
Barcelona Berlin Roma Paris Budapest
id_llegada
2 4 3 4 2 1 4
1 1 5 5 5 5 2
SELECT ciudad.nombre,COUNT(viaje.id_salida) FROM ciudad LEFT JOIN viaje ON (ciudad.id_ciudad=viaje.id_salida) GROUP BY ciudad.nombre;
Nombre
Barcelona Berlin Budapest Paris Roma 2 1 4 0 0
CNT
27
Viaje id_salida
Nombre
Barcelona Berlin Roma Paris Budapest
id_llegada
2 4 3 4 2 1 4
1 1 5 5 5 5 2
SELECT cs.nombre, cl.nombre FROM viaje JOIN ciudad AS cs ON (viaje.id_salida=cs.id_ciudad) JOIN ciudad AS cl ON (viaje.id_llegada=cl.id_ciudad);
Nombre
Barcelona Barcelona Budapest Budapest Budapest Budapest Berlin
Nombre
Berlin Paris Roma Paris Berlin Barcelona Paris
28
Resumen
Proyectar (): elegir columnas Seleccionar (): criterio para las filas Producto cartesiano (): producto tablas Join Reunir ( ): combinar tablas
29