Академический Документы
Профессиональный Документы
Культура Документы
Carlos Castillo
UPF – 2008
1
Operaciones
Proyectar ()
Seleccionar ()
Producto cartesiano (×)
Join ó Reunir ( )
Operaciones de conjuntos
Unir (∪)
Intersectar (∩)
Restar (–)
2
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 }
3
Proyección () ejemplos
Película Actor
ID_Película Nombre Año ID_Actor Nombre Apellido
1 La guerra de las galaxias 1977 1 Mark Hamill
2 El señor de los anillos 1 2001 2 Cristopher Lee
3 Mar Adentro 2004 3 Javier Bardem
4 El viaje de Chihiro 2001 4 Hugo Weaving
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>}
4
Proyección () en SQL
A1,A2,...,An(R)
5
Selección ()
Selecciona el valor de ciertas tuplas
condición(R) = { t∈R : condición(t) es cierto}
Selecciona filas completas
6
Selección () ejemplos
Película Actor
ID_Película Nombre Año ID_Actor Nombre Apellido
1 La guerra de las galaxias 1977 1 Mark Hamill
2 La comunidad del anillo 2001 2 Cristopher Lee
3 Mar Adentro 2004 3 Javier Bardem
4 El viaje de Chihiro 2001 4 Hugo Weaving
Apellido=Lee(Actor) =
{<2,Cristopher,Lee>}
Año>2000(Película) =
{<2,La comunidad del anillo,2001>,
<4,El viaje de Chihiro,2001>}
7
Selección () en SQL
condición(R)
8
Composición de selección y
proyección ,
Película Actor
ID_Película Nombre Año ID_Actor Nombre Apellido
1 La guerra de las galaxias 1977 1 Mark Hamill
2 La comunidad del anillo 2001 2 Cristopher Lee
3 Mar Adentro 2004 3 Javier Bardem
4 El viaje de Chihiro 2001 4 Hugo Weaving
Nombre(Apellido=Lee(Actor)) =
{<Cristopher>}
Nombre(Año>2000(Película)) =
{<La comunidad del anillo>,
<El viaje de Chihiro>}
9
Composición ( y ) en SQL
A1,A2,...,An(condición(R))
10
Eliminar duplicados ()
Elimina tuplas (R)
duplicadas en una
relación
Película
ID_Película Nombre Año ID_Estudio
1 La guerra de las galaxias 1977 3
2 La comunidad del anillo 2001 2
3 Mar adentro 2004 4
4 El viaje de Chihiro 2001 1
11
Operación delta 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
Producto cartesiano (×)
ejemplos
Película Estudio
ID_Película Nombre Año ID_Estudio ID_Estudio Nombre
1 La guerra de las galaxias 1977 3 1 Ghibli
2 La comunidad del anillo 2001 2 2 New Line Cinema
3 Mar adentro 2004 4 3 Lucasfilms
4 El viaje de Chihiro 2001 1 4 Sogecine
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>,
... }
14
Producto cartesiano (×) en SQL
R1×R2
15
Seleccionar combinaciones
correctas
Película Estudio
ID_Película Nombre Año ID_Estudio ID_Estudio Nombre
1 La guerra de las galaxias 1977 3 1 Ghibli
2 La comunidad del anillo 2001 2 2 New Line Cinema
3 Mar adentro 2004 4 3 Lucasfilms
4 El viaje de Chihiro 2001 1 4 Sogecine
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>
}
16
Seleccionar combinaciones
correctas en SQL
R1.k=R2.k(R1×R2)
17
Notación, operación
Reunir (JOIN)
R1.k=R2.k (R1×R2)
R1 k R2
18
Operación JOIN en SQL
R1 k R2
19
Operación JOIN
en MySQL
R1 k R2
20
JOIN natural
R1 R2
21
Operación NATURAL JOIN
en MySQL
R1 R2
24
Operación LEFT JOIN
en MySQL
R1 k R2
25
Ejemplo LEFT JOIN
Película Estudio
ID_Película Nombre Año ID_Estudio ID_Estudio Nombre
1 La guerra de las galaxias 1977 3
1 Ghibli
2 La comunidad del anillo 2001 2
2 New Line Cinema
3 Mar adentro 2004 4
4 El viaje de Chihiro 2001 1
3 Lucasfilms
4 Sogecine
5 Nuevo Estudio
CNT Nombre
SELECT count(id_pelicula) AS CNT 1 Ghibli
1 New Line Cinema
1 Lucasfilms
FROM estudio LEFT JOIN pelicula 1 Sogecine
0 Nuevo Estudio
USING (id_estudio)
26
Otro ejemplo LEFT JOIN
Viaje
Ciudad id_salida id_llegada
id_ciudad Nombre 1 2
1 Barcelona 1 4
2 Berlin 5 3
3 Roma 5 4
4 Paris 5 2
5 Budapest 5 1
2 4
SELECT
Nombre CNT
ciudad.nombre,COUNT(viaje.id_salida) Barcelona 2
Berlin 1
FROM Budapest 4
ciudad LEFT JOIN viaje ON Paris 0
Roma 0
(ciudad.id_ciudad=viaje.id_salida)
GROUP BY
ciudad.nombre;
27
Ejemplo múltiples JOIN
Viaje
Ciudad id_salida id_llegada
id_ciudad Nombre 1 2
1 Barcelona 1 4
2 Berlin 5 3
3 Roma 5 4
4 Paris 5 2
5 Budapest 5 1
2 4
Nombre Nombre
SELECT cs.nombre, cl.nombre Barcelona Berlin
FROM viaje Barcelona Paris
Budapest Roma
JOIN ciudad AS cs ON Budapest Paris
Budapest Berlin
(viaje.id_salida=cs.id_ciudad) Budapest Barcelona
Berlin Paris
JOIN ciudad AS cl ON
(viaje.id_llegada=cl.id_ciudad);
28
Resumen
Proyectar (): elegir columnas
Seleccionar (): criterio para las filas
Producto cartesiano (×): producto
tablas
Join ó Reunir ( ): combinar tablas
29