Crear una tabla
Define columnas, tipos de datos y restricciones con CREATE TABLE. Soporta PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT, AUTO_INCREMENT, CHECK(...) y FOREIGN KEY ... REFERENCES ....
ENUM, SET, UUID, BIGINT), la tabla se crea igual pero esa columna se trata internamente como TEXT.Claves foráneas (FOREIGN KEY)
Relaciona una columna con la clave de otra tabla usando REFERENCES directamente en la columna, o FOREIGN KEY (...) REFERENCES ...(...) como restricción de tabla — ambas formas son equivalentes. La columna referenciada queda indexada automáticamente: los WHERE/JOIN sobre ella responden sin recorrer la tabla completa.
PRIMARY KEY y UNIQUE también crean su índice automáticamente, y ahora sí rechazan valores duplicados al hacer INSERT — antes se aceptaban en silencio.Tipos de datos
Estos son los tipos que el motor valida y soporta de forma nativa al crear una tabla.
| Tipo | Parámetros | Ejemplo |
|---|---|---|
INTEGER / INT | No | edad INTEGER |
REAL / FLOAT / DOUBLE | No | precio FLOAT |
DECIMAL / NUMERIC | (precisión, escala) | total DECIMAL(10,2) |
VARCHAR / CHAR / STRING | (tamaño) | nombre VARCHAR(50) |
TEXT | No | descripcion TEXT |
BOOLEAN / BOOL | No | activo BOOLEAN |
DATE | No | nacimiento DATE |
DATETIME / TIMESTAMP | No | creado DATETIME |
TIME | No | hora_apertura TIME |
BLOB | No | archivo BLOB |
JSON | No | metadata JSON |
ENUM, SET, UUID y BIGINT no están en la lista validada — se aceptan sin error, pero la columna se guarda como TEXT en la práctica. También se reconocen sinónimos de otros motores: VARCHAR2, NUMBER, TINYINT, MEDIUMINT.Insertar datos
Agrega filas nuevas con INSERT INTO. Puedes especificar columnas explícitas o insertar el resultado de un SELECT.
Actualizar y borrar
UPDATE modifica filas existentes; DELETE las elimina. Ambos aceptan WHERE — sin él, afectan a toda la tabla.
SELECT y alias
Usa AS para renombrar columnas o tablas en el resultado. Los alias de tabla (como u) se usan para calificar columnas en consultas con varias tablas.
| cliente | |
|---|---|
| Ana López | ana@ejemplo.com |
Filtrar con WHERE
Combina condiciones con AND / OR, usa IN, BETWEEN, LIKE e IS NULL / IS NOT NULL.
Ordenar y limitar
ORDER BY (con ASC/DESC) define el orden; LIMIT y OFFSET paginan resultados.
Agrupar datos
GROUP BY agrupa filas para funciones agregadas (COUNT, SUM, AVG, MIN, MAX); HAVING filtra sobre esos grupos (a diferencia de WHERE, que filtra antes de agrupar).
| categoria | total |
|---|---|
| tech | 5 |
JOIN entre tablas
Soporta INNER, LEFT [OUTER], RIGHT [OUTER], FULL [OUTER] y CROSS JOIN.
ON es obligatorio para todos los tipos de JOIN — incluyendo CROSS JOIN (a diferencia del SQL estándar). Si necesitas un cruce sin condición, usa la sintaxis de coma: FROM t1 a, t2 b.Subconsultas
Puedes usar una subconsulta escalar (que devuelve un solo valor) dentro de WHERE.
WHERE funcionan. Usar una subconsulta directamente como tabla en el FROM (por ejemplo FROM (SELECT ...) t) todavía no está soportado.COALESCE (en vez de NVL)
COALESCE(valor1, valor2, ...) devuelve el primer valor que no sea nulo. Es la función estándar ANSI SQL para esto.
NVL no está soportado por JsonSQL (es específico de Oracle). Usa COALESCE, que hace exactamente lo mismo y es estándar.CASE WHEN
Lógica condicional dentro de una consulta — como un if/else por fila.
Funciones de texto
Disponibles: UPPER, LOWER, TRIM, LENGTH, CHAR_LENGTH, SUBSTRING, REPLACE, CONCAT, POSITION.
Funciones numéricas
Disponibles: ROUND, FLOOR, CEIL / CEILING, ABS, MOD, POWER, SQRT, EXP, LN, LOG.
Manejo de fechas
Palabras clave sin paréntesis: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, LOCALTIME, LOCALTIMESTAMP, SYSDATE. Funciones: NOW(), DATE(expr), TIME(expr), DATEDIFF(fecha1, fecha2), DATEADD(fecha, dias), TO_CHAR(fecha, formato), TO_DATE(texto[, formato]), TO_TIMESTAMP(...).
'YYYY-MM-DD' (o 'YYYY-MM-DD HH:MM:SS' para DATETIME) — es el que se interpreta sin ambigüedad.EXTRACT(...) y CAST(...) pasan la validación de sintaxis pero todavía no se evalúan (devuelven null). Evítalos por ahora — usa TO_CHAR/TO_DATE para conversiones de fecha.La tabla DUMMY
Una tabla interna de una sola fila, pensada para SELECT de valores constantes sin necesitar una tabla real — el mismo papel que cumple DUAL en Oracle.
| id | nombre | fecha |
|---|---|---|
| 1 | demo | 2026-07-08 09:15:00 |
UNION / UNION ALL
Combina el resultado de dos SELECT. UNION elimina duplicados; UNION ALL los conserva (y es más rápido).
CTE (WITH)
Una WITH define una consulta temporal con nombre, útil para dividir consultas complejas en pasos legibles.
COMMIT / ROLLBACK
Por defecto, todo INSERT/UPDATE/DELETE queda pendiente de confirmación. Usa COMMIT para hacerlo definitivo, o ROLLBACK para deshacerlo.
COMMIT, ROLLBACK; deja la tabla exactamente como estaba.