Está en la página 1de 26

CREACION Y VISUALIZACION DE BASE DE DATOS

CREACION DE TABLAS
-- creacion tabla Departamento
CREATE TABLE Departamento (
id_departamento INT(10) PRIMARY KEY,
nombre_departamento VARCHAR(50)
);

-- creacion tabla Ciudad


CREATE TABLE Ciudad (
id_ciudad INT(10) PRIMARY KEY,
id_departamento INT(10),
nombre_ciudad VARCHAR(50),
FOREIGN KEY (id_departamento) REFERENCES departamento(id_departamento)
);

-- creacion tabla Producto


CREATE TABLE Producto (
id_producto INT(10) PRIMARY KEY,
descripcion_producto VARCHAR(100),
valor_producto DOUBLE,
cantidad_producto INT(10)
);

-- creacion tabla Persona


CREATE TABLE Persona (
id_persona INT(10) PRIMARY KEY,
apellido_persona VARCHAR(50),
nombre_persona VARCHAR(50),
id_ciudad INT(10),
direccion_persona VARCHAR(50),
telefono_persona VARCHAR(12),
correo_electronico_persona VARCHAR(50),
genero_persona ENUM('masculino', 'femenino'),
fecha_nacimiento_persona DATE,
fecha_registro_cliente DATE,
fecha_ingreso_empleado DATE,
fecha_salida_empleado DATE,
cargo_empleado VARCHAR(50),
estado_laboral_empleado ENUM('activo', 'jubilado', 'despedido'),
tipo_persona ENUM('empleado', 'cliente'),
FOREIGN KEY (id_ciudad) REFERENCES ciudad(id_ciudad)
);

-- creacion tabla Empleado_Cliente


CREATE TABLE Empleado_Cliente (
id_empleado INT(10),
id_cliente INT(10),
PRIMARY KEY (id_empleado, id_cliente),
FOREIGN KEY (id_empleado) REFERENCES Persona(id_persona),
FOREIGN KEY (id_cliente) REFERENCES Persona(id_persona)
);

-- creacion tabla Factura


CREATE TABLE Factura (
id_factura INT(10) PRIMARY KEY,
id_empleado INT(10),
id_cliente INT(10),
descripccion_falla_mantenimiento VARCHAR(200),
tipo_factura ENUM('venta', 'mantenimiento'),
estado_mantenimiento ENUM('en proceso', 'finalizado'),
FOREIGN KEY (id_empleado) REFERENCES Persona(id_persona),
FOREIGN KEY (id_cliente) REFERENCES Persona(id_persona)
);
ALTER TABLE Factura
ADD COLUMN fecha_factura DATE;

-- creacion tabla Equipo


CREATE TABLE Equipo (
id_equipo INT(10) PRIMARY KEY,
id_factura INT(10),
descripcion_equipo VARCHAR(100),
FOREIGN KEY (id_factura) REFERENCES Factura(id_factura)
);
-- creacion tabla Linea_Producto
CREATE TABLE Linea_Producto (
id_producto INT(10),
id_factura INT(10),
cantidad_producto DOUBLE,
valor_factura DOUBLE,
PRIMARY KEY (id_producto, id_factura),
FOREIGN KEY (id_producto) REFERENCES Producto(id_producto),
FOREIGN KEY (id_factura) REFERENCES Factura(id_factura)
);
El warning que aparece no afecta en la creación de la tabla, simplemente es por la definición de
enteros de la variable INT, esto no afecta la funcionalidad. Para que no salga el warning
simplemente no declarar caracteres a la hora de creación de tabla.
INSERTAR LOS DATOS A LAS TABLA CREADAS
Las 2 del error ya les había hecho el insert

-- DEPARTAMENTO
INSERT INTO Departamento (id_departamento, nombre_departamento)
VALUES
(1, 'Departamento 1'),
(2, 'Departamento 2'),
(3, 'Departamento 3'),
(4, 'Departamento 4');

-- CIUDAD
INSERT INTO Ciudad (id_ciudad, id_departamento, nombre_ciudad)
VALUES
(1, 1, 'Ciudad A'),
(2, 1, 'Ciudad B'),
(3, 2, 'Ciudad C'),
(4, 2, 'Ciudad D');
-- producto
INSERT INTO Producto (id_producto, descripcion_producto, valor_producto, cantidad_producto)
VALUES
(1, 'Producto 1', 100.0, 50),
(2, 'Producto 2', 200.0, 30),
(3, 'Producto 3', 150.0, 40),
(4, 'Producto 4', 120.0, 60);

-- personas
INSERT INTO Persona (id_persona, apellido_persona, nombre_persona, id_ciudad,
direccion_persona, telefono_persona, correo_electronico_persona, genero_persona,
fecha_nacimiento_persona, fecha_registro_cliente, fecha_ingreso_empleado,
fecha_salida_empleado, cargo_empleado, estado_laboral_empleado, tipo_persona)
VALUES
(1, 'Apellido1', 'Nombre1', 1, 'Direccion1', '123456789', 'correo1@fergo.com', 'masculino', '1990-
01-01', '2020-05-10', NULL, NULL, NULL, 'activo', 'empleado'),
(2, 'Apellido2', 'Nombre2', 2, 'Direccion2', '234567890', 'correo2@fergo.com', 'femenino', '1995-
03-15', NULL, '2021-02-20', NULL, 'Cargo2', 'activo', 'empleado'),
(3, 'Apellido3', 'Nombre3', 3, 'Direccion3', '345678901', 'correo3@fergo.com', 'masculino', '1988-
07-20', NULL, NULL, NULL, NULL, 'jubilado', 'empleado'),
(4, 'Apellido4', 'Nombre4', 3, 'Direccion4', '456789012', 'correo4@fergo.com', 'femenino', '1992-
09-25', '2020-08-30', NULL, NULL, NULL, 'activo', 'cliente'),
(5, 'Apellido5', 'Nombre5', 1, 'Direccion5', '567890123', 'correo5@fergo.com', 'masculino', '1993-
12-10', '2021-06-05', NULL, NULL, NULL, 'activo', 'cliente'),
(6, 'Apellido6', 'Nombre6', 2, 'Direccion6', '678901234', 'correo6@fergo.com', 'femenino', '1985-
04-18', NULL, '2021-03-12', NULL, 'Cargo6', 'activo', 'empleado'),
(7, 'Apellido7', 'Nombre7', 4, 'Direccion7', '789012345', 'correo7@fergo.com', 'femenino', '1998-
11-30', NULL, NULL, NULL, NULL, 'activo', 'cliente'),
(8, 'Apellido8', 'Nombre8', 4, 'Direccion8', '890123456', 'correo8@fergo.com', 'masculino', '1980-
08-05', '2020-10-15', NULL, NULL, NULL, 'jubilado', 'empleado'),
(9, 'Apellido9', 'Nombre9', 1, 'Direccion9', '901234567', 'correo9@fergo.com', 'femenino', '1987-
02-28', NULL, '2021-09-08', NULL, 'Cargo9', 'activo', 'empleado'),
(10, 'Apellido10', 'Nombre10', 2, 'Direccion10', '012345678', 'correo10@fergo.com', 'masculino',
'1996-06-22', NULL, NULL, NULL, NULL, 'activo', 'cliente');

-- empelado_cliente
INSERT INTO Empleado_Cliente (id_empleado, id_cliente)
VALUES
(1, 4),
(6, 5),
(8, 7),
(9, 10);

-- factura
INSERT INTO Factura (id_factura, id_empleado, id_cliente, descripccion_falla_mantenimiento,
tipo_factura, estado_mantenimiento)
VALUES
(1, 1, 4, 'Falla 1', 'venta', 'en proceso'),
(2, 6, 5, 'Falla 2', 'mantenimiento', 'finalizado'),
(3, 8, 7, 'Falla 3', 'venta', 'en proceso'),
(4, 9, 10, 'Falla 4', 'mantenimiento', 'finalizado');

-- equipo
INSERT INTO Equipo (id_equipo, id_factura, descripcion_equipo)
VALUES
(1, 1, 'Equipo 1'),
(2, 2, 'Equipo 2'),
(3, 3, 'Equipo 3'),
(4, 4, 'Equipo 4');
-- linea_producto
INSERT INTO Linea_Producto (id_producto, id_factura, cantidad_producto, valor_factura)
VALUES
(1, 1, 5.0, 500.0),
(2, 2, 3.0, 600.0),
(3, 3, 4.0, 450.0),
(4, 4, 2.0, 240.0);

CONSULTA DE DATOS
SELECT * FROM departamento;

SELECT count(*) as num_departamentos FROM departamento;

SELECT * FROM ciudad;

SELECT count(*) as num_ciudad FROM ciudad;

SELECT * FROM persona;


SELECT count(*) as num_personas FROM persona;

SELECT * FROM empleado_cliente;

SELECT count(*) as empleado_cliente FROM empleado_cliente;

SELECT * FROM factura;

SELECT count(*) as num_factura FROM factura;

SELECT * FROM equipo;


SELECT count(*) as num_equipo FROM equipo;

SELECT * FROM producto;

SELECT count(*) as num_producto FROM producto;

SELECT * FROM línea_producto;

SELECT count(*) as linea_producto FROM Linea_Producto;


1. Realizar en la base de datos fergo las siguientes consultas, teniendo en
cuenta que no debe dar como resultado valores NULL:
SELECT nombre_persona, apellido_persona, fecha_registro_cliente
FROM persona
WHERE fecha_registro_cliente = (
SELECT DISTINCT fecha_registro_cliente
FROM persona
ORDER BY fecha_registro_cliente DESC
LIMIT 1, 1
);
SELECT id_producto, cantidad_producto, valor_factura
FROM linea_producto
WHERE id_factura IN (
SELECT id_factura
FROM factura
WHERE estado_mantenimiento = 'finalizado' OR tipo_factura = 'mantenimiento'
);

SELECT id_persona, nombre_persona, apellido_persona


FROM persona p
WHERE NOT EXISTS ( SELECT id_empleado FROM empleado_cliente e WHERE p.id_persona
= e.id_empleado );
);
SELECT id_persona, nombre_persona, apellido_persona, id_ciudad
FROM persona
WHERE id_ciudad NOT IN (2, 5)
ORDER BY nombre_persona, apellido_persona;

SELECT descripcion_producto, valor_producto, cantidad_producto


FROM producto WHERE cantidad_producto >= ALL ( SELECT cantidad_producto
FROM producto WHERE id_producto = 2
) ORDER BY cantidad_producto DESC;
2. Consultas utilizando operaciones relacionales
a. Realizar dos consultas de Selección

Persona mayor a 30 años


SELECT *
FROM persona
WHERE TIMESTAMPDIFF(YEAR, fecha_nacimiento_persona, CURDATE()) > 30;

Facturas en proceso o finalizadas para empleados


SELECT *
FROM factura
WHERE id_empleado IS NOT NULL
AND (estado_mantenimiento = 'en proceso' OR estado_mantenimiento = 'finalizado');
b. Realizar dos consultas de Proyección

Nombres y apellido de personas

SELECT nombre_persona, apellido_persona


FROM persona;

Descripción y valor de un producto

SELECT descripcion_producto, valor_producto


FROM producto;

c. Realizar dos consultas de Combinación

Personas que han realizado compras y sus productos asociados

SELECT p.nombre_persona, p.apellido_persona, pr.descripcion_producto,


lp.cantidad_producto, lp.valor_factura
FROM persona p
JOIN empleado_cliente ec ON p.id_persona = ec.id_cliente
JOIN factura f ON p.id_persona = f.id_cliente
JOIN linea_producto lp ON f.id_factura = lp.id_factura
JOIN producto pr ON lp.id_producto = pr.id_producto;

Productos vendidos por empleados


SELECT pr.descripcion_producto, lp.cantidad_producto, lp.valor_factura,
p.nombre_persona, p.apellido_persona
FROM persona p
JOIN empleado_cliente ec ON p.id_persona = ec.id_empleado
JOIN factura f ON p.id_persona = f.id_empleado
JOIN linea_producto lp ON f.id_factura = lp.id_factura
JOIN producto pr ON lp.id_producto = pr.id_producto;

3. Consultas utilizando operaciones de la teoría de conjuntos


a. Realizar dos consultas de Unión

Unión de ciudades de los primeros dos departamentos

SELECT nombre_ciudad
FROM ciudad
WHERE id_departamento = 1
UNION
SELECT nombre_ciudad
FROM ciudad
WHERE id_departamento = 2;
Unión de empleados y clientes

SELECT id_persona, nombre_persona, apellido_persona


FROM persona
WHERE tipo_persona = 'empleado'
UNION
SELECT id_persona, nombre_persona, apellido_persona
FROM persona
WHERE tipo_persona = 'cliente';

b. Realizar dos consultas de Intersección

Obtiene los nombres de las ciudades de un departamento especifico


SELECT c.nombre_ciudad
FROM Ciudad c
JOIN Departamento d ON c.id_departamento = d.id_departamento
JOIN Producto p ON c.id_ciudad = p.id_producto
WHERE d.id_departamento = 1;

Productos en facturas finalizadas

SELECT pr.descripcion_producto
FROM producto pr
JOIN linea_producto lp ON pr.id_producto = lp.id_producto
JOIN factura f ON lp.id_factura = f.id_factura
WHERE f.estado_mantenimiento = 'finalizado';

c. Realizar dos consultas de Diferencia

Clientes que no son empleados

SELECT id_persona, nombre_persona, apellido_persona


FROM persona
WHERE tipo_persona = 'cliente'
EXCEPT
SELECT id_persona, nombre_persona, apellido_persona
FROM persona
WHERE tipo_persona = 'empleado';
Ciudad que no pertenece al primer departamento

SELECT nombre_ciudad
FROM ciudad
WHERE id_departamento NOT IN (1);

d. Realizar dos consultas de Producto cartesiano

Producto cartesiano entre empleados y productos

SELECT p.id_persona, p.nombre_persona, pr.descripcion_producto


FROM persona p
CROSS JOIN producto pr;
Producto cartesiano entre ciudades y productos

SELECT c.nombre_ciudad, pr.descripcion_producto


FROM ciudad c
CROSS JOIN producto pr;
4. Consultas utilizando operadores derivados

a. SELECT p.nombre_persona, p.apellido_persona, c.nombre_ciudad,


d.nombre_departamento
FROM persona p
INNER JOIN ciudad c ON p.id_ciudad = c.id_ciudad
INNER JOIN departamento d ON c.id_departamento = d.id_departamento
WHERE p.estado_laboral_empleado IN ('activo', 'despedido');

b. SELECT p.descripcion_producto, l.valor_factura, f.fecha_factura


FROM producto p
LEFT JOIN linea_producto l ON p.id_producto = l.id_producto
LEFT JOIN factura f ON f.id_factura = f.id_factura
WHERE f.tipo_factura = 'venta';
c. SELECT p.nombre_persona, p.apellido_persona, f.id_empleado, e.id_cliente,
f.fecha_factura, f.estado_mantenimiento, COUNT(e.id_empleado) as num_clientes
FROM factura f
INNER JOIN empleado_cliente e ON f.id_empleado = e.id_empleado
INNER JOIN persona p ON p.id_persona = e.id_empleado
GROUP BY e.id_empleado, p.nombre_persona, p.apellido_persona, f.id_empleado,
e.id_cliente, f.fecha_factura, f.estado_mantenimiento;

5. Consultas utilizando operadores relacionales adicionales


a. SELECT descripcion_producto, cantidad_producto, valor_producto
FROM producto
WHERE valor_producto = ANY (
SELECT AVG(valor_producto)
FROM producto
GROUP BY id_producto
) ORDER BY descripcion_producto, cantidad_producto;
b. SELECT id_factura, descripccion_falla_mantenimiento, estado_mantenimiento,
COUNT(id_empleado) as tipo_factura
FROM factura
WHERE id_cliente IS NOT NULL
GROUP BY id_factura, descripccion_falla_mantenimiento, estado_mantenimiento,
id_empleado
HAVING id_factura >= 3;

c. SELECT id_equipo, COUNT(id_factura) as headcount


FROM equipo
GROUP BY id_equipo;
d. Crear una consulta con SUM
SELECT SUM(cantidad_producto) as total_cantidad
FROM producto;

e. Crear una consulta con MIN


SELECT MIN(valor_producto) as min_valor
FROM producto;

f. Crear una consulta con MAX


SELECT MAX(valor_producto) as max_valor
FROM producto;

También podría gustarte