Bases de datos sin misterios

Tu primera consulta útil

21 min
Qué aprenderás
  • escribir consultas con una lista explícita de columnas tras SELECT y un filtro de filas mediante WHERE
  • traducir una pregunta de negocio a SQL siguiendo esta ruta: entidad → FROM, restricciones → WHERE (con AND), salida → SELECT, orden → ORDER BY
  • explicar por qué SELECT * es una mala práctica en consultas de producción
  • comprobar una consulta leyéndola en voz alta: si tu paráfrasis coincide con la pregunta original, la consulta tiene el sentido correcto

El mapa ya está estudiado, y QUERY cambia las reglas. Hasta ahora contemplabas el archivo entero, como un turista; un archivista trabaja de otra manera. En la holopantalla se apaga todo menos una tabla, y aparece una tarea: formula tu pregunta de modo que en la respuesta no sobre ni una fila ni una columna.

Elegimos las columnas y las filas que necesitamos

Cogerlo todo con * es cómodo para un primer contacto, pero en el trabajo real es como llevarse todo el almacén a la caja. Normalmente necesitas campos concretos: enuméralos separados por comas después de SELECT.

Con las filas pasa lo mismo: en lugar de todo el escaparate, escoge solo el segmento que necesitas mediante WHERE. Por ejemplo, pidamos a «Kotomarket» solo los productos de la categoría Libros:

Un cadete estrecha con un haz de filtro color ámbar un escaparate holográfico: a través del haz solo pasan unas pocas filas-cápsula con libros
Una pregunta precisa al archivo: SELECT nombra las columnas que necesitas, WHERE deja pasar solo las filas que necesitas.

Choosing the columns and rows you need

Grabbing everything with * is convenient for a first look, but in real work it’s like hauling the entire warehouse up to the checkout. Usually you need specific fields: list them, comma-separated, after SELECT.

It’s the same with rows: instead of the whole storefront, pick only the segment you need via WHERE. For example, let’s ask Kotomarket for only the products in the Books category:

Qué libros hay en el escaparate y cuánto cuestan:
Query result
nameprice
SQL для профи1290.00
Чистый код1490.00
Алгоритмы на практике1690.00

De la pregunta de negocio a la consulta

Las preguntas reales no le llegan al archivista en SQL: «¿qué libros cuestan menos de mil quinientos?», «¿qué hay de electrónica por encima de 5000?». La traducción siempre sigue la misma ruta:

  1. Entidad → tabla. ¿De qué trata la pregunta: de productos, clientes, pedidos? «Libros por debajo de 1500» trata de productos, así que FROM products.
  2. Restricciones → WHERE. Cada condición de la pregunta se convierte en una condición de filtro: categoría «Libros», precio menor que 1500.
  3. Qué mostrar → SELECT. ¿Qué quiere ver la persona en la respuesta? El nombre y el precio: eso es lo que enumeramos; lo demás es ruido.
  4. Forma de la respuesta → ORDER BY. «De baratos a caros» es una ordenación por precio.
-- «¿Qué libros cuestan menos de 1500 y cuánto, de baratos a caros?»
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;

Varias condiciones se combinan con la palabra AND; veremos los operadores de filtro en detalle en el próximo capítulo.

Y el hábito complementario de un buen archivista: lee la consulta terminada en voz alta, como una frase. «Tomar los productos que son libros y cuestan menos de 1500, mostrar el nombre y el precio, ordenar por precio»: si la paráfrasis coincide con la pregunta original, la consulta tiene el sentido correcto. Si en la paráfrasis asoma «todas las columnas» o «todo el escaparate», vuelve atrás y estréchala.

Interview question

Pregunta de entrevista: ¿por qué SELECT * se considera una mala práctica en las consultas de producción?

Buena respuesta: primero, por exceso de datos: la red y la memoria se gastan en columnas que no hacen falta, y la base pierde la posibilidad de responder solo desde el índice (index-only scan; los índices, en el Capítulo 10). Segundo, por fragilidad: al añadir o renombrar columnas se rompen los informes y el código que esperan un conjunto y un orden de columnas concretos. Una lista explícita de columnas es el contrato de la consulta; SELECT * solo es apropiado en la exploración interactiva de datos.

Check yourself
¿Qué mostrará la consulta SELECT name FROM products WHERE category = 'Книги'?

The index has been read: you know what’s in the five tables and which threads stitch them together. QUERY dims the map, and the next clearance level lights up on the holopanel — the reading terminal.

QUERY: Remember the cardinal property of this place: the archive answers only well-formed questions. From the next clearance on, we learn to ask precisely.

Practice: solve the tasks
Solved 0 of 2