Semana s2 Base de Datos
Semana s2 Base de Datos
VENDEDOR
COD_VEN
NOM_VEN
APE_VEN
SUE_VEN
FIN_VEN
TIP_VEN
COD_DIS
CLIENTE PRODUCTO
COD_CLI COD_PRO
RSO_CLI DES_PRO
DISTRITO
DIR_CLI PRE_PRO
COD_DIS
TLF_CLI SAC_PRO
NOM_DIS
RUC_CLI SMI_PRO
COD_DIS UNI_PRO
FACTURA
FEC_REG NUM_FAC LIN_PRO
TIP_CLI DETALLE_FACTURA IMP_PRO
FEC_FAC
NUM_FAC
CON_CLI COD_CLI
COD_PRO
FEC_CAN
CAN_VEN
EST_FAC
PRE_VEN
COD_VEN
POR_IGV
ABASTECIMIENTO
COD_PRV
COD_PRO
PROVEEDOR
COD_PRV PRE_ABA
RSO_PRV
DIR_PRV
TEL_PRV ORDEN_COMPRA
COD_DIS NUM_OCO
REP_PRV FEC_OCO
COD_PRV DETALLE_COMPRA
NUM_OCO
FAT_OCO
COD_PRO
EST_OCO
CAN_DET
Sentencias DDL
Sentencias DML
Creación de una base de datos
Modificación de la base de datos
Query
GO
Agregar el tipo de datos DNI de ocho caracteres y con la restricciones de campo obligatorio
GO
Sentencias DLL para gestión de tablas
A. Llave Primaria
Llave SECUNDARIA
Implementar la tabla DISTRITO asignando a COD_DIS como campo clave:
Primera forma:
GO
GO
Segunda forma:
GO
GO
Tercera forma:
GO
GO
GO
Restricciones pada datos
1. Identity
--Implementar la tabla FACTURA asignando a NUM_FAC autoincrementable
desde el numero 1000 con un aumento de uno:
CREATE TABLE FACTURA(
NUM_FAC INT NOT NULL PRIMARY KEY IDENTITY(1000,1),
FEC_FAC DATE NOT NULL,
FEC_CAN DATE NOT NULL,
EST_FAC VARCHAR(10) NOT NULL,
POR_IGV DECIMAL NOT NULL
)
GO
--Vamos a registrar cinco facturas para comprobar las numeraciones
automáticas
INSERT INTO FACTURA VALUES('06-07-2013','05-08-2013','2','0.19')
INSERT INTO FACTURA VALUES('06-07-2013','05-08-2013','3','0.19')
INSERT INTO FACTURA VALUES('01-09-2013','03-10-2013','2','0.19')
INSERT INTO FACTURA VALUES('06-09-2013','05-10-2013','2','0.19')
INSERT INTO FACTURA VALUES('01-10-2013','12-10-2013','2','0.19')
2. Default
--Implementar la tabla PROVEEDOR asignando como valor por defecto a
DIR_PRV el termino “NO REGISTRA” y en el campo TEL_PRV asignar 000-
0000000
--Primera forma
CREATE TABLE PROVEEDOR(
COD_PRV CHAR(5) NOT NULL PRIMARY KEY,
RSO_PRV VARCHAR(80) NOT NULL,
DIR_PRV VARCHAR(100)NOT NULL DEFAULT 'NO REGISTRA',
TEL_PRV CHAR(15) NULL DEFAULT '000-0000000',
REP_PRV VARCHAR(80) NOT NULL
)
GO
--Segunda forma
CREATE TABLE PROVEEDOR(
COD_PRV CHAR(5) NOT NULL PRIMARY KEY,
RSO_PRV VARCHAR(80) NOT NULL,
DIR_PRV VARCHAR(100)NOT NULL,
TEL_PRV CHAR(15) NULL,
REP_PRV VARCHAR(80) NOT NULL
)
GO
--Segunda forma
CREATE TABLE PRODUCTO(
COD_PRO CHAR(5) NOT NULL PRIMARY KEY,
DES_PRO VARCHAR(50) NOT NULL,
PRE_PRO MONEY NOT NULL,
SAC_PRO INT NOT NULL,
SMI_PRO INT NOT NULL,
UNI_PRO VARCHAR(30) NOT NULL,
LIN_PRO VARCHAR(30) NOT NULL,
IMP_PRO VARCHAR(10) NOT NULL
)
GO
--Primera forma
GO
--Segunda forma
GO
UNIQUE (TEL_PRV)
GO
--Para visualizar las restricciones aplicadas a la tabla proveedor podemos ejecutar el siguiente código:
5. Insert
--Realizando la inserción de forma basica
VALUES('P004','PAPEL PERIODICO',9,4285,1000,'MLL','2','F')
('P007','PORTA DISKETTES',3.5,300,100,'UNI','1','V'),
GO
--Realizar la insercion
GO
--Comprobar
GO
--Realizando la inserción con uso de variables
SET @COD='P010'
SET @PRE=8
SET @SAC=2000
SET @SMI=400
SET @UNI='DOC'
SET @LIN='3'
SET @IMP='F'
GO
6. Update
--Vamos a actualizar los precios aumentando $2.0 a todos los productos
UPDATE PRODUCTO
SET PRE_PRO=PRE_PRO+2
GO
UPDATE PRODUCTO
SET PRE_PRO+=2
GO
--Actualizando registros condicionados de la tabla producto
--Actualizar el stock actual de los productos solo si dicho stock es menor o igual a $50.00
UPDATE PRODUCTO
SET SAC_PRO*=2
WHERE SAC_PRO<=50
GO
--Actualizar el precio de los productos descontando un 50% del precio actual solo para los productos con código
P001, P005 y P010.
UPDATE PRODUCTO
SET PRE_PRO=PRE_PRO*0.5
GO
--Actualizar la descripción del producto con código P004 por “PAPEL PERIODICO 75 GRAMOS”
UPDATE PRODUCTO
WHERE COD_PRO='P004'
GO
--Actualizar el teléfono por 0000000 a todos los proveedores cuyo distrito se encuentra registrado con RIMAC.
--Por tanto la siguiente sentencia permite actualizar con 0000000 a todos los proveedores del distrito del RIMAC
UPDATE PROVEEDOR
SET TEL_PRV='0000000'
FROM PROVEEDOR AS P
FROM DISTRITO
WHERE NOM_DIS='RIMAC')
GO
--La clausula JOIN permite unir dos o mas tablas; se recomienda usar alias para cada tabla relacionada por que en la
clausula ON se deberá especificar la forma en que se unen ambas tablas y siempre se agregara una condicion de
busqueda tipo subconsulta. En el código anterior la sentencia:
SELECT COD_DIS
FROM DISTRITO
WHERE NOM_DIS='RIMAC'
--Emite como resultado el código D13 que permitirá actualizar a todos los proveedores que cumplan con dicha
condicion. Si no usamos la union de tablas el código de actualizacion seria de la siguiente manera:
UPDATE PROVEEDOR
SET TEL_PRV='0000000'
WHERE COD_DIS='D13'
GO
UPDATE PROVEEDOR
SET TEL_PRV='0000000'
FROM DISTRITO
WHERE NOM_DIS='RIMAC')
GO
--Actualizar el valor importado del producto por F solo para aquellos productos cuyo tipo de unidad sea DOC
(docena).
UPDATE PRODUCTO
SET IMP_PRO=@IMPORTADO
WHERE UNI_PRO='DOC'
GO
7. Delete
--Eliminar todos los registros de la tabla productos
DELETE PRODUCTO
GO
--Eliminar todos los registros de la tabla productos cuyo stock actual sea inferior a 50
DELETE PRODUCTO
WHERE SAC_PRO<50
GO
Ejercicio: Observe el código y comente:
--Activando la base de datos maestra
USE MASTER
GO
BEGIN
END
GO
USE PROYECTOSINDUSTRIALES
GO
GO
--Creacion de tablas
GO
GO
GO
GO
GO
--Asignando llaves primarias
GO
Laboratorio – Implementación de Query – MS SQL Server
_____________________________________________________________________________
DELETE PRODUCTO
GO
--Eliminar todos los registros de la tabla productos cuyo stock actual sea inferior a 50
DELETE PRODUCTO
WHERE SAC_PRO<50
GO
___________________________________________________________________________
VALUES('P004','PAPEL PERIODICO',9,4285,1000,'MLL','2','F')
('P007','PORTA DISKETTES',3.5,300,100,'UNI','1','V'),
GO
--Realizar la insercion
GO
--Comprobar
GO
--Realizando la inserción con uso de variables
SET @COD='P010'
SET @PRE=8
SET @SAC=2000
SET @SMI=400
SET @UNI='DOC'
SET @LIN='3'
SET @IMP='F'
GO
ANEXO