comandos SQL más importantes

Comandos SQL más importantes

El lenguaje SQL se compone de muchas cláusulas o comandos que nos permiten realizar distintas funciones. 

En éste post vamos a ver las 3 de las más importantes: SELECT, WHERE y ORDER BY. No te asustes si ahora te suenan a chino, si sigues con nosotros en unos minutos las entenderás mucho mejor.

¿Qué es una cláusula? En SQL, a las palabras reservadas del lenguaje se les llama cláusulas o comandos SQL. Se pueden entender como los comandos u órdenes más importantes del lenguaje.

Comando SELECT

SELECT Variable1, Variable2 … FROM Tabla
SELECT * FROM Tabla

La cláusula SELECT es una de las expresiones más importantes del lenguaje, ya que es la que nos permite leer los contenidos de una base de datos.

En el primer tutorial de instalación de SQL ya ejecutamos nuestra primera consulta de éste tipo: SELECT * FROM Clima, y creamos una tabla con datos de prueba.

Lo cierto es que la sintaxis de SQL es muy sencilla, ya que prácticamente es como pedirle a la base de datos lo que queremos en inglés. El único carácter extraño que nos encontramos es * , que en programación suele significar “todo”. Por tanto, la consulta de arriba la podemos traducir al español como “Selecciona todo lo que hay en la tabla llamada Clima y muéstramelo”.

Así, con ésta consulta podremos ver todos los datos que haya en una tabla. Pero, ¿Qué pasa si sólo nos interesan unas pocas variables o columnas de la misma? En nuestra tabla, tenemos muchísimas variables, pero seguramente no queramos trabajar con todas al mismo tiempo. Dentro de la cláusula SELECT podemos especificar qué columnas queremos ver, por ejemplo si solo queremos ver la temperatura media y la fecha, podemos utilizar la siguiente consulta:

SELECT fecha, tmed FROM Clima

Así solo tendremos las variables que nos interesan. Por cierto, puedes ver que en las consultas suelo escribir los comandos de SQL en mayúsculas y los nombres de tablas y variables en minúsculas.

Esto se hace así por convención ya que nos permite distinguir mejor el código de nuestra nomenclatura para nombrar las cosas, pero realmente en la mayoría de los casos SQL no distingue entre mayúsculas y minúsculas, de modo que no es obligatorio.

Otra situación muy frecuente a la hora de recuperar información de una base de datos es que queramos recuperar únicamente las filas que cumplen una condición. 

Cláusula WHERE

SELECT * FROM Tabla WHERE Condicion

Por ejemplo, puede ocurrir que queremos los datos de una estación determinada o de un rango de fechas. Para ello, utilizaremos la cláusula WHERE, que debe ir siempre después del SELECT:

SELECT * FROM Clima WHERE estacion == "GETAFE"

Si te fijas en los resultados de la consulta, todas las filas que devuelve pertenecen a “GETAFE”. La cláusula WHERE nos permite filtrar los resultados en función de una o varias condiciones. Para añadir otra condición, podemos utilizar los siguientes operadores booleanos 

ANDDeberán cumplirse ambas condiciones
ORDeberá cumplirse al menos una condición
NOTInvierte una condición (no deberá cumplirse)
SELECT * FROM Clima WHERE estacion == "GETAFE" AND tmed < 0

Con ésta consulta recuperamos únicamente los registros de la estación de Getafe en los que la temperatura media haya sido inferior a 0 grados. A la hora de establecer éstos filtros podemos utilizar los siguientes operadores:

Operadores SQL

Variable == XValor igual a X
Variable != XValor distinto de X
Variable > XValor mayor que X
Variable < XValor menor que X
Variable >= XValor mayor o igual que X
Variable <= XValor menor o igual que X

Todos éstos operadores también funcionan para las fechas.

SELECT * FROM Clima WHERE fecha < "2021-02-01"

Con ésta consulta seleccionamos todos los datos en los que la fecha es anterior (menor) a el día 1 de febrero. SQLite carece de un tipo de dato específico para fechas, de modo que las guarda en formato de texto, por lo que la fecha se la tenemos que pasar entre comillas. Además conviene pasarla en formato AAAA-MM-DD, ya que así es más fácil ordenarlas. 

No obstante, el tratamiento de fechas puede ser distinto en otros gestores y no nos vamos a meter demasiado en ello, la idea es trabajar los aspectos que son iguales en todos. 

Si queremos recuperar las filas que contengan valores que estén en una lista, podemos utilizar el operador IN:

SELECT * FROM Clima WHERE fecha == "2021-01-08" AND estacion IN ("SOMOSIERRA", "ARANJUEZ", "RIPOLL")

Por supuesto, podemos utilizar el operador NOT para invertir el sentido del IN, entonces recupera las filas que NO contengan los valores de la lista.

SELECT * FROM Clima WHERE fecha == "2021-01-08" AND estacion NOT IN ("SOMOSIERRA", "ARANJUEZ", "RIPOLL")

Por último hay una característica que es extremadamente útil. Hemos visto que podemos filtrar las filas por un campo de texto utilizando consultas del tipo:

SELECT * FROM Clima WHERE estacion == "GETAFE"

Con ésta consulta seleccionaremos las filas en las que el campo estación tenga exactamente el valor “GETAFE”, pero muchas veces no nos interesa que la coincidencia sea exacta, sino que simplemente queremos que encaje con un patrón algo más genérico. Para ello podemos utilizar el operador LIKE, así como los caracteres “%” y “_”.

Operador LIKE

Éstos caracteres nos permiten definir patrones algo más genéricos. El símbolo de porcentaje nos permite encontrar los registros que empiezan, terminan o contienen un patrón de texto. Veamos como:

WHERE Variable LIKE “patron%”Selecciona los registros que empiezan por el patrón.
WHERE Variable LIKE “%patron”Selecciona los registros que terminan por el patrón.
WHERE Variable LIKE “%patron%”Selecciona los registros que contienen el patrón.

Por ejemplo,

SELECT * FROM Clima WHERE estacion LIKE "%aeropuerto%". 

Selecciona todas las filas en las que el nombre de la estación tiene la palabra aeropuerto.

El símbolo “_” significa “cualquier caracter”. Así podemos especificarle un patrón en el que aceptamos cualquier caracter. “chic_” aceptaría las filas que contengan chico o chica, ya que la “_”.

Con éstos elementos podemos definir patrones de texto más complejos. Por ejemplo:

SELECT * FROM Clima WHERE fecha LIKE "2021-01%" 

Selecciona todos los datos de Enero de 2021

SELECT * FROM Clima WHERE fecha LIKE "%-01-%" 

Seleccionaría los datos de Enero para todos los años (aunque nosotros sólo tenemos uno en la base de datos).

Cláusula ORDER BY

SELECT * FROM Tabla ORDER BY Variable [ASC / DESC]

Otra de las funciones más útiles de SQL nos permite ordenar nuestros resultados en función de los valores de una o varias variables. Para ello usamos la cláusula ORDER BY.

Si especificamos una variable de texto, ordenará los resultados por orden alfabético, mientras que si especificamos una variable numérica lo hará utilizando sus valores lógicamente. Por ejemplo, podemos obtener las estaciones que han tenido los días más fríos con la siguiente consulta:

SELECT estacion, tmed FROM Clima WHERE tmed IS NOT NULL ORDER BY tmed ASC

Simplemente especificamos el nombre de la columna que queremos utilizar para ordenar nuestros resultados y luego de forma opcional podemos especificar si queremos que se ordene de forma ascendente (ASC) o descendente (DESC), en SQLite por defecto se ordenan de forma ascendente

Si te fijas, en la consulta, puedes ver que he metido también una cláusula WHERE con una condición especial:  

tmed IS NOT NULL

Con ésta condición especifico que solo quiero las filas que tengan valores válidos para la variable tmed. Si quitamos la condición veremos que los primeros resultados están vacíos.

Podemos ordenar los resultados en función de varias variables. Por ejemplo, la siguiente consulta ordena por la cantidad de horas de sol y después por temperatura.

 SELECT estacion, sol, tmed FROM Clima ORDER BY sol DESC, tmed ASC

Es interesante saber que las variables que utilizamos no tienen porqué formar parte de los resultados de nuestra consulta.

SELECT estacion, tmed FROM Clima ORDER BY sol DESC, tmed ASC 

Funcionará sin problema y devolverá las mismas filas, a pesar de que no veremos la columna sol la utilizará para ordenar los resultados.

Vamos terminando…

Las expresiones que hemos visto en éste post son las más utilizadas a la hora de hacer consultas. Gracias a ellas tus aplicaciones tendrán exactamente los datos que necesitan. Con la clausula SELECT podemos especificar qué columnas queremos, y con la cláusula WHERE podemos filtrar las filas. 

Después podemos ordenar nuestros resultados para no tener que hacerlo en la propia aplicación, algo que puede ser complicado según el lenguaje que estemos utilizando. La mayoría ofrecen la posibilidad de ordenar cómodamente los valores contenidos en un array o una lista, pero no ofrecen buenas funcionalidades para ordenar matrices (que es lo que es una tabla).

Con lo que hemos aprendido podrás hacer la mayoría de consultas que necesitarás, pero estate pendiente de los posts siguientes ya que seguiremos tratando temas más avanzados. Aunque si quieres ir un paso más allá en programación, tienes a tu disposición el Bootcamp Full Stack de OXYGEN y el Curso de Data Analytics en Madrid

Autor

Manuel Torres

Selección de talento en OXYGEN

Ir arriba
Abrir Chat
1
¿Necesitas ayuda?
OXYGEN Academy
¡Hola! 👋 ¿Necesitas más información?