Vous êtes sur la page 1sur 47

1.- Creación de la base de datos, junto los archivos de ‘.mdf’, ‘.ndf’ y ‘.log’.

CREATE DATABASE Farmacia


--Se esta creando los archivos primarios que tienen las extensiones ".mdf"
On Primary (
--con el nombre de Farmacia
Name = Farmacia,
--ubicado en el direccitorio del disco C , en la carpeta DataBase
Filename = 'D:\Farmacia\Farmacia.MDF',
--con un tamaño de 8MB
Size = 8MB,
--el tamaño maximo que tomara este archivo es de 10MB
MaxSize = 10MB,
--el crecmiento del archivo sera de un 20%
Filegrowth = 20%
)
--Se esta creando un archivo de registro que tienen las extensiones ".log"
Log on (
-- con el nombre de FarmaciaLog
NAME = FarmaciaLog,
--ubicado en el direccitorio del disco C , en la carpeta DataBase
Filename = 'D:\Farmacia\Farmacia.ldf',
--con un tamaño de 5MB
Size = 5MB,
--el tamaño maximo que tomara este archivo es de 6MB
MaxSize = 6MB,
--el crecmiento del archivo sera de un 1MB
FileGrowth = 1MB
)

--Luego de haber sido creada la base de datos farmacia , se usara.


Use Farmacia

-- Mostramos si la base de datos esta con los demás

sp_helpdb

RESULTADO:
sp_spaceused

RESULTADO

--Modificaremos la base de datos para crear un archivo secundarios con la


extension ".ndf"

Alter Database Farmacia


--Los archivos secundarios lo agregamos en un grupo de archivos con el nombre de
"FarmaciaNdf"
Add FileGroup FarmaciaNdf

--Alteramos la base de datos Farmacia


Alter Database Farmacia
--Agregamos el archivo
Add File (
--con el nombre de "FarmaciaNdf
Name = 'FarmaciaNdf',
--Ubicado en el dico C, en la carpeta DataBase
Filename = 'D:\Farmacia\Farmaciadf.ndf',
--El tamaño que tomara sera de 5MB
Size = 5MB
)
--al grupo de archivo con nombre "FarmaciaNdf"
to filegroup FarmaciaNdf

-- Mostramos la caracteristicas de los archivos que se han agregado al grupo de


archivo
-- con nombre "FarmaciaNdf

Exec sp_Helpfile @filename='FarmaciaNdf'


2.- Creación de las tablas.

--Creamos la tabla con el nombre "cargo_empleado"


create table cargo_empleado (
--un campo 'id_cargo' de tipo char con una longitud de 4 caracteres
id_cargo char (4),
--un campo con el nombre 'nombre_cargo' de tipo varchar conn una longitud
de 45 carcateres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre_cargo varchar(45) not null,
--un campo con el nombre 'descripcion' de tipo text,ademas es NULL
descripcion text null,
--a esta tabla se le indica que el campo 'id_cargo' sera la llave primaria
primary key (id_cargo)
);

--Creamos la tabla con el nombre "tipo_empleado"


create table tipo_empleado (
--un campo 'id_tipo_empleado' de tipo char con una longitud de 4
caracteres
id_tipo_empleado char (4),
--un campo con el nombre 'nombre_tipo' de tipo varchar conn una longitud
de 45 carcateres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre_tipo varchar(45) not null,
--un campo con el nombre 'descripcion' de tipo text,ademas es NULL
descripcion text null,
--a esta tabla se le indica que el campo 'id_tipo_empleado' sera la llave
primaria
primary key (id_tipo_empleado)
);

--Creamos la tabla con el nombre "turno"


create table turno (
--un campo 'id_turno' de tipo char con una longitud de 4 caracteres
id_turno char (4),
--un campo con el nombre 'nombre_turno' de tipo varchar con una longitud
de 20 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
id_turno char (4),
nombre_turno varchar(20) not null,
--a esta tabla se le indica que el campo 'id_turno' sera la llave primaria
primary key (id_turno)
);

--Creamos la tabla con el nombre "tipo_pago"


create table tipo_pago (
--un campo 'id_tipo_pago' de tipo char con una longitud de 4 caracteres
id_tipo_pago char (4),
--un campo con el nombre 'nombre_tipo_pago' de tipo varchar con una
longitud de 45 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre_tipo_pago varchar(45) not null,
--un campo con el nombre 'descripcion' de tipo varchar con una longitud de
45 caracteres, NOT NULL
descripcion varchar(45) null,
--a esta tabla se le indica que el campo 'id_tipo_pago' sera la llave
primaria
primary key (id_tipo_pago)
);

--Creamos la tabla con el nombre "tipo_comprobante"


create table tipo_comprobante (
--un campo 'id_tipo_comprobante' de tipo char con 4 caracteres
id_tipo_comprobante char (4),
--un campo con el nombre 'nombre' de tipo varchar con una longitud de 45
caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre varchar(45) not null,
--un campo con el nombre 'descripcion' de tipo varchar con una longitud de
45 caracteres, NOT NULL
descripcion varchar(45) null,
--a esta tabla se le indica que el campo 'id_tipo_comprobante' sera la
llave primaria
primary key (id_tipo_comprobante)
);

--Creamos la tabla con el nombre "tipo_cliente"


create table tipo_cliente (
--un campo 'id_tipo_cliente' de tipo char con una longitud de 4 caracteres
id_tipo_cliente char (4),
--un campo 'nombre' de tipo varchar con una longitud de 40 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre varchar(40) not null,
--a esta tabla se le indica que el campo 'id_tipo_comprobante' sera la
llave primaria
primary key (id_tipo_cliente)
);

--Creamos la tabla con el nombre "marca_producto"


create table marca_producto (
--un campo 'id_marca_producto' de tipo char con una longitud de 4
caracteres
id_marca_producto char (4),
--un campo 'nombre' de tipo varchar con una longitud de 60 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre varchar(60) not null,
--un campo 'descripcion' de tipo varchar con una longitud de 60
caracteres, ademas sera NOT NULL
descripcion varchar(60) null,
--a esta tabla se le indica que el campo 'id_marca_producto' sera la llave
primaria
primary key (id_marca_producto)
);
--Creamos la tabla con el nombre "laboratorio"
create table laboratorio (
--un campo 'id_laboratorio' de tipo char con una longitud de 4 caracteres.
id_laboratorio char (4),
--un campo 'nombre' de tipo varchar con una longitud de 60 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre varchar(60) not null,
--a esta tabla se le indica que el campo 'id_laboratorio' sera la llave
primaria
primary key (id_laboratorio)
);

--Creamos la tabla con el nombre "tipo_concentracion"


create table tipo_concentracion(
--un campo 'id_concentracion' de tipo char con una longitud de 4
caracteres.
id_tipo_concentracion char (4),
--un campo 'nombre' de tipo varchar con una longitud de 60 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre varchar(60) not null,
--a esta tabla se le indica que el campo 'id_tipo_concentracion' sera la
llave primaria
primary key (id_tipo_concentracion)
);

--Creamos la tabla con el nombre "departamento"


create table departamento(
--un campo 'id_departamento' de tipo char con una longitud de 4
caracteres.
id_departamento char (4),
--un campo 'nombre_departameto' de tipo varchar con una longitud de 60
caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre_departameto varchar(60) not null,
--a esta tabla se le indica que el campo 'id_departamento' sera la llave
primaria
primary key (id_departamento)
);

--Creamos la tabla con el nombre "descuento"


create table descuento(
--un campo 'id_descuento' de tipo char con una longitud de 4 caracteres
id_descuento char (4),
--un campo 'cantidad_descuento' de tipo decimal con 2 enteros y 2
decimales,
--ademas sera REQUERIDO ya que es NOT NULL
cantidad_descuento decimal(2,2) not null,
--a esta tabla se le indica que el campo 'id_departamento' sera la llave
primaria
primary key (id_descuento)
);
--Creamos la tabla con el nombre "sub_categoria"

create table sub_categoria(


--un campo 'id_sub_categoria' de tipo char con una longitud de 4
caracteres.
id_sub_categoria char (4),
--un campo 'nombre' de tipo int, ademas sera REQUERIDO ya que es NOT NULL
nombre varchar(40) not null,
--a esta tabla se le indica que el campo 'id_sub_categoria' sera la llave
primaria
primary key (id_sub_categoria),
);

--Creamos la tabla con el nombre "provincia"


create table provincia(
--un campo 'id_provincia' de tipo char con una longitud de 4 caracteres.
id_provincia char (4),
--un campo 'nombre_provincia' de tipo varchar con una longitud de 60
caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre_provincia varchar(60) not null,
--el campo 'id_departamento' de tipo char con una longitud de 4
caracteres, sera la llave foranea
id_departamento char (4),
--a esta tabla se le indica que el campo 'id_provincia' sera la llave
primaria
primary key (id_provincia),
constraint fk_provincia_departamento
--el campo 'id_departamento' sera la llave foranea que viene de la tabla
'departamento'
--con el campo 'id_departamento'
foreign key (id_departamento) references departamento (id_departamento),
);

--Creamos la tabla con el nombre "distrito"


create table distrito(
--un campo 'id_distrito' de tipo char con una longitud de 4 caracteres.
id_distrito char (4),
--un campo 'nombre_distrito' de tipo varchar con una longitud de 60
caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
id_distrito char (4),
nombre_distrito varchar(60) not null,
--el campo 'id_provincia' de tipo char con una longitud de 4 caracteres,
sera la llave foranea
id_provincia char (4),
--a esta tabla se le indica que el campo 'id_distrito' sera la llave
primaria
primary key (id_distrito),
constraint fk_distrito_provincia
--el campo 'id_provincia' sera la llave foranea que viene de la tabla
'provincia'
--con el campo 'id_provincia'
foreign key (id_provincia) references provincia (id_provincia),
);

/*Creamos la tabla con el nombre "horario"*/


create table horario (
--un campo 'id_horario' de tipo char con una longitud de 4 caracteres.
id_horario char (4),
--un campo con e nombre 'hora_entrada' de tipo time,ademas sera REQUERIDO
ya que es NOT NULL
hora_entrada time not null,
--un campo con e nombre 'hora_salida' de tipo time,ademas sera REQUERIDO
ya que es NOT NULL
hora_salida time not null,
--el campo 'id_turno' sera la llave foranea
id_turno char (4),
--a esta tabla se le indica que el campo 'id_horario' sera la llave
primaria
primary key (id_horario),
--se tendra un constraint para horario_turno
constraint fk_horario_turno
--el campo 'id_turno' sera la llave foranea que viene de la tabla 'turno'
--con el campo 'id_turno'
foreign key (id_turno) references turno (id_turno),
);

--Creamos la tabla con el nombre "proveedor"


create table proveedor(
--un campo 'id_proveedor' de tipo char con una longitud de 4 caracteres.
id_proveedor char (4),
id_proveedor char (4),
--un campo 'nombre_contacto' de tipo varchar con una longitud de 60
caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre_contacto varchar(60) not null,
--un campo 'celular_contacto' de tipo char con una longitud de 9 digitos,
--ademas sera REQUERIDO ya que es NOT NULL
celular_contacto char(9) not null,
--un campo 'direccion' de tipo varchar con una longitud de 70 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
direccion varchar(70) not null,
--el campo 'id_distrito' sera la llave foranea
id_distrito char (4),
--a esta tabla se le indica que el campo 'id_proveedor' sera la llave
primaria
primary key (id_proveedor),
--realizar el constraint para 'proveedor_distrito'
constraint fk_proveedor_distrito
--el campo 'id_distrito' sera la llave foranea que viene de la tabla
"distrito" con el campo 'id_distrito'
foreign key (id_distrito) references distrito (id_distrito)
);

--Creamos la tabla con el nombre "sucursal"


create table sucursal(
--un campo 'id_sucursal' de tipo char con una longitud de 4 caracteres.
id_sucursal char (4),
id_sucursal char (4),
--un campo 'nombre_sucursal' de tipo varchar con una longitud de 45
caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre_sucursal varchar(45) not null,
--un campo 'direccion' de tipo varchar con una longitud de 60 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
direccion varchar(60) not null,
--un campo 'telefono' de tipo char con una longitud de 7 digitos,
--ademas sera REQUERIDO ya que es NOT NULL
telefono char(7) not null,
--el campo 'id_distrito' sera la llave foranea
id_distrito char (4),
--a esta tabla se le indica que el campo 'id_sucursal' sera la llave
primaria
primary key (id_sucursal),
--realizar el constraint para 'sucursal_distrito'
constraint fk_sucursal_distrito
--el campo 'id_distrito' sera la llave foranea que viene de la tabla
"distrito" con el campo 'id_distrito'
foreign key (id_distrito) references distrito (id_distrito)

);

--Creamos la tabla con el nombre "empleado"


create table empleado(
--un campo 'id_empleado' de tipo char con una longitud de 4 caracteres.
id_empleado char (4),
--un campo 'nombre' de tipo varchar con una longitud de 70 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombres varchar(70) not null,
--un campo 'apellido_paterno' de tipo varchar con una longitud de 20
caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
apellido_paterno varchar(20) not null,
--un campo 'apellido_materno' de tipo varchar con una longitud de 20
caracteres,
--además será REQUERIDO ya que es NOT NULL
apellido_materno varchar(20) not null,
--un campo 'dni' de tipo char con una longitud de 8 digitos,
--ademas sera REQUERIDO ya que es NOT NULL
dni char(8) not null,
--un campo 'direccion' de tipo varchar con una longitud de 20 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
direccion varchar(20) not null,
--un campo 'celular' de tipo char con una longitud de 9 digitos,este campo
a su vez puede ser nullable
celular char(9) null,
--el campo 'id_distrito' sera la llave foranea
id_distrito char (4),
--el campo 'id_tipo_empleado' sera la llave foranea
id_tipo_empleado char (4),
--el campo 'id_cargo' sera la llave foranea
id_cargo char (4),
--el campo 'id_sucursal' sera la llave foranea
id_sucursal char (4),
--el campo 'id_horario' sera la llave foranea
id_horario char (4),
--a esta tabla se le indica que el campo 'id_empleado' sera la llave
primaria
primary key (id_empleado),
--se realizar un constraint de nombre ‘fk_empleado_distrito’ donde la llave
foránea ‘id_distrito’ viene referenciado de la tabla “distrito” con el cmapo
‘id_distrito’.
constraint fk_empleado_distrito foreign key (id_distrito) references
distrito (id_distrito),
--se realizar un constraint de nombre ‘fk_tipo_empleado’ donde la llave foránea
‘id_tipo_empleado viene referenciado de la tabla “tipo_empleado” con el cmapo
‘id_tipo_empleado.
constraint fk_tipo_empleado foreign key (id_tipo_empleado) references
tipo_empleado (id_tipo_empleado),
--se realizar un constraint de nombre ‘fk_cargo’ donde la llave foránea
‘id_cargo’ viene referenciado de la tabla “cargo_empleado” con el cmapo
‘id_cargo’.
constraint fk_cargo foreign key (id_cargo) references cargo_empleado
(id_cargo),
--se realizar un constraint de nombre ‘fk_sucursal_empleado’ donde la llave
foránea ‘id_sucursal’ viene referenciado de la tabla “sucursal” con el cmapo
‘id_sucursal.
constraint fk_sucursal_empleado foreign key (id_sucursal) references
sucursal (id_sucursal),
--se realizar un constraint de nombre ‘fk_horario_empleado’ donde la llave
foránea ‘id_horario’ viene referenciado de la tabla “horario” con el cmapo
‘id_horario’.
constraint fk_horario_empleado foreign key (id_horario) references
horario (id_horario)

);

--Creamos la tabla con el nombre "concentracion"


create table concentracion(
--un campo 'id_concentracion' de tipo char con una longitud de 4
caracteres.
id_concentracion char (4),
--un campo 'cantidad' de tipo int, ademas sera REQUERIDO ya que es NOT
NULL
cantidad int not null,
--el campo 'id_tipo_concetracion' de tipo iint, sera la llave foranea
id_tipo_concetracion char (4),
--a esta tabla se le indica que el campo 'id_concentracion' sera la llave
primaria
primary key (id_concentracion),
--se declara un constraint para la llave foranea 'id_tipo_concentracion'
que viene referenciando de la tabla
--"tipo_concentracion" el campo 'id_tipo_concentracion'.
constraint fk_concentracion_tipo_concentracion
foreign key (id_tipo_concetracion)
references tipo_concentracion(id_tipo_concentracion)

);

--Creamos la tabla con el nombre "categoria"


create table categoria (
--un campo 'id_categoria' de tipo char con una longitud de 4 caracteres.
id_categoria char (4),
--un campo 'nombre' de tipo varchar con una longitud de 47 caracteres,
--ademas sera REQUERIDO ya que es NOT NULL
nombre varchar(47) not null,
--un campo 'id_sub_categoria' de tipo int, que sera la llave foranea
id_sub_categoria char (4),
--a esta tabla se le indica que el campo 'id_categoria' sera la llave
primaria
primary key (id_categoria),
--se declara un constraint para la llave foranea 'id_sub_categoria' que
viene referenciando de la tabla
--"categoria" el campo 'id_categoria'.
constraint fk_categoria_sub_categoria
foreign key (id_sub_categoria)
references sub_categoria(id_sub_categoria)

);

--Creamos la tabla con el nombre "producto"


create table producto(
--un campo 'id_producto' de tipo char con una longitud de 4 caracteres.
id_producto char (4),
--un campo 'nombre' de tipo varchar con una longitud de 50 caracteres,
ademas sera REQUERIDO ya que es NOT NULL
nombre varchar(50) not null,
--un campo 'descripcion' de tipo text, ademas puede ser NULL
descripcion text null,
--un campo 'precio' de tipo decimal con 4 enteros y 3 decimales,ademas
sera REQUERIDO ya que es NOT NULL
precio decimal(4,2) not null,
--un campo 'presentacion' de tipo varchar con una longitud de 50
caracteres,
--ademas es NOT NULL
presentacion varchar(50) null,
--un campo 'fecha_fabricacion' de tipo date ademas es NOT NULL
fecha_fabricacion date not null,
--un campo 'fecha_caducidad' de tipo date ademas es NOT NULL
fecha_caducidad date not null,
--el campo 'id_categoria' de tipo int, sera la llave foranea
id_categoria char (4),
--el campo 'id_marca' de tipo int, sera la llave foranea
id_marca char (4),
--el campo 'id_laboratorio' de tipo iint, sera la llave foranea
id_laboratorio char (4),
--el campo 'id_concentracion' de tipo int, sera la llave foranea
id_concentracion char (4),
--a esta tabla se le indica que el campo 'id_producto' sera la llave
primaria
primary key (id_producto),
--se declara un constraint para la llave foranea 'id_tipo_producto' que
viene referenciando de la tabla
--"tipo_producto" el campo 'id_tipo_producto'.
constraint fk_producto_categoria foreign key (id_categoria) references
categoria(id_categoria),
--se realizar un constraint de nombre ‘fk_marca_empleado’ donde la llave foránea
‘id_marca’ viene referenciado de la tabla “marca_producto” con el cmapo
‘id_marca_producto’.
constraint fk_marca_producto foreign key (id_marca) references
marca_producto(id_marca_producto),
--se realizar un constraint de nombre ‘fk_laboratorio_producto’ donde la llave
foránea ‘id_laboratorio’ viene referenciado de la tabla “laboratorio” con el
campo ‘id_id_laboratorio’.
constraint fk_laboratorio_producto foreign key (id_laboratorio)
references laboratorio(id_laboratorio),
--se realizar un constraint de nombre ‘fk_concentracion_empleado’ donde la llave
foránea ‘id_concentracion’ viene referenciado de la tabla “concentracion” con el
cmapo ‘id_concentracion.
constraint fk_concentracion_producto foreign key (id_concentracion)
references concentracion(id_concentracion)

);
--Creamos la tabla con el nombre "cliente"
create table cliente(
--un campo 'id_producto' de tipo char con una longitud de 4 caracteres.
id_cliente char (4),
--un campo 'nombre' de tipo varchar con una longitud de 50 caracteres,
ademas sera REQUERIDO ya que es NOT NULL
nombres varchar(50) not null,
--un campo con el nombre 'apellido_paterno' de tipo varchar con una
longitud de 50 caracteres, ademas sera REQUERIDO ya que es NOT NULL
apellido_paterno varchar(50) not null,
--un campo con el nombre 'apellido_materno' de tipo varchar con una
longitud de 50 caracteres, ademas sera REQUERIDO ya que es NOT NULL
apellido_materno varchar(50) not null,
--un campo con el nombre 'dni' de tipo char con una longitud de 9 digitos,
ademas sera REQUERIDO ya que es NOT NULL
dni char(8) not null,
--un campo con el nombre 'telefono' de tipo char con una longitud de 9
digitos, ademas sera NULL
celular char(9) null,
--un campo con el nombre 'correo' de tipo varchar con una longitud de 50,
ademas sera REQUERIDO ya que es NOT NULL
correo varchar(50) not null,
--el campo 'id_ubigeo' de tipo int, sera la llave foranea
id_tipo_cliente char (4),
primary key (id_cliente),
--se declara un constraint para la llave foranea 'id_tipo_cliente' que
viene referenciando de la tabla
--"tipo_cliente" el campo 'id_tipo_cliente'.
constraint fk_tipo_cliente foreign key (id_tipo_cliente) references
tipo_cliente(id_tipo_cliente)
);

--Creamos la tabla con el nombre "almacen"


create table almacen(
--un campo 'id_almacen' de tipo char con una longitud de 4 caracteres.
id_almacen char (4),
--un campo con el nombre de "nombre_almacen" de tipo varchar con una
longitud de 60 caracteres
--, ademas sera REQUERIDO ya que es NOT NULL
nombre_almacen varchar(60) not null,
--el campo 'id_proveedor' de tipo int, sera la llave foranea
id_proveedor char (4),
--el campo 'id_producto' de tipo int, sera la llave foranea
id_producto char (4),
--indicamos la llave primaria al cmapo 'id_almacen'
primary key (id_almacen),
--se declara un constraint para la llave foranea 'id_proveedor' que viene
referenciando de la tabla
--"proveedor" el campo 'id_proveedor'.
constraint fk_almacen_proveedor foreign key (id_proveedor) references
proveedor(id_proveedor),
--se declara un constraint para la llave foranea 'id_producto' que viene
referenciando de la tabla
--"producto" el campo 'id_producto'.
constraint fk_almacen_producto foreign key (id_producto) references
producto(id_producto));

--Creamos la tabla con el nombre "comprobante"


create table comprobante(
--un campo 'id_comprobante' de tipo char con una longitud de 4 caracteres.
id_comprobante char (4),
--un campo con el nombre de "confirmacion" de tipo char con una longitud
de 1 caracteres
confirmacion char(1) null,
--un campo con el nombre de "fecha" de tipo date, ademas sera REQUERIDO ya
que es NOT NULL
fecha datetime not null,
--un campo con el nombre de "numero_caja" de tipo char con una longitud de
2 codigos
numero_caja char(2) not null,
--el campo 'id_sucursal' de tipo int, sera la llave foranea
id_sucursal char (4),
--el campo 'id_cliente' de tipo int, sera la llave foranea
id_cliente char (4),
--el campo 'id_empleado' de tipo int, sera la llave foranea
id_empleado char (4),
--el campo 'id_descuento' de tipo int, sera la llave foranea
id_descuento char (4),
--el campo 'id_tipo_pago' de tipo int, sera la llave foranea
id_tipo_pago char (4),
--el campo 'id_tipo_comprobante' de tipo int, sera la llave foranea
id_tipo_comprobante char (4),
--indicamos que el campo 'id_venta' ser la llave primaria
primary key (id_comprobante),
--se declara un constraint para la llave foranea 'id_comprobante' que
viene referenciando de la tabla
--"comprobante" el campo 'id_comprobante'.
constraint fk_sucursal_venta foreign key (id_sucursal) references
sucursal(id_sucursal),
--se realizar un constraint de nombre ‘fk_cliente’ donde la llave foránea
‘id_cliente’ viene referenciado de la tabla “cliente” con el campo ‘id_cliente’.
constraint fk_cliente foreign key (id_cliente) references
cliente(id_cliente),
--se realizar un constraint de nombre ‘fk_empleado_venta’ donde la llave foránea
‘id_empleado’ viene referenciado de la tabla “empleado” con el campo
‘id_empleado’.
constraint fk_empleado_venta foreign key (id_empleado) references
empleado(id_empleado),
--se realizar un constraint de nombre ‘fk_comprobante_descuento’ donde la llave
foránea ‘id_descuento’ viene referenciado de la tabla “descuento” con el campo
‘id_descuento’.
constraint fk_comprobante_descuento foreign key (id_descuento)
references descuento(id_descuento),
--se realizar un constraint de nombre ‘fk_tipo_pago’ donde la llave foránea
‘id_tipo_pago’ viene referenciado de la tabla “tipo_pago” con el campo
‘id_tipo_pago’.
constraint fk_tipo_pago foreign key (id_tipo_pago) references
tipo_pago(id_tipo_pago),
--se realizar un constraint de nombre ‘fk_tipo_comprobante’ donde la llave
foránea ‘id_tipo_comprobante’ viene referenciado de la tabla “tipo_comprobante”
con el campo ‘id_tipo_comprobante’.
constraint fk_tipo_comprobante foreign key (id_tipo_comprobante)
references tipo_comprobante(id_tipo_comprobante)
);

--Creamos la tabla con el nombre "detalle_comprobante"


create table detalle_comprobante(
--un campo 'id_detalle_comprobante' de tipo char con una longitud de 4
caracteres.
id_detalle_comprobante char (4),
--el campo 'id_comprobante' de tipo int, sera la llave foranea
id_comprobante char (4),
--el campo 'id_producto' de tipo int, sera la llave foranea
id_producto char (4),
--un campo con el nombre de "cantidad" de tipo int, ademas sera REQUERIDO
ya que es NOT NULL
cantidad int not null,
primary key (id_detalle_comprobante,id_comprobante,id_producto),
--se declara un constraint para la llave foranea 'id_venta' que viene
referenciando de la tabla
--"venta" el campo 'id_venta'.
constraint fk_comprobante foreign key (id_comprobante) references
comprobante(id_comprobante),
--se realizar un constraint de nombre ‘fk_detalle_producto’ donde la llave
foránea ‘id_producto’ viene referenciado de la tabla “producto” con el campo
‘id_producto’.
constraint fk_detalle_producto foreign key (id_producto) references
producto(id_producto)
--se actualizara en cascada, debido a que es una tabla detalle
on update cascade
--se eliminara en cascada, debido a que es una tabla detalle
on delete cascade
);

3.- Inserción de datos a la tabla.


/* INSERTANDO REGISTRO*/

--Insertamos algunos registro en la tabla "cargo_empleado" a sus respectivos


campos
insert into cargo_empleado values('CE01','Administrador',null);
insert into cargo_empleado values('CE02','Gerenete de ventas',null);
insert into cargo_empleado values('CE03','Supervisor',null);
insert into cargo_empleado values('CE04','Sub Gerente',null);
insert into cargo_empleado values('CE05','Jefe de personal',null);

--Insertamos algunos registro en la tabla "tipo_empleado" a sus respectivos


campos
insert into tipo_empleado values('TE01','Farmaceutico',null);
insert into tipo_empleado values('TE02','Cajero','');
insert into tipo_empleado values('TE03','Empaque',null);
insert into tipo_empleado values('TE04','Personal de perfumeria',null);
insert into tipo_empleado values('TE05','Tecnico',null);
insert into tipo_empleado values('TE06','Ayudante de mostrador',null);

--Insertamos algunos registro en la tabla "turno" a sus respectivos campos


insert into turno values('TU01','Mañana');
insert into turno values('TU02','Tarde');

--Insertamos algunos registro en la tabla "tipo_pago" a sus respectivos campos


insert into tipo_pago values('TP01','Efectivo',null);
insert into tipo_pago values('TP02','Tarjeta',null);

--Insertamos algunos registro en la tabla "tipo_comprobante" a sus respectivos


campos
insert into tipo_comprobante values('TC01','Factura',null);
insert into tipo_comprobante values('TC02','Boleta de venta ',null);
insert into tipo_comprobante values('TC03','Ticket ',null);
insert into tipo_comprobante values('TC04','Factura ',null);

--Insertamos algunos registro en la tabla "tipo_cliente" a sus respectivos campos


insert into tipo_cliente values('TCO1','Comun');
insert into tipo_cliente values('TCO2','Frecuente');

--Insertamos algunos registro en la tabla "sub_categoria" a sus respectivos


campos
insert into sub_categoria values('SC01','Antibioticos');
insert into sub_categoria values('SC02','Anfenicoles');
insert into sub_categoria values('SC03','Aminoglucósides');
insert into sub_categoria values('SC04','Macrólidos');
insert into sub_categoria values('SC05','Lincosamidas');
insert into sub_categoria values('SC06','Quinolonas');
insert into sub_categoria values('SC07','Polimixinas');
insert into sub_categoria values('SC08','Sulfamidas');
insert into sub_categoria values('SC09','Tetraciclinas');
insert into sub_categoria values('SC10','Estimulantes');
insert into sub_categoria values('SC11','Excipientes');
insert into sub_categoria values('SC12','Antiasatico');
insert into sub_categoria values('SC13','Laxantes');
insert into sub_categoria values('SC14','Glucocorticoides');
insert into sub_categoria values('SC15','Sedantes');
insert into sub_categoria values('SC16','Oxitocicos');

--Insertamos algunos registro en la tabla "categoria" a sus respectivos campos


insert into categoria values('CT01','Cardiologia', 'SC01');
insert into categoria values('CT02','Dermatologia','SC10');
insert into categoria values('CT03','Endocrinologia y metabolismo',
'SC04');
insert into categoria values('CT04','Enfermedades infecciosas y
parasitarias', 'SC05');
insert into categoria values('CT05','Enfermedades Inmunoalérgicas', 'SC06');
insert into categoria values('CT06','Gastroenterologia', 'SC14');

--Insertamos algunos registro en la tabla "marca_producto" a sus respectivos


campos
insert into marca_producto values('M001','Cebion',null);
insert into marca_producto values('M002','Alvitia',null);
insert into marca_producto values('M003','Biodermia',null);
insert into marca_producto values('M004','Corpitol',null);
insert into marca_producto values('M005','Durex',null);
insert into marca_producto values('M006','Boots',null);
insert into marca_producto values('M007','Blistex',null);
insert into marca_producto values('M008','Brecord',null);
insert into marca_producto values('M009','Ducray',null);
insert into marca_producto values('M010','Corpitol',null);
insert into marca_producto values('M011','Natalben',null);
insert into marca_producto values('M012','Roc',null);
insert into marca_producto values('M013','Quies',null);
insert into marca_producto values('M014','Vitis',null);

--Insertamos algunos registro en la tabla "laboratorio" a sus respectivos campos


insert into laboratorio values('L001','Farmaindustria');
insert into laboratorio values('L002','Sluds');
insert into laboratorio values('L003','Cibia');
insert into laboratorio values('L004','H2 Auto');
insert into laboratorio values('L005','Ribys');
insert into laboratorio values('L006','Contex');
insert into laboratorio values('L007','Dupret');
insert into laboratorio values('L008','Oximesa');
insert into laboratorio values('L009','EuroFarma');
insert into laboratorio values('L010','Teva');
insert into laboratorio values('L011','Adoh');
insert into laboratorio values('L012','Generba');
insert into laboratorio values('L013','Oxipharma');
insert into laboratorio values('L014','Grifols');
insert into laboratorio values('L015','Dista');
insert into laboratorio values('L016','Deiters');
insert into laboratorio values('L017','Ordesa');
insert into laboratorio values('L018','Gynea');

--Insertamos algunos registro en la tabla "tipo_concentracion" a sus respectivos


campos
insert into tipo_concentracion values('T001','mg');
insert into tipo_concentracion values('T002','ml');
insert into tipo_concentracion values('T003','g');

--Insertamos algunos registro en la tabla "departamento" a sus respectivos campos


insert into departamento values('DE01','Lima');
insert into departamento values('DE02','La libertad');
insert into departamento values('DE03','Ayacucho');

--Insertamos algunos registro en la tabla "descuento" a sus respectivos campos


insert into descuento values('DS01','0.10');
insert into descuento values('DS02','0.15');
insert into descuento values('DS03','0.20');
insert into descuento values('DS04','0.30');
insert into descuento values('DS05','0.35');
insert into descuento values('DS06','0.45');
insert into descuento values('DS07','0.50');

--Insertamos algunos registro en la tabla "provincia" a sus respectivos campos


insert into provincia values('PV01','Huaral','DE01');
insert into provincia values('PV02','Lima','DE01');
insert into provincia values('PV03','Huara','DE01');
insert into provincia values('PV04','Gran Chimu','DE02');
insert into provincia values('PV05','Ascope','DE02');
insert into provincia values('PV06','Sucre','DE03');

--Insertamos algunos registro en la tabla "distrito" a sus respectivos campos


insert into distrito values('DI01','Huaral','PV01');
insert into distrito values('DI02','Chancay','PV01');
insert into distrito values('DI03','Ancon','PV02');
insert into distrito values('DI04','Breña','PV02');
insert into distrito values('DI05','Comas','PV02');
insert into distrito values('DI06','Santa Maria','PV03');
insert into distrito values('DI07','Huacho','PV03');
insert into distrito values('DI08','Hualmay','PV03');
insert into distrito values('DI09','Lucma','PV04');
insert into distrito values('DI10','Ascope','PV05');
insert into distrito values('DI11','Santa Cruz','PV05');
insert into distrito values('DI12','Chalcos','PV06');

--Insertamos algunos registro en la tabla "horario" a sus respectivos campos


insert into horario values('HO01','09:00:00','13:00:00','TU01');
insert into horario values('HO02','08:30:00','12:00:00','TU01');
insert into horario values('HO03','13:00:00','5:30:00','TU02');
insert into horario values('HO04','14:00:00','8:30:00','TU02');
insert into horario values('HO05','14:00:00','9:45:00','TU02');

--Insertamos algunos registro en la tabla "proveedor" a sus respectivos campos


insert into proveedor values('PV01','Cristy Zuñiga Villanueva','986786546','Av.
Mandamiento','DI06');
insert into proveedor values('PV02','Jose Daniel Vilchez','987863216','Jr.
Leoncio Prado','DI02');
insert into proveedor values('PV03','Jesus Rafael Balcon
Cristal','987654356','Av. Panama','DI07');
insert into proveedor values('PV04','Luis Aaron Pacora
Changana','987676890','Calle Arenas','DI12');
insert into proveedor values('PV05','Gina Flores Rodriguez','987654321','Jr.
Juliaca','DI01');

--Insertamos algunos registro en la tabla "sucursal" a sus respectivos campos


insert into sucursal values('SU01','Pharma','Av. San
bartolome','2378776','DI06');
insert into sucursal values('SU02','Pharma Lima','Av. Leoncio Prado Nro.
20','2456700','DI04');
insert into sucursal values('SU03','PharmaSEL','Calle San Ignacio Nro.
303','2674563','DI05');
insert into sucursal values('SU04','Botica','Jr. Bolivar Nro.
630','2366841','DI02');

--Insertamos algunos registro en la tabla "empleado" a sus respectivos campos


insert into empleado values('EM01','Elena ','De la
Cruz','Santibañez','75111097','Av. leoncio
prado','98188903','DI02','TE02','CE02','SU02','HO02');
insert into empleado values('EM02','Luis Fernando
','Jacome','River','78986546','Av.
Garu','987678098','DI05','TE05','CE05','SU03','HO01');
insert into empleado values('EM03','Jesus ','Balcon','Muñoz','45654345','Av.
Buenos aires','908765468','DI02','TE03','CE04','SU01','HO05');
insert into empleado
values('EM04','Yomaira','Castañeda','Villanueva','67890876','Av.
naturales','987654768','DI04','TE01','CE01','SU02','HO04');
insert into empleado values('EM05','Andrea
','Carreño','Zuñiga','65432123','Prologacion
Grau','987687987','DI03','TE05','CE04','SU01','HO05');
insert into empleado
values('EM06','Angelo','Valverde','Fuentes','23454321','Av. San
martin','923145678','DI07','TE02','CE05','SU04','HO03');
insert into empleado values('EM07','Nelly','Moreno','Corcino','12235714','Av.
sifuentes diaz','908765941','DI02','TE02','CE01','SU02','HO05');
insert into empleado
values('EM08','Jacqueline','Sotelo','Ortiz','70987556','Av.
Carpe','987540186','DI03','TE06','CE05','SU04','HO03');
--Insertamos algunos registro en la tabla "concentracion" a sus respectivos
campos
insert into concentracion values('COO1','100','T001');
insert into concentracion values('COO2','25','T001');
insert into concentracion values('COO3','20','T001');
insert into concentracion values('COO4','30','T001');
insert into concentracion values('COO5','5','T001');
insert into concentracion values('COO6','1','T001');
insert into concentracion values('COO7','4','T001');
insert into concentracion values('COO8','12','T001');
insert into concentracion values('COO9','250','T001');
insert into concentracion values('CO10','100','T001');
insert into concentracion values('CO11','100','T001');

--Insertamos algunos registro en la tabla "producto" a sus respectivos campos


insert into producto values('P001','Aceite de
almendra','crema','15','Envase','2016-06-04','2018-02-
03','CT04','M001','L001','COO1');
insert into producto values('P002','Bencilo','enmulsioon
dermica','18.00','Envase','2016-06-04','2018-02-03','CT03','M003','L003','COO4');
insert into producto values('P003','Antrelina','Ungüento
','20.00','Envase','2016-06-04','2018-01-09','CT02','M007','L004','CO11');
insert into producto values('P004','Bromocriptina
','tableta','30.00','Envase','2016-07-04','2018-01-
06','CT05','M009','L011','COO3');
insert into producto values('P005','Deflazacort ','tableta','45.00','20
tabletas','2016-06-04','2018-01-09','CT01','M010','L010','COO5');
insert into producto values('P006','Glibenclamida
','tableta','75.00','frasco','2016-08-04','2018-02-
05','CT01','M011','L017','COO7');
insert into producto
values('P007','Amoxicilina','suspencion','35.00','Envase','2016-09-04','2018-01-
18','CT05','M002','L005','COO3');
insert into producto values('P008','Clorfenamina','solucion
inyectable','25.99','5 ampolletas','2016-06-04','2017-02-
03','CT03','M005','L009','COO5');
insert into producto
values('P009','Hidroxizina','jarabe','34.60','Envase','2016-06-14','2018-04-
03','CT04','M006','L013','COO9');
insert into producto values('P010','Aluminio ','tableta','67.00','tableta de
30','2016-06-24','2018-02-08','CT05','M002','L014','COO6');
insert into producto values('P011','Pinaverio
','capsula','89.00','capsulas','2016-06-05','2018-02-
10','CT04','M006','L015','CO11');
insert into producto values('P012','Terlipresina ','crema','52.00','10
comprimidos','2016-08-13','2018-02-13','CT02','M014','L013','COO7');

--Insertamos algunos registro en la tabla "cliente" a sus respectivos campos


insert into cliente
values('CL01','Roger','Villanueva','Lino','14579809','971997881','villanuevaLino@
gmail.com','TCO2');
insert into cliente
values('CL02','Jennifer','Lopez','Jara','23456777','987654321','lopezJennifer56@h
otmail.com','TCO2');
insert into cliente
values('CL03','Victor','Morales','Flores','54677676',null,'flores_moralse@gmail.c
om','TCO1');
insert into cliente
values('CL04','Ibis','Velasquez','Carrillo','14579809','987653321','velasquez_Ibi
s@gmail.com','TCO1');
insert into cliente
values('CL05','Brahan','Velasquez','Torres','14579809','993454244','torres_love_6
7@gmail.com','TCO1');
insert into cliente
values('CL06','Aaron','Changanaqui','Gastiburu','86756577',null,'changanaqui_aaro
n@gmail.com','TCO2');
insert into cliente
values('CL07','Melanie','Solier','Campos','14579809','966654390','campos_martin_4
567@hotmail.com','TCO1');
insert into cliente
values('CL08','Fernanda','Blanco','Fuentes','98000997',null,'fuentes_fernandez56@
gmail.com','TCO2');
insert into cliente
values('CL09','Aurora','Saldaña','Ortiz','14579809','944364321','ortiz_aurora@gma
il.com','TCO1');
insert into cliente
values('CL10','Lety','Compas','Tenorio','14579809',null,'tenorio_lety@gmail.com',
'TCO2');
insert into cliente
values('CL11','Fernando','Salas','Morales','76767677','924554430','salasMorales@h
otmail.com','TCO1');
insert into cliente
values('CL12','Martin','Priteo','Juanes','14579809',null,'juanesPrieto@hotmail.co
m','TCO2');
insert into cliente
values('CL13','Cecilia','Padilla','Solis','86565666','911654321','padilla_solis@g
mail.com','TCO2');
insert into cliente
values('CL14','Luigi','Parodi','Rojas','76856544','977659001','rojas67@gmail.com'
,'TCO1');
insert into cliente
values('CL15','Mauricio','Vilma','Jacome','15477777',null,'jacomeMauricio@hotmail
.com','TCO1');
insert into cliente
values('CL16','Camila','Cabello','Zuñiga','14588976','966643345','cabello_camila@
hotmail.com','TCO2');
insert into cliente
values('CL17','Tommy','Santibañez','Tanes','78890588','987690009','tanes_tomi@gma
il.com','TCO2');

--Insertamos algunos registro en la tabla almacen sus respectivos campos


insert into almacen values('ALO1','Area 1','PV02','P002');
insert into almacen values('ALO2','Area 2','PV01','P009');
insert into almacen values('ALO3','Area 3','PV03','P004');
insert into almacen values('ALO4','Area 4','PV04','P008');
insert into almacen values('ALO5','Area 5','PV04','P001');
insert into almacen values('ALO6','Area 6','PV05','P005');
insert into almacen values('ALO7','Area 7','PV01','P006');
insert into almacen values('ALO8','Area 8','PV05','P007');
insert into almacen values('ALO9','Area 9','PV02','P003');
insert into almacen values('AL10','Area 10','PV03','P010');
insert into almacen values('AL11','Area 11','PV05','P012');
insert into almacen values('AL12','Area 12','PV02','P011');

--Insertamos algunos registro en la tabla comprobante sus respectivos campos


insert into comprobante values('CP01','1','2018-05-02
09:00:00','01','SU01','CL11','EM01','DS01','TP01','TC02');
insert into comprobante values('CP02','1','2018-02-12
11:00:00','02','SU01','CL13','EM04','DS04','TP02','TC03');
insert into comprobante values('CP03','1','2017-12-02
11:00:00','03','SU02','CL14','EM03','DS03','TP02','TC01');
insert into comprobante values('CP04','1','2018-01-22
01:00:00','05','SU04','CL17','EM05','DS05','TP02','TC04');
insert into comprobante values('CP05','1','2018-02-14
14:00:00','05','SU03','CL13','EM02','DS07','TP01','TC02');
insert into comprobante values('CP06','1','2018-02-02
16:00:00','04','SU02','CL14','EM01','DS05','TP01','TC02');
insert into comprobante values('CP07','1','2018-03-23
10:00:00','01','SU02','CL16','EM03','DS06','TP02','TC03');
insert into comprobante values('CP08','1','2018-05-02
11:00:00','01','SU01','CL10','EM05','DS04','TP02','TC04');
insert into comprobante values('CP09','1','2018-01-13
01:30:00','03','SU04','CL09','EM07','DS03','TP02','TC02');
insert into comprobante values('CP10','1','2018-03-17
07:45:00','01','SU03','CL01','EM06','DS05','TP01','TC01');
insert into comprobante values('CP11','1','2018-02-15
06:30:00','02','SU03','CL03','EM08','DS07','TP01','TC01');
insert into comprobante values('CP12','1','2018-04-18
05:12:00','01','SU02','CL05','EM02','DS01','TP02','TC03');
insert into comprobante values('CP13','1','2018-05-11
09:56:00','03','SU01','CL05','EM01','DS01','TP01','TC03');
insert into comprobante values('CP14','1','2018-04-25
11:00:00','01','SU04','CL08','EM03','DS02','TP02','TC02');
insert into comprobante values('CP15','1','2018-04-19
10:00:00','05','SU04','CL09','EM03','DS03','TP01','TC01');
insert into comprobante values('CP16','1','2018-03-12
09:00:00','01','SU03','CL02','EM04','DS04','TP01','TC01');
insert into comprobante values('CP17','1','2018-01-15
12:00:00','04','SU02','CL04','EM07','DS05','TP02','TC03');
insert into comprobante values('CP18','1','2018-03-24
18:46:00','01','SU03','CL06','EM05','DS02','TP01','TC04');
insert into comprobante values('CP19','1','2018-05-28
05:53:00','02','SU04','CL10','EM05','DS04','TP01','TC04');
insert into comprobante values('CP20','1','2018-02-23
06:00:00','03','SU01','CL13','EM01','DS07','TP02','TC02');

--Insertamos algunos registro en la tabla "detalle_comprobante" sus respectivos


campos
insert into detalle_comprobante values('DP01','CP01','P001',1);
insert into detalle_comprobante values('DP02','CP02','P002',2);
insert into detalle_comprobante values('DP03','CP03','P001',3);
insert into detalle_comprobante values('DP04','CP04','P004',4);
insert into detalle_comprobante values('DP05','CP05','P005',5);
insert into detalle_comprobante values('DP06','CP06','P006',6);
insert into detalle_comprobante values('DP07','CP07','P006',7);
insert into detalle_comprobante values('DP08','CP08','P007',8);
insert into detalle_comprobante values('DP09','CP09','P008',9);
insert into detalle_comprobante values('DP10','CP10','P003',10);
insert into detalle_comprobante values('DP11','CP11','P012',11);
insert into detalle_comprobante values('DP12','CP12','P011',12);
insert into detalle_comprobante values('DP13','CP13','P012',1);
insert into detalle_comprobante values('DP14','CP14','P010',2);
insert into detalle_comprobante values('DP15','CP15','P009',3);
insert into detalle_comprobante values('DP16','CP16','P008',1);
insert into detalle_comprobante values('DP17','CP17','P007',2);
insert into detalle_comprobante values('DP18','CP18','P007',3);
insert into detalle_comprobante values('DP19','CP19','P005',4);
insert into detalle_comprobante values('DP20','CP20','P005',5);
insert into detalle_comprobante values('DP21','CP20','P004',6);
insert into detalle_comprobante values('DP22','CP19','P003',7);
insert into detalle_comprobante values('DP23','CP18','P006',8);
insert into detalle_comprobante values('DP24','CP17','P001',9);
insert into detalle_comprobante values('DP25','CP16','P001',10);
insert into detalle_comprobante values('DP26','CP15','P002',11);
insert into detalle_comprobante values('DP27','CP14','P005',12);
insert into detalle_comprobante values('DP28','CP13','P010',1);
insert into detalle_comprobante values('DP29','CP12','P011',2);
insert into detalle_comprobante values('DP30','CP11','P012',3);

CONSULTAS:

/* 1) Mostrar todo los productos que pertenescan a la categoria de Endocrinologia


y metabolismo', ademas ordenar los productos por nombre alfabetico de A a Z*/

SELECT id_producto,producto.nombre, descripcion, precio,


producto.fecha_fabricacion, producto.fecha_caducidad, categoria.nombre
FROM producto
INNER JOIN categoria ON categoria.id_categoria = producto.id_categoria
WHERE categoria.id_categoria= ‘CT01’
ORDER BY producto.nombre asc;

SE LEE: Selecionamos los campos con nombres ‘id_producto’, ‘nombre’ de la tabla


“producto”, ‘descripcion’, ‘precio’, ‘fecha_fabricacion’ de la tabla “producto”,
‘fecha_caducidad’ de la tabla “producto”, ‘nombre’ de la tabla “categoría” desde
la tabla “PRODUCTO”, a su vez se relacionara con la tabla “categoría” mediante el
campo ‘id_categoria’ sea igual al campo ‘id_categoria’ de la tabla “producto”.

/* 2) Visualizar que marcas tiene el producto de "Clorfenamina" */

SELECT id_producto,producto.nombre, producto.descripcion, precio,


producto.fecha_fabricacion, producto.fecha_caducidad, marca_producto.nombre as
'marca producto'
FROM producto
INNER JOIN marca_producto ON marca_producto.id_marca_producto = producto.id_marca
WHERE producto.nombre = 'Clorfenamina';

SE LEE: Se selecciona el campo ‘id_producto’, ‘nombre’ de la tabla “producto”,


‘descripcion’ de la tabla “producto”, ‘precio’, ‘fecha_fabricacion’,
‘fecha_caducidad’,’nombre’ de la tabla “marca_producto” que recibe un alias de
‘marca producto’, de la tabla “PRODUCTOS” que se esta relacionando con la tabla
“marca_producto” mediante el campo ‘id_marca_producto’ se igual al campo
‘id_marca’ de la tabla “Producto”.Donde el nombre del producto sea igual a
‘Clorfenamina’.
/* 3) Visualizar solo a los empleados que en su nombre tenga la letra 'e'.*/

SELECT nombres, apellido_paterno, apellido_materno


FROM empleado
WHERE nombres LIKE '%e%';
SE LEE: Seleccionamos los campos ‘nombres’,’appelido_paterno’,’apellido_materno’
desde la tabla “EMPLEADO”.Donde el campo ‘nombres’ contenga la letra ‘e’.

/* 4) Visualizar todo los producto que su precio este entre S/.20.00 y S/.80.00
*/

SELECT id_producto,producto.nombre, producto.descripcion, precio,


producto.fecha_fabricacion, producto.fecha_caducidad
FROM producto
WHERE precio BETWEEN 20 AND 80;

SE LEE: Seleccionamos los campos ‘id_producto’, ‘nombre’ de la tabla “producto”,


‘descripcion’ de la tabla “producto”, ‘precio’, ‘fecha_fabricacion’,
‘fecha_caducidad’ desde la tabla “PRODUCTO”.Donde el campo ‘precio’ este entr el
intervalo de 20 y 80.
/* 5) Visulizar en que horario y turno trabaja el empleado " Nelly " */

SELECT empleado.nombres +', '+empleado.apellido_materno+'


'+empleado.apellido_paterno as 'Nombre completo',
turno.nombre_turno, hora_entrada, horario.hora_salida
FROM empleado
INNER JOIN horario ON horario.id_horario = empleado.id_horario
INNER JOIN turno ON turno.id_turno = horario.id_turno
WHERE nombres = 'Nelly';

SE LEE: Seleccionamos los campos ‘nombres’ concatenado con ‘,’ al


‘appelido_materno’ con un espacio al campo ‘apellido_paterno’ que recibe un alias
de ‘Nombre completo’, un campo ‘nombre_turno’ de la tabla “turno”,
‘hora_entrada’, ‘hora_salida’ desde la tabla “EMPLEADO” que estará relacionado
con la tabla “Horario” mediante el campo ‘id_horario’ que debe ser igual al campo
de ‘id_horario’ de la tabla “Empleado”.Ademas se relacionara con la tabla “turno”
mediante el campo ‘id_turno’ que será igual al campo ‘id_turno’ de la tabla
“horario”.Donde el campo ‘nombres’ debe ser igual a ‘Nelly’.

/* 6) Contar cuantas venta se tiene desde la fecha '2018-02-23 ' */

SELECT COUNT(id_comprobante) as total


FROM comprobante
WHERE comprobante.fecha > '2018-02-23 ';

SE LEE: Seleccionamos un campo calculado donde cuente todo los ‘id_comprobante’


que recibe un alias ‘total’ desde la tabla “COMPROBANTE”.Donde el campo ‘fech’ se
mayor a ‘2018-02-23’.

/* 7) Obtener los detalles del primer comprobante especificando


el producto que se compro, su preciom y las cantidades */

SELECT producto.nombre,precio,cantidad, precio*cantidad as Total


FROM detalle_comprobante
INNER JOIN producto ON producto.id_producto = detalle_comprobante.id_producto
WHERE detalle_comprobante.id_comprobante = 1;

SE LEE: Seleccionamos los campo ‘nombre’ de la tabla


“producto”,’precio’,’cantidad’, un campo calculado donde multiplique el precio *
cantidad que recibe un alias de ‘Total’ desde la tabla “DETALLE_COMPROBANTE” que
se relacionara a su vez con la tabla “Producto” mediante el campo ‘id_producto’
que será igual al campo ‘id_producto’ de la tabla “detalle_producto”.

RESULTADO:

/* 8) Visualizar que tipo de pago se relizo en el comprobante que se emitio el


dia
'2018-03-24 18:46:00*/

SELECT comprobante.id_comprobante,
FORMAT(comprobante.fecha, 'dd/MM/yyyy hh:mm:ss') as fecha,
tipo_pago.nombre_tipo_pago
FROM comprobante
INNER JOIN tipo_pago ON tipo_pago.id_tipo_pago = comprobante.id_tipo_pago
WHERE comprobante.fecha = '2018-03-24 18:46:00';

SE LEE: Seleccionamos los campo ‘id_comprobante’,seteamos el formato de la fecha


a ‘'dd/MM/yyyy hh:mm:ss'’ mediante la función FORMAT(campo_fecha,formato) que
luego recibe un alias de ‘fecha’, un campo de ‘nombre_tipo_comprobante’ que viene
de la tabla “tipo_pago” desde de la tabla “COMPROBANTE” que se relacionara con la
tabla ‘tipo_pago’ mediante el campo ‘id_tipo_pago’ que será igual al campo
‘id_tipo_pago’ de la tabla “comprobante”.Donde la fecha del comprobante tien que
ser igula ‘2018-03-24 18:46:00’

/* 9) Listar todo los laboratorios que pueden tener un producto por lo minimo
teniendo en cuenta
que se van ordenar alfabeticamente */

SELECT DISTINCT laboratorio.id_laboratorio, laboratorio.nombre FROM laboratorio


INNER JOIN producto ON producto.id_laboratorio = laboratorio.id_laboratorio
ORDER BY laboratorio.nombre asc;

LEE: Seleccionar todo los registros distintos donde se muestre el campo


‘id_laboratorio’,’nombre’ desde la tabla “LABORATORIO” que tenga una relación con
la tabla “producto” mediante el campo ‘id_laboratorio' que sra igual al campo
‘id_laboratorio’ de la tabla “laboratorio”.Ademas se ordenara los registros por
nombre de laboratorio de manera ascendente.
/* 10) Mostrar todo los comprobantes emitidos y sus respectivos
clientes.Incluyendo que dichos
comprobantes tienen que estar ordenados por la fecha mas reciente primero*/

SELECT id_comprobante,
FORMAT(comprobante.fecha, 'dd/MM/yyyy hh:mm:ss') as fecha_format,
cliente.nombres+', '+cliente.apellido_paterno+' '+cliente.apellido_materno as
'nombre cliente'
FROM comprobante
INNER JOIN cliente ON cliente.id_cliente = comprobante.id_cliente
ORDER BY fecha desc;

LEE: Seleccionar el campo ‘id_comprobante’, seteamos el formato de la fecha a


‘'dd/MM/yyyy hh:mm:ss'’ mediante la función FORMAT(campo_fecha,formato) que luego
recibe un alias de ‘fecha_format’, el campo ‘nombres’ concatenado con ‘,’ al
‘appelido_materno’ con un espacio al campo ‘apellido_paterno’ que recibe un alias
de ‘Nombre cliente’ desde la tabla “COMPROBANTE” que se relacionara con la tabla
“Cliente” mediante el campo ‘id_cliente’ que será igual al campo ‘id_cliente’ de
la tabla “comprobante”.Luego estos registros serán ordenados por fecha
descendentes.

/* 12) Visualizar todo los productos con sus respectiva concentracion y ordenados
de forma descendente */

SELECT producto.nombre, precio, presentacion,


fecha_fabricacion, fecha_caducidad,
concentracion.cantidad, tipo_concentracion.nombre
FROM producto
INNER JOIN concentracion ON concentracion.id_concentracion =
producto.id_concentracion
INNER JOIN tipo_concentracion ON tipo_concentracion.id_tipo_concentracion =
concentracion.id_tipo_concetracion
ORDER BY producto.nombre desc;

LEE: Seleccionar el campo ‘nombre’ de la tabla “producto”, ‘precio’,


‘presentacion’, ‘fecha_fabricacion’, ‘fecha_caducidad’, ‘cantidad’ de la tabla
“concentración”, ‘nombre’ de la tabla “tipo_concentracion” desde la tabla
“PRODUCTO” que esta relacionado con la tabla “concentración” mediante el campo
‘id_concentracion’ que será igual al campo ‘id_concentracion’ de la tabla
“producto”.Tambien se relaciona con la tabla “tipo_concentracion” mediante e
campo ‘id_tipo_concentracion’ que será igual al campo ‘id_tipo_concentracion’ de
la tabla “concentración”.Luego se ordenara por el nombre de producto de manera
desendente.

/* 13) Queremos conocer el precio de los productos con un descuento del 20% */

SELECT nombre, presentacion, precio, precio-(precio*0.20) as descuento


FROM producto
ORDER BY nombre asc;
SE LEE: Seleccionar el campo ‘nombre’, ‘presentacion’, ‘precio’, un campo
calculado donde se aplicar el 15% de descuento al precio que recibe un alias
‘descuento’ desde la tabla “PRODUCTO”.A su vez esto resgistro se ordenara por el
nombre de forma ascendentes.
/* 14) Mostrar todo las sucursales que son del distrito de 'Chancay'*/

SELECT sucursal.id_sucursal, sucursal.nombre_sucursal,


direccion, telefono, nombre_distrito
FROM sucursal
INNER JOIN distrito ON distrito.id_distrito = sucursal.id_distrito
WHERE distrito.nombre_distrito = 'Chancay';

SE LEE: Seleccionar el campo ‘id_sucursal’, ‘nombre_sucursal’, ‘direccion’,


‘telefono’, ‘nombre_distrito’ desde la tabla “SUCURSAL” que se relacionara con
la tabla “distrito” mediante el campo ‘id_distrito’ que será igual al campo
‘id_distrito’ de la tabla “sucursal” .Donde el nombre del distrito sea ‘chancay’.

/* 15) Visualizar de que departamento, distrito y provincia de donde son los


proveedores,
y datos sobre el*/

SELECT nombre_contacto, celular_contacto, direccion,


nombre_departameto, nombre_provincia, nombre_distrito
FROM proveedor
INNER JOIN distrito ON distrito.id_distrito = proveedor.id_distrito
INNER JOIN provincia ON provincia.id_provincia = distrito.id_provincia
INNER JOIN departamento ON departamento.id_departamento =
provincia.id_departamento;
SE LEE: Seleccionar el campo ‘nombre_contacto’, ‘celular_contacto’,
‘direccion’, ‘nombre_departamento’, ‘nombre_provinciaa’, ‘nombre_distrito’ desde
la tabla “PROVEEDOR” que se relaciona con la tabla “distrito”

SUBCONSULTAS :
/*============== SUB-CONSULTAS ===============*/

/* 1) Contar los empleados que hay dentro de cada sucursal, y a su vez mostrar un
arreglo de los nombres de los empleados*/

SELECT id_sucursal, nombre_sucursal, direccion, telefono,


(
SELECT count(*)
FROM empleado
WHERE empleado.id_sucursal = sucursal.id_sucursal
) as total_empleados,
(SELECT STUFF((

SELECT ', '+nombres


FROM empleado
WHERE empleado.id_sucursal = sucursal.id_sucursal
FOR XML PATH('')

),1,1, '') )as 'array_nombre_empleado'


FROM sucursal
ORDER BY nombre_sucursal asc;

SE LEE: Seleccionar los cmapos ‘id_sucursal’, ‘nombre_sucursal’, ‘direccion’,


‘telefono’, donde se seleccione una sub-consulta que tiene una función agregada
donde cuenta todo os registros de la tabla “empleado” donde el campo
‘id_sucursal’ de la tabla ‘empleado’ sea igual al campo ‘id_sucursal’ de la tabla
“sucursal” que esa sub-consulta no recibirá un alias de ‘alias_empleados’, otra
sub-consulta donde se usa la función ‘STUFF’ junto con el ‘FOR XML PATH’ para que
devuelve un arreglo de los nombres de empleado, donde selecciona el campo
‘nombres’ concatenado con ‘, ‘.Se selecciona desde la tabla “empleado” donde el
campo ‘id_sucursal’ de la tabla ‘empleado’ es igual al campo de ‘id_sucursal’ de
la tabla ‘sucursal’. Se selecciona estos campos de tabla “SUCURSAL”. Ademas se
ordenara por el campo ‘nombre_sucursal’ de mnaera ascendente.
/* 2) Visualizar los clientes que han hecho realizado por lo menos una compra en
la farmacia */

SELECT *
FROM cliente
WHERE id_cliente IN (
SELECT DISTINCT id_cliente
FROM comprobante
)

SE LEE: Seleccionar todo los campos de la tabla “CLIENTE” donde al campo


‘id_cliente’ esta en la sub-consulta que selecciona los ‘id_cliente’ que sean
distintos desde la tabla “comprobante”.

/* 3) Contar cuantos cargos tiene cada empleado */


SELECT E.id_empleado, nombres, apellido_paterno, apellido_materno, dni,
direccion, celular,
(
SELECT count(*)
FROM cargo_empleado
WHERE cargo_empleado.id_cargo = E.id_cargo
) as 'numero cargos',
(SELECT STUFF((

SELECT ', '+nombre_cargo


FROM cargo_empleado
WHERE cargo_empleado.id_cargo = E.id_cargo
FOR XML PATH('')

),1,1, '') )as 'array_nombre_cargos'


FROM empleado as E;

SE LEE: Seleccionar ‘id_empleado’, ‘nombre’, ‘apellido_paterno’,


‘apellido_materno’, ‘dni’, ‘direccion’, ‘celular’, seleccionamos una sub-consulta
que cuenta todo los registros de la tabla “cargo_empleado” donde el campo
‘id_cargo’ de la tabla “cargo” será igual al campo ‘id_cargo’ de la tabla
empleado (esto indica una relación) esta sub-cnsulta recibe un alias de ‘numero
cargos’, otra sub-consulta donde se usa la función ‘STUFF’ junto con el ‘FOR XML
PATH’ para que devuelve un arreglo de los nombres de tipo de cargo, donde
selecciona el campo ‘nombre_cargo’ concatenado con ‘, ‘ desde la tabla
“Cargo_empleado” donde el campo ‘’id_cargo’ de la tabla ‘cargo_emeplado’ es
ingual al campo ‘id_cargo’ de la tabla Empleado.Se seleciona desde la tabla
“EMPLEADO” con alias ‘E’.

/* 4) Visualizar todo los clientes que han realizado más de una compra*/

SELECT dni,nombres+', '+ apellido_paterno+' '+apellido_materno as 'nombre


cliente',
celular, correo
FROM cliente
WHERE id_cliente IN
(
SELECT id_cliente
FROM comprobante
GROUP BY id_cliente
HAVING count(id_cliente) >= 2
)
ORDER BY nombres asc;

SE LEE: Seleccionar ‘dni el campo ‘nombres’ concatenado con ‘,’ al


‘apelido_paterno’ con un espacio al campo ‘apellido_materno’ que recibe un alias
de ‘Nombre completos’, ‘celular’, ‘correo’ desde la tabla “CLIENTE” donde el
campo ‘id_cliente’ esta en la subb-consulta selecciona los campo ‘id_cliente’
desde la tabla “comprobante” que será agrupado por ‘id_cliente’ y que tendrá un
where donde cuente la cantidad de id_cliente sea mayor o igual a 2. Ademas se
realizara un order by por el campo ‘nombres’ de manera ascendente.

/* 5) Contar cuantos productos hay segun su categoria*/

SELECT nombre,
(
SELECT count(id_producto)
FROM producto
WHERE producto.id_categoria = categoria.id_categoria
) as cantidad_productos
FROM categoria;

SE LEE: Seleccionamos el campo ‘nombre’, una sub-consulat que seleccione una


función agregaada donde cuente todo los registro mediante el ‘id_producto’ desde
la tabla “producto” donde el campo ‘id_categoria’ de la tabla “producto” sea
igual al campo ‘id_categoria” de la tabla “categoría” que recibe un alias de
‘cantidad_productos’.Se selecciona todo de la taba “CATEGORIA”.

/* 6) Mostrar cuantos comprobante emite cada empleado */

SELECT dni, nombres+', '+apellido_paterno+' '+apellido_materno as 'nombre


empleado',
(
SELECT count(id_empleado)
FROM comprobante
WHERE comprobante.id_empleado = empleado.id_empleado
) as 'veces emitir comprobante'
FROM empleado;

SE LEE: Seleccionamos el campo ‘dni’, el campo ‘nombres’ concatenado con ‘,’ al


‘appelido_paterno’ con un espacio al campo ‘apellido_materno’ que recibe un alias
de ‘Nombre empleado’, que selecciona ua su-consulta que cuenta todo los registros
mediante el campo ‘id_empleado’ desde la tabla “Comprobante’ donde el campo
‘id_empleado’ de la tabla ‘comprobante’ será igual al campo ‘id_empleado’ de la
tabla “empleado” (esto idica una relación) además esta sub-consuta recibe un
alias de ‘veces emitir comprobante’.Se selecciona los campos de la tabla
“EMPLEADO”.

/* 7) Mostrar todo los producto que son mayor o igual al precio promedio de todo
los producto*/

SELECT nombre, descripcion, precio


FROM producto
WHERE precio >=
(
SELECT AVG(precio)
FROM producto
)
ORDER BY precio desc;
SE LEE: Seleccionamos el campo ‘nombre’, ‘descripcion’, ‘precio’ desde la tabla
“PRODUCTO”.Donde el campo precio sea mayor oo igual a la sub-consulta que
selecciona el precio promedio de la tabla ‘producto’.Ademas estos registros están
ordenado por el campo ‘’precio’ de manera descendentes.
/* 8) Visualizar cuantos productos hay segun laboratorio*/

SELECT laboratorio.nombre,
(
SELECT COUNT(*)
FROM producto
WHERE producto.id_laboratorio = laboratorio.id_laboratorio
) AS 'cantidad producto'
FROM laboratorio;

SE LEE: Seleccionamos el campo ‘nombre’, seleccionamos una sub-consulta que


cuenta todo los registros de la tabla “Producto” donde el campo ‘id_laboratorio’
de la tabla producto sea igual al cmapo ‘id_laboratorio’ de la tabla
“laboratorio” (esto idndica una relación) esta sub-consulta recibe un alias de
‘cantiidad producto’.Se selecciona los campos desde la tabla “LABORATORIO”.
/* 9) Contar cuantos producto hay segun su concentración */

SELECT *,
(
SELECT COUNT(*)
FROM producto
WHERE producto.id_concentracion = concentracion.id_concentracion
) as cantidad_producto
FROM concentracion;

SE LEE: Seleccionamos todo los campos de la tabla “concentración” , una sub-


consulta que cuenta todo los registros de la tabla “producto” donde el campo
‘id_concentracion’ de la tabla “producto” sea igual al campo ‘id_concentracion’
de la tabla “concenracion” (esto indica una relación) esta sub-consulta recibe el
alias de ‘cantidad_producto’.Se selecciona los campos de la tabla
“concentración”.
/* 10) Visualizar cuantos empleados hay dentro del departamento de Lima*/

SELECT dni, nombres+', '+apellido_paterno+' '+apellido_materno as 'nombre


empleado',
direccion, celular,
(
SELECT departamento.nombre_departameto
FROM distrito
INNER JOIN provincia ON provincia.id_provincia =
distrito.id_provincia
INNER JOIN departamento ON departamento.id_departamento =
provincia.id_departamento
WHERE distrito.id_distrito = empleado.id_distrito
) as nombre_departamento
FROM empleado;

SE LEE: Seleccionamos elmcampo ‘dni’, el campo ‘nombres’ concatenado con ‘,’ al


‘appelido_paterno’ con un espacio al campo ‘apellido_materno’ que recibe un alias
de ‘nombre empleado’, ‘direccion’, ‘celular’, una sub-consulta donde tenga
devuelva el nombre de departamento que se seleccionara de la tabla “distrito”
que estará relaccionado con la tabla “provinica” mediante el campo ‘id_provincia’
que será igual al campo ‘id_provincia’ de la tabla “distrito” asimismo la
relaccion con la tabla “departamento” mediante el campo ‘id_departamento’ que
será igual all campo ‘id_departamento’ de la tabla “provincia”, donde el campo
‘id_distrito’ de la tabla “distrito” será igual al campo ‘id_distrito’ de la
tabla “empleado” (esto indica una relación) esta sub-consulta recibe un alias de
nombre_departamento.Se selecciona los campos de la tabla empleado.
/* 11) Visualizar cuantos comprobantes tiene cada tipo de comprobante*/

SELECT *,
(
SELECT COUNT(*)
FROM comprobante
WHERE comprobante.id_tipo_comprobante =
tipo_comprobante.id_tipo_comprobante
) AS cantidad_comprobantes
FROM tipo_comprobante;

SE LEE: Seleccionamos todo los campos de lat atabla tipo_empleado,una sub-


consulta donde cuenta todo los registros de la tabla “Comprobante” donde el campo
‘id_tipo_comprobante’ de la tabla “comprobante” será igual al campo
‘id_tipo_comprobante’ de la tabla “tipo_comprobante” esta sub-consulta recibe un
alias de cantidad_comprobantes.Se selecciona desde la tabla “TIPO_COMPROBANTE”.

/* 12) Mostrar la marca del producto pero que pertenezca al tipo de


"Gastroenterologia" */

SELECT id_producto, nombre, descripcion, precio,


presentacion, fecha_fabricacion, fecha_caducidad,
(
SELECT nombre
FROM marca_producto
WHERE marca_producto.id_marca_producto = producto.id_marca
) as marca
FROM producto
WHERE producto.id_categoria = 'CT04';

SE LEE: Seleccionamos los campos ‘id_producto’, nommbre’ , ‘descripcon’, ‘precio’


‘presentacion’, ‘fecha_fabriacion’, ‘fecha_caducidad’, una sub-consulta donde
muestra el nombre desde la tabla “marca_producto” donde el campo
‘id_marca_producto’ de la tabla “marca_producto” será igual al campo ‘id_marca’
de la tabla “producto” esta sub-consulta recibe el alias de marca.Se seleeciona
los campos de la tabla “PRODUCTO” donde el ‘id_categoria’ de la tabla “producto”
será igual a 6.

/* 13) Visualizar todo los comprobantes emitidos de la sucursal que tiene el


nombre 'Botica' */

SELECT id_comprobante, fecha


FROM comprobante
WHERE id_sucursal IN (
SELECT id_sucursal
FROM sucursal
WHERE sucursal.id_sucursal = comprobante.id_sucursal
AND sucursal.nombre_sucursal = 'Botica'
)

SE LEE: Seleccionamos los campos ‘id_comprobante’, ‘fecha’ desde la tabla


“COMPROBANTE” donde el campo ‘id_sucursal’ este en la sub-consulta que devuelve
el ‘id_sucursal’ de la tbal “sucursal” donde el campo ‘id_sucursal’ de la tabla
“sucursal” será igual al campo “id_sucursal” de la tabla “comprobante” (esto
indica una relación) además el nombre de la sucursal tiene que ser igual a
‘Botica’.
/* 14) Visualizar cuantos detalle venta tiene un comprobante venta*/

SELECT
(
SELECT count(*)
FROM detalle_comprobante
WHERE detalle_comprobante.id_comprobante =
comprobante.id_comprobante
) as 'numero detalles',*
FROM comprobante;

SE LEE: Seleccionamos una sub-consulta donde cuente todo los registros de la


tabla “detalle_comprobante” donde el campo ‘id_comprobante’ sea igual que el
campo ‘id_comprobante’ de la tabla “comprobante” que recibe un alias de ‘numero
detalles’. Se selecciona desde la tabla “COMPROBANTE”.

/* 15) Visualizar el detalle del comprobante del dia 2018-04-25 11:00:00 */

SELECT
(
SELECT nombre
FROM producto
WHERE producto.id_producto = detalle_comprobante.id_producto
) as nombre_producto,
(
SELECT precio
FROM producto
WHERE producto.id_producto = detalle_comprobante.id_producto
) as precio,
cantidad
FROM detalle_comprobante
WHERE id_comprobante =
(
SELECT id_comprobante
FROM comprobante
WHERE fecha = '2018-04-25 11:00:00'
);

SE LEE: Seleccionamos una sub-consulta donde devuelve el campo ‘nombre’ desde la


tabla “producto” donde el campo ‘id_producto’ de la tabla “producto” será igual
al campo de ‘id_producto’ de la tabla “detalle_comprobante” que recibe un alias
de nombre_producto, una sub-consulta donde devuelve el precio de la tabla
“producto” donde el campo ‘id_producto’ de la tabla “producto” será igual al
campo de ‘id_producto’ de la tabla “detalle_comprobante” que recibe un alias
de precio, el campo ‘cantidad’.Se selecciona desde la tabla ‘detalle_comprobante’
donde el id_comprobante tiene que ser igual a la consuta seleccionada que
devuelve el id_commporbante desde la tabla “COMPROBANTE” donde el campo ‘fecha’
sea igual a ‘2018-04-25’.

6.- Procedimientos
/* ================= PROCEDIMIENTO ================*/

/* 1) Crear un procedimiento para consultar los datos del empleado mediante su


DNI*/

CREATE PROCEDURE EMPLEADODNI @DNI CHAR(8)


AS
SELECT *
FROM empleado
WHERE dni = @DNI;

EXEC EMPLEADODNI '75111097';

SE LEE: Crea el procedimiento con el nombre de ‘EMPLEADODNI’ con un parámetro


‘dni’ y su tipo de dato char con una longitud de 8 digitos, con las siguientes
instrucciones: Selecciona todos los registros de la tabla ‘empleado’ en donde el
campo dni sea igual a los valores del parámetro.
Para ejecutar llamamos mediante el nombre del procedimiento y su parametro

RESULTADO:

/* 2) Crear un procedimiento donde se busque al empleado por su Apellido Paterno


y visualizar que tipo de empleado es. */

CREATE PROCEDURE TIPOEMPLEADOAP @APELLIDOOPATERNO VARCHAR(20) = 'Moreno'


AS
SELECT nombres, apellido_paterno, apellido_materno,dni, direccion,
celular, tipo_empleado.nombre_tipo as 'tipo empleado'
FROM empleado
INNER JOIN tipo_empleado ON tipo_empleado.id_tipo_empleado =
empleado.id_tipo_empleado
WHERE apellido_paterno = @APELLIDOOPATERNO;

EXEC TIPOEMPLEADOAP;

SE LEE: Crear el procedimiento llamado 'TIPOEMPLEADOAP' @Nombre del parametro por


el que se hallara, el tipo de dato vrachar con una longitud de 20 caracteres(en
este caso se especifica 'Moreno' el apellido paterno por defecto para el
parametro) y las siguientes instrucciones(AS).

Selecciona los campos 'nombres, apellido paterno, materno, dni, direccion,


celular', al campo nombre_tipo de la tabla tipo_empleado llamarlo (as)
'tipo_empleado' de la tabla ‘empleado’, agregar un inner join al campo
tipo_empleado que una a las tablas (por sus datos) tipo_empleado y empleado.
Donde los valores del campo 'apellido_paterno' sea igual al parámetro que se pasa
mediante el procedimiento.

RESULTADO:

/* 3) Crear un procedimiento donde se pueda visualizar los detalles de un


comprobantes mediante fecha que se ha emitido */

CREATE PROCEDURE FECHACOMPROBANTED @fecha datetime


AS
BEGIN
IF ( (select count(id_comprobante) AS 'count' from comprobante
where fecha = @fecha) > 0)

SELECT comprobante.id_comprobante, fecha,


numero_caja, cantidad,
(
SELECT nombre
FROM producto
WHERE producto.id_producto =
detalle_comprobante.id_producto
) as nombre_producto
FROM comprobante
INNER JOIN detalle_comprobante ON
detalle_comprobante.id_comprobante = comprobante.id_comprobante
WHERE fecha = @fecha;
ELSE
PRINT 'LA FECHA QUE HA INGRESADO NO CORRESPONDE A NINGUN
COMPROBANTE'
END

EXEC FECHACOMPROBANTED '2018-03-12 09:00:00'

SE LEE: Crear el procedimiento llamado 'FECHACOMPROBANTED' @Nombre del parametro,


el tipo de datetime y las siguientes instrucciones(AS). Comenzando condicionar si
existe la fecha en un comprobante.Si es verdadero realizamos la siguiente
consulta donde seleccione el campo 'id_comprobante' de la tabla 'comprobante',
los campos 'fecha', 'numero_caja', 'cantidad' de la tabla 'comprobante' en cuya
sub-consulta selecciona el campo 'nombre' de la tabla 'producto' donde los
valores del campo id_producto sea igual al de la tabla 'producto' y
'detalle_comprobante' y llamar a este nuevo campo 'nombre_producto'. Uso del
inner join para unir a las tablas 'detalle_comprobante' y 'comprobante' mediante
el campo 'detalle_comprobante', donde los datos del campo ‘fecha’ sean los del
parametro que se desea buscar.Si no cumpliera con la condición se imprimirá un
mensaje donde diga ‘LA FECHA QUE HA INGRESADO NO CORRESPONDE A NINGUN
COMPORBANTE’.Luego de cumplir las condiciones se termina la ejecución del
procedimientos.

Para ejecutar poner el nombre del procedimiento junto con el registro de una
fecha y hora

RESULTADO:

/* 4) Crear un procedimiento donde se inserte nuevo productos e indicarles los


parametros */

CREATE PROCEDURE [INSERTA PRODUCTO]


(
@ID char(4),
@NOMBRE VARCHAR(50),
@DESCRIPCION TEXT,
@PRECIO DECIMAL(4,2),
@PRESENTACION VARCHAR(50),
@FECHA_FABRICACION DATE,
@FECHA_CADUCIDAD DATE,
@ID_CATEGORIA CHAR(4),
@ID_MARCA CHAR(4),
@ID_LABORATORIO CHAR(4),
@ID_CONCENTRACION CHAR(4)
)
AS
--Ingresar en la tabla 'producto' los siguientes datos
INSERT INTO producto VALUES
(
--Esto hara que se agreguen los datos como un nuevo producto
@ID, @NOMBRE, @DESCRIPCION, @PRECIO, @PRESENTACION, @FECHA_FABRICACION,
@FECHA_CADUCIDAD, @ID_CATEGORIA,
@ID_MARCA, @ID_LABORATORIO, @ID_CONCENTRACION
)

--Ejecutar el procedimiento nombrando los datos que quiero ingresar


EXEC [INSERTA PRODUCTO] 'PN01','Betametasona','crema','29.00','Envase','2017-05-
02','2018-01-02','CT01','M001','L001','CO10';

SE LEE:Se crea un procedimiento co nombre [INSERTA PRODUCTO] con loas parámetros


de @id de tipo char con 4 carcateres, @nombre de tipo varchar con 50 caracteres,
@descripcion detipo text, @precio de tipo decimal con 4 enteros y dos decimales,
@presentacion de tipo varchar con una longitud de 50 caracteres,
@fecha_fabricacion de tipo date, @fecha_caducidad de tipo date, @id_categoria de
tipo char con una longitud de 4 caracteres, @id_marca de tipo char con una
longitud de 4 caracteres, @id_laboratorio de tipo char con una longitud de 4
caracteres, @id_concentracion de tipo char con una longitud de 4 caracteres, ya
establecidos los parámetros se ejecutara una consulta donde se INSERTa en la
tabla “producto” los siguientes valores que se pasa todo los parámetros.

Cuando se ejecute se llama el nombre del procedimiento y los valores para cada
parámetro.

RESULTADO:

/* 5) Crear un procedimiento donde se puede ingresar el tipo de producto y a


partir de ahi dar un lista de esos productos */

CREATE PROCEDURE PRODUCTOSSTIPO @NOMBRETIPOPRODUCTO VARCHAR(47)


AS
SELECT *
FROM categoria
INNER JOIN producto ON producto.id_categoria = categoria.id_categoria
WHERE categoria.nombre = @NOMBRETIPOPRODUCTO ;

EXEC PRODUCTOSSTIPO 'Dermatologia';


SE LEE: Crear el procedimiento 'PRODUCTOSSTIPO' cuyo parametro principal sera
'@NOMBRETIPOPRODUCTO' junto a su tipo de dato y dar instrucciones(AS). Selecciona
todos los datos de la tabla categoría, insertar inner join para unir a las tablas
'producto' y 'categoria' que comparten un mismo campo (id_categoria). Donde los
datos del campo 'nombre' de la tabla 'categoria' sean iguales al parametro del
procedimiento.

Ejecutar el parametro con una categoria del producto

RESULTADO:

/* 6) Crear un procedimiento donde permita conocer cuantos comprobantes ha


emitido un determinado empleado mediante su DNI y en una fecha establecida */

CREATE PROCEDURE NCOMPROBANTESPOREMPLEADO ( @DNI CHAR(8) , @FECHA date)


AS
BEGIN
SELECT nombres+', '+ apellido_paterno +' '+apellido_materno as 'nombres
completos',
dni, (
SELECT COUNT(*)
FROM comprobante
WHERE comprobante.id_empleado = id_empleado
AND comprobante.fecha = @FECHA
) as numero_comprobantes
FROM empleado
WHERE dni = @DNI;
END

EXEC NCOMPROBANTESPOREMPLEADO '75111097','2018-05-02';

SE LEE: Crear el procedimiento 'NCOMPROBANTESPOREMPLEADO' con 2 parametros y sus


respectivos tipos de datos, a continuación proceden las instrucciones: Selecciona
los campos 'nombres''apellido_paterno''apellido_materno' y unirlos ("campo+',
'+campo") llamar a este nuevo campo 'nombres completos', generar un nuevo campo
con una sub-consulta que seleccione los datos de la tabla comprobante, pero esta
seleccion es en forma de conteo (count), donde el campo 'id_empleado' sea igual
al de la tabla comprobante y(AND) que el campo fecha de la tabla comprobante sea
igual al parametro que deseamos buscar; llamar a este nuevo campo
'numero_comprobantes'. Todo esto de la tabla empleado, donde el campo dni sea el
parametro que se busca.

Para ejecutar escribir el nombre del procedimiento y los 2 parametros


establecidos

RESULTADO:
/* 7) Crear un procedimiento donde se pueda visualizar toda las marcas que puede
tener un determinado producto. */

CREATE PROCEDURE LISTMARCAPRODUCT @NOMBREPRODUCTO VARCHAR(50)


AS
BEGIN
IF( (SELECT count(id_producto) as count_product
FROM producto
WHERE nombre = @NOMBREPRODUCTO) > 0)

SELECT id_producto,producto.nombre, producto.descripcion, precio,


producto.fecha_fabricacion, producto.fecha_caducidad,
marca_producto.nombre as 'marca producto'
FROM producto
INNER JOIN marca_producto ON marca_producto.id_marca_producto =
producto.id_marca
WHERE producto.nombre = @NOMBREPRODUCTO;
ELSE
PRINT 'El producto : ' +@NOMBREPRODUCTO+'que se ha ingresado no
existe :('
END

EXEC LISTMARCAPRODUCT 'Deflazacort';

SE LEE: Crear el procedimiento llamado 'LISTMARCAPRODUCT' @Nombre del parametro,


el tipo de dato varchar de una longitud de 50 caracteres y las siguientes
instrucciones(AS): Se inicia con una condición donde verifica si existe el
producto con una sub-consulta que cuenta el ‘id_producto’ que fuese mayor a 0
Entonces selecciona los campos id_producto,producto.nombre, producto.descripcion,
precio, producto.fecha_fabricacion, producto.fecha_caducidad,
marca_producto.nombre (Este campo como es de otra tabla la llamaremos 'marca
producto') as 'marca producto'; De la tabla ´producto´, hacer un inner join donde
una las tablas marca_producto y producto en donde su campo 'id_marca_producto' y
'producto' son las mismas, donde el parametro de este procedimiento corresponda a
los datos del campo nombre de la tabla 'producto', es decir, buscar desde esa
tabla.Si no cumpliera la condición se imprimirá en la consola ‘El nombre del
producto que se ha ingresado no existe’.

Ejecutar el procedimiento con un nombre de producto como parametro

RESULTADO:
/* 8) Crear un procedimiento para que cargo tiene un empleado, que se buscara por
su apellido_paterno*/

CREATE PROCEDURE NOMBRECARGOEMPLEADO @APELLIDOPATERNO VARCHAR(20)


AS
DECLARE @APELLOPATERNODEFAULT VARCHAR(20)
SET @APELLOPATERNODEFAULT = NULL
SELECT @APELLOPATERNODEFAULT = apellido_paterno
FROM empleado
WHERE apellido_paterno = @APELLIDOPATERNO
IF( @APELLOPATERNODEFAULT IS NULL)
PRINT 'El apellido paterno introducido no es es válido: ' +
@APELLIDOPATERNO
ELSE
BEGIN
SELECT Emp.id_empleado, nombres, apellido_paterno,
apellido_materno, dni,
direccion, celular,
(
SELECT nombre_cargo
FROM cargo_empleado
WHERE cargo_empleado.id_cargo = Emp.id_cargo
) as 'nombre cargo'
FROM empleado as Emp
WHERE Emp.apellido_paterno = @APELLIDOPATERNO;
END

EXEC NOMBRECARGOEMPLEADO 'Jacome';

SE LEE: Crear el procedimiento con el nombre ‘NOMBRECARGOEMPLEADO’ que se pasará


un parámetro @APELLIDO PATERNO de tipo varchar con una longitud de 20 caracteres
donde ejecutara la siguiente consulta:

Primero se declara una variable con el ombre de @APELLOPATERNODEFAULT de tipo


varchar con una longitud de 20 caracteres que luego será reemplazado por un valor
“NULL”, luego pasará a realizar una consulta donde selecctionamos al campo
‘apellido_paterno’ y al mismo tiempo se le reemplaza como valor a la variable por
defecto que viene de la tabla “empleado” donde el campo ‘apellido_paterno’ será
igual al parámetro que se ha pasado @APELLIDOPATERNO.Asi mismo se pasara una
condición verificando si el parámetro que se ha pasado es NULL, por lo tanto
imprimiresmos un mensaje donde diga que: “El apellido paterno introducido no es
válido”.Si fuese válido entonces se comenzara a realizar una consulta que
seleccione los campo ‘id’ de la tabla “Empleado”, el campo ‘nombres’,
‘apelido_paterno’, ‘apellido_materno’, ‘dni’,’direccion’, una sub-consulta que
retornara el nombre del cargo que ocupa el cliente.Todo estos campos se
selecciona de la tabla “EMPLEADO” que tiene un alias de ‘Emp’ con la condición de
que el campo ‘apellido_paterno’ sea igual al parámetro que se pasara.

RESULTADO:
/* 9) Crear un procedimiento para visualizar los detalles del cliente por su
Apellido_Parterno quien ha recibido el comprobante segun la fecha determinada*/

CREATE PROCEDURE CLIENTEPORCOMPROBANTE1 (@APELLIDOPATERNO VARCHAR(20),@FECHA


datetime)
AS
SELECT *
FROM cliente
INNER JOIN comprobante ON comprobante.id_cliente = cliente.id_cliente
WHERE cliente.apellido_paterno = @APELLIDOPATERNO
AND comprobante.fecha = @FECHA;

EXEC CLIENTEPORCOMPROBANTE1 'Vilma','2018-03-12 09:00:00';

SE LEE: Crear el procedimiento llamado 'CLIENTEPORCOMPROBANTE1' @Nombre de los 2


parametros y sus tipo de dato: Selecciona los datos de la tabla cliente, Inner
join donde muestre que el campo 'comprobante' es el mismo para las tablas
'comprobante' y 'cliente' donde(where) los datos del campo 'apellido_paterno' de
la tabla 'cliente' sean iguales al parametro del procedimiento Y(AND) de igual
manera con el campo fecha, que el parametro sea el dato que busco.

Ejecutar el procedimiento con sus 2 parametros

RESULTADO:

/* 10) Crear un procedimiento donde se calcule las ventas que hace cada
sucursal*/

CREATE PROCEDURE VENTASPORSUCURSAL @NOMBRESU VARCHAR(45)


AS
SELECT sucursal.nombre_sucursal,
(
SELECT COUNT(*)
FROM comprobante
WHERE comprobante.id_sucursal = sucursal.id_sucursal
) as 'numero comprobantes'
FROM sucursal
WHERE nombre_sucursal = @NOMBRESU;

EXEC VENTASPORSUCURSAL 'PharmaSEL';

SE LEE: Crear el procedimiento llamado 'VENTASPORSUCURSAL' @Nombre del parametro,


el tipo de dato y las siguientes instrucciones(AS): Selecciona el campo 'nombre
sucursal’, un nuevo campo que selecciona en forma de conteo los datos de la tabla
comprobante, donde el campo 'id_sucursal' es el mismo para las tablas
'comprobante' y 'sucursal'. A este nuevo campo llamarlo 'numero comprobantes',
tod esto de (FROM) la tabla 'sucursal'.
Donde el parametro de este procedimiento corresponda a los datos del campo nombre
de la tabla 'nombre_sucursal', es decir, buscar desde esa tabla.

Ejecutar con dicho parámetro 'PharmaSEL'.

RESULTADO:

Vous aimerez peut-être aussi