Return to Video

05-01 Álgebra Relacional 1

  • 0:00 - 0:01
    Este es el primero de dos
  • 0:01 - 0:04
    vídeos donde donde aprenderemos sobre Álgebra Relacional
  • 0:04 - 0:07
    El Álgebra Relacional es un lenguaje formal
  • 0:07 - 0:09
    Es un álgebra que forma
  • 0:09 - 0:12
    la base de lenguajes implementados como lo es SQL
  • 0:12 - 0:14
    En este vídeo iremos
  • 0:14 - 0:15
    aprendiendo las bases del
  • 0:15 - 0:19
    Lenguaje de Consultas del Álgebra Relacional y un poco de los operadores más populares.
  • 0:19 - 0:20
    En el segundo vídeo aprenderemos
  • 0:20 - 0:22
    algunos operadores adicionales y algunas
  • 0:22 - 0:26
    notaciones alternativas para el Álgebra Relacional.
  • 0:26 - 0:28
    Ahora, recapitulemos primero de
  • 0:28 - 0:29
    nuestro vídeo previo sobre consultas
  • 0:29 - 0:31
    relacionales, que las consultas sobre
  • 0:31 - 0:33
    bases de datos relacionales operan sobre
  • 0:33 - 0:36
    relaciones(tablas) y que estas producen relaciones(tablas) como resultado
  • 0:36 - 0:38
    Así, sí escribimos una consulta(query)
  • 0:38 - 0:39
    que opere, digamos sobre las tres
  • 0:39 - 0:41
    relaciones representadas aquí, el
  • 0:41 - 0:44
    resultado de la consulta será una nueva relación(tabla)
  • 0:44 - 0:46
    Y, de hecho, podemos
  • 0:46 - 0:47
    hacer una consulta posterior sobre esta
  • 0:47 - 0:49
    nueva relación o combinar la
  • 0:49 - 0:52
    nueva relación con nuestras relaciones(tablas) previas
  • 0:52 - 0:54
    Así que empecemos con el Álgebra Relacional
  • 0:54 - 0:56
    Para los ejemplos en
  • 0:56 - 0:57
    este vídeo estaremos
  • 0:57 - 1:00
    usando una simple base de datos de admisión a universidades con tres relaciones(tablas)
  • 1:00 - 1:02
    La primera relación, la relación de
  • 1:02 - 1:03
    universidades, que contiene información sobre el
  • 1:03 - 1:06
    nombre de la universidad, el estado y la cantidad de estudiantes (enrollment)
  • 1:06 - 1:08
    La segunda relación, la relación de
  • 1:08 - 1:10
    estudiantes que contiene un ID
  • 1:10 - 1:11
    para cada estudiante, el nombre del estudiante,
  • 1:11 - 1:14
    GPA y el tamaño de la preparatoria a la que ellos asistieron.
  • 1:14 - 1:16
    Y finalmente, la tercera relación que contiene
  • 1:16 - 1:18
    información sobre los registros de estudiantes a las universidades
  • 1:18 - 1:20
    Específicamente, el ID del estudiante, el
  • 1:20 - 1:21
    nombre de la universidad en donde se
  • 1:21 - 1:22
    registraron, la carrera
  • 1:22 - 1:25
    que solicitaron y la decisión de aceptados o no
  • 1:25 - 1:28
    He subrayado las claves(llaves) de las tres relaciones
  • 1:28 - 1:30
    Como un recordatorio, una clave(llave) es
  • 1:30 - 1:31
    un atributo o un conjunto de
  • 1:31 - 1:33
    atributos cuyos valores
  • 1:33 - 1:35
    se garantiza serán únicos.
  • 1:35 - 1:36
    Así, por ejemplo, estaremos
  • 1:36 - 1:38
    asumiendo que el nombre de universidad sera único,
  • 1:38 - 1:40
    que los IDs de los estudiantes serán unicos y que
  • 1:40 - 1:41
    los estudiantes sólo se registraran a
  • 1:41 - 1:46
    una carrera en particular por cada universidad una sola vez.
  • 1:46 - 1:47
    Así tendremos una
  • 1:47 - 1:48
    imagen de las tres relaciones en
  • 1:48 - 1:52
    la parte inferior de la diapositiva durante el vídeo.
  • 1:52 - 1:54
    La consulta más simple en el álgebra
  • 1:54 - 1:55
    relacional es una consulta
  • 1:55 - 1:57
    que es simplemente el nombre de una relación.
  • 1:57 - 1:58
    Así, por ejemplo, podemos
  • 1:58 - 2:01
    escribir una consulta, "estudiante"(student) y esta
  • 2:01 - 2:04
    es una expresión valida en álgebra relacional.
  • 2:04 - 2:05
    Sí corremos esta consulta en
  • 2:05 - 2:07
    nuestra base de datos obtendremos como
  • 2:07 - 2:09
    resultado una copia de la relación de estudiantes
  • 2:09 - 2:11
    muy sencillo.
  • 2:11 - 2:12
    Ahora lo que pasara después
  • 2:12 - 2:13
    es que estaremos usando
  • 2:13 - 2:15
    operadores del álgebra relacional
  • 2:15 - 2:19
    para filtrar relaciones, rebanar relaciones y combinar relaciones
  • 2:19 - 2:23
    Así que vayamos por esos operadores.
  • 2:23 - 2:26
    El primer operador es el operador seleccionar.
  • 2:26 - 2:27
    El operador seleccionar es usado
  • 2:27 - 2:30
    para quitar ciertas filas de una relación
  • 2:30 - 2:31
    El operador seleccionar se denota por
  • 2:31 - 2:33
    Sigma con un sub-índice que
  • 2:33 - 2:35
    es la condición que se usara para
  • 2:35 - 2:37
    filtrar las filas que extraeremos de las relaciones
  • 2:37 - 2:40
    Así que vayamos con tres ejemplos aquí.
  • 2:40 - 2:41
    El primer ejemplo dice que
  • 2:41 - 2:42
    queremos encontrar los estudiantes
  • 2:42 - 2:44
    cuyo GPA es mayor que 3.7.
  • 2:44 - 2:45
    Así que para escribir esa
  • 2:45 - 2:47
    expresión en álgebra relacional, escribiremos
  • 2:47 - 2:48
    Sigma el cual es
  • 2:48 - 2:50
    el operador seleccionar y con
  • 2:50 - 2:51
    la condición en el sub-índice que
  • 2:51 - 2:54
    estaremos filtrando el GPA mayor a
  • 2:54 - 2:58
    3.7 -- y la relación sobre la que estamos buscando
  • 2:58 - 3:00
    Así, esta expresión regresara
  • 3:00 - 3:02
    un subconjunto de la tabla
  • 3:02 - 3:04
    estudiantes conteniendo aquellas filas
  • 3:04 - 3:07
    con el GPA mayor a 3.7.
  • 3:07 - 3:08
    Sí queremos filtrar con dos
  • 3:08 - 3:09
    condiciones, solo hacemos
  • 3:09 - 3:12
    un "and" de las condiciones en el sub-índice del Sigma
  • 3:12 - 3:13
    Así sí queremos, digamos, aquellos estudiantes
  • 3:13 - 3:15
    cuyo GPA es mayor a 3.7
  • 3:15 - 3:16
    y cuyo tamaño de su preparatria
  • 3:16 - 3:18
    sea menor a 1000,
  • 3:18 - 3:23
    escribiremos, seleccionar GPA mayor a 3.7
  • 3:23 - 3:24
    Usamos un operador
  • 3:24 - 3:27
    "and logico" con el simbolo ^
  • 3:27 - 3:28
    tamaño de la preparatoria menor a
  • 3:28 - 3:32
    1000, y la aplicamos sobre la relación de estudiantes.
  • 3:32 - 3:33
    Y una vez más el resultado de
  • 3:33 - 3:34
    esta será un subconjunto de la
  • 3:34 - 3:37
    relación de estudiantes conteniendo las filas que satisfagan la condición.
  • 3:37 - 3:39
    Sí queremos encontrar
  • 3:39 - 3:41
    los registros para Stanford para
  • 3:41 - 3:42
    la carrera CS, entonces
  • 3:42 - 3:45
    estaremos realizando una condición de selección sobre la relación "Apply"
  • 3:45 - 3:46
    Una vez más, escribimos Sigma
  • 3:46 - 3:48
    y ahora en el sub-índice
  • 3:48 - 3:49
    estará diciendo que el nombre
  • 3:49 - 3:54
    de universidad sea Stanford y que la carrera sea CS
  • 3:54 - 3:57
    Otra vez, el operador and ^, y
  • 3:57 - 3:59
    que será aplicado sobre
  • 3:59 - 4:01
    la relación "apply" y
  • 4:01 - 4:02
    esta regresara como
  • 4:02 - 4:06
    resultado, un subconjunto de la relación "apply"
  • 4:06 - 4:07
    Así que el caso general del
  • 4:07 - 4:10
    operador seleccionar es que tenemos a Sigma
  • 4:10 - 4:12
    Tenemos una condición como un
  • 4:12 - 4:14
    sub-índice y después tenemos un nombre de una relación.
  • 4:14 - 4:17
    Y regresamos como resultado el subconjunto de la relación.
  • 4:17 - 4:21
    Nuestro siguiente operador es el Operador Proyectar
  • 4:21 - 4:23
    Mientras el Operador Seleccionar toma ciertas filas,
  • 4:23 - 4:26
    el Operador Proyectar toma ciertas columnas.
  • 4:26 - 4:28
    Así que digamos que
  • 4:28 - 4:29
    estamos interesados en los registros a universidad,
  • 4:29 - 4:30
    pero todo lo que queremos saber es
  • 4:30 - 4:34
    la lista de los IDs y de la decisiones de aceptación.
  • 4:34 - 4:35
    El operador proyectar se escribe
  • 4:35 - 4:37
    usando el símbolo Griego Pi
  • 4:37 - 4:39
    y como sub-índice sera
  • 4:39 - 4:42
    la lista de nombres de columna que nos gustaría extraer.
  • 4:42 - 4:43
    Así escribimos ID, lo siento.
  • 4:43 - 4:46
    ID del estudiante(student ID), decisión(decision) y
  • 4:46 - 4:49
    lo aplicamos a la relación "apply"
  • 4:49 - 4:51
    Ahora lo que hemos obtendremos
  • 4:51 - 4:54
    de regreso es una relación que solo tiene 2 columns
  • 4:54 - 4:55
    Esta tendrá todas las
  • 4:55 - 4:56
    tuplas de "apply", pero
  • 4:56 - 4:57
    solo va a tener
  • 4:57 - 5:00
    los IDs de los estudiantes y la columna decisión.
  • 5:00 - 5:02
    Así que el caso general del
  • 5:02 - 5:04
    Operador Proyectar es la
  • 5:04 - 5:05
    proyección y después
  • 5:05 - 5:07
    la lista de atributos, que puede ser
  • 5:07 - 5:13
    cualquier cantidad de ellos y finalmente el nombre de la relación.
  • 5:13 - 5:14
    Ahora, que si estamos interesados en
  • 5:14 - 5:16
    obtener tanto filas como columnas al mismo tiempo.
  • 5:16 - 5:18
    Así si queremos sólo algunas
  • 5:18 - 5:20
    filas, y queremos sólo algunas columnas
  • 5:20 - 5:23
    Ahora vamos a unir operadores
  • 5:23 - 5:26
    Recuerda que las consultas relacionales producen relaciones.
  • 5:26 - 5:27
    Así que podemos escribir un
  • 5:27 - 5:29
    consulta digamos que el
  • 5:29 - 5:31
    operador seleccionar de los
  • 5:31 - 5:33
    estudiantes cuyos GPA son mayores a 3.7
  • 5:33 - 5:35
    Y esto es como lo hacemos
  • 5:35 - 5:37
    podemos tomar
  • 5:37 - 5:39
    la expresión entera la cual produce una
  • 5:39 - 5:40
    relación y podemos
  • 5:40 - 5:42
    aplicarle la proyección a esta, y
  • 5:42 - 5:43
    podemos obtener como resultado el id del
  • 5:43 - 5:49
    estudiante y el nombre del estudiante
  • 5:49 - 5:50
    muy bien.
  • 5:50 - 5:51
    Así que lo que de hecho vemos
  • 5:51 - 5:54
    ahora es el caso general
  • 5:54 - 5:55
    de los operadores selección y
  • 5:55 - 5:58
    de la proyección que fueron bastante de lo que dije al inicio.
  • 5:58 - 5:59
    Estuve engañándote un poquito
  • 5:59 - 6:01
    Cuando escribimos el operador
  • 6:01 - 6:03
    seleccionar, Este es un seleccionar(select)
  • 6:03 - 6:06
    con la condición sobre cualquier
  • 6:06 - 6:07
    expresión del álgebra
  • 6:07 - 6:08
    relacional, y sí esta es
  • 6:08 - 6:09
    muy grande podríamos querear
  • 6:09 - 6:11
    poner paréntesis
  • 6:11 - 6:13
    y de forma similar el operador proyección es
  • 6:13 - 6:16
    una lista de atributos de
  • 6:16 - 6:18
    cualquier expresión del álgebra relacional
  • 6:18 - 6:20
    y podemos unirlos tantos como quereamos
  • 6:20 - 6:22
    Podemos tener una selección sobre una proyección sobre
  • 6:22 - 6:24
    una selección, una selección, una proyección y así sucesivamente.
  • 6:24 - 6:27
    Ahora hablemos acerca
  • 6:27 - 6:31
    de valores duplicados en los resultados de consultas del álgebra relacional
  • 6:31 - 6:33
    Supongamos que necesitamos
  • 6:33 - 6:34
    una lista de las carreras para
  • 6:34 - 6:37
    las que personas se han registrado y la decisión para esas carreras.
  • 6:37 - 6:37
    Así que escribimos la
  • 6:37 - 6:40
    proyección de las carreras
  • 6:40 - 6:45
    y la decisión sobre la relación "apply"
  • 6:45 - 6:46
    Podrías pensar que cuando obtenemos
  • 6:46 - 6:49
    el resultado de la consulta, vamos a obtener un montón de valores duplicados.
  • 6:49 - 6:51
    Así tendremos CS si, CS
  • 6:51 - 6:54
    si, CS no, EE si, EE no, y así sucesivamente.
  • 6:54 - 6:55
    Puedes imaginar una
  • 6:55 - 6:57
    enorme base de datos real de una aplicación
  • 6:57 - 6:59
    va ha haber cientos de
  • 6:59 - 7:02
    personas registradas para carreras y tendrán un si o no como decisión
  • 7:02 - 7:04
    La semántica del álgebra
  • 7:04 - 7:08
    relacional dice que los duplicados son siempre eliminados
  • 7:08 - 7:09
    Así sí tu realizas una consulta
  • 7:09 - 7:10
    que lógicamente tendría un
  • 7:10 - 7:11
    montón de valores duplicados
  • 7:11 - 7:14
    tu sólo obtienes un valor para cada resultado
  • 7:14 - 7:16
    Esto es de hecho una pequeña diferencia con el lenguaje SQL
  • 7:16 - 7:18
    Mientras SQL esta basado en
  • 7:18 - 7:20
    lo que conocemos como multi-conjuntos o
  • 7:20 - 7:21
    bolsas y eso significa
  • 7:21 - 7:24
    que no eliminamos los duplicados, mientras
  • 7:24 - 7:26
    que el álgebra relacional esta basado
  • 7:26 - 7:29
    en conjuntos donde los duplicados son eliminados
  • 7:29 - 7:30
    O bien hay un multi-conjunto o hay una
  • 7:30 - 7:32
    mala definición del álgebra relacional
  • 7:32 - 7:33
    por lo mientras, pero estaremos bien
  • 7:33 - 7:38
    tan sólo considerando el conjunto álgebra relacional en estos vídeos.
  • 7:38 - 7:39
    Nuestro primer operador que combina dos
  • 7:39 - 7:41
    relaciones es el operador producto-cuz
  • 7:41 - 7:43
    también conocido como el producto cartesiano
  • 7:43 - 7:45
    Lo que este operador hace es
  • 7:45 - 7:46
    tomar dos relaciones y un poco de
  • 7:46 - 7:48
    pegamento para juntarlas a
  • 7:48 - 7:49
    su esquema resultante
  • 7:49 - 7:50
    es la unión de los
  • 7:50 - 7:52
    esquemas de las dos relaciones y
  • 7:52 - 7:54
    el contenido del resultado serán todas
  • 7:54 - 7:56
    las combinaciones de las tuplas(filas) de esas relaciones.
  • 7:56 - 7:57
    De hecho el conjunto normal
  • 7:57 - 7:59
    del producto cruz es el que
  • 7:59 - 8:01
    pudieras haber aprendido antes en la primaria
  • 8:01 - 8:03
    Así que hablemos, digamos
  • 8:03 - 8:06
    hacer el producto cruz de estudiantes y de "apply"
  • 8:06 - 8:08
    sí hacemos este
  • 8:08 - 8:09
    producto cruz, sólo para
  • 8:09 - 8:11
    tener una imagen, voy a pegar
  • 8:11 - 8:14
    estas dos relacionas para unirlas aquí.
  • 8:14 - 8:15
    sí hacemos el
  • 8:15 - 8:16
    producto cruz obtendremos como
  • 8:16 - 8:18
    resultado una gran relación, aquí, la cual
  • 8:18 - 8:20
    va a tener 8 atributos
  • 8:20 - 8:21
    Los 8 atributos de los estudiantes y "apply"
  • 8:21 - 8:24
    ahora el único
  • 8:24 - 8:25
    pequeño truco es
  • 8:25 - 8:27
    cuando pegamos dos relacionas para juntarlas
  • 8:27 - 8:28
    algunas veces tendrán el mismo atrubuto
  • 8:28 - 8:31
    duplicado y podemos ver que tendremos que tenemos SID en ambos lados
  • 8:31 - 8:33
    así sólo como una convención de notación
  • 8:33 - 8:35
    cuando el producto cruz es hecho
  • 8:35 - 8:36
    y hay dos atributos que son nombrados igual
  • 8:36 - 8:39
    A ellos se les antepone el nombre de la relación a la cual pertenecen
  • 8:39 - 8:40
    así este sería referenciado
  • 8:40 - 8:42
    en el producto cruz como
  • 8:42 - 8:44
    student.SID donde este otro
  • 8:44 - 8:45
    así sería referenciado
  • 8:45 - 8:48
    como apply.SID
  • 8:48 - 8:49
    De nuevo unimos,
  • 8:49 - 8:51
    en el producto cartesiano, las dos relaciones
  • 8:51 - 8:53
    con 4 atributos cada una.
  • 8:53 - 8:55
    obtenemos como resultado 8 atributos
  • 8:55 - 8:57
    Ahora hablemos obre el contenido de estos
  • 8:57 - 9:00
    supongamos que la relación de estudiantes
  • 9:00 - 9:02
    tiene S tuplas
  • 9:02 - 9:04
    mientras
  • 9:04 - 9:05
    que "apply" tiene 8(A) tuplas
  • 9:05 - 9:07
    el resultado del
  • 9:07 - 9:08
    producto cartesiano va a
  • 9:08 - 9:10
    tener SxA tuplas
  • 9:10 - 9:12
    va a tener una tupla
  • 9:12 - 9:14
    por toda combinación de tuplas
  • 9:14 - 9:19
    de la relación de estudiantes y de la relación "apply"
  • 9:19 - 9:20
    Ahora, el producto cruz parece
  • 9:20 - 9:21
    que podría no
  • 9:21 - 9:23
    ser útil , pero lo que es
  • 9:23 - 9:24
    interesante es que usamos
  • 9:24 - 9:26
    el producto cruz junto con otros operadores
  • 9:26 - 9:28
    Y veamos un gran ejemplo de esto
  • 9:28 - 9:30
    Supongamos que queremos
  • 9:30 - 9:32
    obtener el nombre y GPAs de los
  • 9:32 - 9:33
    estudiantes con una tamaño de preparatoria
  • 9:33 - 9:35
    mayor a 1000 y a aquellos que se
  • 9:35 - 9:37
    registraron para CS y no fueron aceptados
  • 9:37 - 9:40
    OK echemos un un vistazo.
  • 9:40 - 9:41
    vamos a tener acceso
  • 9:41 - 9:43
    a las filas de la tablas estudiantes y de "apply"
  • 9:43 - 9:45
    con el fin de realizar consultas
  • 9:45 - 9:46
    lo que vamos a hacer es que
  • 9:46 - 9:49
    tomaremos los estudiantes que se registraron como punto de partida
  • 9:49 - 9:51
    ahora tenemos
  • 9:51 - 9:53
    una gran relación que contiene
  • 9:53 - 9:57
    8 atributos y todas esas tuplas que describimos previamente
  • 9:57 - 9:58
    Pero ahora vamos a
  • 9:58 - 10:00
    empezar a hacer cosas mas interesantes, porque
  • 10:00 - 10:01
    lo que vamos a hacer es
  • 10:01 - 10:03
    una gran selección sobre esta relación
  • 10:03 - 10:04
    Y para la selección primero que todo
  • 10:04 - 10:06
    es asegurarnos
  • 10:06 - 10:08
    de que sólo combine las tuplas de estudiantes con
  • 10:08 - 10:11
    las tuplas de "apply" que están referenciadas por el mismo studiante id
  • 10:11 - 10:12
    Para hacerlo escribimos
  • 10:12 - 10:15
    student.SID igual
  • 10:15 - 10:17
    a apply.SID
  • 10:17 - 10:18
    así hemos filtrado el resultado
  • 10:18 - 10:20
    del producto cruz, sólo
  • 10:20 - 10:22
    incluyendo combinaciones de estudiantes y registros
  • 10:22 - 10:24
    de "apply" por parejas para hacer el conjunto
  • 10:24 - 10:26
    Ahora que hemos hecho un pequeño adicional filtrado
  • 10:26 - 10:28
    decimos que queremos
  • 10:28 - 10:29
    que el tamaño de la preparatoria sea
  • 10:29 - 10:31
    mayor a 1000, así
  • 10:31 - 10:33
    usamos un operador "and" en la preparatoria
  • 10:33 - 10:35
    queremos también los que se registraron
  • 10:35 - 10:37
    a CS así que eso es un "and" y carrera igual a CS
  • 10:37 - 10:40
    Vamos a obtener una bonita gran consulta aquí
  • 10:40 - 10:41
    y finalmente queremos los que
  • 10:41 - 10:42
    fueron rechazados así "and" decisión
  • 10:42 - 10:47
    igual, sólo estamos usando R para rechazados
  • 10:47 - 10:50
    así tenemos una gigantesca consulta.
  • 10:50 - 10:51
    Esto nos da exactamente lo que
  • 10:51 - 10:53
    queremos excepto por una cosa
  • 10:53 - 10:56
    la cual es, como ya había dicho, todo lo que queremos es sus nombres y sus GPAs
  • 10:56 - 10:57
    Así que para finalizar ponemos un
  • 10:57 - 10:59
    gran paréntesis alrededor aquí y
  • 10:59 - 11:00
    le aplicamos
  • 11:00 - 11:02
    el operador proyección para obtener
  • 11:02 - 11:06
    el nombre del estudiante y el GPA
  • 11:06 - 11:07
    Y esto es una expresión
  • 11:07 - 11:09
    del álgebra relacional que produce la consulta
  • 11:09 - 11:12
    que hemos escrito en inglés
  • 11:12 - 11:13
    Ahora que hemos visto como
  • 11:13 - 11:14
    el producto cruz nos permite
  • 11:14 - 11:16
    combinar tuplas y de que después
  • 11:16 - 11:18
    podemos aplicarles condiciones de selección para
  • 11:18 - 11:21
    obtener un resultado que tenga significado
  • 11:21 - 11:22
    esto hace que el álgebra relacional
  • 11:22 - 11:24
    incluya un operador llamado
  • 11:24 - 11:25
    el "natural join" que es
  • 11:25 - 11:27
    usado para exactamente el propósito descrito
  • 11:27 - 11:29
    Lo que el natural join hace es
  • 11:29 - 11:31
    que realiza el producto cruz
  • 11:31 - 11:33
    pero después busca igualdad
  • 11:33 - 11:35
    en los atributos que tengan el mismo nombre
  • 11:35 - 11:36
    Así si configuramos nuestro
  • 11:36 - 11:38
    esquema apropiadamente, por ejemplo
  • 11:38 - 11:40
    que tenemos un id de estudiante y otro aquí
  • 11:40 - 11:42
    significan la misma cosa
  • 11:42 - 11:43
    y cuando aplicamos el
  • 11:43 - 11:45
    producto cruz este sólo
  • 11:45 - 11:48
    va a combinar las tuplas donde el id del estudiante sea el mismo
  • 11:48 - 11:49
    Y aún mas, sí agregamos
  • 11:49 - 11:51
    universidad, podemos
  • 11:51 - 11:54
    ver que tenemos el nombre de universidad aquí y aquí también
  • 11:54 - 11:56
    sí combinamos las tuplas de universidad y "apply"
  • 11:56 - 11:59
    combinaremos sólo las tuplas que esten hablando de la misma universidad
  • 11:59 - 12:01
    Ahora en adición, una cosa más
  • 12:01 - 12:02
    que esto hace es
  • 12:02 - 12:06
    quita esos atributos que tienen el mismo nombre
  • 12:06 - 12:07
    así una vez que combinamos
  • 12:07 - 12:09
    por ejemplo, estudiantes y "appy"
  • 12:09 - 12:11
    con el "natural join" sólo
  • 12:11 - 12:13
    combinaremos tuplas donde los
  • 12:13 - 12:16
    SID de estudiante y los SID de "apply" sean el mismo
  • 12:16 - 12:17
    Por lo que no necesitamos mantener dos
  • 12:17 - 12:19
    copias de lo aquellas
  • 12:19 - 12:23
    columnas porque los valores siempre serán los mismos
  • 12:23 - 12:25
    así el operador natural join
  • 12:25 - 12:28
    se escribe usando un símbolo como moño
  • 12:28 - 12:30
    esa es tan sólo la convención
  • 12:30 - 12:34
    lo encontraras en tus programas editores de texto, sí buscas cuidadosamente.
  • 12:34 - 12:37
    así que hagamos algunos ejemplos.
  • 12:37 - 12:38
    Regresemos a nuestra misma
  • 12:38 - 12:39
    consulta donde estábamos buscando
  • 12:39 - 12:42
    los nombres y GPAs de los estudiantes
  • 12:42 - 12:45
    de grandes preparatorias quienes se registraron para la carrera CS y que fueron rechazados.
  • 12:45 - 12:46
    Así que ahora en lugar de usar
  • 12:46 - 12:47
    el producto cruz vamos a
  • 12:47 - 12:51
    usar el natural join, el cual como dije se escribe con un símbolo similar a moño
  • 12:51 - 12:53
    que nos permite
  • 12:53 - 12:54
    hacer, una vez hecho el natural join,
  • 12:54 - 12:56
    esto es que no tenemos
  • 12:56 - 12:57
    que escribir la condición, que especifique
  • 12:57 - 12:59
    la igualdad de esos dos
  • 12:59 - 13:01
    atributos, porque este lo hará por si mismo
  • 13:01 - 13:03
    y una vez que lo hemos hecho eso
  • 13:03 - 13:04
    todo lo que necesitamos hace es
  • 13:04 - 13:05
    aplicarlo al resto de nuestras condiciones.
  • 13:05 - 13:06
    la cual fue que la preparatoria
  • 13:06 - 13:08
    sea más grande que 1000 y que la carrera
  • 13:08 - 13:11
    sea igual CS y que la decisión
  • 13:11 - 13:14
    sea rechazados, otra vez
  • 13:14 - 13:16
    llamaremos a eso R, después
  • 13:16 - 13:17
    una vez que sólo hemos obtenido el nombre
  • 13:17 - 13:19
    y GPAs, escribimos los
  • 13:19 - 13:24
    nombres de estudiantes y GPA
  • 13:24 - 13:24
    bien
  • 13:24 - 13:26
    y ese es el resultado de la consulta usando un natural join
  • 13:26 - 13:27
    así, como puedes ver este es un
  • 13:27 - 13:29
    poco más simple que la original
  • 13:29 - 13:30
    con el producto cruz y por configurar
  • 13:30 - 13:33
    el esquema correctamente, el natural join puede ser útil
  • 13:33 - 13:37
    Ahora agreguemos una complicación más a nuestra consulta
  • 13:37 - 13:38
    Supongamos que sólo estamos interesados
  • 13:38 - 13:41
    en los registros a universidades en las que la cantidad de alumnos sea mayor a 20,000
  • 13:41 - 13:43
    hasta ahora
  • 13:43 - 13:44
    en nuestra expresión nos referimos a
  • 13:44 - 13:46
    la relación de estudiantes y la de "apply"
  • 13:46 - 13:48
    pero no hemos usado la relación de universidades
  • 13:48 - 13:50
    pero sí queremos tener un
  • 13:50 - 13:51
    filtro sobre la cantidad de alumnos, vamos a tener
  • 13:51 - 13:55
    que traer la relación de universidades a escena
  • 13:55 - 13:57
    esto podría volverse más fácil de lo que piensas
  • 13:57 - 13:59
    Tan sólo borremos un par
  • 13:59 - 14:01
    de nuestros parámetros aquí y lo que
  • 14:01 - 14:02
    vamos a hacer es que
  • 14:02 - 14:04
    vamos a juntar
  • 14:04 - 14:07
    la relación de universidades, con las dos relaciones que ya tenemos
  • 14:07 - 14:11
    Ahora técnicamente el natural
  • 14:11 - 14:13
    join es un operador binario, las personas
  • 14:13 - 14:15
    frecuentemente lo usan sin paréntesis
  • 14:15 - 14:16
    porque es asociativo,
  • 14:16 - 14:20
    Podríamos agregarlo y después estaría en buena forma
  • 14:20 - 14:22
    Ahora que ya hemos juntado las tres relaciones
  • 14:22 - 14:24
    y recordemos que el natural join automáticamente
  • 14:24 - 14:27
    busca los atributos que comparten el mismo nombre
  • 14:27 - 14:29
    muy específicamente, el nombre
  • 14:29 - 14:30
    de la universidad aquí va a ser
  • 14:30 - 14:33
    igual al nombre de universidad de la relación "apply" también
  • 14:33 - 14:36
    Ahora una vez que hemos hecho esto, tenemos toda la información que necesitamos.
  • 14:36 - 14:37
    Sólo tenemos que agregar una
  • 14:37 - 14:39
    condición de filtro más, la cual es
  • 14:39 - 14:42
    que la cantidad de alumnos de las universidades sea mayor a 20,000
  • 14:42 - 14:47
    y con esto, ya tenemos nuestra consulta
  • 14:47 - 14:48
    Para resumir el
  • 14:48 - 14:52
    natural join , el natural join combina relaciones
  • 14:52 - 14:54
    Esto automáticamente pone valores iguales
  • 14:54 - 14:55
    cuando los nombres de atributos
  • 14:55 - 14:58
    son los mismos y después elimina las columnas duplicadas
  • 14:58 - 15:01
    El natural join de hecho no
  • 15:01 - 15:04
    agrega ningún poder expresivo al álgebra relacional
  • 15:04 - 15:08
    podemos reescribir el natural join sin usar el producto cruz
  • 15:08 - 15:10
    sólo permitanme reescribirla aquí
  • 15:10 - 15:12
    sí tenemos, y ahora voy
  • 15:12 - 15:14
    a usar el caso general de dos expresiones
  • 15:14 - 15:17
    Una expresión , natural join
  • 15:17 - 15:19
    con otra expresión, que es
  • 15:19 - 15:21
    de hecho equivalente a hacer
  • 15:21 - 15:23
    una proyección sobre el
  • 15:23 - 15:25
    esquema de la primera
  • 15:25 - 15:27
    expresión - sólo
  • 15:27 - 15:29
    la llamare E1 ahora unión
  • 15:29 - 15:30
    el esquema de la segunda expresión
  • 15:30 - 15:32
    Esta es un unión real, así esto
  • 15:32 - 15:33
    significa que sí tenemos dos copias
  • 15:33 - 15:36
    sólo nos quedamos con una de ellas
  • 15:36 - 15:39
    sobre la selección, Ahora vamos
  • 15:39 - 15:40
    a poner todos los atributos compartidos
  • 15:40 - 15:42
    de la primera expresión para
  • 15:42 - 15:44
    ser igual a los atributos compartidos de la segunda
  • 15:44 - 15:45
    Así sólo escribo E!, A1
  • 15:45 - 15:48
    igual a E2, A1
  • 15:48 - 15:54
    y E1, A2 iguales a E2.A2
  • 15:54 - 15:57
    Ahora estos son caso en los que
  • 15:57 - 16:00
    una vez más, los atributos tiene el mismo nombre y así
  • 16:00 - 16:02
    así que ponemos todo igual
  • 16:02 - 16:04
    y esa es aplicada sobre
  • 16:04 - 16:07
    la expresión 1 producto cruz 2
  • 16:07 - 16:10
    así otra vez, el natural join
  • 16:10 - 16:12
    no nos va a dar
  • 16:12 - 16:18
    poder expresivo adicional, pero es una muy conveniente notación
  • 16:18 - 16:20
    El último operador que voy a
  • 16:20 - 16:23
    cubrir en este vídeo es el operador Theta Join
  • 16:23 - 16:24
    Al igual que el natural join, el Theta join es
  • 16:24 - 16:28
    de hecho una abreviatura que no agrega poder expresivo al lenguaje
  • 16:28 - 16:28
    Permitanme escribir esto
  • 16:28 - 16:30
    El operador theta join toma
  • 16:30 - 16:32
    dos expresiones y las combina
  • 16:32 - 16:34
    con operador del símbolo de moño
  • 16:34 - 16:37
    pero con un sub-índice theta
  • 16:37 - 16:39
    Aquel Theta es una condición
  • 16:39 - 16:40
    Esta condición en el estilo
  • 16:40 - 16:43
    de las condiciones en el operador seleccionar
  • 16:43 - 16:45
    y que este de hecho dice
  • 16:45 - 16:47
    de hecho es muy simple
  • 16:47 - 16:49
    es equivalente a aplicar
  • 16:49 - 16:51
    la condición Theta al
  • 16:51 - 16:53
    producto cruz de dos expresiones
  • 16:53 - 16:55
    así podrías preguntarte por qué
  • 16:55 - 16:56
    menciono el operador Theta join
  • 16:56 - 16:57
    y la razón por la que
  • 16:57 - 16:59
    lo menciono es porque la mayoria
  • 16:59 - 17:01
    de las sistemas administradores de bases de datos implementan
  • 17:01 - 17:03
    el theta join como una operación básica
  • 17:03 - 17:05
    para combinar relaciones
  • 17:05 - 17:07
    así el operador básico que
  • 17:07 - 17:08
    toma dos relaciones, y que combina todas las tuplas
  • 17:08 - 17:10
    pero que sólo mantiene las combinaciones
  • 17:10 - 17:12
    que satisface la condición theta
  • 17:12 - 17:13
    frecuentemente cuando le hablas
  • 17:13 - 17:15
    a las personas quienes construyen sistemas de bases de datos o que
  • 17:15 - 17:16
    usan bases de datos, cuando ellos
  • 17:16 - 17:21
    usan la palabra join, ellos quieren decir el theta join
  • 17:21 - 17:25
    así, concluyendo, el álgebra relacional es un lenguaje formal
  • 17:25 - 17:27
    Este opera sobre conjuntos de
  • 17:27 - 17:29
    relaciones y produce relaciones como resultado
  • 17:29 - 17:30
    La consulta más simple es tan sólo
  • 17:30 - 17:32
    el nombre de la relación y
  • 17:32 - 17:33
    los operadores son usados
  • 17:33 - 17:36
    para filtrar relaciones, rebanarlas o combinarlas
  • 17:36 - 17:37
    Hasta ahora hemos aprendido
  • 17:37 - 17:40
    sobre el operador seleccionar para seleccionar filas
  • 17:40 - 17:41
    el operador proyección para seleccionar
  • 17:41 - 17:43
    columnas, el operador producto cruz
  • 17:43 - 17:45
    para combinar todo posible
  • 17:45 - 17:46
    par de tuplas de las dos
  • 17:46 - 17:48
    relaciones y después dos
  • 17:48 - 17:50
    abreviaturas, el natural join
  • 17:50 - 17:51
    el cual es una muy útil forma de combinar
  • 17:51 - 17:53
    relaciones quitando ciertas columnas similares
  • 17:53 - 17:56
    y el operador theta join.
  • 17:56 - 17:58
    En el siguiente vídeo aprenderemos
  • 17:58 - 18:00
    algunos operadores adicionales del álgebra
  • 18:00 - 18:01
    relacional y también algunas notaciones
  • 18:01 - 18:05
    alternativas para expresiones del álgebra relacional.
Title:
05-01 Álgebra Relacional 1
Description:

Stanford

more » « less
Video Language:
English
Duration:
18:05
José Luis Ortigosa Flores edited Spanish subtitles for 05-01-relational-algebra-1.mp4
José Luis Ortigosa Flores edited Spanish subtitles for 05-01-relational-algebra-1.mp4
José Luis Ortigosa Flores edited Spanish subtitles for 05-01-relational-algebra-1.mp4
José Luis Ortigosa Flores edited Spanish subtitles for 05-01-relational-algebra-1.mp4
José Luis Ortigosa Flores edited Spanish subtitles for 05-01-relational-algebra-1.mp4
José Luis Ortigosa Flores edited Spanish subtitles for 05-01-relational-algebra-1.mp4
José Luis Ortigosa Flores edited Spanish subtitles for 05-01-relational-algebra-1.mp4
José Luis Ortigosa Flores edited Spanish subtitles for 05-01-relational-algebra-1.mp4
Show all

Spanish subtitles

Revisions