Volver a SQL Básico

Introducción a SQL

SQL (Structured Query Language) es el lenguaje estándar para gestionar y consultar bases de datos relacionales.

¿Qué es una Base de Datos Relacional?

Una base de datos relacional almacena datos en tablas (relaciones) con filas y columnas. Las tablas se vinculan mediante relaciones usando claves foráneas.

┌─────────────────────┐       ┌──────────────────────┐
│ clientes            │       │ pedidos              │
├─────────────────────┤       ├──────────────────────┤
│ id    INT (PK)      │──┐    │ id         INT (PK)  │
│ nombre VARCHAR(100) │  └───▶│ cliente_id INT (FK)  │
│ email  VARCHAR(100) │       │ total      DECIMAL   │
└─────────────────────┘       │ creado_en  DATETIME  │
                              └──────────────────────┘

Tipos de Datos Básicos

TipoDescripciónEjemplo
INT/BIGINTNúmeros enteros42, 1000000
DECIMAL(p,s)Decimal de punto fijoDECIMAL(10,2)
VARCHAR(n)Cadena de longitud variableVARCHAR(100)
TEXTTexto largodescripción larga
BOOLEANVerdadero/falsoTRUE, FALSE
DATESolo fecha2024-01-15
TIMESTAMPFecha + hora2024-01-15 10:30

Crear Tablas

-- Crear una base de datos CREATE DATABASE tienda; USE tienda; -- Crear una tabla CREATE TABLE clientes ( id INT PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(50) NOT NULL, apellido VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, telefono VARCHAR(20), creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE productos ( id INT PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(100) NOT NULL, descripcion TEXT, precio DECIMAL(10, 2) NOT NULL CHECK (precio > 0), stock INT NOT NULL DEFAULT 0, categoria VARCHAR(50) ); CREATE TABLE pedidos ( id INT PRIMARY KEY AUTO_INCREMENT, cliente_id INT NOT NULL, total DECIMAL(10, 2) NOT NULL, estado VARCHAR(20) NOT NULL DEFAULT 'pendiente', creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (cliente_id) REFERENCES clientes(id) );

Insertar Datos

-- Insertar una fila INSERT INTO clientes (nombre, apellido, email) VALUES ('Ana', 'García', '[email protected]'); -- Insertar múltiples filas INSERT INTO productos (nombre, precio, stock, categoria) VALUES ('Laptop', 999.99, 50, 'Electrónica'), ('Teléfono', 699.99, 100, 'Electrónica'), ('Auriculares', 79.99, 200, 'Electrónica'), ('Camisa', 29.99, 300, 'Ropa');

SELECT Básico

-- Seleccionar todas las columnas SELECT * FROM productos; -- Seleccionar columnas específicas SELECT nombre, precio, stock FROM productos; -- Con alias SELECT nombre AS nombre_producto, precio AS precio_unitario, precio * 1.1 AS precio_con_iva FROM productos; -- Valores distintos SELECT DISTINCT categoria FROM productos;

Cláusula WHERE

-- Igualdad SELECT * FROM productos WHERE categoria = 'Electrónica'; -- Operadores de comparación SELECT * FROM productos WHERE precio > 100; SELECT * FROM productos WHERE stock <= 50; -- Operadores lógicos SELECT * FROM productos WHERE categoria = 'Electrónica' AND precio < 800; SELECT * FROM productos WHERE stock = 0 OR stock IS NULL; -- BETWEEN (inclusivo) SELECT * FROM productos WHERE precio BETWEEN 50 AND 500; -- IN (coincide con cualquier valor de la lista) SELECT * FROM productos WHERE categoria IN ('Electrónica', 'Ropa'); -- LIKE (coincidencia de patrones) SELECT * FROM clientes WHERE email LIKE '%@gmail.com'; SELECT * FROM productos WHERE nombre LIKE 'L%'; -- Verificación de NULL SELECT * FROM clientes WHERE telefono IS NULL; SELECT * FROM clientes WHERE telefono IS NOT NULL;

Ordenamiento

-- Ascendente (predeterminado) SELECT * FROM productos ORDER BY precio; -- Descendente SELECT * FROM productos ORDER BY precio DESC; -- Varias columnas SELECT * FROM clientes ORDER BY apellido ASC, nombre ASC;

Limitar Resultados

-- Primeras 10 filas SELECT * FROM productos LIMIT 10; -- Paginación: filas 21-30 SELECT * FROM productos LIMIT 10 OFFSET 20;

Modificar Datos

-- Actualizar UPDATE productos SET precio = 899.99, stock = 45 WHERE id = 1; -- Actualizar múltiples filas UPDATE productos SET precio = precio * 0.9 -- 10% de descuento WHERE categoria = 'Electrónica'; -- Eliminar filas específicas DELETE FROM productos WHERE stock = 0; -- Eliminar todas las filas (mantiene la estructura) DELETE FROM productos; -- Eliminación rápida (DDL, no se puede revertir) TRUNCATE TABLE productos;