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?

Displaying Data from Multiple Tables - Oracle Data Base
Displaying Data from Multiple Tables - Oracle Data BaseDisplaying Data from Multiple Tables - Oracle Data Base
Displaying Data from Multiple Tables - Oracle Data BaseSalman Memon
 
Equipo 6 programacion hibrida
Equipo 6 programacion hibridaEquipo 6 programacion hibrida
Equipo 6 programacion hibridagabo
 
Aggregating Data Using Group Functions
Aggregating Data Using Group FunctionsAggregating Data Using Group Functions
Aggregating Data Using Group FunctionsSalman Memon
 
Clase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito deterministaClase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito deterministamvagila
 
Arreglos Unidimensionales - Java - NetBeans
Arreglos Unidimensionales - Java - NetBeansArreglos Unidimensionales - Java - NetBeans
Arreglos Unidimensionales - Java - NetBeansDaniel Gómez
 
Unidad 8 Diagramas De InteraccióN
Unidad 8 Diagramas De InteraccióNUnidad 8 Diagramas De InteraccióN
Unidad 8 Diagramas De InteraccióNSergio Sanchez
 
Tareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosTareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosnenyta08
 
Diagramas de actividad
Diagramas de actividadDiagramas de actividad
Diagramas de actividadJulio Pari
 
Normalización en Bases de datos
Normalización en Bases de datosNormalización en Bases de datos
Normalización en Bases de datoskamui002
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfijaOmarzingm
 
Including Constraints -Oracle Data base
Including Constraints -Oracle Data base Including Constraints -Oracle Data base
Including Constraints -Oracle Data base Salman Memon
 

Was ist angesagt? (20)

Displaying Data from Multiple Tables - Oracle Data Base
Displaying Data from Multiple Tables - Oracle Data BaseDisplaying Data from Multiple Tables - Oracle Data Base
Displaying Data from Multiple Tables - Oracle Data Base
 
Equipo 6 programacion hibrida
Equipo 6 programacion hibridaEquipo 6 programacion hibrida
Equipo 6 programacion hibrida
 
Aggregating Data Using Group Functions
Aggregating Data Using Group FunctionsAggregating Data Using Group Functions
Aggregating Data Using Group Functions
 
6 Curso de POO en Java - clases y objetos
6  Curso de POO en Java - clases y objetos6  Curso de POO en Java - clases y objetos
6 Curso de POO en Java - clases y objetos
 
Sql views
Sql viewsSql views
Sql views
 
Clase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito deterministaClase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito determinista
 
Arreglos Unidimensionales - Java - NetBeans
Arreglos Unidimensionales - Java - NetBeansArreglos Unidimensionales - Java - NetBeans
Arreglos Unidimensionales - Java - NetBeans
 
Modelo v
Modelo vModelo v
Modelo v
 
Diagramas UML
Diagramas UMLDiagramas UML
Diagramas UML
 
2 Curso de POO en java - modelamiento casos de uso
2 Curso de POO en java - modelamiento casos de uso2 Curso de POO en java - modelamiento casos de uso
2 Curso de POO en java - modelamiento casos de uso
 
Unidad 8 Diagramas De InteraccióN
Unidad 8 Diagramas De InteraccióNUnidad 8 Diagramas De InteraccióN
Unidad 8 Diagramas De InteraccióN
 
Tareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosTareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientos
 
Diagramas de actividad
Diagramas de actividadDiagramas de actividad
Diagramas de actividad
 
Arreglos
ArreglosArreglos
Arreglos
 
Oracle sql material
Oracle sql materialOracle sql material
Oracle sql material
 
Normalización en Bases de datos
Normalización en Bases de datosNormalización en Bases de datos
Normalización en Bases de datos
 
Sql tutorial
Sql tutorialSql tutorial
Sql tutorial
 
03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfija
 
Including Constraints -Oracle Data base
Including Constraints -Oracle Data base Including Constraints -Oracle Data base
Including Constraints -Oracle Data base
 

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