WEBVTT 00:00:00.067 --> 00:00:04.008 En este video, vamos a aprender sobre consultas a BDD relacionales. 00:00:04.008 --> 00:00:07.032 No nos enfocaremos en las consultas de un lenguaje en especifico, lo veremos después. 00:00:07.032 --> 00:00:11.004 Sólo vamos a hablar sobre consultas SQL en general. 00:00:11.004 --> 00:00:12.043 Iniciamos hablando sobre 00:00:12.043 --> 00:00:14.007 los pasos básicos de creación 00:00:14.007 --> 00:00:16.007 y uso de BDD relacionales. 00:00:16.007 --> 00:00:17.009 Por si acaso, debo 00:00:17.009 --> 00:00:19.059 mencionar que los que trabajan con BDD 00:00:19.059 --> 00:00:21.031 tienen el habito de dibujar las BDD 00:00:21.031 --> 00:00:23.044 y los sistemas de BDD como discos 00:00:23.044 --> 00:00:26.079 gigantes. Yo tengo el mismo hábito. 00:00:26.079 --> 00:00:28.036 Ahora, el primer paso es 00:00:28.036 --> 00:00:29.064 diseñar el schema de la 00:00:29.064 --> 00:00:30.096 BDD y vamos a crear 00:00:30.096 --> 00:00:33.013 el schema usando un "lenguaje de definicion de datos" (DDL) 00:00:33.013 --> 00:00:34.052 Así como comentamos en anteriores 00:00:34.052 --> 00:00:36.012 videos en una BDD relacional 00:00:36.012 --> 00:00:38.056 el schema consiste en 00:00:38.056 --> 00:00:40.033 la estructura de 00:00:40.033 --> 00:00:43.015 la relaciones y los atributos de esas relaciones. 00:00:43.015 --> 00:00:45.081 Así pusimos todo lo anterior en este gran disco. 00:00:45.081 --> 00:00:47.004 Una vez listo, el siguiente 00:00:47.004 --> 00:00:50.045 paso es cargar la BDD con los datos iniciales. 00:00:50.045 --> 00:00:52.008 Es bastante común para las 00:00:52.008 --> 00:00:53.051 BDD que se carguen inicialmente 00:00:53.051 --> 00:00:55.035 con datos que provengan de fuentes externas. 00:00:55.035 --> 00:00:56.049 Tal vez los datos sólo se almacene 00:00:56.049 --> 00:00:58.054 en archivos de algún tipo, y 00:00:58.054 --> 00:01:01.081 a continuación los datos se pueden cargar a la BDD. 00:01:01.081 --> 00:01:02.088 Una vez que los datos están cargados, entonces 00:01:02.088 --> 00:01:03.009 tenemos un montón de tuplas en 00:01:03.009 --> 00:01:05.058 nuestras relaciones. Ahora estamos 00:01:05.058 --> 00:01:08.031 listos para la parte divertida de consultas y modificación de datos. 00:01:08.031 --> 00:01:10.032 Y sucede continuamente con el tiempo 00:01:10.032 --> 00:01:13.005 siempre y cuando la BDD siga existiendo. 00:01:13.005 --> 00:01:14.073 Por ahora vamos a decir 00:01:14.073 --> 00:01:15.078 que tenemos usuarios humanos 00:01:15.078 --> 00:01:17.069 realizando consultas a la BDD. 00:01:17.069 --> 00:01:19.076 En realidad, solo ocurre a travez 00:01:19.076 --> 00:01:22.066 de una aplicación o sitio web. 00:01:22.066 --> 00:01:23.091 Asi, un usuario llega y 00:01:23.091 --> 00:01:27.012 nos realiza una consulta de la BDD y obtenemos una respuesta 00:01:27.012 --> 00:01:28.033 Podría venir nuevamente y 00:01:28.033 --> 00:01:31.007 realizar otra consulta "Q2! y podriamos recibir otra respuesta. 00:01:31.007 --> 00:01:32.071 La misma persona y otra 00:01:32.071 --> 00:01:35.079 podría realizar una modificación de la BDD 00:01:35.079 --> 00:01:37.031 Asi, ellos podrán querer 00:01:37.031 --> 00:01:38.059 insertar nuevos datos o 00:01:38.059 --> 00:01:39.087 actualizar algunos de los datos 00:01:39.087 --> 00:01:40.009 y la BDD le regresará un mensaje 00:01:40.009 --> 00:01:43.042 "Ok, ya hice ese cambio para ti". 00:01:43.042 --> 00:01:45.034 Este es el paradigma básico 00:01:45.034 --> 00:01:49.004 de consultas y actualización de BDD relacionales. 00:01:49.004 --> 00:01:50.086 Las BDD relacionales soportan 00:01:50.086 --> 00:01:53.062 consultas "ad hoc" y lenguajes de alto nivel. 00:01:53.062 --> 00:01:54.085 por "ad hoc", me refiero a que 00:01:54.085 --> 00:01:57.036 puedes plantear consultas que no planeaste con antelación 00:01:57.036 --> 00:02:00.092 No es necesario escribir programas grandes para consultas específicas 00:02:00.092 --> 00:02:02.002 mas bien el lenguaje puede 00:02:02.002 --> 00:02:03.013 usarse para representar una consulta 00:02:03.013 --> 00:02:05.014 cuando piensas sobre que realizarla 00:02:05.014 --> 00:02:06.075 y cuando mencioné en videos anteriores que 00:02:06.075 --> 00:02:08.048 los lenguajes soportados por los sistemas 00:02:08.048 --> 00:02:10.033 relacionales son de alto nivel, significaba 00:02:10.033 --> 00:02:12.043 que puedes escribir de manera compacta 00:02:12.043 --> 00:02:14.041 consultas complicadas 00:02:14.041 --> 00:02:15.057 y sin tener que escribir el 00:02:15.057 --> 00:02:18.032 algoritmo que devuelvan los datos de la BDD. 00:02:18.032 --> 00:02:19.056 Veamos un ejemplo de 00:02:19.056 --> 00:02:22.036 algunas consultas. Vamos nuevamente sobre 00:02:22.036 --> 00:02:25.041 nuestra BDD de estudiantes que se esta aplicando a Universidades. 00:02:25.041 --> 00:02:27.024 Aquí vemos 3 ejemplos del tipo de cosas 00:02:27.024 --> 00:02:29.084 que le podemos pedir a la BDD relacional. 00:02:29.084 --> 00:02:31.045 Podrías pedir todos 00:02:31.045 --> 00:02:32.088 los estudiantes cuyo GPA es mayorr 00:02:32.088 --> 00:02:34.078 que 3.7 que sean solamente 00:02:34.078 --> 00:02:37.000 de Stanford y MIT. 00:02:37.000 --> 00:02:38.004 Podrías pedir todos 00:02:38.004 --> 00:02:39.074 departamentos de ingeniería en California 00:02:39.074 --> 00:02:41.099 con menos de 500 candidatos o 00:02:41.099 --> 00:02:42.009 podrías pedir la 00:02:42.009 --> 00:02:44.032 universidad con la media mas alta de 00:02:44.032 --> 00:02:46.074 tasa de aceptación de los últimos 5 años. 00:02:46.074 --> 00:02:48.018 Ahora, estas podrían parecer 00:02:48.018 --> 00:02:49.098 consultas complicadas 00:02:49.098 --> 00:02:51.014 pero todas ellas pueden 00:02:51.014 --> 00:02:52.074 escribirse en pocas lineas 00:02:52.074 --> 00:02:54.035 en digamos: ->lenguaje SQL ó 00:02:54.035 --> 00:02:57.019 ->una simple expresion en álgebra relacional 00:02:57.019 --> 00:02:58.009 Ahora, algunas consultas son 00:02:58.009 --> 00:03:00.087 mas fáciles de representar que otras, es cierto. 00:03:00.087 --> 00:03:02.028 Aunque las 3 consultas que 00:03:02.028 --> 00:03:04.097 vez aquí son fáciles de plantear. 00:03:04.097 --> 00:03:06.051 Ahora algunas consultas son más fáciles 00:03:06.051 --> 00:03:09.031 de ejecutar eficientemente que otras para el sistema de BDD. 00:03:09.031 --> 00:03:12.012 Y curiosamente no necesariamente 00:03:12.012 --> 00:03:13.099 estas 2 cosas se relacionan. 00:03:13.099 --> 00:03:15.035 Hay algunas consultas que son fáciles 00:03:15.035 --> 00:03:16.074 de generar pero difíciles de ejecutar 00:03:16.074 --> 00:03:20.025 eficientemente y algunas al contrario. 00:03:20.025 --> 00:03:22.049 Ahora, un poco de terminología. 00:03:22.049 --> 00:03:24.006 Frecuentemente, las personas hablan sobre los 00:03:24.006 --> 00:03:26.008 lenguajes de consulta de los sistemas de BDD 00:03:26.008 --> 00:03:28.004 Ellos utilizan ordenes 00:03:28.004 --> 00:03:29.097 de sinónimos con el DML 00:03:29.097 --> 00:03:32.007 o Lenguaje de Manipulación de Datos, que 00:03:32.007 --> 00:03:36.005 suelen incluir no sólo consultas sino también manipulación de datos. 00:03:36.005 --> 00:03:38.035 En todas las consultas de lenguajes relacionales, puedes 00:03:38.035 --> 00:03:39.077 realizar consultas sobre un 00:03:39.077 --> 00:03:42.012 conjunto de tablas (relaciones), obteniendo una tabla (relación) como resultado. 00:03:42.012 --> 00:03:43.002 Ejecutaremos una consulta 00:03:43.002 --> 00:03:44.046 sobre estas 3 00:03:44.046 --> 00:03:46.028 tablas (relaciones) mostradas y que 00:03:46.028 --> 00:03:50.034 nos devolverá otra tabla (relación). 00:03:50.034 --> 00:03:51.088 Cuando retorne 00:03:51.088 --> 00:03:53.019 el mismo tipo de objeto que 00:03:53.019 --> 00:03:55.005 tu consulta, esto se conoce como el fin del lenguaje 00:03:55.005 --> 00:03:57.064 Y es una gran caracteristica. 00:03:57.064 --> 00:03:59.001 Por ejemplo, cuando quiero 00:03:59.001 --> 00:04:01.034 ejecutar otra consulta, que sea Q2, 00:04:01.034 --> 00:04:02.054 esa consulta podría sobreponerse sobre 00:04:02.054 --> 00:04:04.004 la respuesta de mi primera consulta 00:04:04.004 --> 00:04:05.046 y podría incluso mezclarse la respuesta 00:04:05.046 --> 00:04:08.085 con alguna tabla (relación) existente en la BDD. 00:04:08.085 --> 00:04:10.038 Esto se conoce como composicionalidad, 00:04:10.038 --> 00:04:12.007 la habilidad de ejecutar una consulta 00:04:12.007 --> 00:04:15.014 sobre el resultado de una consulta previa. 00:04:15.014 --> 00:04:18.003 Ahora, hablemos brevemente sobre 2 lenguajes de consulta. 00:04:18.003 --> 00:04:19.026 Aprenderemos estos lenguajes en 00:04:19.026 --> 00:04:20.054 detalle después, pero sólo 00:04:20.054 --> 00:04:23.033 vamos a dar los puntos básicos de los lenguajes, aquí. 00:04:23.033 --> 00:04:25.084 El álgebra relacional es un lenguaje formal. 00:04:25.084 --> 00:04:28.055 Bueno, es un álgebra como lo dice su nombre. 00:04:28.055 --> 00:04:31.097 Está teóricamente bien fundamentada. 00:04:31.097 --> 00:04:34.035 SQL por el contrario es 00:04:34.035 --> 00:04:37.033 lo que llamo un lenguaje actual o un lenguaje implementado. 00:04:37.033 --> 00:04:41.046 Es lo que vas a ejecutar en una verdadera aplicación de BDD. 00:04:41.046 --> 00:04:44.059 Pero el lenguaje SQL tiene como 00:04:44.059 --> 00:04:46.034 su base el álgebra relacional. 00:04:46.034 --> 00:04:50.031 Es como se define la semántica del lenguaje SQL. 00:04:50.031 --> 00:04:51.066 Ahora, le daré unos puntos 00:04:51.066 --> 00:04:53.032 de esos 2 lenguajes y 00:04:53.032 --> 00:04:57.028 vamos a escribir una consulta en los 2 lenguajes 00:04:57.028 --> 00:05:00.053 Bien, déjenme borrar esta pequeña linea de aquí. 00:05:00.053 --> 00:05:02.059 Iniciamos con el álgebra relacional 00:05:02.059 --> 00:05:03.096 Vamos a buscar para los 00:05:03.096 --> 00:05:05.054 ID's de estudiante cuyo GPA 00:05:05.054 --> 00:05:09.018 es mayor que 3.7 y sean de Stanford. 00:05:09.018 --> 00:05:10.086 En álgebra relacional, el lenguaje 00:05:10.086 --> 00:05:12.006 básico de operaciones son símbolos griegos. 00:05:12.006 --> 00:05:13.098 Nuevamente, aprenderemos de detalles después, 00:05:13.098 --> 00:05:15.059 pero esta expresión particular será 00:05:15.059 --> 00:05:19.013 escrito por un Phi seguido de un Sigma. 00:05:19.013 --> 00:05:20.012 El Phi indica que vamos a 00:05:20.012 --> 00:05:21.029 obtener el ID, el Sigma 00:05:21.029 --> 00:05:22.074 que queremos los estudiantes cuyos 00:05:22.074 --> 00:05:25.083 GPA son mayores a 3.7 00:05:25.083 --> 00:05:27.042 y la universidad de donde vienen 00:05:27.042 --> 00:05:31.048 los estudiantes es Stanford. 00:05:31.048 --> 00:05:33.025 Y luego se opera 00:05:33.025 --> 00:05:35.022 en lo que se llama 00:05:35.022 --> 00:05:37.005 la unión natural de la 00:05:37.005 --> 00:05:43.066 relación de estudiantes con la relación aplicada. 00:05:43.066 --> 00:05:46.071 Nuevamente, veremos en mas detalle eso en los próximos videos. 00:05:46.071 --> 00:05:49.057 Ahora, la misma consulta en SQL. 00:05:49.057 --> 00:05:50.005 Y esto es lo que realmente se ejecuta 00:05:50.005 --> 00:05:51.081 en un sistema de BDD implementada, 00:05:51.081 --> 00:05:53.025 y la consulta SQL 00:05:53.025 --> 00:05:55.017 es, de hecho, una consulta 00:05:55.017 --> 00:05:58.015 de álgebra relacional 00:05:58.015 --> 00:05:59.075 Ahora pedagógicamente, se lo 00:05:59.075 --> 00:06:01.021 recomiendo altamente que aprendas 00:06:01.021 --> 00:06:02.083 álgebra relacional observando 00:06:02.083 --> 00:06:04.073 videos de álgebra relacional, antes 00:06:04.073 --> 00:06:06.082 de pasar a los videos de SQL, 00:06:06.082 --> 00:06:08.068 pero no es totalmente requerido. 00:06:08.068 --> 00:06:10.064 Si tienes bastante prisa 00:06:10.064 --> 00:06:11.099 por aprender SQL, puedes 00:06:11.099 --> 00:06:14.005 adelantarte hacia los videos de SQL. 00:06:14.005 --> 00:06:15.076 Si te interesan los fundamentos 00:06:15.076 --> 00:06:17.058 formales y comprensión mas profunda 00:06:17.058 --> 99:59:59.999 te recomiendo ver el siguiente video de álgebra relacional