SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Sistemas de Información II
Tema 6. Álgebra
relacional
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).

                       Carlos Castillo
                         UPF – 2007

                                                          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 }

Selecciona columnas completas




                                                    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)




    SELECT A1,A2,...,An FROM 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)




 SELECT * FROM R WHERE condición




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




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




                                               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




(Año(Película) = { 1997, 2001, 2004 }




                                                                            11
Operación delta en SQL


              (R)




    SELECT DISTINCT * FROM 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                               Estudio
Película
 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




          SELECT * FROM R1,R2




                                 15
Seleccionar combinaciones 
                  correctas
                                                               Estudio
Película
 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)




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




                                         17
Notación, operación
   Reunir (JOIN)

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




         R1       R2
              k




                          18
Operación JOIN en SQL


               R1       R2
                    k




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




                                        19
Operación JOIN
   en MySQL


            R1       R2
                 k




SELECT * FROM R1 JOIN R2 USING(k)




                                    20
JOIN natural

                    R1   R2



Omitir el subíndice significa:
  Unir según todos los atributos que tengan
  el mismo nombre en las dos tablas




                                              21
Operación NATURAL JOIN
           en MySQL

                        R1   R2




           SELECT * FROM R1 NATURAL JOIN R2



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
Ejemplo de NATURAL JOIN
mysql> 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 |
...
                                                            23
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




                                            24
Operación LEFT JOIN
     en MySQL


              R1       R2
                   k




SELECT * FROM R1 LEFT JOIN R2 USING(k)




                                         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
                                                               3            Lucasfilms
4              El viaje de Chihiro         2001       1
                                                               4            Sogecine
                                                               5            Nuevo Estudio




                                                                        CNT                   Nombre
SELECT count(id_pelicula) AS CNT                                    1            Ghibli
                                                                    1            New Line Cinema
FROM estudio JOIN pelicula                                          1            Lucasfilms
                                                                    1            Sogecine
USING (id_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
                                        id_salida       id_llegada
       Ciudad
                                      1             2
         id_ciudad           Nombre
                                      1             4
       1             Barcelona
                                      5             3
       2             Berlin
                                      5             4
       3             Roma
                                      5             2
       4             Paris
                                      5             1
       5             Budapest
                                      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
                                       id_salida       id_llegada
       Ciudad
                                     1             2
        id_ciudad           Nombre
                                     1             4
       1            Barcelona
                                     5             3
       2            Berlin
                                     5             4
       3            Roma
                                     5             2
       4            Paris
                                     5             1
       5            Budapest
                                     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
 JOIN ciudad AS cl ON                    Berlin                 Paris

(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

Weitere ähnliche Inhalte

Was ist angesagt?

Trabajando sentencias de manipulación de datos con MySQL
Trabajando sentencias de manipulación de datos con MySQLTrabajando sentencias de manipulación de datos con MySQL
Trabajando sentencias de manipulación de datos con MySQLJesús Canales Guando
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UMLramirezjaime
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacionalSuarezJhon
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad Relaciónjosecuartas
 
Integridad Y Seguridad En Las Bases De Datos
Integridad Y Seguridad En Las Bases De DatosIntegridad Y Seguridad En Las Bases De Datos
Integridad Y Seguridad En Las Bases De DatosDrakonis11
 
Modelo entidad-relacion sobre la plataforma NETFLIX
Modelo entidad-relacion sobre la plataforma NETFLIXModelo entidad-relacion sobre la plataforma NETFLIX
Modelo entidad-relacion sobre la plataforma NETFLIXximenagalindo10
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Osiris Mirerus
 
Diccionario de datos
Diccionario de datosDiccionario de datos
Diccionario de datosJorge Garcia
 
Modelo entidad relacion
Modelo entidad relacionModelo entidad relacion
Modelo entidad relaciondanielglot
 
Diccionario de datos
Diccionario de datosDiccionario de datos
Diccionario de datosishanavas2012
 

Was ist angesagt? (20)

Trabajando sentencias de manipulación de datos con MySQL
Trabajando sentencias de manipulación de datos con MySQLTrabajando sentencias de manipulación de datos con MySQL
Trabajando sentencias de manipulación de datos con MySQL
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UML
 
Metodo congruencial mixto en java
Metodo congruencial mixto en javaMetodo congruencial mixto en java
Metodo congruencial mixto en java
 
MYSQL
MYSQLMYSQL
MYSQL
 
Estándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de NegociosEstándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de Negocios
 
Grafo bipartito
Grafo bipartitoGrafo bipartito
Grafo bipartito
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad Relación
 
Integridad Y Seguridad En Las Bases De Datos
Integridad Y Seguridad En Las Bases De DatosIntegridad Y Seguridad En Las Bases De Datos
Integridad Y Seguridad En Las Bases De Datos
 
Modelo entidad-relacion sobre la plataforma NETFLIX
Modelo entidad-relacion sobre la plataforma NETFLIXModelo entidad-relacion sobre la plataforma NETFLIX
Modelo entidad-relacion sobre la plataforma NETFLIX
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
 
Analisis y diseño diagrama de contexto
Analisis y diseño diagrama de contextoAnalisis y diseño diagrama de contexto
Analisis y diseño diagrama de contexto
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
Diccionario de datos
Diccionario de datosDiccionario de datos
Diccionario de datos
 
Diagramas de Casos de Uso del Negocio y del Sistema
 Diagramas de Casos de Uso del Negocio y del Sistema Diagramas de Casos de Uso del Negocio y del Sistema
Diagramas de Casos de Uso del Negocio y del Sistema
 
SIMULACION UNIDAD II
SIMULACION UNIDAD IISIMULACION UNIDAD II
SIMULACION UNIDAD II
 
Modelo entidad relacion
Modelo entidad relacionModelo entidad relacion
Modelo entidad relacion
 
Diccionario de datos
Diccionario de datosDiccionario de datos
Diccionario de datos
 

Mehr von Carlos Castillo (ChaTo)

Finding High Quality Content in Social Media
Finding High Quality Content in Social MediaFinding High Quality Content in Social Media
Finding High Quality Content in Social MediaCarlos Castillo (ChaTo)
 
Socia Media and Digital Volunteering in Disaster Management @ DSEM 2017
Socia Media and Digital Volunteering in Disaster Management @ DSEM 2017Socia Media and Digital Volunteering in Disaster Management @ DSEM 2017
Socia Media and Digital Volunteering in Disaster Management @ DSEM 2017Carlos Castillo (ChaTo)
 
Detecting Algorithmic Bias (keynote at DIR 2016)
Detecting Algorithmic Bias (keynote at DIR 2016)Detecting Algorithmic Bias (keynote at DIR 2016)
Detecting Algorithmic Bias (keynote at DIR 2016)Carlos Castillo (ChaTo)
 

Mehr von Carlos Castillo (ChaTo) (20)

Finding High Quality Content in Social Media
Finding High Quality Content in Social MediaFinding High Quality Content in Social Media
Finding High Quality Content in Social Media
 
When no clicks are good news
When no clicks are good newsWhen no clicks are good news
When no clicks are good news
 
Socia Media and Digital Volunteering in Disaster Management @ DSEM 2017
Socia Media and Digital Volunteering in Disaster Management @ DSEM 2017Socia Media and Digital Volunteering in Disaster Management @ DSEM 2017
Socia Media and Digital Volunteering in Disaster Management @ DSEM 2017
 
Detecting Algorithmic Bias (keynote at DIR 2016)
Detecting Algorithmic Bias (keynote at DIR 2016)Detecting Algorithmic Bias (keynote at DIR 2016)
Detecting Algorithmic Bias (keynote at DIR 2016)
 
Discrimination Discovery
Discrimination DiscoveryDiscrimination Discovery
Discrimination Discovery
 
Fairness-Aware Data Mining
Fairness-Aware Data MiningFairness-Aware Data Mining
Fairness-Aware Data Mining
 
Big Crisis Data for ISPC
Big Crisis Data for ISPCBig Crisis Data for ISPC
Big Crisis Data for ISPC
 
Databeers: Big Crisis Data
Databeers: Big Crisis DataDatabeers: Big Crisis Data
Databeers: Big Crisis Data
 
Observational studies in social media
Observational studies in social mediaObservational studies in social media
Observational studies in social media
 
Natural experiments
Natural experimentsNatural experiments
Natural experiments
 
Content-based link prediction
Content-based link predictionContent-based link prediction
Content-based link prediction
 
Link prediction
Link predictionLink prediction
Link prediction
 
Recommender Systems
Recommender SystemsRecommender Systems
Recommender Systems
 
Graph Partitioning and Spectral Methods
Graph Partitioning and Spectral MethodsGraph Partitioning and Spectral Methods
Graph Partitioning and Spectral Methods
 
Finding Dense Subgraphs
Finding Dense SubgraphsFinding Dense Subgraphs
Finding Dense Subgraphs
 
Graph Evolution Models
Graph Evolution ModelsGraph Evolution Models
Graph Evolution Models
 
Link-Based Ranking
Link-Based RankingLink-Based Ranking
Link-Based Ranking
 
Text Indexing / Inverted Indices
Text Indexing / Inverted IndicesText Indexing / Inverted Indices
Text Indexing / Inverted Indices
 
Indexing
IndexingIndexing
Indexing
 
Text Summarization
Text SummarizationText Summarization
Text Summarization
 

Bases de Datos - Parte 6/10 Álgebra relacional