Pii Ractica Calificada de Sbd

5
PRACTICA CALIFICADA DE ORGANIZACIÓN Y ADMINISTRACION DE BASES DE DATOS Código Apellidos y Nombres Fecha Nota 01020086 5d Romero Chalco Juan Carlos 19/03/2 015 Crear la BD dboFerreteria y hacer correr el siguiente script SQL. (Debe modificar las tablas que requieran actualizaciones en cascada) CREATE DATABASE BDdboFerreteria GO USE BDdboFerreteria GO CREATE TABLE cliente ( CodCliente CHAR(4) PRIMARY KEY, nomCliente CHAR(30), fechaNacimientoCliente DATETIME, ) CREATE TABLE producto ( codProducto CHAR(4) PRIMARY KEY, nomProducto CHAR(40), descripcionProducto CHAR(40), precioProducto MONEY, stock int not null ) CREATE TABLE recibo ( numRecibo CHAR(5) PRIMARY KEY, fechaRecibo DATETIME, CodCliente CHAR(4), FOREIGN KEY (CodCliente) REFERENCES cliente ON UPDATE CASCADE, ) CREATE TABLE lineaDeRecibo ( numLineaDeRecibo INT PRIMARY KEY, cantidad DECIMAL(10,2), codProducto CHAR(4), numRecibo CHAR(5), FOREIGN KEY (codProducto) REFERENCES producto, FOREIGN KEY (numRecibo) REFERENCES recibo ON UPDATE CASCADE ) --INSERTAR REGISTROS. INSERT INTO cliente VALUES('0001','PÉREZ, JOSÉ','10/04/1960') INSERT INTO cliente VALUES('0002','TORRES, RINA','25/12/1963')

description

practica base de datos

Transcript of Pii Ractica Calificada de Sbd

Page 1: Pii Ractica Calificada de Sbd

PRACTICA CALIFICADA DE ORGANIZACIÓN Y ADMINISTRACION DE BASES DE DATOS

Código Apellidos y Nombres Fecha Nota010200865d Romero Chalco Juan Carlos 19/03/2015

Crear la BD dboFerreteria y hacer correr el siguiente script SQL. (Debe modificar las tablas que requieran actualizaciones en cascada)CREATE DATABASE BDdboFerreteria GOUSE BDdboFerreteriaGOCREATE TABLE cliente(CodCliente CHAR(4) PRIMARY KEY,nomCliente CHAR(30),fechaNacimientoCliente DATETIME,)CREATE TABLE producto(codProducto CHAR(4) PRIMARY KEY,nomProducto CHAR(40),descripcionProducto CHAR(40),precioProducto MONEY,stock int not null)

CREATE TABLE recibo(numRecibo CHAR(5) PRIMARY KEY,fechaRecibo DATETIME,CodCliente CHAR(4),FOREIGN KEY (CodCliente) REFERENCES clienteON UPDATE CASCADE,)CREATE TABLE lineaDeRecibo(numLineaDeRecibo INT PRIMARY KEY,cantidad DECIMAL(10,2),codProducto CHAR(4),numRecibo CHAR(5),FOREIGN KEY (codProducto) REFERENCES producto,FOREIGN KEY (numRecibo) REFERENCES reciboON UPDATE CASCADE)

--INSERTAR REGISTROS.

INSERT INTO clienteVALUES('0001','PÉREZ, JOSÉ','10/04/1960')INSERT INTO clienteVALUES('0002','TORRES, RINA','25/12/1963')INSERT INTO clienteVALUES('0003','SALAS, ROSA','10/04/1959')INSERT INTO clienteVALUES('0004','GAMARRA, OLIVER','08/12/1982')INSERT INTO clienteVALUES('0005','ROMERO, ALICIA','24/12/1981')INSERT INTO clienteVALUES('0006','ROJAS, JOAQUíN','26/11/1980')INSERT INTO clienteVALUES('0007','RICALDE, REBECA','04/04/1985')

Page 2: Pii Ractica Calificada de Sbd

INSERT INTO productoVALUES('P001','FIERRO 3/4','BARRA',20.00,100) INSERT INTO productoVALUES('P002','FIERRO 1/2','BARRA',12.00,500) INSERT INTO productoVALUES('P003','LAVATORIO TREBOL CLASICO BLANCO','UNIDAD',200.00,20) INSERT INTO productoVALUES('P004','CERROJO FORTE TRIPLE SEGURO','UNIDAD',54.00,50) INSERT INTO productoVALUES('P005','CERROJO FORTE SIMPLE','UNIDAD',38.50,150) INSERT INTO productoVALUES('P006','MAYOLICA CELIMA 20X15 BLANCA','METRO CUADRADO',20.00,45) INSERT INTO productoVALUES('P007','MAYOLICA CELIMA 35X20 COLOR','METRO CUADRADO',30.00,60)INSERT INTO productoVALUES('P008','BAÑERA LOZA COLOR','UNIDAD',500.00,10) INSERT INTO productoVALUES('P009','BAÑERA LOZA BLANCA','UNIDAD',300.00,15)INSERT INTO productoVALUES('P010','BAÑERA LOZA BLANCA MARCA XYZ','UNIDAD',300.00,17)

INSERT INTO reciboVALUES('R0001','25/07/2002','0001')INSERT INTO reciboVALUES('R0002','26/07/2002','0001')INSERT INTO reciboVALUES('R0003','26/07/2002','0002')INSERT INTO reciboVALUES('R0004','27/07/2002','0003')INSERT INTO reciboVALUES('R0005','27/07/2002','0004')INSERT INTO reciboVALUES('R0006','27/07/2002','0005')INSERT INTO reciboVALUES('R0007','28/07/2002','0001')

INSERT INTO lineaDeReciboVALUES(1,5,'P001','R0001')INSERT INTO lineaDeReciboVALUES(2,10,'P002','R0001')INSERT INTO lineaDeReciboVALUES(3,1,'P003','R0002')INSERT INTO lineaDeReciboVALUES(4,12,'P002','R0003')INSERT INTO lineaDeReciboVALUES(5,1,'P003','R0003')INSERT INTO lineaDeReciboVALUES(6,7,'P006','R0004')INSERT INTO lineaDeReciboVALUES(7,1,'P005','R0005')INSERT INTO lineaDeReciboVALUES(8,1,'P004','R0006')INSERT INTO lineaDeReciboVALUES(9,1,'P003','R0007')

Page 3: Pii Ractica Calificada de Sbd

--2.1.Desarrollar una vista que muestre el nombre del cliente, numero recibo, --la fecha del recibo, el código del producto, el nombre del producto, descripción del producto,-- precio del producto, stock y la cantidad vendida del producto. 2p

GOCREATE VIEW REPORTE_CLIENTEASSELECT c.nomCliente, r.numRecibo, r.fechaRecibo, l.codProducto, p.descripcionProducto, p.precioProducto, p.stock, l.cantidad

FROM cliente c INNER JOIN recibo r on c.CodCliente = r.CodClienteINNER JOIN lineaDeRecibo l on l.numRecibo = r.numReciboINNER JOIN producto p on l.codProducto = p.codProducto

GOSELECT * FROM REPORTE_CLIENTE;--2.2.Por medio de la vista muestre la total pagado por recibo. 3pGOCREATE VIEW TOTAL_RECIBOASSELECT l.numRecibo ,SUM(l.cantidad) AS Total

FROM lineaDeRecibo l GROUP BY l.numRecibo

GOSELECT * FROM TOTAL_RECIBO;--2.3.Por medio de la vista ingresar registros a la tabla Producto. 2pCREATE VIEW ADD_PRODUCTOASSELECT codProducto, nomProducto, descripcionProducto, precioProducto, stock

FROM productoGOINSERT INTO ADD_PRODUCTO (codProducto, nomProducto, descripcionProducto, precioProducto, stock )

VALUES ('P025','PRODUCTO1','UNIDAD',500.00,7)GOSELECT * FROM producto;--2.4. Por medio de la vista mostrar a los nombres de los clientes que compraron más de una vez en la Tienda. 3pGOCREATE VIEW COMPRA_MAS_UNOASSELECT COUNT(r.numRecibo) AS Compras, r.CodCliente AS Cliente FROM recibo r

GROUP BY r.CodClienteHAVING (COUNT(r.numRecibo) > 1)

GOSELECT * FROM COMPRA_MAS_UNOGO--2.5. Crear una función que permita determinar la edad de los clientes, al momento de hacer una compra. 3pCREATE FUNCTION FUNCION_EDAD(@fecha VARCHAR(20)) RETURNS VARCHAR(20) AS BEGIN DECLARE @nombre varchar(20) SET @nombre= 2015-datename(year,@fecha) RETURN @nombre; END; ----

Page 4: Pii Ractica Calificada de Sbd

SELECT dbo.FUNCION_EDAD(p.fechaRecibo)AS EDAD_CLIENTES,c.nomCliente AS NOMBRE_CLIENTEFROM cliente c INNER JOIN recibo p ON c.CodCliente=p.CodCliente;--2.6. Desarrollar una consulta que me permita mostrar los datos del cliente, su edad actual y la edad que tenía cuando ---realizo una compra por medio de la función. 2pSELECT c.nomCliente,2015-year(c.fechaNacimientoCliente)AS EDAD_ACTUAL,dbo.FUNCION_EDAD(p.fechaRecibo) AS EDAD_COMPRA FROM cliente c INNER JOIN recibo p ON c.CodCliente=p.CodCliente;--2.7. Desarrollar un disparador que me permita controlar el stock de los productos, teniendo en consideración que en ---ningún caso los productos pueden llegar a tener menos de 7 unidades en su stock. 5pcreate trigger STOCK_PRODUCTOS ON lineaDeRecibo FOR INSERT AS DECLARE @stock int SELECT @stock= stock FROM producto

JOIN inserted ON inserted.codProducto=producto.codProducto WHERE

producto.codProducto=inserted.codProductoIF (@stock>=(SELECT cantidad FROM inserted)OR

@stock>=7)update producto SET stock=stock-inserted.cantidadFROM producto JOIN inserted

ON inserted.codProducto=producto.codProducto WHERE producto.codProducto=inserted.codProducto

ELSEBEGINRAISERROR ('ESCASOS PRODUCTOS EN STOCK', 16, 1)ROLLBACK TRANSACTIONend

INSERT INTO lineaDeRecibo VALUES(15,8000,'P001','R0007')SELECT * FROM lineaDeRecibo;