SELECT, WHERE Y JOIN
Ahora veremos las funcionalidad de select de una forma más avanzada.
Lo utilizaremos con la cláusula where.
Además empezaremos a utilizar unos conceptos llamados join.
Vamos a empezar.
La carpeta que vamos a estar utilizando, si lo recuerdan, la llamada cuadernos,C en su caso está guardado en el escritorio.
Entonces nosotros ya lo tenemos abierto aquí con Jupyter.
Entonces vamos a "Select, Where y Join".
Lo abrimos, esperamos un momento a que cargue.
Y ahora sí, ya lo tenemos.
Where, lo específico de where es que nos permite seleccionar ya más específico qué registros queremos de la base de datos, no nada más obtener todo.
Ya cuando escalamos a niveles grandes de industria, digamos, no vamos a estar jalando la base de datos completa en nuestra computadora, es más, ni siquiera va a caber en nuestra memoria RAM.
La función where nos va a ayudar a delimitar un poco qué es lo que nos podría servir y qué es lo que no nos podría servir.
Tiene una sintaxis muy similar a select, es más, es un agregado a la sintaxis de select donde tenemos select, seleccionar, columna 1, 2, hasta n, de tabla tal, donde hay una condición.
Esta condición por lo general hace referencia a los elementos de la tabla que estamos seleccionando.
Las base de datos que hemos estado utilizando es la european soccer data base, como en videos anteriores, y la vamos a seguir utilizando.
Para ello vamos a utilizar import SQL Lite 3, la versión reducida de motor de base de datos que nos funciona para nuestros ejemplos, y de forma similar vamos a utilizar la ruta de nuestro archivo: data/soccer/database.sqlite y vamos a hacer la conexión.
Una vez que ya está realizado ese elemento de la conexión ya empezamos a hacer consultas, y vamos a empezar a construirlas de forma similar a como lo hemos hecho, con select.
Vamos a decir "selecciona todo de la tabla player", pero hay una restricción, le vamos a decir "dónde height es mayor a 200", este height ¿a qué hace referencia? Bueno, recordemos nuestra tabla player, nuestra tabla player dice que tiene la columna player id, player name, player fifa api, birthday, height y weight.
Este height específico de aquí se llama idéntico a como lo tenemos acá.
Es más, nosotros podemos decirle explícitamente player.height, el cual no le va a indicar a SQL que este height al que no estamos refiriendo es de la tabla player.
Al ser la única tabla en nuestra consulta pues esto lo podemos omitir y simplemente llamarle height y va a funcionar exactamente igual.
Ok, entonces ¿cuáles son los elementos que nos arrojó? Nos arrojó este jugador, por ejemplo, Abdoul Ba que tiene una altura de 200.66, que apenitas pasa el filtro que nosotros impusimos que era mayor a 200, pero entró.
Es es una condición verdadera, entonces lo tomamos.
Así mismo pasaron todos estos jugadores.
Ya están filtrados de nuestra base completa que era de 11,060 jugadores en total.
Entonces de todos esos, nada más estos que nos presentó tienen una altura mayor a 200.
Entonces a partir de ahí ya se empieza a ver un poco el valor de la cláusula where.
Bueno, pero ¿qué más podemos hacer? Lo que podemos hacer es tomar dos tablas y combinarlas, pero sólo se van a combinar si ciertos parámetros son verdaderos o ciertas restricciones, por ejemplo, podemos tomar select con el asterisco, selecciona todo, de country y league.
Si recuerdan son dos tablas diferentes: country y league, aquí están cada una con sus respectivas columnas.
Donde el country Id, es decir el Id de la tabla country, sea igual al country Id de la liga, es decir que este de aquí, country Id, sea igual a este de acá.
Ok.
Una vez hecho eso lo imprimimos y nos va a dar esta consulta ya construida que nos va a decir: para el país Bélgica tiene una liga Jupiler Bélgica.
Entonces, ya corresponde el país a la liga de donde corresponde, pero pues esto se ve un poco sucio, verdad, porque tenemos estos...
unos regados, tenemos el 1,729, son valores que no necesitamos realmente.
Entonces, aquí yo les comenté esta parte de aquí que podemos decir que nada más queremos country.name y league.name.
No queremos lo demás, no nos interesa, nada más queremos esos dos valores.
Ok.
A ver, aquí hay un error.
Es...
Hay un error.
Ahora sí.
Nos dice que Bélgica tiene la liga Jupiler, Inglaterra tiene la liga Premier, Francia tiene la France League 1 y así en adelante.
Entonces, con esto, con select, where, ya podemos combinar valores de dos tablas que nos interesan.
Bueno, pero esto, aparte de hacerlo con la cláusula where, se puede hacer con un join.
Join es una cláusula muy especial en SQL la cual nos permite combinar valores de varias tablas (dos, tres o más tablas), en específico vamos a hablar de dos.
Entonces, como se ve esta relación ya gráficamente es, tenemos todos los elementos que se encuentran en la tabla A y todos los elementos que se encuentran en la tabla B, el join solamente nos va a dar los valores donde los elementos de la tabla A y los elementos de tabla B coinciden, que se representa en este diagrama de Venn.
Y ¿cómo se representa este join? Bueno, aquí dice la consulta compara cada fila de la tabla 1 con cada fila de la tabla 2 para encontrar todos los pares de filas que satisfacen una condición de unión.
Cuando se cumple el predicado los valores de la columna para cada par de filas coincidentes de B y B se combinan en una fila de resultados.
Este tipo de uniones, el Inner Join, es el tipo más común y es de hecho el predeterminado.
Si nosotros hablamos de un join, la gente normalmente se imagina el Inner Join.
De hecho, la palabra inner se puede usar de manera opcional, se puede omitir, simplemente utilizar el join, y la sintaxis para utilizarlo en SQL es muy simple, solamente se utiliza el select, ¿qué es lo que queremos ver?, de, ¿qué tabla?, pero unida a qué otra tabla.
Es tabla 1 unida la tabla 2.
Pero debe haber una condición, y esto le llamamos con la palabra "ON." Entonces vamos a hacer una traducción sencilla o simple de esta sintaxis: selecciona columna 1, 2, n, de la unión de tabla 1 con tabla 2 con esta condición.
Hay otros tipos de joins.
Tenemos intersección derecha o join derecho, tenemos intersección izquierda, tenemos intersección de extremos, en particular en este curso como es la más popular solamente vamos a utilizar la inner join.
Entonces vamos a ver cómo funciona.
Vamos a aplicar la sintaxis.
Utilizamos select todo de country unido...
unido a la tabla liga en una condición: que el country Id sea igual al country Id de la tabla liga.
Entonces la hacemos y lo ejecutamos y nos da este resultado que es idéntico al que teníamos acá arriba cuando nada más seleccionamos el todo.
Esto de aquí es idéntico a lo que tenemos acá abajo.
Gracias al inner join podemos hacer consultas un poco más complejas, por ejemplo, para empezar aquí hay una diferencia grande porque qué tal si empezamos a conseguir una consulta más grande, podemos utilizar estos tres caracteres que son las comillas las cuales nos van a permitir hacer una consulta en varias líneas y para ello vamos a utilizar dos tablas: vamos a utilizar la de la liga y la de los partidos.
Vamos a pedirle que nos dé los partidos donde el gol de casa sea mayor a 5.
Entonces vamos a empezar a construirla.
Le vamos a decir "selecciona el nombre de la liga, selecciona el número de goles de como equipo de casa de la tabla match, similarmente selecciona el número de iguales como visitante de la tabla match y la fecha de ese partido".
¿De dónde vamos a seleccionar esa información? De un join.
Aquí se los voy a subrayar.
Donde estamos haciendo un join de la tabla liga con la tabla partido o match pero en una variable en específico que es el Id de la liga en la tabla match junto con el Id de liga.
Aquí es donde podemos eliminar la condición where donde le vamos a decir "de la tabla match solo quiero cuando los goles de casa sean mayores a 5", no 5, solamente mayores.
Ok, entonces, si ejecutamos esto...
tarda un poquito más...
nos da los partidos.
Entonces, nos dice: de la liga de Bélgica hubo un partido en el 2008 que fue un 7 a 1.
7-1 sería porque como tenemos primero el, como goles en casa, pues nos está diciendo que ese equipo en casa metió siete goles y recibió uno en contra.
Entonces fue una goliza, podemos decir.
Asimismo empezó a darnos todo el historial de partidos donde existen que el equipo de casa tiene más de 5 goles.
Entonces, con eso podemos conseguir una consulta ya más compleja, ¿por qué? porque utilizamos un inner join para unir dos tablas diferentes y a partir de eso aplicamos un filtro con where.
Entonces así es como se empiezan a construir consultas ya más complejas.
Ya estamos utilizando select, estamos utilizando join y estamos utilizando where.
De forma similar con alguna base de datos que tengas por ahí o que hayas encontrado en kaggle puedes empezar a practicar y pueden realizar consultas complejas como esta.
No hay comentarios:
Publicar un comentario