Skip to content

1. Introducción a SQL

SQL (Structured Query Language) es un lenguaje estándar para almacenar, manipular y recuperar datos en bases de datos relacionales. A diferencia de otros lenguajes de programación, SQL es un lenguaje declarativo, lo que significa que especificas qué datos quieres obtener en lugar de cómo obtenerlos.

  • Estandarizado: SQL es un estándar ANSI/ISO, aunque cada motor de base de datos puede tener sus propias extensiones.
  • Declarativo: Describes qué datos quieres, no cómo obtenerlos.
  • No sensible a mayúsculas/minúsculas para palabras clave (SELECT = select), pero puede serlo para nombres de objetos según la configuración.
  • Versátil: Permite definir, consultar, manipular y controlar datos.
  • 1970: Edgar F. Codd propone el modelo relacional.
  • 1974: IBM desarrolla SEQUEL (Structured English Query Language).
  • 1979: Oracle lanza la primera implementación comercial de SQL.
  • 1986: ANSI publica el primer estándar SQL.
  • 1992: SQL-92, una revisión importante del estándar.
  • 1999: SQL:1999 introduce características orientadas a objetos.
  • 2003-2016: Actualizaciones posteriores (SQL:2003, SQL:2008, SQL:2011, SQL:2016) añaden XML, funciones analíticas, expresiones regulares, etc.

SQL se divide en varios sublenguajes:

Data Definition Language: Define la estructura de la base de datos.

Comandos principales: CREATE, ALTER, DROP, TRUNCATE

Ejemplo:

CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(50),
salario DECIMAL(10,2)
);

1.2. Diferencias entre MySQL, Oracle y otros motores

Section titled “1.2. Diferencias entre MySQL, Oracle y otros motores”
  • Licencia: Código abierto (Community Edition) y comercial (Enterprise Edition)
  • Rendimiento: Excelente para aplicaciones web y operaciones de lectura
  • Sintaxis: Más simple y flexible
  • Plataformas: Multiplataforma (Windows, Linux, macOS)
  • Características distintivas: Fácil de usar, ideal para aplicaciones web
  • Limitaciones: Menos funcionalidades avanzadas que Oracle
  • Casos de uso: Aplicaciones web, blogs, CMS, e-commerce
CaracterísticaMySQLOracleSQL ServerPostgreSQL
Tipos de datos JSONSí (5.7+)
Procedimientos almacenadosSí (PL/SQL)Sí (T-SQL)Sí (PL/pgSQL)
ParticionamientoSí (avanzado)
ReplicaciónMaestro-esclavoAvanzadaAvanzadaLógica/Streaming
Índices espacialesSí (PostGIS)
Vistas materializadasNo (solo vistas)
Soporte para XMLLimitadoCompletoCompleto

1.3. Instalación y configuración (MySQL Workbench, Oracle SQL Developer)

Section titled “1.3. Instalación y configuración (MySQL Workbench, Oracle SQL Developer)”
  1. Descarga MySQL Workbench y MySQL Server desde mysql.com
  2. Ejecuta el instalador de MySQL Server
    • Selecciona “Developer Default” para una instalación típica
    • Configura la contraseña del usuario root
    • Completa la instalación con las opciones predeterminadas
  3. Instala MySQL Workbench
  4. Abre MySQL Workbench y conecta con tu servidor local
# Configuración básica de rendimiento para MySQL (my.ini o my.cnf)
[mysqld]
# Tamaño del buffer de consultas
query_cache_size = 64M
# Tamaño del buffer de InnoDB
innodb_buffer_pool_size = 1G
# Tamaño máximo de conexiones
max_connections = 200
# Conjunto de caracteres por defecto
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

1.4. Conexión y ejecución de consultas en ambos motores

Section titled “1.4. Conexión y ejecución de consultas en ambos motores”
-- Desde línea de comandos
mysql -u root -p
-- Desde código (ejemplo en PHP)
$conexion = new mysqli('localhost', 'usuario', 'contraseña', 'basedatos');
-- Desde código (ejemplo en Python con pymysql)
import pymysql
conn = pymysql.connect(
host='localhost',
user='usuario',
password='contraseña',
database='basedatos'
)
-- Desde línea de comandos (SQLPlus)
sqlplus usuario/contraseña@//localhost:1521/XE
-- Desde código (ejemplo en Java con JDBC)
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE", "usuario", "contraseña");
-- Desde código (ejemplo en Python con cx_Oracle)
import cx_Oracle
conn = cx_Oracle.connect(
"usuario/contraseña@localhost:1521/XE"
)
-- Crear una base de datos
CREATE DATABASE miprimerabd;
-- Usar la base de datos
USE miprimerabd;
-- Crear una tabla
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
fecha_registro DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Insertar datos
INSERT INTO usuarios (nombre, email) VALUES ('Ana López', 'ana@ejemplo.com');
INSERT INTO usuarios (nombre, email) VALUES ('Carlos Gómez', 'carlos@ejemplo.com');
-- Consultar datos
SELECT * FROM usuarios;
-- Consulta con filtro
SELECT nombre, email FROM usuarios WHERE nombre LIKE 'Ana%';
OperaciónMySQLOracle
Limitar resultadosLIMIT 10FETCH FIRST 10 ROWS ONLY
PaginaciónLIMIT 10 OFFSET 20OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY
Fecha actualNOW(), CURRENT_TIMESTAMPSYSDATE, SYSTIMESTAMP
ConcatenaciónCONCAT(a, b) o `a
SubcadenaSUBSTRING(str, pos, len)SUBSTR(str, pos, len)
AutoincrementoAUTO_INCREMENTGENERATED ALWAYS AS IDENTITY
Formato de fechaDATE_FORMAT(fecha, '%Y-%m-%d')TO_CHAR(fecha, 'YYYY-MM-DD')
🐝