QuieroProgramar por Rodri Gonzalez
SQL · Lección 13 de 15

CREATE TABLE y tipos de datos

Hasta ahora usaste tablas que ya existían. Ahora aprendés a crearlas: elegir tipos de datos, definir restricciones (constraints) que protejan la integridad de los datos, y diseñar esquemas relacionales con claves primarias y foráneas.

80–100 min Prerrequisitos: SQL 12
01

Concepto teórico

CREATE TABLE — definir la estructura

CREATE TABLE clientes (
    id          INTEGER PRIMARY KEY,
    nombre      TEXT NOT NULL,
    cuit        TEXT UNIQUE NOT NULL,
    ciudad      TEXT DEFAULT 'Buenos Aires',
    score       INTEGER CHECK (score BETWEEN 0 AND 999),
    saldo       REAL DEFAULT 0,
    activo      INTEGER DEFAULT 1,
    fecha_alta  TEXT DEFAULT (date('now'))
);

Tipos de datos principales

Tipo SQLite Equivalente PostgreSQL Uso Ejemplo
INTEGER INT / BIGINT Números enteros, IDs, conteos 42, -5, 0
REAL FLOAT / NUMERIC Decimales, saldos, tasas 3.14, 150000.50
TEXT VARCHAR / TEXT Strings, nombres, descripciones 'García', 'BsAs'
BLOB BYTEA Datos binarios (raro en análisis) Imágenes, archivos
(no nativo) DATE / TIMESTAMP Fechas (en SQLite se usa TEXT) '2025-03-15'
(no nativo) BOOLEAN Verdadero/Falso (SQLite usa INTEGER 0/1) 0, 1

Constraints — proteger los datos

Constraint Qué hace Ejemplo
PRIMARY KEY Identificador único de cada fila (no nulo, no repetido) id INTEGER PRIMARY KEY
NOT NULL No permite valores nulos nombre TEXT NOT NULL
UNIQUE No permite duplicados cuit TEXT UNIQUE
DEFAULT Valor automático si no se especifica activo INTEGER DEFAULT 1
CHECK Validación de rango/condición CHECK (score BETWEEN 0 AND 999)
FOREIGN KEY Referencia a otra tabla FOREIGN KEY (cliente_id) REFERENCES clientes(id)
PRIMARY KEY vs UNIQUE: una tabla tiene UNA sola Primary Key (típicamente el ID). Pero puede tener muchas columnas UNIQUE (CUIT, email). La PK no acepta NULL; UNIQUE sí acepta UN null (en la mayoría de los motores).

FOREIGN KEY — relaciones entre tablas

CREATE TABLE cuentas (
    id INTEGER PRIMARY KEY,
    cliente_id INTEGER NOT NULL,
    tipo TEXT NOT NULL,
    saldo REAL DEFAULT 0,
    FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);

La FK garantiza que cliente_id en cuentas SIEMPRE corresponda a un id válido en clientes. Si intentás insertar un cliente_id que no existe, da error.

ALTER TABLE y DROP TABLE

-- Agregar columna
ALTER TABLE clientes ADD COLUMN email TEXT;

-- Renombrar tabla
ALTER TABLE clientes RENAME TO clientes_backup;

-- Eliminar tabla (IRREVERSIBLE)
DROP TABLE IF EXISTS clientes_temp;
DROP TABLE es IRREVERSIBLE. Elimina la tabla y TODOS sus datos. IF EXISTS evita error si la tabla no existe. En producción, NUNCA hagas DROP sin backup previo.
En el trabajo: como Data Analyst, rara vez creás tablas en producción (eso lo hace el equipo de Data Engineering). Pero sí creás tablas temporales para análisis, tablas de staging para ETL, y necesitás entender el esquema existente para escribir JOINs correctos. Saber leer un CREATE TABLE te dice todo sobre la estructura de datos.
02

Ejemplos explicados paso a paso

Ejemplo 1: CREATE TABLE con constraints

ejemplo_01_create.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: FOREIGN KEY — relación clientes-cuentas

ejemplo_02_fk.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: Constraints en acción — rechazar datos inválidos

ejemplo_03_constraints.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 4: Diseño multi-tabla con esquema completo

ejemplo_04_esquema.sqlSQL

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: ALTER TABLE y CREATE TABLE AS (tabla desde query)

ejemplo_05_alter.sqlSQL

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Sentencia DDL Acción
CREATE TABLE t (cols) Crear tabla nueva
CREATE TABLE t AS SELECT ... Crear tabla desde query
ALTER TABLE t ADD COLUMN c tipo Agregar columna
ALTER TABLE t RENAME TO nuevo Renombrar tabla
DROP TABLE IF EXISTS t Eliminar tabla (irreversible)
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: CREATE TABLE simple

Creá una tabla productos con id (PK), nombre (NOT NULL), precio (REAL) y stock (INTEGER DEFAULT 0). Insertá 2 productos. Debe incluir Notebook.

ejercicio_01.sqlDebe incluir "Notebook"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: NOT NULL y DEFAULT

Creá tabla clientes donde nombre es NOT NULL y activo tiene DEFAULT 1. Insertá un cliente sin especificar activo. Debe incluir 1.

ejercicio_02.sqlDebe incluir "1" (activo default)

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: UNIQUE constraint

Creá tabla con CUIT UNIQUE. Insertá 2 clientes con CUITs distintos. Debe incluir UNIQUE (en el CREATE).

ejercicio_03.sqlDebe incluir un CUIT

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: CHECK constraint

Creá tabla con CHECK que score esté entre 0 y 999. Insertá un cliente válido. Debe incluir 720.

ejercicio_04.sqlDebe incluir "720"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: FOREIGN KEY

Creá tablas clientes y cuentas con FK. Insertá datos y hacé un JOIN. Debe incluir CA$.

ejercicio_05.sqlDebe incluir "CA$"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: ALTER TABLE

Creá tabla, después agregá columna email con ALTER TABLE. Debe incluir email.

ejercicio_06.sqlDebe incluir "email"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: CREATE TABLE AS SELECT

Creá una tabla resumen a partir de un SELECT agrupado. Debe incluir Buenos Aires.

ejercicio_07.sqlDebe incluir "Buenos Aires"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: Esquema de 3 tablas relacionadas

Diseñá: sucursales → clientes → cuentas con PKs y FKs. Insertá datos y verificá. Debe incluir Centro.

ejercicio_08.sqlDebe incluir "Centro"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: CHECK + tipo restringido con IN

Creá tabla donde tipo solo acepta 'compra', 'venta' o 'transferencia'. Debe incluir compra.

ejercicio_09.sqlDebe incluir "compra"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Diseño completo + poblar + reporte

Diseñá un esquema bancario de 3 tablas con todos los constraints. Poblalo con datos. Generá un reporte con JOINs. Debe incluir ESQUEMA.

ejercicio_10.sqlDebe incluir "ESQUEMA"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

En la siguiente lección (14 · Caso práctico) vas a aplicar TODO lo aprendido en un análisis completo sobre un dataset multi-tabla.