Guía básica de SQL
SQL (Structured Query Language) es un lenguaje estándar para manipular datos en una base de datos relacional. Su sintaxis es fácil de entender y aprender, y se utiliza para acceder, limpiar y analizar datos.
Pero, ¿Qué es una base de datos relacional? Es un conjunto de tablas conectadas entre sí por columnas en común que contienen identificadores únicos para cada registro.
SQL cuenta con varias cláusulas, que son palabras reservadas del lenguaje para realizar las consultas. Estas cláusulas son muy similares a como escribimos en inglés, como si estuviéramos creando una oración para indicar la consulta que queremos hacer. Por convención estás cláusulas se escriben en mayúscula ya que facilita su lectura.
CRUD (Create — Read — Update — Delete)
El CRUD es la parte inicial para manejar una base de datos relacional con SQL.
Create
Podemos crear una tabla en una base de datos indicando el nombre de las columnas y el tipo de dato.
CREATE TABLE nombre_tabla(
columna1 int,
columna 2 varchar(#)
)
Tipos de datos principales:
- int: Entero
- varchar(#): Cadena de caracteres y entre paréntesis la longitud máxima
- float: Decimal
- date: Fecha
Una vez creada o cargada la base podemos observar las tablas y la base:
SHOW tabla
SHOW base
Además, podemos crear tablas a partir de otras existentes:
CREATE TABLE tabla1
SELECT columna1, columna2
FROM tabla2
También podemos renombrar una tabla:
RENAME TABLE nombre_actual to nombre_nuevo
Read
Para leer la tabla y hacer consultas veremos más adelante las cláusulas de SQL.
Update
Podemos hacer modificaciones a los datos de una tabla:
/* Añadir nueva columna */
ALTER TABLE tabla
ADD COLUMN columna tipo_dato/* Modificar un registro */
UPDATE tabla
SET columna1 = valor --Valor a modificar
WHERE condicion --Condición para encontrar la fila en la tabla/* Añadir nuevos registros */
INSERT INTO tabla (columna1, columna2,...)
VALUES (valor1, valor2, ...)
Delete
Podemos eliminar una tabla o eliminar algunos registros que ya no necesitemos:
/* Eliminar registros */
DELETE FROM tabla WHERE condición/* Eliminar tabla */
DELETE FROM tabla
Cláusulas
Hay algo importante que debes tener en cuenta cuando ejecutas una sentencia SQL y te ayudará a realizar las consultas de mejor manera. Veamos un ejemplo de una sentencia en SQL:
SELECT columna1, columna2
FROM tabla
WHERE filtro_por_columna
Este es el orden para escribir una consulta SQL, pero no es el orden de ejecución. El orden de ejecución es el siguiente:
FROM tabla
WHERE filtro_por_columna
SELECT columna1, columna2
En el caso de ejecución primero vamos a la tabla, la filtramos y luego seleccionamos las columnas de interés.
Veamos el orden completo de escritura y ejecución (no te preocupes, más adelante veremos para qué y cómo usar cada uno).
Orden de escritura:
- SELECT
- FROM
- WHERE
- GROUP BY
- ORDER BY
- LIMIT
Orden de ejecución:
- FROM
- WHERE
- GROUP BY
- SELECT
- ORDER BY
- LIMIT
Ahora si, a lo que vinimos.
SELECT y FROM
Con SELECT elegimos las columnas que quieres tomar de la tabla, y si queremos ver todas las columnas utiliza un asterisco (*) que equivale a Todo. Con FROM indicamos la tabla que queremos consultar.
Hasta el momento no hemos realizado modificaciones a la tabla, lo que estamos haciendo es elegir una vista de la tabla principal.
Construyamos un ejemplo al que le iremos añadiendo las cláusulas que veamos:
Vamos a tomar de la tabla de creadores de Medium que la llamaremos medium_creators y seleccionaremos las columnas que contienen información del nombre de la publicación, palabras claves y fecha de publicación.
SELECT post_name, topics, date
FROM medium_creators
También podemos seleccionar los valores únicos de una columna. Por ejemplo, miremos en la tabla cuáles son los creadores de contenido en Medium:
SELECT DISTINCT(post_name)
FROM medium_creators
WHERE
Con WHERE podemos filtrar la tabla indicando un valor o un rango de valores en una o varias columnas. Para esto utilizamos operadores lógicos y de comparación.
Continuemos con el ejemplo. Ahora queremos tomar únicamente los datos para las publicaciones realizadas en el blog “Al mal tiempo, buena data”:
SELECT post_name, topics, date
FROM medium_creators
WHERE creator = "Al mal tiempo, buena data"
GROUP BY
Con GROUP BY agrupamos los datos por una columna en especifico.
Por ejemplo, queremos agrupar las publicaciones por tema:
SELECT post_name, topics, date
FROM medium_creators
WHERE creator = "Al mal tiempo, buena data"
GROUP BY topics
ORDER BY
Con ORDER BY podemos ordenar los datos según los valores de una columna, el orden puede ser ascendente o descendente.
Ordenemos nuestra tabla de ejemplo por fecha:
SELECT post_name, topics, date
FROM medium_creators
WHERE creator = "Al mal tiempo, buena data"
GROUP BY topics
ORDER BY date
El orden por defecto es ascendente, si queremos cambiarlo a descendente basta con añadir luego de la columna DESC.
SELECT post_name, topics, date
FROM medium_creators
WHERE creator = "Al mal tiempo, buena data"
GROUP BY topics
ORDER BY date DESC
Además, podemos ordenarlo por varias columnas, y para ello separamos las columnas por coma. Ordenemos también nuestra tabla por cantidad de vistas de la publicación:
SELECT post_name, topics, date
FROM medium_creators
WHERE creator = "Al mal tiempo, buena data"
GROUP BY topics
ORDER BY date, viewers
LIMIT
A veces nuestras tablas contienen mucha información y nuestro objetivo es solo tomar un top o visualizar una pequeña parte para darnos una idea del formato. Con LIMIT podemos tomar una parte de los datos.
Vemos solo los 10 primeros registros de nuestra tabla:
SELECT post_name, topics, date
FROM medium_creators
WHERE creator = "Al mal tiempo, buena data"
GROUP BY topics
ORDER BY date, viewers
LIMIT 10
HAVING
Con HAVING usamos como filtro la condición con una función de agregación (las veremos más adelante).
Vamos a seleccionar las cuentas que tengan más de 10 publicaciones:
SELECT COUNT(post_name), creators
FROM medium_creators
GROUP BY creators
HAVING COUNT(post_name) > 10
Estas son las cláusulas principales de SQL. Fácil, no?
Veamos algunas cosas adicionales:
Comentarios
Para comentar tu código en SQL y que sea más fácil de leer y entender que estás haciendo puedes utilizar doble guion:
SELECT post_name, topics, date
FROM medium_creators
WHERE creator = "Al mal tiempo, buena data"
GROUP BY topics
ORDER BY date, viewers -- Ordenar por fecha de publicación y vistas
LIMIT 10
También puedes añadir comentarios largos utilizando: /* Aquí va el comentario */
Crear alias
Al seleccionar columnas también podemos renombrarlas utilizando AS. Cambiemos el nombre de la columna date a publish_date para que sea más claro:
SELECT post_name, topics, date AS publish_date
FROM medium_creators
También podemos crear un alias para la tabla y de esta forma el código será más corto y legible cuando estemos utilizando varias tablas al tiempo:
SELECT post_name, topics, date AS publish_date
FROM medium_creators AS account
Funciones de agregación
Son utilizadas para hacer cálculos a una columna completa.
- COUNT: Contar el numero de registros de la columna.
SELECT COUNT(*) FROM tabla --Cantidad de registros de tabla
SELECT COUNT(columna) FROM tabla --Cantidad de registros de columna
- SUM: Sumar los registros de la columna.
SELECT SUM(columna) FROM tabla
- MIN: Obtener el valor mínimo de la columna.
SELECT MIN(columna) FROM tabla
- MAX: Obtener el valor máximo de la columna.
SELECT MAX(columna) FROM tabla
- AVG: Valor promedio de los registros de la columna.
SELECT AVG(columna) FROM tabla
CASE
Puedes crear nuevas columnas basándote en los valores de otras columnas existentes, para esto utiliza CASE que sería similar a implementar If-Else en Python. Para añadir un valor por defecto si las condiciones no se cumplen utiliza ELSE y finaliza con END y un alias que será el nombre de la nueva columna que has creado.
SELECT columna1,
CASE WHEN condicion1 THEN valor1
WHEN condicion2 THEN valor2
ELSE valor_defecto
END AS nombre_columna
FROM tabla
Buenas prácticas en SQL
- Añade comentarios al código que ayuden a la lectura de la consulta.
- Utiliza las cláusulas en mayúscula y los nombres de tablas y columnas en minúscula.
- Nombra las variables de forma sencilla y fácil de entender.
- Utiliza bien los espacios y la indentación.
- Usa alias para renombrar las columnas de forma descriptiva y clara.
- Evita utilizar SELECT *, selecciona las columnas que son de tu interés y trata de hacer todo el filtrado antes de hacer la consulta.
- Para hacer operaciones sobre un conjunto de filas agrupa la base utilizando GROUP BY.
Puedes encontrar más tips en los siguientes enlaces:
Y recuerda, NUNCA hagas DELETE sin WHERE :D
Espero te haya sido útil esta publicación, de ser así ayúdame a compartirla en redes para que más personas puedan ver el contenido. Comenta que opinas de la publicación y que otros temas te gustaría ver en el blog.
Te invito a seguirme en Medium para que no te pierdas de las próximas publicaciones.
Gracias por leerme.
Hecho con 💜