Ahora ha llegado el momento de juntar todo esto y aprender a construir consultas simples pero útiles usando una combinación de SELECT, WHERE y ORDER BY. Esta habilidad te va a servir para un montón de cosas, desde sacar listas de usuarios hasta hacer pequeños informes.
Antes de empezar, vamos a recordar cómo es la estructura de una consulta SQL básica:
SELECT columna1, columna2, columna3
FROM tabla
WHERE condición
ORDER BY columna ASC
LIMIT cantidad_filas
OFFSET cantidad_filas;
Si SQL fuera una novela, SELECT sería el título del capítulo, FROM su contenido, y WHERE la explicación de la trama. ¡Y ORDER BY le da orden para que leer sea más entretenido!
El orden de los operadores es fijo. Puedes omitir algunos si no los necesitas, pero no puedes cambiar el orden.
Ejemplo 1: Seleccionar nombres de estudiantes con notas excelentes
Imagina que tenemos una tabla students con esta estructura y datos:
| id | name | age | grade |
|---|---|---|---|
| 1 | Otto | 21 | A |
| 2 | Maria | 22 | B |
| 3 | Alex | 20 | A |
| 4 | Nat | 23 | C |
| 5 | Dan | 25 | B |
Necesitas sacar la lista de todos los estudiantes con nota excelente (o sea, grade = 'A'), ordenados por nombre. Así lo hacemos:
SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;
Resultado:
| name |
|---|
| Alex |
| Otto |
Explicación:
SELECT name— solo seleccionamos el nombre. No hace falta gastar recursos sacando datos que no vamos a usar.WHERE grade = 'A'— filtramos solo los que tienen nota excelente.ORDER BY name ASC— ordenamos los nombres de los estudiantes alfabéticamente.
Ejemplo 2: Buscar productos por precio
Ahora imagina que tenemos una tabla products con info sobre productos:
| id | product_name | category | price |
|---|---|---|---|
| 1 | Smartfon | Electronics | 30000 |
| 2 | Televizor | Electronics | 45000 |
| 3 | Kholodilnik | Appliances | 50000 |
| 4 | Pylesos | Appliances | 15000 |
| 5 | Lampochka | Lighting | 500 |
La tarea es sacar la lista de productos de la categoría "Electronics", ordenados por precio descendente. La consulta sería así:
SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;
Resultado:
| product_name | price |
|---|---|
| Televizor | 45000 |
| Smartfon | 30000 |
Explicación:
SELECT product_name, price— seleccionamos el nombre del producto y su precio.WHERE category = 'Electronics'— filtramos solo los productos de la categoría "Electronics".ORDER BY price DESC— ordenamos los resultados de mayor a menor precio (el más caro primero).
Ejemplo 3: Filtros complejos con lógica
Usamos la misma tabla students. Supón que queremos encontrar todos los estudiantes mayores de 21 años que tengan nota B o C, y ordenarlos por edad. Aquí combinamos varias condiciones:
SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;
Resultado:
| name | age | grade |
|---|---|---|
| Maria | 22 | B |
| Nat | 23 | C |
| Dan | 25 | B |
Explicación:
WHERE age > 21— seleccionamos solo estudiantes mayores de 21 años.AND (grade = 'B' OR grade = 'C')— filtramos los que tienen notaBoC. Los paréntesis agrupan las condiciones.ORDER BY age ASC— ordenamos el resultado por edad, del más joven al más viejo.
Ejemplo 4: Combinando ordenación y filtrado
Volvemos a la tabla products. Queremos encontrar productos que cuesten menos de 50 000, ordenarlos por categoría, y dentro de cada categoría — por precio (de menor a mayor).
SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;
Resultado:
| product_name | category | price |
|---|---|---|
| Pylesos | Appliances | 15000 |
| Smartfon | Electronics | 30000 |
| Televizor | Electronics | 45000 |
| Lampochka | Lighting | 500 |
Explicación:
WHERE price < 50000— primero filtramos los productos, dejando solo los que cuestan menos de 50 000.ORDER BY category ASC, price ASC— ordenamos por categoría (alfabéticamente), y dentro de cada categoría por precio ascendente.
Ejemplo 5: Error común — olvidar agrupar condiciones
Ahora veamos qué puede salir mal. ¿Qué pasa si nos olvidamos de poner los paréntesis al usar operadores lógicos?
Consulta incorrecta:
SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;
Aquí OR grade = 'C' se ejecuta sin tener en cuenta AND age > 21, y la consulta devuelve un resultado incorrecto. Vas a obtener todos los que tienen nota C, aunque sean menores de 21 años.
Por eso, usa siempre paréntesis para que quede claro:
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
GO TO FULL VERSION