SELECT en SQL: consultas básicas con ejemplos y ejercicios

Actualizado el 29 de septiembre de 2026

SELECT es la instrucción para leer datos de una base de datos, y la que más vas a escribir. Una consulta dice qué columnas quieres y de qué tabla, y la base de datos devuelve el resultado como una tabla nueva, sin modificar los datos guardados.

Todos los ejemplos usan esta tabla de productos de una tienda. Fíjate en que el escritorio no tiene stock registrado (NULL), que no es lo mismo que tener 0.

Estructura
CREATE TABLE productos (
  id        INTEGER PRIMARY KEY,
  nombre    TEXT,
  categoria TEXT,
  precio    INTEGER,
  stock     INTEGER
);
productos
idnombrecategoriapreciostock
1TecladoComputación2599012
2MouseComputación1299030
3MonitorComputación1599904
4AudífonosAudio349900
5ParlanteAudio499907
6SillaMuebles899903
7EscritorioMuebles129990NULL

Elegir columnas

SELECT nombre, precio
FROM productos;
nombreprecio
Teclado25990
Mouse12990
Monitor159990
Audífonos34990
Parlante49990
Silla89990
Escritorio129990

Después de SELECT van las columnas separadas por comas, y después de FROM, la tabla. SELECT * trae todas las columnas: es cómodo para explorar, pero en una aplicación conviene nombrar las columnas que se usan, para no traer datos de más y para que la consulta no cambie si alguien agrega una columna.

SQL no distingue mayúsculas en las palabras clave: select y SELECT son lo mismo. Escribirlas en mayúsculas es una convención para diferenciarlas de los nombres de tablas y columnas.

Calcular valores y ponerles nombre con AS

Una columna del resultado no tiene por qué existir en la tabla: puede ser un cálculo. Con AS se le da un nombre (un alias):

SELECT nombre, precio * stock AS valor_inventario
FROM productos;
nombrevalor_inventario
Teclado311880
Mouse389700
Monitor639960
Audífonos0
Parlante349930
Silla269970
EscritorioNULL

El escritorio da NULL: cualquier cálculo con un valor desconocido da un resultado desconocido. Es una regla general de SQL que conviene tener presente siempre que una columna admita NULL.

Para unir textos se usa || en SQLite y PostgreSQL: SELECT 'Producto: ' || nombre AS etiqueta devuelve "Producto: Teclado", "Producto: Mouse", etc. En MySQL la función equivalente es CONCAT().

Valores sin repetir: DISTINCT

SELECT DISTINCT categoria
FROM productos;
categoria
Computación
Audio
Muebles

DISTINCT elimina las filas repetidas del resultado. Si se ponen varias columnas, se eliminan las combinaciones repetidas: SELECT DISTINCT categoria, stock compara ambas columnas juntas.

Errores comunes

Una coma de más antes de FROM

SELECT nombre, precio,
FROM productos;
-- Error: near "FROM": syntax error

Después de la última columna no va coma. Cuando un error de sintaxis apunta a una palabra ("near FROM"), el problema casi siempre está justo antes de ella.

Comillas dobles para textos

En SQL estándar, los textos van entre comillas simples ('Audio') y las comillas dobles son para nombres de columnas o tablas ("nombre"). SQLite acepta comillas dobles para textos por compatibilidad, pero PostgreSQL no: ahí "Audio" se interpreta como una columna que no existe. Usa siempre comillas simples para los textos.

Esperar decimales redondos

precio * 1.19 para el teclado da 30928.1: al multiplicar por un decimal, el resultado es decimal. ROUND(precio * 1.19) da 30928.0 en SQLite, porque ROUND devuelve un número decimal aunque no tenga parte fraccionaria. Si necesitas un entero, usa CAST(ROUND(precio * 1.19) AS INTEGER).

Ejercicios resueltos

Intenta resolver cada ejercicio antes de abrir la solución: equivocarse y corregir es la parte que más enseña.

1.Nombre y stock

Escribe una consulta que muestre el nombre y el stock de todos los productos.

Ver solución
Solución
SELECT nombre, stock
FROM productos;
nombrestock
Teclado12
Mouse30
Monitor4
Audífonos0
Parlante7
Silla3
EscritorioNULL

Las columnas aparecen en el resultado en el orden en que se escriben en el SELECT, no en el de la tabla. El escritorio aparece con NULL: la fila existe, solo que el dato no.

2.Valor del inventario de los productos con stock

Escribe una consulta que muestre el nombre de cada producto y el valor de su inventario (precio por stock) en una columna llamada valor_inventario, solo para los productos con stock mayor que 0.

Para filtrar filas se usa WHERE, que se explica en la guía siguiente: WHERE stock > 0 va después del FROM.

Ver solución
Solución
SELECT nombre, precio * stock AS valor_inventario
FROM productos
WHERE stock > 0;
nombrevalor_inventario
Teclado311880
Mouse389700
Monitor639960
Parlante349930
Silla269970

El cálculo va en el SELECT y el alias le da nombre a la columna. WHERE stock > 0 deja fuera los audífonos (stock 0) y también el escritorio: NULL > 0 no es verdadero, así que esa fila no pasa el filtro.

3.Categorías disponibles

Escribe una consulta que liste las categorías de productos, cada una una sola vez.

Ver solución
Solución
SELECT DISTINCT categoria
FROM productos;
categoria
Computación
Audio
Muebles

Sin DISTINCT saldrían siete filas, una por producto. Si además quisieras saber cuántos productos hay en cada categoría, la herramienta es GROUP BY, que tiene su propia guía.

Practica SQL con ejercicios a tu nivel

En Coditer resuelves ejercicios en el navegador, con tests automáticos que revisan tu código y una IA que te da pistas cuando te atascas. Practicar es gratis.