Sie sind auf Seite 1von 55

Universidad del Valle

Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación

Bases de Datos I

Prof. Mauricio Eduardo Fernández Narváez

Laboratorio # 3: Consultas, Manejo de Datos, Subconsultas,


Funciones Agregadas

Braian Andres Morales Buitron - 1734173


braian.morales@correounivalle.edu.co
Juan David Castro Cardona - 1725767
juan.david.castro@correounivalle.edu.co
Daniel Steven Cardona Cano -1731275
daniel.steven.cardona@correounivalle.edu.co
Guillermo Stiven Murillo Pantoja - 1673103
murillo.guillermo@correounivalle.edu.co

Santiago de Cali, marzo 12 de 2019


Trabajo 1

Pregunta #1

CREATE TABLE TITULO(


codigoTit CHAR(5) PRIMARY KEY,
nombreTit VARCHAR(30),
ISBN CHAR(12),
codEditorial VARCHAR(4) REFERENCES EDITOR (codEditorial),
annoTit NUMERIC(4),
autorTit VARCHAR(25) REFERENCES AUTOR (nombreAutor)
);

Pregunta #2

CREATE TABLE EDITOR(


codEditorial VARCHAR(4) PRIMARY KEY,
nombreEditor VARCHAR(20),
direccionEditor VARCHAR(20),
telefonoEditor VARCHAR(12),
sedeEditor VARCHAR(20)
);
Pregunta #3

CREATE TABLE AUTOR(


nombreAutor VARCHAR(20) PRIMARY KEY,
paisAutor VARCHAR(15)
);

Pregunta #4

CREATE TABLE COPIA(


codigoTit CHAR(5) REFERENCES TITULO (codigoTit),
nroCopia INTEGER,
fechaAdquisicion DATE,
costoVolumen NUMERIC(10),
PRIMARY KEY(codigoTit,nroCopia)
);
Pregunta #5

CREATE TABLE ESTUDIANTE(


codigoEst char(9) PRIMARY KEY,
nombreEst varchar(20),
direccionEst varchar(20),
telefonoEst varchar(12),
planEstudio varchar(40),
ciudadEst varchar(15)
);

SELECT *
FROM ESTUDIANTE;
Pregunta #6

CREATE TABLE PRESTAMO(


codigoTit char(5) REFERENCES TITULO(codigoTit),
nroCopia int,
codigoEst char(9) REFERENCES ESTUDIANTE(codigoEst),
fechaPrestamo date,
fechaDevolucion date,
fechaEntrega date,
PRIMARY KEY (codigoTit,codigoEst,fechaPrestamo,nroCopia)
);

SELECT *
FROM PRESTAMO;

Pregunta #7

CREATE TABLE MULTAS(


codigoEst char(9) REFERENCES ESTUDIANTE(codigoEst),
valorMulta int,
fechaMulta date,
PRIMARY KEY(codigoEst)
);

SELECT *
FROM MULTAS;

Pregunta #8
No olvide crear las llaves primarias para cada tabla !!... Como se hace?

R// Para crear una llave primaria se debe escribir “PRIMARY KEY” al lado del atributo que
funcionará como llave primaria.

Trabajo 2

Pregunta #9

INSERT INTO TITULO VALUES


('L01', 'NT01', '101', 'E5', 2014, 'AT2'),
('L02', 'NT02', '201', 'E1', 2012, 'AT2'),
('L03', 'NT03', '303', 'E6', 2013, 'AT3'),
('L04', 'NT04', '204', 'E2', 2015, 'Ruben Males'),
('L05', 'NT05', '305', 'E3', 1997, 'AT1'),
('L06', 'NT06', '106', 'E6', 2012, 'AT4'),
('L07', 'NT07', '207', 'E5', 2014, 'AT2'),
('L08', 'NT08', '308', 'E5', 2011, 'AT3'),
('L09', 'NT09', '409', 'E2', 1989, 'AT1'),
('L10', 'NT10', '510', 'E1', 2010, 'Ruben Males'),
('L11', 'NT11', '811', 'E3', 2013, 'AT1'),
('L12', 'NT12', '712', 'E3', 2014, 'AT3'),
('L13', 'NT13', '913', 'E1', 1999, 'Ruben Males'),
('L14', 'NT14', '014', 'E2', 2011, 'AT1'),
('L15', 'NT15', '615', 'E4', 2013, 'AT4');

SELECT *
FROM TITULO;

Pregunta #10

INSERT INTO EDITOR VALUES


('E1', 'Editorial 1', 'Av. 1 #100-100', '111111111', 'Bogotá D.C'),
('E2', 'Editorial 2', 'Cl. 2 #2-2', '211111111', 'Cali'),
('E3', 'Editorial 3', 'Diag. 3 #3-3', '411111111', 'Armenia'),
('E4', 'Editorial 4', 'Trv. 4 #4-4', '611111111', 'Barranquilla'),
('E5', 'Editorial 5', 'Cl. 5 #5-5', '222222222', 'Cali'),
('E6', 'Editorial 6', 'Cl. 6#6-6', '233333333', 'Cali');

SELECT *
FROM EDITOR;

Pregunta #11

INSERT INTO AUTOR VALUES


('AT1', 'Brasil'),
('AT2', 'Colombia'),
('AT3', 'Mexico'),
('AT4', 'Brasil'),
('Ruben Males', 'Guyana');

SELECT *
FROM AUTOR;
Pregunta #12

INSERT INTO COPIA VALUES


('L01', 1, '2017-02-04', 50000),
('L01', 2, '2017-02-04', 50000),
('L01', 3, '2017-02-04', 50000),
('L02', 1, '2014-03-26', 26000),
('L03', 1, '2014-03-21', 90000),
('L04', 1, '2015-11-17', 35000),
('L05', 1, '2017-05-14', 24000),
('L05', 2, '2016-04-14', 24000),
('L05', 3, '2016-09-14', 24000),
('L05', 4, '2013-07-27', 45000),
('L05', 5, '2013-07-27', 45000),
('L06', 1, '2014-02-17', 80000),
('L07', 1, '2014-02-17', 76000),
('L08', 1, '2014-02-17', 90000),
('L09', 1, '2015-04-14', 57000),
('L10', 1, '2013-07-27', 125000),
('L11', 1, '2013-07-27', 84000),
('L12', 1, '2016-02-05', 50000),
('L13', 1, '2014-03-21', 81000),
('L13', 2, '2014-03-21', 81000),
('L13', 3, '2014-03-21', 81000),
('L14', 1, '2013-07-27', 35000),
('L15', 1, '2015-12-17', 85000),
('L15', 2, '2015-12-17', 85000);

SELECT *
FROM COPIA;

Pregunta #13

INSERT INTO ESTUDIANTE VALUES


('200400111', 'Luis Chica', 'Cl. 22 #1-01', '3922331', 'Ing. Civil', 'Cali'),
('200400222', 'Pedro Diaz', 'Cl. 19 #2-01', '3922221', 'Administración', 'Popayan'),
('200400333', 'Ana Vela', 'Cr. 17 #3-01 ', '5140120', 'Quimica', 'Cali'),
('200400444', 'Juan Pérez', 'Cl. 15 #4-01', '3922441', 'Quimica', 'Cali'),
('200511111', 'Eva Sión', 'Cr. 12 #5-01', '5140121', 'Quimica', 'Cali'),
('200511222', 'Jorge Gil', 'Cl. 9 #6-01', '3922451', 'Ing. Civil', 'Cali'),
('200511333', 'Rosa Liandó', 'Trv. 22 #7-01 ', '8955701', 'Ing. Civil', 'Cali'),
('200511444', 'Mario Paez', 'Cl. 6 #8-01', '5140122', 'Administración', 'Cali'),
('200511555', 'José Garzón', 'Cr. 3N #9-01', '4477098', 'Quimica', 'Neiva'),
('200622111', 'Raúl Marmol', 'Av. 2#10-01', '4477087', 'Quimica', 'Medellin'),
('200622222', 'Pablo Castro', 'Cl. 6 #11-01', '5140123', 'Quimica', 'Cali'),
('200622333', 'Susy Chavez', 'Trv. 11 #12-01', '8955702', 'Ing. Civil', 'Cali'),
('200622444', 'Martha Evans', 'Av. 5 #13-01', '4477096', 'Ing. Civil', 'Cali'),
('200622555', 'Lida Duque', 'Diag. 16 #14-01', '3922551', 'Ing. Civil', 'Cali'),
('200622666', 'Fabio Cruz', 'Cl. 2 #15-01', '5140124', 'Administración', 'Buga');

SELECT *
FROM ESTUDIANTE;
Pregunta #14

INSERT INTO PRESTAMO VALUES


('L01', 1, '200400333', '2018-01-01', '2018-01-11', '2019-01-01'),
('L02', 1, '200400222', '2015-02-02', '2015-02-12', '2018-02-02'),
('L03', 1, '200400111', '2015-05-17', '2015-05-27', '2016-05-17'),
('L04', 1, '200400444', '2016-03-03', '2016-03-13', '2017-03-03'),
('L05', 2, '200511111', '2017-04-04', '2017-04-14', '2018-04-04'),
('L06', 1, '200511222', '2015-06-05', '2015-06-15', '2018-06-05'),
('L07', 1, '200511333', '2015-07-06', '2015-07-16', '2015-07-14'),
('L08', 1, '200511444', '2015-08-07', '2015-08-17', '2015-08-15'),
('L09', 1, '200511555', '2016-09-08', '2016-09-18', '2016-09-16'),
('L10', 1, '200622111', '2014-10-09', '2014-10-19', '2014-10-17'),
('L11', 1, '200622222', '2014-11-10', '2014-11-20', '2014-11-18'),
('L12', 1, '200622333', '2017-12-11', '2017-12-21', '2017-12-19'),
('L13', 1, '200622444', '2015-01-12', '2015-01-22', '2015-01-20'),
('L14', 1, '200622444', '2014-02-13', '2014-02-23', '2014-02-21'),
('L15', 1, '200622666', '2016-03-14', '2016-03-24', '2016-03-22'),

('L05', 3, '200622444', '2018-04-04', '2018-04-14', '2018-04-12'),


('L09', 1, '200622444', '2017-09-08', '2017-09-18', '2017-09-16'),
('L11', 1, '200622444', '2015-11-10', '2015-11-20', '2015-11-18');

SELECT *
FROM PRESTAMO;
Pregunta #15

INSERT INTO MULTAS VALUES


('200400333', 20000, '2018-01-12'),
('200400222', 30000, '2015-02-13'),
('200400111', 30000, '2015-05-28'),
('200400444', 10000, '2016-03-14'),
('200511111', 10000, '2017-04-15'),
('200511222', 40000, '2015-06-16');

SELECT *
FROM MULTAS;
Pregunta #16
Al escribir la instrucción:

SELECT *
FROM information_schema.columns
WHERE table_name = 'asignacion';

R// Esta vista me devuelve una fila para cada columna a la que puedo acceder como usuario
a la base de datos actual. Esto me permite obtener información sobre todas las columnas
para todas la tablas y vistas dentro de la base de datos.
Pregunta #17
Trate de insertar la siguiente tupla en la tabla TITULO:

INSERT INTO TITULO VALUES


('L04', 'NT04', '204', 'E2', 2005, 'Ruben Males');

A qué se debe el mensaje de error que aparece?

R// Se debe a que estoy ingresando una tupla con los mismo datos que ya se habían
ingresado anteriormente, exceptuando el atributo annoTit que cambia a 2005, pero por lo
tanto duplicando el atributo de la llave primaria que es codigoTit = 'L04'; ya que existe un
atributo con el mismo nombre como llave primaria el programa muestra una restricción de
llave duplicada.
Trabajo 3

Pregunta #18

SELECT *
FROM EDITOR;
Pregunta #19

SELECT *
FROM AUTOR;
Pregunta #20

SELECT nombreEst, direccionEst


FROM ESTUDIANTE
WHERE ciudadEst = 'Cali';
Pregunta #21

SELECT *
FROM TITULO
WHERE autorTit = 'Ruben Males';
Pregunta #22

SELECT *
FROM COPIA
WHERE fechaAdquisicion > '2015-04-01';
Pregunta #23

SELECT nombreTit
FROM TITULO, COPIA
WHERE TITULO.codigoTit = COPIA.codigoTit AND fechaAdquisicion > '2015-04-01';
Pregunta #24

SELECT nombreEst
FROM ESTUDIANTE, MULTAS
WHERE ESTUDIANTE.codigoEst = MULTAS.codigoEst;
Trabajo 3

Pregunta #25

UPDATE EDITOR
SET nombreEditor = 'Nueva Editorial'
WHERE codEditorial = 'E3';
Pregunta #26

UPDATE AUTOR
SET paisAutor = 'Mexico'
WHERE nombreAutor = 'AT4';
Pregunta #27

DELETE FROM COPIA


WHERE codigoTit = 'L10';
Pregunta #28

DELETE FROM ESTUDIANTE


WHERE codigoEst = '200622555';
Trabajo 4

Pregunta #29
Realice una consulta con cada una de las funciones agregadas de SQL:

-Consultar el número de estudiantes que hay por ciudad.

SELECT ciudadEst, COUNT (ciudadEst)


FROM ESTUDIANTE
GROUP BY ciudadEst;
-Consultar el promedio del costo de volumen de las copias de los libros cuyo título sea ‘L05’.

SELECT AVG (costoVolumen)


FROM COPIA
WHERE codigoTit='L05';
-Consultar cual es la suma de la columna valorMulta de la tabla MULTAS.

SELECT SUM (valorMulta)


FROM MULTAS;

-Consultar el codigo, nombre y autor del titulo más reciente de la tabla TITULO.

SELECT codigoTit, nombreTit, autorTit


FROM TITULO
WHERE annoTit=(SELECT MAX (annoTit)
FROM TITULO);
-Consultar toda la información de la multa de menor costo registrada en la tabla MULTAS

SELECT *
FROM MULTAS
WHERE valorMulta=(SELECT MIN (valorMulta)
FROM MULTAS);

Trabajo 5

Pregunta #30

SELECT nombreTit
FROM TITULO
WHERE codEditorial IN
(SELECT codEditorial
FROM EDITOR
WHERE sedeEditor='Cali');
Pregunta #31

SELECT nombreTit
FROM Titulo
WHERE codigoTit IN
(SELECT codigoTit
FROM COPIA
WHERE costoVolumen >
(
SELECT AVG(costoVolumen)
FROM COPIA));
Pregunta #32

SELECT *
FROM ESTUDIANTE
WHERE PlanEstudio='Ing. Civil' AND NOT EXISTS
(SELECT *
FROM TITULO
WHERE autorTit='AT1' AND NOT EXISTS
(SELECT *
FROM PRESTAMO
WHERE
TITULO.codigoTit=PRESTAMO.codigoTit AND
ESTUDIANTE.codigoEst=PRESTAMO.codigoEst));
Pregunta #33

-Primera Consulta sin subconsulta

SELECT nombreTit
FROM TITULO NATURAL JOIN EDITOR
WHERE sedeEditor='Cali';
-Segunda Consulta sin subconsulta

SELECT DISTINCT nombreTit


FROM Titulo NATURAL JOIN COPIA
WHERE costoVolumen > (SELECT AVG(costoVolumen)
FROM COPIA);
-La tercera consulta no es posible hacerse sin subconsultas.

Trabajo 6

Vistas

CREATE VIEW vistaEstudiante AS


SELECT nombreEst, planEstudio, telefonoEst
FROM Estudiante;

-Consultar la información de vistaEstudiante de los estudiantes cuyo plan de estudio sea Ing.
Civil.

SELECT *
FROM vistaEstudiante
WHERE planEstudio='Ing. Civil';
Pregunta #34

CREATE VIEW TituloAutor AS


SELECT TITULO.codigoTit, COPIA.nroCopia, TITULO.autorTit, EDITOR.nombreEditor
FROM TITULO, COPIA, EDITOR
WHERE TITULO.codigoTit=COPIA.codigoTit and TITULO.codEditorial=EDITOR.codEditorial
ORDER BY TITULO.codigoTit, COPIA.nroCopia, TITULO.autorTit, EDITOR.nombreEditor;

SELECT *
FROM TituloAutor;
Pregunta #35

CREATE VIEW VistaEstudiante AS


SELECT codigoEst, nombreEst, planEstudio, ciudadEst
FROM ESTUDIANTE;

SELECT *
FROM VistaEstudiante;
Problema del Curso: Harinera UV

Pregunta #36

CREATE TABLE Almacen(


idAlmacen int PRIMARY KEY,
nombre varchar(30),
ubicación varchar(30)
);

SELECT *
FROM Almacen;
CREATE TABLE Producto(
idProducto int PRIMARY KEY,
nombrePr varchar (30),
materialUtilizado varchar (30)
);

SELECT *
FROM Producto;
CREATE TABLE Jefe(
codJefe int PRIMARY KEY,
nomJefe varchar(30),
edad int
);

SELECT *
FROM Jefe;

CREATE TABLE Planta(


codPlanta int PRIMARY KEY,
nombrePlanta varchar (30),
ubicación varchar (30),
codJefe int REFERENCES Jefe(codJefe)
);

SELECT *
FROM Planta;
CREATE TABLE Empleado(
codEmp int PRIMARY KEY,
cargo varchar(30),
turno varchar(10),
codPlant int REFERENCES Planta(codPlanta),
nombreE varchar(30)
);

SELECT *
FROM Empleado;
CREATE TABLE Materia_prima(
idMateria int PRIMARY KEY,
tipo varchar (30),
cantidadKg int
);

SELECT *
FROM Materia_prima;

CREATE TABLE Procesamiento(


idProcesamiento int PRIMARY KEY,
idPlanta int REFERENCES Planta(codPlanta),
idProducto int REFERENCES Producto(idProducto),
idMateria int REFERENCES Materia_prima (idMateria),
fecha date,
horaInicio varchar(30),
cantidadKg int
);

SELECT *
FROM Procesamiento;
CREATE TABLE Empaque(
idEmpaque int PRIMARY KEY,
material varchar (30),
cantidadUnidad int,
idPlanta int REFERENCES Planta (codPlanta)
);

SELECT *
FROM Empaque;
CREATE TABLE Maquina (
idMaquina int PRIMARY KEY,
nombreM varchar (30),
estado varchar (30),
idPlanta int REFERENCES Planta(codPlanta)
);

SELECT *
FROM Maquina;
CREATE TABLE Mantenimiento(
idMantenimiento int PRIMARY KEY,
tipoM varchar(30),
codEmp int REFERENCES Empleado(codEmp),
fecha date,
hora varchar (30),
coste int,
TiempoDetenida varchar (30),
idMaquina int REFERENCES Maquina(idMaquina)

);

SELECT *
FROM Mantenimiento;
--Insertando datos a las tablas

INSERT INTO Almacen VALUES


(12345,'Angel Dorado','cra7b #86-127'),
(23456,'Los Reyes','cra8c #74-14'),
(34567,'La Dorada','cra26 L1 #121-40');

INSERT INTO Jefe VALUES


(99321,'Sandra Buitron',50),
(11122,'Carolina Perez',47),
(14532,'Jhon Morales',52),
(53456,'Felipe Gomez',48);

INSERT INTO Producto VALUES


(45678,'Salvado','Trigo sucio'),
(56789,'Pan','Trigo limpio'),
(67891,'Harina','Maiz');

INSERT INTO Planta VALUES


(10345,'El Cóndor', 'cra8d #75-15',99321),
(11256,'Balboa','cra7c #88-127',11122),
(11134,'Santiago','cra7d# 86-129',14532),
(25631,'Señora Masa','calle 27 #27-41',53456);

INSERT INTO Empleado VALUES


(99321,'administrador','diurno',10345,'Sandra Buitron'),
(53456,'gerente','nocturno',25631,'Felipe Gomez'),
(14532,'bodeguero','diurno',11134,'Jhon Morales'),
(11122,'mantenimiento','nocturno',11256,'Carolina Perez'),
(76543,'mantenimiento','diurno',25631,'Miguel Fernandez');

INSERT INTO Materia_prima VALUES


(88796,'trigo sucio',50),
(34512,'trigo limpio',60),
(46787,'maiz',50);

INSERT INTO Empaque VALUES


(90111,'plastico',600,10345),
(81345,'carton',1000,11256);

INSERT INTO Procesamiento VALUES


(70133,10345,67891,46787,'2018/02/13','3:16 pm',50),
(11764,11134,56789,34512,'2018/09/02','4:00pm',60),
(33693,25631,45678,88796,'2018/10/13','9:30am',55);

INSERT INTO Maquina VALUES


(12456,'moledora','funcionando',10345),
(30333,'molino de harina','detenida',11256),
(40200,'procesadora de trigo','detenida',25631);

INSERT INTO Mantenimiento VALUES


(54123,'correctivo',11122,'2018/10/14','10:00AM',1000000,'3h',30333),
(67662,'preventivo',76543,'2018/10/15','1:00PM',1000000,'2h',40200);

Pregunta #37

SELECT table_name
FROM information_schema.tables
WHERE table_name='almacen'OR table_name='empaque'
OR table_name='empleado'OR table_name='jefe'
OR table_name='mantenimiento' OR table_name='maquina'
OR table_name='materia_prima' OR table_name='planta'
OR table_name='procesamiento' OR table_name='producto';
Pregunta #38

SELECT *
FROM EMPLEADO
WHERE nombreE='Sandra Buitron'

--Valor antiguo:
--Valor después del update:

UPDATE Empleado
set turno='nocturo'
WHERE nombreE='Sandra Buitron';

SELECT *
FROM Empleado
WHERE nombreE= 'Sandra Buitron';

Pregunta #39

SELECT *
FROM Empleado;

--Valor antiguo:
DELETE FROM Empleado
WHERE nombreE='Felipe Gomez';

SELECT *
FROM Empleado;

--Nuevo valor:
Pregunta #40
Responder a una consulta simple para cada una de las tablas creadas inicialmente en el
punto 36:

1) Mostrar el nombre de todos los empleados.

SELECT nombreE
FROM Empleado;

2) Mostrar la edad de los jefes con sus nombres.

SELECT nomJefe,edad
FROM Jefe;
3) Mostrar el estado de las máquinas con su código.

SELECT estado,idMaquina
FROM Maquina;

4) Mostrar la cantidad de empaques con su código.

SELECT idEmpaque,cantidadUnidad
FROM Empaque;
5) Mostrar el nombre de las plantas.

SELECT nombrePlanta
FROM Planta;

6) Mostrar la fecha de los procesamientos y su código.

SELECT fecha,idProcesamiento
FROM Procesamiento;
7) Mostrar los tipos de mantenimiento.

SELECT tipoM
FROM Mantenimiento;

8) Mostrar la cantidad de materia prima con su código.

SELECT idMateria,cantidadKg
FROM Materia_prima;
9) Mostrar el nombre de los productos.

SELECT nombrePr
FROM Producto;

Das könnte Ihnen auch gefallen