Skip to content

Instantly share code, notes, and snippets.

@jure-ve
Last active March 26, 2025 01:08
Show Gist options
  • Select an option

  • Save jure-ve/3a72126de3a9e40eaa18c3f37b67e5bb to your computer and use it in GitHub Desktop.

Select an option

Save jure-ve/3a72126de3a9e40eaa18c3f37b67e5bb to your computer and use it in GitHub Desktop.
Scripts de Práctica para Joins SQL (SQL Server, MariaDB y Postgresql

Scripts de Práctica para Joins SQL

Este gist contiene scripts equivalentes para tres sistemas de gestión de bases de datos diferentes, diseñados para practicar operaciones JOIN entre tablas usados en el articulo El poder de los Joins en SQL: Aprende a Unir tus Datos con Ejemplos Simples

Contenido:

  • SQL Server: script_sqlserver.sql
  • MariaDB: script_mariadb.sql
  • PostgreSQL: script_postgresql.sql

Estructura de la Base de Datos:

Los scripts crean tres tablas relacionadas:

  1. Departamentos - Contiene información de departamentos de una empresa
  2. Empleados - Almacena datos de empleados con referencia a departamentos
  3. DepartamentoUbicacion - Detalla ubicaciones específicas de departamentos

Diferencias entre Versiones:

Característica SQL Server MariaDB PostgreSQL
Auto-incremento IDENTITY(1,1) AUTO_INCREMENT SERIAL
Tipo de dato decimal DECIMAL(10, 2) DECIMAL(10, 2) DECIMAL(10, 2)
Sintaxis FOREIGN KEY Compatible Compatible Compatible
Manejo de NULLs Compatible Compatible Compatible

Datos de Ejemplo:

Cada script inserta:

  • 4 departamentos (uno sin ubicación)
  • 5 empleados (uno sin departamento)
  • 3 ubicaciones de departamento

Prácticas Recomendadas:

  1. INNER JOIN: Relacionar empleados con sus departamentos
  2. LEFT JOIN: Mostrar todos los empleados incluyendo los sin departamento
  3. RIGHT JOIN: Mostrar todos los departamentos incluyendo los sin empleados
  4. FULL JOIN: Combinación completa de empleados y departamentos
  5. JOIN múltiples: Combinar las tres tablas en una consulta

Cómo Usar:

  1. Ejecutar el script correspondiente a tu SGBD
  2. Verificar las tablas creadas con los SELECT finales
  3. Practicar consultas con diferentes tipos de JOIN

Notas Adicionales:

  • Todos los scripts producen la misma estructura y datos
  • Las diferencias son solo sintácticas para adaptarse a cada SGBD
  • Ideal para comparar pequeñas diferencias entre sistemas de bases de datos

Licencia:

Este material está disponible para uso libre con fines educativos.

-- Script para MariaDB: Creación de tablas y datos de ejemplo para practicar Joins
-- Autor: Jure | Fecha: Marzo 2025
-- 1. Crear la tabla Departamentos
CREATE TABLE Departamentos (
Id INT PRIMARY KEY AUTO_INCREMENT, -- Clave primaria autoincremental
NombreDepartamento VARCHAR(50) NOT NULL,
Ubicacion VARCHAR(50)
);
-- 2. Crear la tabla Empleados
CREATE TABLE Empleados (
Id INT PRIMARY KEY AUTO_INCREMENT, -- Clave primaria autoincremental
Nombre VARCHAR(50) NOT NULL,
Apellido VARCHAR(50) NOT NULL,
Salario DECIMAL(10, 2), -- Salario con 2 decimales
DepartamentoId INT, -- Clave foránea a Departamentos
FOREIGN KEY (DepartamentoId) REFERENCES Departamentos(Id)
);
-- 3. Crear la tabla DepartamentoUbicacion
CREATE TABLE DepartamentoUbicacion (
DepartamentoId INT, -- Clave foránea a Departamentos
Ubicacion VARCHAR(50),
FOREIGN KEY (DepartamentoId) REFERENCES Departamentos(Id)
);
-- 4. Insertar datos de ejemplo en Departamentos
INSERT INTO Departamentos (NombreDepartamento, Ubicacion)
VALUES
('Ventas', 'Edificio A'),
('Marketing', 'Edificio B'),
('TI', 'Edificio C'),
('Recursos Humanos', NULL); -- Departamento sin ubicación específica
-- 5. Insertar datos de ejemplo en Empleados
INSERT INTO Empleados (Nombre, Apellido, Salario, DepartamentoId)
VALUES
('Ana', 'Gómez', 35000.00, 1), -- Ventas
('Luis', 'Pérez', 40000.00, 2), -- Marketing
('María', 'López', 45000.00, 3), -- TI
('Carlos', 'Ruiz', 30000.00, NULL), -- Sin departamento
('Sofía', 'Martínez', 38000.00, 2); -- Marketing
-- 6. Insertar datos de ejemplo en DepartamentoUbicacion
INSERT INTO DepartamentoUbicacion (DepartamentoId, Ubicacion)
VALUES
(1, 'Edificio A - Piso 1'), -- Ventas
(2, 'Edificio B - Piso 2'), -- Marketing
(3, 'Edificio C - Piso 3'); -- TI
-- 7. Verificar los datos insertados (opcional)
SELECT * FROM Departamentos;
SELECT * FROM Empleados;
SELECT * FROM DepartamentoUbicacion;
-- Script para PostgreSQL: Creación de tablas y datos de ejemplo para practicar Joins
-- Autor: Jure] | Fecha: Marzo 2025
-- 1. Crear la tabla Departamentos
CREATE TABLE Departamentos (
Id SERIAL PRIMARY KEY, -- Clave primaria autoincremental (SERIAL en PostgreSQL)
NombreDepartamento VARCHAR(50) NOT NULL,
Ubicacion VARCHAR(50)
);
-- 2. Crear la tabla Empleados
CREATE TABLE Empleados (
Id SERIAL PRIMARY KEY, -- Clave primaria autoincremental
Nombre VARCHAR(50) NOT NULL,
Apellido VARCHAR(50) NOT NULL,
Salario DECIMAL(10, 2), -- Salario con 2 decimales
DepartamentoId INT, -- Clave foránea a Departamentos
FOREIGN KEY (DepartamentoId) REFERENCES Departamentos(Id)
);
-- 3. Crear la tabla DepartamentoUbicacion
CREATE TABLE DepartamentoUbicacion (
DepartamentoId INT, -- Clave foránea a Departamentos
Ubicacion VARCHAR(50),
FOREIGN KEY (DepartamentoId) REFERENCES Departamentos(Id)
);
-- 4. Insertar datos de ejemplo en Departamentos
INSERT INTO Departamentos (NombreDepartamento, Ubicacion)
VALUES
('Ventas', 'Edificio A'),
('Marketing', 'Edificio B'),
('TI', 'Edificio C'),
('Recursos Humanos', NULL); -- Departamento sin ubicación específica;
-- 5. Insertar datos de ejemplo en Empleados
-- Necesitamos usar RETURNING para obtener los IDs generados o usar valores explícitos
INSERT INTO Empleados (Nombre, Apellido, Salario, DepartamentoId)
VALUES
('Ana', 'Gómez', 35000.00, 1), -- Ventas
('Luis', 'Pérez', 40000.00, 2), -- Marketing
('María', 'López', 45000.00, 3), -- TI
('Carlos', 'Ruiz', 30000.00, NULL), -- Sin departamento
('Sofía', 'Martínez', 38000.00, 2); -- Marketing;
-- 6. Insertar datos de ejemplo en DepartamentoUbicacion
INSERT INTO DepartamentoUbicacion (DepartamentoId, Ubicacion)
VALUES
(1, 'Edificio A - Piso 1'), -- Ventas
(2, 'Edificio B - Piso 2'), -- Marketing
(3, 'Edificio C - Piso 3'); -- TI;
-- 7. Verificar los datos insertados (opcional)
SELECT * FROM Departamentos;
SELECT * FROM Empleados;
SELECT * FROM DepartamentoUbicacion;
-- Script para SQL Server: Creación de tablas y datos de ejemplo para practicar Joins
-- Autor: Jure | Fecha: Marzo 2025
-- 1. Crear la tabla Departamentos
CREATE TABLE Departamentos (
Id INT PRIMARY KEY IDENTITY(1,1), -- Clave primaria autoincremental
NombreDepartamento VARCHAR(50) NOT NULL,
Ubicacion VARCHAR(50)
);
-- 2. Crear la tabla Empleados
CREATE TABLE Empleados (
Id INT PRIMARY KEY IDENTITY(1,1), -- Clave primaria autoincremental
Nombre VARCHAR(50) NOT NULL,
Apellido VARCHAR(50) NOT NULL,
Salario DECIMAL(10, 2), -- Salario con 2 decimales
DepartamentoId INT, -- Clave foránea a Departamentos
FOREIGN KEY (DepartamentoId) REFERENCES Departamentos(Id)
);
-- 3. Crear la tabla DepartamentoUbicacion
CREATE TABLE DepartamentoUbicacion (
DepartamentoId INT, -- Clave foránea a Departamentos
Ubicacion VARCHAR(50),
FOREIGN KEY (DepartamentoId) REFERENCES Departamentos(Id)
);
-- 4. Insertar datos de ejemplo en Departamentos
INSERT INTO Departamentos (NombreDepartamento, Ubicacion)
VALUES
('Ventas', 'Edificio A'),
('Marketing', 'Edificio B'),
('TI', 'Edificio C'),
('Recursos Humanos', NULL); -- Departamento sin ubicación específica
-- 5. Insertar datos de ejemplo en Empleados
INSERT INTO Empleados (Nombre, Apellido, Salario, DepartamentoId)
VALUES
('Ana', 'Gómez', 35000.00, 1), -- Ventas
('Luis', 'Pérez', 40000.00, 2), -- Marketing
('María', 'López', 45000.00, 3), -- TI
('Carlos', 'Ruiz', 30000.00, NULL), -- Sin departamento
('Sofía', 'Martínez', 38000.00, 2); -- Marketing
-- 6. Insertar datos de ejemplo en DepartamentoUbicacion
INSERT INTO DepartamentoUbicacion (DepartamentoId, Ubicacion)
VALUES
(1, 'Edificio A - Piso 1'), -- Ventas
(2, 'Edificio B - Piso 2'), -- Marketing
(3, 'Edificio C - Piso 3'); -- TI
-- 7. Verificar los datos insertados (opcional)
SELECT * FROM Departamentos;
SELECT * FROM Empleados;
SELECT * FROM DepartamentoUbicacion;
-- ¡Listo! Ahora puedes probar los Joins del artículo con estas tablas.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment