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
| Tipo | Descripción | Ejemplo |
|---|---|---|
INT/BIGINT | Números enteros | 42, 1000000 |
DECIMAL(p,s) | Decimal de punto fijo | DECIMAL(10,2) |
VARCHAR(n) | Cadena de longitud variable | VARCHAR(100) |
TEXT | Texto largo | descripción larga |
BOOLEAN | Verdadero/falso | TRUE, FALSE |
DATE | Solo fecha | 2024-01-15 |
TIMESTAMP | Fecha + hora | 2024-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;