Inicio › Herramientas para desarrolladores › Generador de consultas SQL

Generador de consultas SQL

Crea una instrucción SELECT sin escribirla: elige una tabla, añade JOIN (la condición ON se rellena a partir de tus claves foráneas), elige columnas y agregados, añade filtros WHERE y HAVING, ordena y limita. La herramienta escribe SQL limpio y formateado para MySQL, PostgreSQL, SQLite o SQL Server y explica cualquier cosa que fallaría.

Última actualización:

Tus tablas

FROM

Columnas de SELECT

WHERE (filtrar filas)

GROUP BY y HAVING

ORDER BY y LIMIT

Tu SQL

Publicidad
Publicidad

Cómo usar Generador de consultas SQL

  1. Revisa tus tablas: abre Tus tablas y pega instrucciones CREATE TABLE, o conserva el esquema de tienda online de ejemplo.
  2. Elige la tabla de FROM y añade JOIN. La herramienta sugiere una tabla relacionada y rellena las columnas de ON a partir de las claves foráneas; ajústalas si hace falta.
  3. Elige las columnas que se devolverán, con una función opcional como COUNT o SUM y un alias.
  4. Añade filtros: las condiciones WHERE filtran filas y las condiciones HAVING filtran grupos después de la agregación.
  5. Ordena y limita, elige tu base de datos y luego copia o descarga el SQL.

Anatomía de una consulta SELECT

La consulta de ejemplo que se crea al cargar responde a una pregunta real: ¿qué clientes de EE. UU. y Canadá hicieron al menos dos pedidos y cuánto gastaron?

CláusulaEn el ejemploPropósito
SELECTc.id, c.full_name, COUNT(o.id) AS order_count, SUM(o.total) AS total_spentColumnas y valores calculados que se devuelven
FROM / JOINcustomers AS c LEFT JOIN orders AS o ON o.customer_id = c.idDe dónde vienen las filas y cómo se relacionan las tablas
WHEREc.country IN ('US', 'CA')Filtrar filas individuales
GROUP BYc.id, c.full_nameUna fila de resultado por cliente
HAVINGCOUNT(o.id) >= 2Filtrar grupos usando agregados
ORDER BYtotal_spent DESCOrdenar el resultado, aquí por un alias
LIMITLIMIT 10Devolver solo las primeras filas

Tipos de JOIN

JOINDevuelveUso habitual
INNER JOINSolo las filas con coincidencia en ambas tablasPedidos con su cliente
LEFT JOINTodas las filas de la izquierda, con NULL donde el lado derecho no tiene coincidenciaTodos los clientes, incluidos los que no tienen pedidos
RIGHT JOINTodas las filas de la derecha, con NULL donde el lado izquierdo no tiene coincidenciaRara vez hace falta; intercambia las tablas y usa LEFT JOIN
FULL JOINTodas las filas de ambos ladosConciliar dos listas (no disponible en MySQL)
CROSS JOINTodas las combinaciones de filasGenerar una cuadrícula calendario × producto

Consejos para consultas correctas y rápidas

  • Filtra una tabla unida con LEFT JOIN en la cláusula ON, no en WHERE: WHERE o.status = 'paid' elimina a los clientes sin pedidos y convierte silenciosamente el LEFT JOIN en un INNER JOIN.
  • COUNT(columna) omite los NULL, mientras que COUNT(*) cuenta filas, así que con un LEFT JOIN usa COUNT(o.id) para obtener 0 en los clientes sin pedidos.
  • Usa siempre ORDER BY al paginar con LIMIT / OFFSET; de lo contrario, las filas pueden cambiar de página.
  • Indexa las columnas usadas en JOIN … ON y WHERE, sobre todo claves foráneas como orders.customer_id.
  • Usa parámetros en el código de tu aplicación (WHERE email = ?) en lugar de pegar la entrada del usuario en el SQL.

Preguntas frecuentes

¿En qué orden ejecuta SQL las cláusulas?

Lógicamente, un SELECT se evalúa como FROM y JOIN, luego WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY y, por último, LIMIT / OFFSET. Por eso WHERE no puede usar agregados ni alias de columnas, HAVING sí puede usar agregados y ORDER BY puede usar los alias de SELECT.

¿Cuál es la diferencia entre WHERE y HAVING?

WHERE filtra filas individuales antes de agruparlas, así que no puede usar funciones como COUNT o SUM. HAVING filtra los grupos después de GROUP BY; por ejemplo, HAVING COUNT(o.id) >= 2 para quedarse solo con los clientes con al menos dos pedidos.

¿Cuál es la diferencia entre INNER JOIN y LEFT JOIN?

INNER JOIN devuelve solo las filas que tienen coincidencia en ambas tablas. LEFT JOIN devuelve todas las filas de la tabla izquierda y rellena con NULL las columnas de la tabla derecha cuando no hay coincidencia, así que los clientes sin pedidos siguen apareciendo con un conteo de 0.

¿Por qué toda columna no agregada debe estar en GROUP BY?

Cuando las filas se agrupan, cada fila de salida representa muchas filas de entrada, así que una columna simple debe tener un único valor por grupo. El SQL estándar exige que esté en GROUP BY (PostgreSQL permite columnas que dependen de una clave primaria agrupada, y el modo ONLY_FULL_GROUP_BY de MySQL aplica la regla). El generador las añade automáticamente.

¿Cómo se escribe LIMIT en SQL Server?

SQL Server no tiene LIMIT. El generador usa SELECT TOP (n) para un límite simple, y ORDER BY … OFFSET n ROWS FETCH NEXT m ROWS ONLY cuando además omites filas. OFFSET requiere una cláusula ORDER BY.

¿Cómo se ponen entre comillas los valores de los filtros?

Los números comparados con columnas numéricas quedan sin comillas; los demás valores se convierten en literales de cadena, con las comillas simples duplicadas por seguridad. Las listas IN se dividen por comas. Los valores como :name, ?, $1 o @param se conservan como marcadores de parámetros, que es lo que deberías usar en el código de tu aplicación para evitar la inyección SQL.

¿El generador ejecuta la consulta?

No. Solo escribe el texto SQL en tu navegador. Ejecútalo en tu cliente de base de datos, o pruébalo con un archivo CSV usando la herramienta Consultar CSV con SQL.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Generadores de código →