Está en la página 1de 11

Laboratorio de Base de Datos Curso 2008-09

Laboratorios VIII, IX, X, XI, XII SQL


Objetivos

Crear tablas con sentencias SQL Realizar consultas con sentencias SQL Realizar triggers con sentencias SQL Utilizacin de un Sistema Gestor de Bases de Datos (MySQL 5.1)

1. Primera Parte. SQL: creacin


a) Crear con el usuario root una base de datos. b) Crear un usuario concreto asignndole permisos de SELECT y UPDATE en la base de datos creada anteriormente. Asignarle todos los permisos a ese usuario en la base de datos creada anteriormente. Quitarle el permiso DROP al usuario creado. c) Realizar un backup con MySQLAdministrator. Borrar la base de datos creada anteriormente, recuperar el Backup Anterior.

d) Crea las siguientes tablas en la base de datos anterior: -Alumno: DNI como clave primaria y de tipo char (9), nombre char (50), direccin char(200), fechaAltaSistema DATE. -Estudios: Nmero Expediente como clave primaria y de tipo int, nmero crditos finalizados como entero, DNI alumno expediente, como char (9), estudio cursado char(100). e) Realiza los siguientes inserts: Alumnos 1234567F, Manuel Navarro, Madrid, 2008-10-11 7654321F, Roberto Laredo, Toledo, 2008-10-12 Estudios 1, 125, 1234567F, Derecho 2, 220, 1234567F, LADE 3, 60, 7654321F, Derecho f) Borrar el registro 3 de la tabla estudios.

SOLUCIN a) CREATE DATABASE BDAAA; SHOW DATABASES; b) GRANT SELECT, UPDATE ON BDAAA.* TO userXXX IDENTIFIED BY userXXX; C:\mysql -h localhost -u userXXX -p show databases; SHOW GRANTS FOR userXXX; GRANT ALL ON BDAAA.* TO userXXX; SHOW GRANTS FOR userXXX; REVOKE DROP ON BDAAA FROM userXXX; SHOW GRANTS FOR userXXX;

c)

Realizar backup con MysqlAdministrator

DROP DATABASE BBDDAAA; Recuperar backup con MysqlAdministrator d) USE BBDDAAA;

Las siguientes opciones crean las tablas utilizando diferentes sentencias de creacin. Opcin i) CREATE TABLE Alumnos (DNI char(9) NOT NULL PRIMARY KEY, Nombre char(50), direccion char(200), fechaAlta DATE); CREATE TABLE Estudios (NumExpediente INT (10) AUTO_INCREMENT primary key, Creditos INT (10), DNIAlumno char(9), Estudios char(100)); Opcin ii) CREATE TABLE Alumnos (DNI char(9), Nombre char(50), direccion char(200), fechaAlta DATE); ALTER TABLE AlumnosB add PRIMARY KEY (DNI);

Opcin iii) CREATE TABLE Estudios (NumExpediente INT (10) AUTO_INCREMENT primary key, Creditos INT (10) CHECK (Creditos>0), DNIAlumno char(9), Estudios char(100)); Opcin iv) CREATE TABLE Estudios (NumExpediente INT (10) primary key, Creditos INT (10), DNIAlumno char(9) REFERENCES ALUMNOS(DNI), Estudios char(100)); ALTER TABLE Estudios ADD FOREIGN KEY (DNIAlumno) REFERENCES Alumnos (DNI) on update RESTRICT ON DELETE RESTRICT; e) INSERT INTO Alumnos (DNI, Nombre, Direccion, VALUES(1234567F, Manuel Navarro, Madrid, 2008-10-11); FechaAlta)

INSERT INTO Alumnos (DNI, Nombre, Direccion, FechaAlta) VALUES(7654321, Roberto Laredo, Toledo, CURRENT_DATE); INSERT INTO Estudios (Creditos, DNI, Estudios) VALUES (125, 1234567F, Derecho); INSERT INTO Estudios (Creditos, DNI, Estudios) VALUES (220, 1234567F, LADE); INSERT INTO Estudios (Creditos, DNI, Estudios) VALUES (60, 7654321F, Derecho) f) DELETE FROM Estudios where NumExpediente=3;

2. Segunda Parte. SQL: consulta


a) Crea las siguientes tablas: ALUMNOS (idAlumno, Nombre, Apellidos, Telefono, Provincia, idTitulacion); TITULACIONES (idTitulacion, NombreTitulacion, NumCreditos); ASIGNATURAS (idAsignatura, Nombre, idTitulacion); ASIGALUMNO (idAsigAlumno, idAlumno, idAsignatura); b) Realiza 10 inserts en cada tabla. c) Realiza las siguientes consultas: Selecciona todos los campos de la tabla Alumnos de una provincia determinada. Selecciona Nombre, Apellidos y telfono de un alumno determinado. Presenta una lista con los diferentes nombres de alumnos ordenadas por idAlumno. Presenta una lista con todos los campos de alumnos ordenada descendentemente por Nombre e idAlumno. Presenta una lista con los idAlumno que estn cursando alguna asignatura. Presenta una lista con idAlumno, Nombre, Apellidos y Telfono ordenados por Nombre y Apellidos, con una instruccin de ordenacin que identifique el ordinal del campo. Presenta una lista con todos los idAlumno, Nombre y Apellidos excepto los que tengan como valor para el campo idAlumno entre el 3 y el 5. Presenta una lista con todos los alumnos, excepto los que sean de Madrid Presenta una lista con todos los alumnos excepto los llamados Juan y Jorge. Presenta una lista con todos los registros que tengan el campo Telefono a Null. Presenta una lista con todos los registros que tengan el campo Telefono a Null y el campo Provincia no est a Null. Presenta un alista con todos los registros cuyo Nombre empiece con J. Presenta una lista con todos los alumnos cuyo nombre tenga 4 letras. Presenta una lista con idAlumno, el nmero de letras de Nombre y Apellidos de aquellos alumnos que tengan un telfono con ms de 6 cifras.

SOLUCIN c) SELECT * FROM Alumnos where Provincia=Palencia; SELECT Nombre, Apellidos, Telefono FROM ALUMNOS WHERE idAlumno=2; SELECT DISTINCT Nombre FROM ALUMNOS ORDER BY idAlumno; SELECT * FROM ALUMNOS ORDER BY Nombre, idAlumno DESC; SELECT DISTINCT idAlumno from ASIGALUMNO; SELECT idAlumno, Nombre, Apellidos, Telefono from Alumnos ORDER BY 2,3 (=ORDER BY idAlumno, Apellidos); SELECT idAlumno, Nombre, Apellidos from ALUMNOS WHERE idAlumno NOT BETWEEN 3 and 5 ORDER BY idAlumno; SELECT idAlumno, Nombre, Apellidos from ALUMNOS WHERE idAlumno<3 AND idProfesor>5 ORDER BY idAlumno; SELECT idAlumno, Nombre, Apellidos FROM ALUMNOS WHERE Provincia!=Madrid; SELECT * from ALUMNOS where Provincia<>Madrid; SELECT * from ALUMNOS WHERE Nombre NOT IN (Juan, Jorge) ORDER BY idAlumno; SELECT * FROM ALUMNOS WHERE Telefono IS NULL order by idAlumno; SELECT * FROM ALUMNOS WHERE Telefono IS NULL and Provincia IS NOT NULL order by idAlumno; SELECT * FROM ALUMNOS WHERE Nombre LIKE J% order by idAlumno; SELECT * FROM ALUMNOS WHERE Nombre LIKE ____ order by idAlumno; SELECT idAlumno, LENGTH (Nombre) + LENGTH(Apellidos) FROM ALUMNOS WHERE LENGTH (Telefono)>6;

3. Tercera Parte. SQL: consulta


a) Crea las siguientes tablas: PRODUCTOS (idProducto, Nombre, Cantidad, Precio); PEDIDOS (idPedido, idCliente, idProducto, horaPedido, horaPedidoEntregado); b) Realiza 10 inserts en cada tabla. c) Realiza las siguientes consultas: Presenta una lista con los campos de la tabla PRODUCTOS idProducto, Nombre, Cantidad, Precio, Precio+5. Presenta una lista ordenada por idPedido con los campos idCliente, idPedido, horaPedido, horaPedidoEntregado, horaPedidoEntregado horaPedido. Presenta una lista con idProducto, su precio y su precio multiplicado por un 10%. Presenta una lista ordenada por Periodo donde Periodo es horaPedidoEntregado horaPedido con los campos idCliente, idPedido, horaPedido, horaPedidoEntregado, Periodo Presenta el nmero de pedidos. Presenta el nmero de pedidos de productos distintos. Presenta el precio medio de productos. Presenta el precio medio de los productos cuyo precio es menor a 10. Selecciona precio mximo y precio mnimo de la tabla productos. Selecciona mximo perodo de entrega de pedido, mnimo periodo de entrega de pedido y periodo medio de entrega. Al segundo registro de productos cmbiale el nombre por Cebolla y el precio por 3. Incrementa el precio de todos los productos un 20%; Elimina el segundo registro de la tabla productos.

SOLUCIN c) SELECT idProducto, Cantidad, Precio, Precio+5 FROM PRODUCTOS; SELECT idPedido, idCliente, horaPedido, horaPedidoEntregado, horaPedidoEntregado horaPedido FROM PEDIDOS; SELECT idProducto, Precio, Precio*1.10 FROM PRODUCTOS; SELECT idPedido, idCliente, horaPedido, horaPedidoEntregado horaPedido Periodo from PEDIDOS ORDER BY Periodo; SELECT COUNT(*) FROM PEDIDOS; SELECT COUNT (DISTINCT idProducto) FROM PEDIDOS; SELECT AVG (Precio) FROM PRODUCTOS; SELECT AVG (Precio) FROM PRODUCTOS WHERE Precio<10; SELECT MAX(Precio), MIN(Precio) FROM PRODUCTOS; SELECT MAX (horaPedidoEntregado - horaPedido), MIN (horaPedidoEntregado - horaPedido), AVG (horaPedidoEntregado horaPedido) FROM PEDIDOS; UPDATE PRODUCTOS SET Nombre = Cebolla, Precio=3 where idProducto=2; UPDATE PRODUCTOS SET Precio=Precio*1.20; DELETE FROM PRODUCTOS WHERE idProducto=2;

4. Cuarta Parte. SQL: consulta


a) Crea las siguientes tablas: EMPLEADOS (idEmpleado, Nombre, idDepartamneto); DEPARTAMENTOS (idDepartamento, Nombre); b) Realiza 10 inserts en cada tabla. c) Realiza las siguientes consultas: Presenta una nica lista con la siguiente informacin idEmpleado, Nombre, idDepartamento, Nombre (del departamento). Realizar un insert en DEPARTAMENTOS con un departamento que no tenga empleados asignados. Presenta una nica lista con la siguiente informacin idEmpleado, Nombre, idDepartamento, Nombre (del departamento), incluyendo el departamento que no tiene asignados empleados. Crear una tabla EMPLEADOS2 con 2 empleados con un idEmpleado diferente a los que haya en EMPLEADOS. Insertar con una sentencia los empleados de EMPLEADOS2 en EMPLEADOS. Presenta un listado con los empleados del departamento con el mayor identificador de departamento. Presenta un listado con los identificadores de departamento ordenados de mayor a menor por nmero de empleados. Presenta un listado con los identificadores de los tres departamentos con ms empleados. Realizar una consulta que muestre el nombre de los empleados de los 3 departamentos con ms empleados trabajando en ellos. Usando variables de usuario calcula presenta los empleados del departamento con el mnimo y el mximo identificador.

SOLUCIN c) SELECT * FROM EMPLEADOS JOIN DEPARTAMENTOS ON EMPLEADOS.idDepartamento=DEPARTAMENTOS.idDepartamento SELECT * FROM EMPLEADOS RIGHT JOIN DEPARTAMENTOS ON EMPLEADOS.idDepartamento=DEPARTAMENTOS.idDepartamento INSERT INTO EMPLEADOS SELECT * FROM EMPLEADOS2; SELECT * FROM EMPLEADOS WHERE idDepartamento=(SELECT MAX(idDepartamento) FROM DEPARTAMENTOS); SELECT COUNT (idDepartamento) as contador, idDepartamento from EMPLEADOS group by idDepartamento; SELECT COUNT (idDepartamento) as contador, idDepartamento from EMPLEADOS group by idDepartamento order by contador desc limit 3 SELECT * FROM EMPLEADOS WHERE idDepartamento IN (SELECT pt.idDepartamento from (select count(idDepartamento) as contador, idDepartamento from EMPLEADOS group by idDepartamento order by contador desc limit 3) as pt); SELECT @min_id:=MIN(idDepartamento), @max_id:=MAX(idDepartamento) FROM DEPARTAMENTOS; SELECT * from EMPLEADOS where idDepartamento=@min_id or idDepartamento=@max_id;

5. Quinta Parte. SQL: triggers


(ejercicios extrados MySQL Reference Manual) a) Crea las siguientes tablas: CUENTAS (idCuenta, cantidad); b) Realiza 5 inserts en la tabla. c) Realiza las siguientes operaciones: Crea un trigger que antes de un insert sume 2 al campo cantidad. Mostrar los triggers existentes. Borrar el trigger anterior. Crear un trigger que antes de cada insert, sume en una variable de entorno el valor cantidad del nuevo registro aadido (Para comprobarlo realizar un insert comprobarlo y mostrar el valor de la variable de entorno). Crear un trigger que despus de un UPDATE reste dos al valor actualizado (comprobarlo mediante un update). Crear un trigger que cuando se haga un UPDATE de un registro ponga el valor cantidad a 0 si el valor es menor a 0 y lo ponga a 100 si es mayor a 100 ((comprobarlo mediante un update).

SOLUCIN c) CREATE TRIGGER insSumDos BEFORE INSERT ON CUENTAS FOR EACH ROW SET new.Cantidad = new.Cantidad + 2; SHOW TRIGGERS; DROP TRIGGER insSumDos; CREATE TRIGGER insSum BEFORE INSERT ON CUENTAS FOR EACH ROW SET @sum=@sum + NEW.cantidad; SET @sum=0; INSERT INTO CUENTAS VALUES ((1,2), (2,10), (3, 15)); SELECT @sum AS total cantidad; CREATE TRIGGER updCantDos BEFORE UPDATE ON CUENTAS FOR EACH ROW SET new.Cantidad = new.Cantidad 2; DELIMITER // CREATE TRIGGER updCant BEFORE UPDATE ON CUENTAS -> FOR EACH ROW -> BEGIN -> -> -> -> -> IF NEW.cantidad < 0 THEN SET NEW.cantidad = 0; ELSEIF NEW.cantidad > 100 THEN SET NEW.cantidad = 100; END IF; DELIMITER;

-> END;//

También podría gustarte