¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo buscar datos con SELECT y WHERE

Después de esta lección: Puedo pedir a una base de datos los registros que cumplen una condición.

Lección de 45 min7 comandosLaboratorio de MySQL y phpMyAdmin con una base de datos de una tienda para practicar SQL

¿Qué platos cuestan menos de tres euros?

La cantina del instituto tiene cuarenta platos en su base de datos. Un estudiante pregunta qué platos vegetarianos cuestan menos de 3 euros.

SQL (Structured Query Language, "lenguaje de consultas estructurado") sirve para eso. Con unas pocas palabras pides a la base justo los registros que necesitas.

Al terminar esta lección

Nota

Puedo pedir a una base de datos los registros que cumplen una condición.

Palabras clave

PalabraQué significaEjemplo
Consultauna pregunta que haces a una base de datos
SQLel lenguaje con el que se escriben las consultas
Condiciónuna prueba que cada registro pasa o noprice < 3
Resultadolos registros que devuelve una consulta
NULLla marca de un valor que falta
Comodínun símbolo que vale por cualquier texto%

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

WHERE se queda con los registros que cumplen

Una consulta empieza con SELECT, que nombra los campos. FROM nombra la tabla.

WHERE añade una condición. Un registro solo entra en el resultado si la cumple. Une varias con AND (las dos) y OR (una de las dos).

El texto va entre comillas simples. Los números, sin comillas.

Ejemplo resuelto: las pruebas que puedes usar

PruebaSignificaEjemplo
= y <>Igual, distintocountry = 'Spain'
< <= > >=Menor o mayorprice < 6
BETWEENDentro de un rango, extremos incluidosstock BETWEEN 5 AND 10
LIKECoincide con un patrón; % vale por cualquier textoname LIKE '%Pot%'
IS NULLFalta el valorphone IS NULL

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Pruébalo: los postres de la cantina

Código: sql
-- Los platos de la sección Postres.
SELECT dish, price FROM menu
WHERE section = 'Postres';
-- Cámbialo para ver los que cuestan menos de 2 euros.

Lo mismo en el laboratorio

En el laboratorio la tienda tiene treinta y siete productos. Ejecuta primero las dos líneas de preparación. Ya las usaste en la lección anterior, y repetirlas no hace daño.

Aceptar el certificado del servidor

Comando
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un nombre corto para la tienda

Comando
alias sql='mariadb -h db -u student -pstudent shop -t -e'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Productos de menos de 6 euros

Comando
sql "SELECT name, price FROM products WHERE price < 6 ORDER BY price"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Buscar nombres con un patrón

Comando
sql "SELECT name FROM products WHERE name LIKE '%Pot%' ORDER BY name"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

NULL es un valor que falta

Algunos clientes no tienen teléfono. En ese campo la base guarda NULL, una marca que dice que no se sabe nada.

NULL no es igual a nada, ni siquiera a otro NULL. Por eso = NULL nunca encuentra ningún registro. Pregunta con IS NULL.

Ejecuta las dos formas y compara.

Contar clientes sin teléfono

Comando
sql "SELECT COUNT(*) AS no_phone FROM customers WHERE phone IS NULL"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

La misma pregunta, mal escrita

Comando
sql "SELECT COUNT(*) AS no_phone FROM customers WHERE phone = NULL"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que phone = NULL encuentra los teléfonos que faltan. No encuentra ninguno y tampoco avisa. Un valor que falta no es igual a nada. Escribe siempre IS NULL o IS NOT NULL.

Pruébalo: platos sin aviso de alergia

Código: sql
-- Los platos que no avisan de ninguna alergia.
SELECT dish FROM menu
WHERE allergy_note IS NULL;
-- Cambia IS NULL por IS NOT NULL y ejecútalo otra vez.

ORDER BY y LIMIT dan forma al resultado

Una tabla no tiene un orden fijo. Si el orden importa, pídelo con ORDER BY. DESC pone primero lo mayor.

LIMIT 3 se queda con los tres primeros registros del resultado.

Usa LIMIT junto con ORDER BY. Sin orden, "los tres primeros" no significa nada.

Los tres productos más caros

Comando
sql "SELECT name, price FROM products ORDER BY price DESC LIMIT 3"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pruébalo: los platos más baratos

Código: sql
-- Los tres platos más baratos, el más barato primero.
SELECT dish, price FROM menu
ORDER BY price, dish
LIMIT 3;
-- Cambia el 3 por un 5.

Para ir más lejos: los empates

En el menú hay platos con el mismo precio. Si pides los dos más baratos con ORDER BY price LIMIT 2 y dos platos empatan, ¿cuál sale primero?

Añade un segundo criterio al ORDER BY, como dish, y explica por qué así el resultado es siempre el mismo.

Sobre este laboratorio y su código: Laboratorio de MySQL y phpMyAdmin con una base de datos de una tienda para practicar SQL

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.