¡Te presentamos un artículo con el llamativo título «SQL en 20 minutos«! Claro que no dominarás todo SQL en 20 minutos, ¡pero sí tendrás un buen comienzo!
Todo desarrollador web que se precie debe conocer SQL. Aunque existe desde la década de 1970, todavía se usa mucho y sin él será difícil crear algo serio. La mayoría de los frameworks full-stack saben trabajar con SQL. Entre ellos están: ActiveRecord, Doctrine, Hibernate y muchos más. A pesar de esto, a veces hay que «mancharse las manos» y usar SQL directamente.
Por eso hemos preparado una breve introducción en la que repasaremos los aspectos fundamentales de SQL. ¡Te recomendamos encarecidamente que pruebes todos los ejemplos que se muestran a continuación por ti mismo, ya que, como se sabe, la teoría es nada sin la práctica!
¡Empecemos!
Creando una tabla
Para crear una tabla en SQL, se usa la expresión CREATE TABLE
. Esta toma como parámetros todas las columnas que queremos incluir, además de sus tipos de datos.
Vamos a crear una tabla llamada «Months», que tendrá tres columnas:
id
: En otras palabras, el número de orden del mes (tipo entero oint
)name
: El nombre del mes (cadena de texto ovarchar(10)
(10 caracteres es la longitud máxima de la cadena))days
: El número de días de ese mes (tipo entero oint
)
El código tendrá este aspecto:
CREATE TABLE months (id int, name varchar(10), days int);
Además, cuando se crean tablas, se suele agregar la llamada clave principal (primary key
). Esta es una columna cuyos valores son únicos. Muy a menudo, la columna id
es la clave principal, pero en nuestro caso también podría ser name
, ya que los nombres de todos los meses son únicos.
Introduciendo datos
Ahora, añadamos un par de meses a nuestra tabla. Esto se puede hacer con el comando INSERT
. Hay dos formas diferentes de usar INSERT
:
El primer método no requiere especificar los nombres de las columnas, sino que solo toma los valores en el orden en que aparecen en la tabla.
INSERT INTO months VALUES (1,'January',31);
El primer método es más corto que el segundo, pero si en el futuro queremos añadir columnas adicionales, todas las consultas anteriores dejarán de funcionar. Para solucionar este problema, debemos usar el segundo método. Su esencia es que antes de introducir los datos, especificamos los nombres de las columnas.
INSERT INTO months (id,name,days) VALUES (2,'February',29);
Si no especificamos una de las columnas, se escribirá NULL
en su lugar o el valor predeterminado, pero esa ya es otra historia.
Select
Esta consulta se usa cuando necesitamos mostrar los datos de una tabla. Probablemente, el ejemplo más sencillo del uso de SELECT
sea la siguiente consulta:
SELECT * FROM characters
El resultado de esta consulta será una tabla con todos los datos de la tabla characters
. El asterisco (*) significa que queremos mostrar todas las columnas de la tabla sin excepción. Como en una base de datos suele haber más de una tabla, debemos indicar el nombre de la tabla cuyos datos queremos ver. Podemos hacerlo usando la palabra clave FROM
.
Cuando solo necesitas algunas columnas de la tabla, puedes indicar sus nombres separados por comas en lugar del asterisco.
SELECT name, weapon FROM characters
A veces también necesitamos ordenar los datos que se muestran. Para ello, usamos ORDER BY "nombre de la columna"
. ORDER BY
tiene dos modificadores: ASC
(ascendente) (predeterminado) y DESC
(descendente).
SELECT name, weapon FROM characters ORDER BY name DESC
Where
Ahora sabemos cómo mostrar solo columnas específicas, pero ¿qué pasa si queremos incluir solo algunas filas específicas en la salida? Para eso usamos WHERE
. Esta palabra clave nos permite filtrar los datos según una condición determinada.
En la siguiente consulta, mostraremos solo los personajes que usan una pistola como arma.
SELECT *
FROM characters
WHERE weapon = 'pistol';
AND/OR
Las condiciones en WHERE
se pueden escribir usando operadores lógicos (AND
/OR
) y operadores matemáticos de comparación (=, <, >, <=, >=, <>).
Por ejemplo, tenemos una tabla con datos sobre los 4 álbumes musicales más vendidos de todos los tiempos. Vamos a mostrar solo aquellos cuyo género sea rock y cuyas ventas sean inferiores a 50 millones de copias.
SELECT *
FROM albums
WHERE genre = 'rock' AND sales_in_millions <= 50
ORDER BY released
In/Between/Like
Las condiciones en WHERE
se pueden escribir usando algunas otras instrucciones, que son:
IN
: Compara el valor de una columna con varios valores posibles y devuelvetrue
si el valor coincide con al menos uno de los valores.BETWEEN
: Comprueba si un valor se encuentra en un rango determinado.LIKE
: Busca según un patrón.
Por ejemplo, podemos hacer una consulta para mostrar los datos de álbumes de género pop o soul:
SELECT * FROM albums WHERE genre IN ('pop','soul');
Si queremos mostrar todos los álbumes que se lanzaron entre 1975 y 1985, podemos usar la siguiente entrada:
SELECT * FROM albums WHERE released BETWEEN 1975 AND 1985;
Además, si queremos mostrar todos los álbumes cuyo nombre contenga la letra «R», podemos usar la siguiente entrada:
SELECT * FROM albums WHERE album LIKE '%R%';
El signo % significa cualquier secuencia de caracteres (0 caracteres también se consideran una secuencia).
Si queremos mostrar todos los álbumes que empiezan por la letra «R», la entrada cambiará ligeramente:
SELECT * FROM albums WHERE album LIKE 'R%';
En SQL también hay inversión. Por ejemplo, intenta escribir NOT
delante de cualquier expresión lógica en la condición (NOT BETWEEN
, etc.).
Funciones
En SQL hay muchas funciones integradas para realizar diferentes operaciones. Solo te mostraremos las más usadas:
COUNT()
: Devuelve el número de filas.SUM()
: Devuelve la suma de todos los campos con valores numéricos.AVG()
: Devuelve el valor medio entre las filas.MIN()/MAX()
: Devuelve el valor mínimo/máximo entre las filas.
Para mostrar el año de lanzamiento del álbum más antiguo de la tabla, puedes usar la siguiente consulta:
SELECT MIN(released) FROM albums;
Ten en cuenta que si escribes una consulta en la que, por ejemplo, necesites mostrar el nombre y el valor medio de algo, obtendrás un error en la salida.
Supongamos que escribes una consulta como esta:
SELECT name, avg(age) FROM students;
Para evitar el error, debes añadir la siguiente línea:
GROUP BY name
La razón es que la entrada avg(age)
es agregada, y necesitas agrupar los valores por nombre.
Select anidados
En los pasos anteriores, hemos aprendido a hacer cálculos sencillos con los datos. Si queremos usar el resultado de esos cálculos, a menudo necesitamos usar las llamadas consultas anidadas. Supongamos que necesitamos mostrar el artista, el álbum y el año de lanzamiento del álbum más antiguo de la tabla.
Podemos mostrar estas columnas usando la siguiente consulta:
SELECT artist, album, released FROM albums;
También sabemos cómo obtener el año más antiguo disponible:
SELECT MIN(released) FROM album;
Podemos combinar estas consultas en WHERE
:
SELECT artist,album,released
FROM albums
WHERE released = (
SELECT MIN(released) FROM albums
);
Unión de tablas
En bases de datos complejas, a menudo tenemos varias tablas relacionadas. Por ejemplo, tenemos dos tablas: una sobre videojuegos y otra sobre desarrolladores.
La tabla video_games
tiene una columna developer_id
, que en este caso es una llamada clave foránea. Para que sea más fácil de entender, developer_id
es el vínculo entre las dos tablas.
Si queremos mostrar toda la información sobre un juego, incluyendo la información sobre su desarrollador, debemos conectar la segunda tabla. Para hacerlo, podemos usar INNER JOIN
:
SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country
FROM video_games
INNER JOIN game_developers
ON video_games.developer_id = game_developers.id;
Este es probablemente el ejemplo más simple del uso de JOIN
. Hay otras maneras de usarlo.
Alias
Si miras el ejemplo anterior, verás que hay dos columnas con el mismo nombre: «name». A menudo, esto puede causar confusión. La solución a este problema son los alias. Por cierto, ayudan a hacer que el nombre de la columna sea más bonito o comprensible si es necesario.
Para asignar un alias a una columna, podemos usar la palabra clave AS
:
SELECT games.name, games.genre, devs.name AS developer, devs.country
FROM video_games AS games
INNER JOIN game_developers AS devs
ON games.developer_id = devs.id;
Update
A menudo necesitamos cambiar datos en una tabla. En SQL, esto se hace con UPDATE
.
El uso de UPDATE
incluye:
- Seleccionar la tabla en la que se encuentra el campo que queremos cambiar.
- Escribir el nuevo valor.
- Usar
WHERE
para indicar la ubicación específica en la tabla.
Supongamos que tenemos una tabla con las series más valoradas de todos los tiempos. Sin embargo, tenemos un problema: «Juego de Tronos» está etiquetada como comedia y definitivamente necesitamos cambiarlo:
UPDATE tv_series
SET genre = 'drama'
WHERE name = 'Game of Thrones';
Eliminando entradas de la tabla
Eliminar una entrada de una tabla mediante SQL es una operación muy sencilla. Todo lo que necesitas es indicar qué es exactamente lo que quieres eliminar.
DELETE FROM tv_series
WHERE id = 4;
Nota: asegúrate de usar WHERE
cuando elimines una entrada de la tabla. De lo contrario, eliminarás todas las entradas de la tabla sin querer.
Eliminando tablas
Si queremos eliminar todos los datos de una tabla, pero manteniendo la tabla en sí, debemos usar el comando TRUNCATE
:
TRUNCATE TABLE table_name;
Si queremos eliminar la propia tabla, debemos usar el comando DROP
:
DROP TABLE table_name;
Conclusión
Con esto concluimos este tutorial de SQL. Por supuesto, esto no es todo, y para dominarlo por completo hay que estudiar mucho más, pero esta introducción te dará el impulso para seguir aprendiendo.
Puedes encontrar lecciones más detalladas sobre SQL siguiendo estos enlaces:
- Guía Completa de Consultas SQL
- SQL vs NoSQL: ¿Cómo Elegir la Base de Datos Adecuada para tu Proyecto?
- SQL Fiddle: herramienta online para probar consultas SQL
- 5 sitios web para perfeccionar tus habilidades de escritura de consultas SQL