Constructor Visual de Consultas SQL

Generación estructurada de consultas SQL. Ensamble consultas complejas SELECT con relaciones JOIN, filtros avanzados y agrupaciones, o cree sentencias seguras INSERT, UPDATE y DELETE con formateo automático de literales.

Tipo de consulta:
Plantilla de ejemplo:

FROM · Tabla de origen

SELECT · Columnas de consulta

JOINs · Relaciones multitabla 1

= ON =

WHERE · Filtro de filas

WHERE

Sugerencia: las cadenas de texto se entrecomillan automáticamente (O'Brien → 'O''Brien'). Marque raw literal para funciones, booleanos, expresiones o referencias a columnas.

Agrupación · Agregación · Ordenación · Paginación

HAVING (filtro de agregados opcional)
Código SQL generadoSELECT
SELECT id,
    name,
    email
FROM users u
LEFT JOIN posts p ON u.id = p.user_id
WHERE u.active = true
ORDER BY created_at DESC
LIMIT 50;
138 B•8 líneas•Palabras clave en MAYÚSCULAS
Estructura lista
¿Desea perfeccionar o auditar la consulta?

Flujo de Construcción de Consultas

Paso 1

Definir Esquema y Relaciones

Indique la tabla principal y su alias opcional. Seleccione las columnas con sus alias correspondientes, o incorpore tablas secundarias mediante JOINs (INNER, LEFT, RIGHT, FULL, CROSS) con claves explícitas ON.

Paso 2

Aplicar Filtros y Agrupaciones

Configure filtros WHERE mediante 13 operadores de comparación. Asigne expresiones SET para actualizaciones, añada tuplas multifila para inserciones y establezca cláusulas GROUP BY, HAVING, ORDER BY y LIMIT.

Paso 3

Verificar y Exportar

Examine el código ANSI SQL generado en tiempo real. Alterne entre palabras clave en MAYÚSCULAS o minúsculas, elija salida estructurada o compacta, y copie al portapapeles o descargue el archivo .sql.

Ejemplos Prácticos de Sentencias

1. Consulta SELECT Agregada con LEFT JOIN, Filtrado, Agrupación y Paginación

Parámetros del Formulario

Tabla:    users AS u
Columnas: u.id, u.username, u.email, COUNT(o.id) AS order_count
JOIN:     LEFT JOIN orders o ON u.id = o.user_id
WHERE:    u.status = 'active' AND u.created_at >= '2024-01-01'
GROUP BY: u.id, u.username, u.email
HAVING:   COUNT(o.id) > 5
ORDER BY: order_count DESC · LIMIT: 25 · OFFSET: 0

Salida SQL Generada

SELECT u.id, u.username, u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.status = 'active' AND u.created_at >= '2024-01-01'
GROUP BY u.id, u.username, u.email
HAVING COUNT(o.id) > 5
ORDER BY order_count DESC
LIMIT 25;

2. Inserción Multifila con Tipos Mixtos y Entrecomillado Automático

Parámetros del Formulario

Tabla:    inventory_items
Columnas: sku, warehouse_id, quantity, unit_price, is_available
Fila 1:   SKU-8821, 4, 150, 29.99, true
Fila 2:   SKU-9904, 2, 0, 89.50, false
Fila 3:   SKU-1044, 4, 75, 14.25, true

Salida SQL Generada

INSERT INTO inventory_items (sku, warehouse_id, quantity, unit_price, is_available)
VALUES
    ('SKU-8821', 4, 150, 29.99, true),
    ('SKU-9904', 2, 0, 89.50, false),
    ('SKU-1044', 4, 75, 14.25, true);

3. Sentencia UPDATE Protegida con Expresión Computada y Filtro WHERE

Parámetros del Formulario

Tabla:    subscriptions
SET:      status = 'suspended', auto_renew = false, retry_count = retry_count + 1 (raw)
WHERE:    billing_status = 'failed' AND grace_period_ends < CURRENT_TIMESTAMP

Salida SQL Generada

UPDATE subscriptions
SET status = 'suspended', auto_renew = false, retry_count = retry_count + 1
WHERE billing_status = 'failed' AND grace_period_ends < CURRENT_TIMESTAMP;

4. Eliminación Dirigida DELETE con Filtro Compuesto de Fechas y Booleanos

Parámetros del Formulario

Tabla:    session_tokens
WHERE:    expired_at < '2024-01-01' AND is_revoked = true

Salida SQL Generada

DELETE FROM session_tokens
WHERE expired_at < '2024-01-01' AND is_revoked = true;

Tipos de Sentencia Admitidos y Reglas de Generación AST

Tipo de SentenciaComponentes de Cláusula SoportadosInvariantes y Garantías de Seguridad
SELECTDISTINCT, proyección de columnas con alias, JOINs (INNER, LEFT, RIGHT, FULL, CROSS), WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSETProyecta * por defecto si la lista de columnas está vacía; suprime automáticamente la condición ON en CROSS JOIN.
INSERTTabla destino, definición explícita de columnas, tuplas VALUES multifila analizadas por saltos de líneaLa inferencia de tipos respeta números, booleanos y llamadas a funciones sin comillas mientras envuelve cadenas de texto.
UPDATETabla destino, múltiples asignaciones SET (literales o raw), constructor completo de condiciones WHEREMuestra una advertencia visual destacada si no se configuran condiciones WHERE para alertar sobre mutaciones en toda la tabla.
DELETETabla destino, constructor de filtros WHERE con 13 operadores de comparación y controles de conjunciónBloqueo de seguridad estricto: los botones Copiar y Descargar permanecen bloqueados hasta definir al menos un filtro WHERE.

Referencia de Operadores WHERE y Análisis de Valores

Operador / ModoSintaxis AceptadaLógica de Formateo y Salida SQL
=, !=, >, <, >=, <=Valor escalar o referencia a columnaCompara contra el tipo inferido; envuelve cadenas en comillas, preserva números, booleanos y funciones.
LIKE, NOT LIKE%comodín%, prefijo%, _únicoEnvuelve el patrón en comillas simples: LIKE 'prefijo%'. Escapa comillas simples internas automáticamente.
IN, NOT INval1, val2, val3Descompone la lista separada por comas en tuplas estructuradas: IN ('activo', 'pendiente', 'revisión').
BETWEENinferior AND superiorRequiere el delimitador X AND Y; desglosa los límites y formatea cada operando de manera independiente.
IS NULL, IS NOT NULL(no requiere valor)Omite el campo de valor por completo; emite el predicado unario: columna IS NULL o columna IS NOT NULL.
Modo Raw LiteralFragmento SQL personalizadoOmite el entrecomillado; idóneo para cálculos matemáticos (price * 0.9) o subconsultas.

Ciclo de Vida de Ejecución Relacional frente al Orden Léxico

El lenguaje SQL presenta una discrepancia inherente entre la sintaxis léxica y los mecanismos de ejecución: las sentencias se escriben comenzando con SELECT, pero el motor de base de datos evalúa las cláusulas en un orden operativo completamente distinto. Conocer este flujo explica por qué ciertas referencias (como alias de columna dentro de filtros WHERE) fallan en tiempo de compilación:

Fases 1 y 2

FROM y JOIN

Identifica las tablas de destino, forma productos cartesianos, evalúa las condiciones ON y establece el espacio de trabajo relacional antes de cualquier filtrado.

Fases 3 y 4

WHERE y GROUP BY

Aplica predicados a nivel de fila para descartar tuplas que no cumplen los criterios, y particiona los registros restantes en grupos de agregación.

Fases 5 y 6

HAVING y SELECT

Filtra los grupos mediante condiciones de agregación (COUNT() > n), proyecta expresiones calculadas y asigna alias a las columnas.

Fases 7 y 8

ORDER BY y LIMIT

Ordena el flujo de registros proyectados utilizando las claves indicadas, elimina duplicados con DISTINCT y pagina el conjunto mediante LIMIT y OFFSET.

Inferencia de Tipos, Entrecomillado de Literales y Protocolo de Escape

Un generador de consultas ejecutado en el cliente debe diferenciar con precisión los tipos de datos sin depender de una conexión activa con el catálogo de la base de datos. Cuando se introduce un valor, la canalización de formateo aplica reglas estrictas de resolución:

Motor de Resolución Escalar

Los valores se analizan mediante un tokenizador determinista antes de emitir delimitadores:

  • Literales Numéricos: Enteros (42) y decimales (-19.95) se emiten como números sin comillas.
  • Booleanos y Nulos: TRUE, FALSE y NULL se emiten sin entrecomillar.
  • Funciones SQL: Identificadores con firma de llamada (ej. NOW(), CURRENT_TIMESTAMP) se conservan intactos.
  • Identificadores con Punto: Rutas de campo (ej. users.id) se tratan como identificadores de columna y no como texto.

Protocolo de Escape ANSI de Comillas Simples

En SQL, las constantes de texto deben estar encerradas en comillas simples ('...'). Si el texto contiene un apóstrofe interno, emitirlo sin procesar rompería la sentencia:

// Entrada original: O'Reilly Automotive
// Token escapado: 'O''Reilly Automotive' (Doble comilla simple estándar ANSI)
// Salida incorrecta: 'O'Reilly Automotive' (Provoca error sintáctico)

Semántica de JOINs y Mecánica de Ubicación de Predicados

Las consultas multitabla descansan sobre el álgebra relacional de joins. La posición de los filtros —dentro de la cláusula ON frente a la cláusula WHERE— altera radicalmente los resultados en combinaciones externas:

Estrategia de JOINMecanismo RelacionalImpacto de Ubicación del Predicado (ON vs WHERE)
INNER JOINDevuelve estrictamente las filas que satisfacen la condición ON en ambas tablas.Filtrar en ON o en WHERE genera el mismo resultado; el optimizador realiza push-down de predicados.
LEFT JOINConserva todas las filas de la tabla izquierda; rellena con NULL si no hay coincidencia en la derecha.Diferencia crítica: Filtrar la tabla derecha en WHERE suprime las filas con NULL, convirtiendo la consulta en un INNER JOIN.
RIGHT JOINConserva todas las filas de la tabla derecha; rellena con NULL si no hay coincidencia en la izquierda.Filtrar la tabla izquierda en WHERE descarta las filas no coincidentes de la derecha; debe ubicarse en la cláusula ON.
FULL JOINCombinación externa bidireccional; preserva registros sin coincidencia de ambos lados.Cualquier filtro en WHERE específico de una tabla elimina las filas externas de la tabla opuesta salvo comprobación explícita de IS NULL.
CROSS JOINProduce el producto cartesiano completo (M × N filas) sin requerir cláusula ON.No existe condición ON; todo filtrado debe especificarse en la cláusula WHERE.

Diseño de Predicados SARGable y Utilización de Índices B-Tree

Los planificadores de consultas recurren a índices B-Tree para saltar directamente a las páginas de datos pertinentes. Un predicado se califica como SARGable (Search Argument Able) cuando el motor de almacenamiento puede recorrer el árbol de índices sin calcular transformaciones fila por fila:

Patrones Optimizables por Índice (SARGable)

Predicados que mantienen la columna indexada aislada en un lado del operador:

// Búsqueda por Rango: created_at >= '2024-01-01'
// Escaneo por Prefijo: username LIKE 'smith%'
// Búsqueda Multivalor: status IN ('active', 'verified')
// Rango Acotado: price BETWEEN 10.00 AND 50.00

Antipatrones con Escaneo de Tabla (No SARGable)

Expresiones que fuerzan a evaluar funciones en cada fila invalidando los índices:

// Función en Columna: YEAR(created_at) = 2024
// Comodín Inicial: username LIKE '%smith'
// Aritmética en Campo: price * 1.15 > 100
// Coerción de Tipos: varchar_col = 12345 (CAST implícito)

Protecciones de Mutación DML y Riesgos de Transacciones Desprotegidas

En la administración de bases de datos relacionales, una sentencia DML sin cláusula WHERE (DELETE FROM tabla o UPDATE tabla SET status = 'inactivo') representa un riesgo operativo crítico. Los clientes de producción con frecuencia incorporan flags de seguridad (como --safe-updates en MySQL o SQL_SAFE_UPDATES = 1) para abortar mutaciones sin clave.

Contención por Bloqueos Exclusivos de Tabla

Un UPDATE o DELETE desprotegido adquiere bloqueos exclusivos en cada fila o rango de índice de la tabla. Bajo niveles de aislamiento habituales (como REPEATABLE READ en MySQL InnoDB), esto genera un volumen masivo de registros de deshacer (undo log), satura el buffer pool y desencadena tiempos de espera por bloqueo en hilos concurrentes de la aplicación.

Barreras Visuales y Bloqueos de Interfaz

Este constructor aplica requisitos obligatorios para operaciones DELETE: los botones de copia y descarga quedan inhabilitados y se muestra un banner de advertencia hasta definir al menos una condición WHERE. En sentencias UPDATE, se muestra una alerta visual destacada si se asignan campos sin un filtro acompañante.

Matriz de Compatibilidad y Sintaxis entre Dialectos SQL

Aunque la sintaxis DML esencial se rige por las especificaciones de ANSI SQL, los distintos motores de base de datos implementan características propias para paginación, delimitadores y almacenamiento de valores booleanos:

Dialecto del MotorDelimitador de IdentificadorSintaxis de PaginaciónAlmacenamiento BooleanoConcatenación de Cadenas
SQL Estándar ANSI"col_nombre"OFFSET m FETCH NEXT n ROWS ONLYTRUE / FALSE / UNKNOWNcol1 || col2
PostgreSQL"col_nombre"LIMIT n OFFSET mTRUE / FALSE / 't' / 'f'col1 || col2
MySQL y MariaDB`col_nombre`LIMIT n OFFSET m (o LIMIT m, n)TINYINT(1) (1 o 0)CONCAT(col1, col2)
SQLite`col`, "col", [col]LIMIT n OFFSET mINTEGER (1 o 0)col1 || col2
SQL Server (T-SQL)[col_nombre]TOP (n) u OFFSET m ROWS FETCH NEXT nBIT (1 o 0)col1 + col2

Frequently Asked Questions

¿Cómo construir consultas con múltiples JOINs y alias de tabla personalizados en esta herramienta?

En el panel de SELECT, haga clic en «Añadir JOIN» para asociar tablas secundarias. Seleccione INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN o CROSS JOIN en el menú desplegable. Introduzca el nombre de la tabla relacionada, el alias opcional (ej. "p") y defina las claves de vinculación ON (ej. "u.id" = "p.user_id"). En el caso de CROSS JOIN, la condición ON se oculta automáticamente para respetar la sintaxis de producto cartesiano. Puede encadenar múltiples cláusulas JOIN en orden secuencial.

¿Cómo gestiona el motor el escape automático de cadenas y las expresiones SQL literales (raw)?

El motor evalúa cada valor ingresado frente a literales numéricos, constantes booleanas (TRUE, FALSE, NULL), funciones de marca de tiempo (CURRENT_TIMESTAMP, NOW()) y referencias a columnas con punto (users.id). Las cadenas de texto sin coincidencia se encierran automáticamente en comillas simples estándar ANSI escapando comillas internas (O'Brien se transforma en 'O''Brien'). Al marcar la casilla "raw literal", se omite el entrecomillado permitiendo inyectar cálculos aritméticos (price * 0.9) o funciones específicas del motor.

¿Por qué están inhabilitados los botones Copiar y Descargar en sentencias DELETE sin filtro?

Ejecutar una sentencia DELETE sin cláusula WHERE vacía la totalidad de los registros de la tabla de destino, provocando pérdidas de datos irreversibles y sobrecarga extrema en los logs de rollback. Para prevenir borrados masivos involuntarios, el constructor implementa un bloqueo de seguridad en la interfaz: las acciones de exportación permanecen deshabilitadas con un aviso explícito hasta que se configure al menos una condición WHERE.

¿Cómo se construyen visualmente condiciones WHERE con lógica combinada AND / OR?

Haga clic en «Añadir condición» en la sección WHERE para crear predicados de filtrado. Seleccione el operador de conjunción (AND u OR) para enlazar condiciones, introduzca la columna de destino, elija entre 13 operadores de comparación (=, !=, >, <, >=, <=, LIKE, NOT LIKE, IN, NOT IN, BETWEEN, IS NULL, IS NOT NULL) e indique el valor de coincidencia. Operadores como IN admiten listas separadas por coma, mientras que BETWEEN requiere el formato "val1 AND val2".

¿Cuál es la diferencia práctica entre filtrar en la cláusula JOIN ON frente a la cláusula WHERE?

En un INNER JOIN, situar los predicados en la cláusula ON o en la cláusula WHERE genera el mismo resultado exacto debido a que las filas sin coincidencia se descartan. Sin embargo, en un OUTER JOIN (LEFT, RIGHT, FULL), la condición ON determina qué filas secundarias coinciden antes de la extensión con NULL, mientras que la cláusula WHERE filtra el conjunto de resultados combinado. Colocar un filtro de la tabla derecha en el WHERE de un LEFT JOIN descartará las filas con NULL, convirtiendo involuntariamente la consulta en un INNER JOIN.

¿Es posible generar sentencias de inserción masiva (bulk INSERT) con tipos de datos heterogéneos?

Sí. Alterne a la pestaña INSERT, introduzca el nombre de la tabla de destino y la lista de columnas separadas por coma, e ingrese las tuplas de valores línea por línea en el panel VALUES. Cada línea se analiza como una tupla independiente. El motor aplica comillas simples a los textos mientras mantiene números, booleanos y llamadas a funciones del sistema como literales nativos.

¿El código SQL generado es directamente compatible con PostgreSQL, MySQL, SQLite y SQL Server?

Las consultas se construyen siguiendo rigurosamente el estándar ANSI SQL, garantizando compatibilidad directa en todos los sistemas gestores de bases de datos relacionales (RDBMS). Las cláusulas habituales —SELECT, FROM, JOIN ... ON, WHERE, GROUP BY, HAVING y ORDER BY— se ejecutan sin cambios en PostgreSQL, MySQL, MariaDB y SQLite. Para particularidades dialectales de paginación (como TOP en T-SQL frente a LIMIT ANSI), las consultas pueden adaptarse con facilidad desde el panel de código.

¿Los esquemas de tabla, nombres de columna o datos de consulta se envían a servidores externos?

No. Toda la generación sintáctica, el ensamblado del árbol de expresiones, el formateo y la validación se ejecutan al 100% en el entorno local del navegador mediante JavaScript. Ningún nombre de tabla, identificador de campo ni parámetro de consulta se transmite por la red ni se registra en servidores.