Queries importantes que debemos aprender en SQL
En una entrada anterior vimos qué son las bases de datos y algunos comandos importantes para conocer el mundo de SQL. Pero podemos hacer mucho más con los datos que tengamos: encontrar patrones que podamos analizar, filtrar, ordenar, etc. Empecemos.
Revisaremos principalmente cómo limitar, filtrar y ordenar los valores en las bases de datos, con los siguientes comandos:
- LIMIT.
- WHERE.
- ORDER BY.
Para ello, nos apoyaremos en SQL Practice y así tener una base de datos de ejemplo que nos ayude a integrar mejor la información.
SQL Practice es bastante intuitiva a simple vista: tiene dos bases de datos para poder practicar, hospital.db y northwind.db. La primera contiene un listado de pacientes, datos generales y algunas tablas relacionadas, mientras que la segunda es un listado de productos y tablas relacionadas con la venta de los mismos. En este artículo, usaremos hospital.db, así que echemos un vistazo.
Del lado izquierdo, vemos información de la base de datos y algunos recursos que nos comparten. En el centro tenemos el espacio para escribir las consultas y donde se muestran indicaciones. Debajo, figura el resultado de las consultas, al tiempo que al lado derecho podemos ver cuáles son las preguntas a resolver, cambiar el nivel de dificultad y, eventualmente, cada pregunta junto a su resultado esperado.
LIMIT
Usamos este comando para obtener una cantidad exacta de filas en una consulta.
Para obtener los primeros 5 pacientes de hospital.db, insertamos siguiente:
SELECT *
FROM patients
LIMIT 5;
El resultado luciría así:
WHERE
Este comando sirve para filtrar filas en función de condiciones específicas. Se escribe después de FROM y podemos precisar valores como números, texto, fechas o booleans.
Filtrando valores numéricos
Aquí podemos hacer uso de operadores numéricos como = (igual a), > < (mayor, menor) >= <= (mayor o igual que, menor o igual que) y <> != (diferente a).
Si queremos mostrar los pacientes que miden menos de 150 cm:
SELECT
first_name,
last_name,
height
FROM patients
WHERE height < 150;
Debería verse así:
Pacientes cuyo id es distinto a 2:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE patient_id <> 2;
Encadenar condiciones con AND
Pacientes que midan más de 150 cm, pesen menos de 50 kg y que nacieron después de 2000:
SELECT
patient_id,
first_name,
last_name,
height,
weight,
birth_date
FROM patients
WHERE height > 150
AND weight < 50
AND birth_date > '2000-01-01';
Filtrando valores tipo texto
Los valores de texto que buscamos se deben escribir entre comillas simples o dobles.
Para saber los nombres y apellidos de los pacientes de género masculino, haremos esta consulta:
SELECT
first_name,
last_name,
gender
FROM patients
WHERE gender = 'M';
Filtramos a los pacientes de nombre Charles:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name = 'Charles';
Operador LIKE
Asimismo, podemos filtrar pacientes cuyo primer nombre empiece con C, usando el operador LIKE que permite buscar coincidencias con un patrón específico en una columna.
Usualmente, junto a LIKE se puede usar el símbolo de porcentaje %, un comodín que indica que queremos retornar los valores que tengan uno o más caracteres luego de la C:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name LIKE 'C%';
Pacientes cuyo nombre contiene las letras ‘ar’:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name LIKE '%ar%';
Existe otro comodín que nos especifica un solo caracter: el underscore _.
Filtramos los pacientes cuyo nombre inicie con cualquier caracter, contenga doble erre y le siga un solo caracter final.
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name LIKE '%rr_';
Filtrando valores tipo fecha
Recordemos que el formato de fecha en SQL es año-mes-día.
Pacientes que nacieron el 03/05/1948:
SELECT
patient_id,
first_name,
last_name,
birth_date
FROM patients
WHERE birth_date = '1948-05-03';
Operador BETWEEN
Si queremos saber los nombres de los pacientes que nacieron desde el año 1995 al 2000, podemos hacer uso de los operadores BETWEEN y AND, con los que incluimos los valores límites, en este caso, 1995-01-01 y 2000-01-01.
SELECT
patient_id,
first_name,
last_name,
birth_date
FROM patients
WHERE birth_date
BETWEEN '1995-01-01' AND '2000-01-01';
Obtenemos un total de 270 pacientes nacidos en estos años.
Operador NOT
Retorna valores opuestos a la condición especificada.
Pacientes cuyo nombre NO inicia con C:
SELECT
patient_id,
first_name,
last_name
FROM patients
WHERE first_name NOT LIKE 'C%';
Pacientes que no nacieron entre 1995 y 2000:
SELECT
patient_id,
first_name,
last_name,
birth_date
FROM patients
WHERE birth_date
NOT BETWEEN '1995-01-01' AND '2000-01-01';
ORDER BY
Todas las consultas hechas anteriormente las podemos ordenar como mejor nos parezca y optimizar nuestro análisis. ORDER BY organiza los resultados según la(s) columna(s) que le indiquemos. Por defecto, lo hace en forma ascendente ASC y se agrega el operador DESC para indicar un orden descendente.
Pacientes más antiguos en un rango de 1995 a 2000:
SELECT
patient_id,
first_name,
last_name,
birth_date
FROM patients
WHERE birth_date
BETWEEN '1995-01-01' AND '2000-01-01'
ORDER BY birth_date;
Ordenamos por id:
SELECT
patient_id,
first_name,
last_name
FROM patients
ORDER BY patient_id ;
Ordenamos de forma descendente a los pacientes más altos:
SELECT
patient_id,
first_name,
last_name,
height
FROM patients
WHERE height > 150
ORDER BY height DESC;
Conclusión
Con esta información, ya estamos listos para continuar practicando y mejorando nuestro manejo de SQL. Espero que SQL Practice te sirva para ello. Sin embargo, hay muchos recursos aquí mismo y en Internet que puedes aprovechar para fortalecer tus conocimientos.
¡Hasta luego!
Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.