Está en la página 1de 19

--comando SELECT

--Ver lo que contiene la tabla a nivel de registros


-- "*" todos los campos

SELECT *FROM CLIENTE


select codclie, nomclie, apepclie, apemclie
from CLIENTE

-- los registros que no tengan carnet de extranjeria


select * from CLIENTE
WHERE carnetext is not null

select *from CIUDAD


select * from CLIENTE

insert into CIUDAD


values('116','CUSCO','1288')

INSERT INTO CLIENTE


values ('C004','Pedro','Sanchez','Molina','S','116','52563244',NULL)

--Mostrar a los clientes que sean de Arequipa, Lima o Cusco


select *from CLIENTE
where codciudad ='111' or codciudad='112' or codciudad='116'

-- operar "IN" que este dentro de una lista


select * from CLIENTE
where codciudad in('111','112','116')

--mostrar a los clientes que NO sean de Arequipa, Lima o Cusco

-- BETWEEN entre un rango


select * from SERVICIOS
select * from TIPOSERV

insert into TIPOSERV


values('S3','Almuerzo y cenas')

insert into SERVICIOS


values('004','Almuerzo',25.00,'S3'),
('005','Cena',20.00,'S3')

--mostrar los servicios cuyo precio esten entre 10 y 30 soles


select * from SERVICIOS
where precioser >=10 and precioser<=30

--segunda forma de mostrar datos entre esos dos rangos


select * from SERVICIOS
where precioser between 10 and 30

insert into SERVICIOS


values('006','xxxx','25.00','S3')

delete from SERVICIOS -- sirve para borrar


where codserv ='006'

--mostrar fechas que esten entre el 25 y el 27 de septiembre

select * from RESREGCOM_SERV


where fechped between '25/09/2021' and '27/09/2021'

--mostrar fechas que no esten entre el 25 y el 27 de septiembre


select * from RESREGCOM_SERV
where fechped not between '25/09/2021' and '27/09/2021'

select * from RES_REG_COM


-- mostrar aquellas reservas que tenga numero de comprobante 001-001, 001-002,
001-010 o 001-021
-- y que su estado no sea "I" del cliente C003 y que su fecha de salida sea en
algun dia del mes de
--septiembre
where nrocompro in ('001-001', '001-002', '001-010','001-021') and estadoreser <>
'I' and codclie='C003'
and fechsalida not between '01/09/2021' and '30/09/2021'
select * from RES_REG_COM
-- "<> " significa distinto

--like ---> comparar con parte de una cadena (NO EN NUMEROS)


-- se unsa con comodines : % (varios caracteres), _ (un solo caracter), [] (un
rango de caracteres)
select * from CLIENTE

-- Mostrar a los clientes cuyo apellido paterno comiencen con M


select * from CLIENTE
where apepclie like 'M%'

--Mostrar aquellos DNI terminen en 40


select * from CLIENTE
where dni like '%40'

-- que contenga la letra M en cualquier posicion


select * from CLIENTE
where apepclie like '%M%'

--que no contengan la letra M en cualquier posicion


select * from CLIENTE
where apepclie not like '%M%'

--mostrar aquellos dni cuyo penultimo digito sea el 4


select * from CLIENTE
where dni like '%4_'

--mostrar a todos los clientes cuyo apellido paterno comience con


--las letras del A hasta la M
select * from CLIENTE
where apepclie like '[A-M]%'

--Mostrar aquellos DNI que terminen en 5 al 9


--y que su nombre tengan la letra A o E y que
-- no tengan carnet de extranjeria
select * from CLIENTE
where (dni like '%[5-9]'
and (nomclie like '%A%' or nomclie like '%E%')
and carnetext is null.

-- ORDER BY mostrar la consulta ordenada


-- se usa (asc ---> ascendente) (desc <--- descendente)
INSERT INTO CLIENTE
values
('C005','Juan','Sanchez','Aparicio','C','111','25545111',null),
('C006','Alex','Merci','Sosa','C','113',null,'1264564564')

select * from CLIENTE

--ordena por appellido paterno si hay iguales ordena por materno


select * from CLIENTE
order by apepclie,apemclie asc

-- mostrar aquellos clientes que tengan DNI


--Ordenar la lista de forma descendente

select * from CLIENTE

select * from CLIENTE


WHERE dni is not null
order by dni desc

--select a mas de una tabla (nombre de la tabla.campo)


select * from CLIENTE
select * from RES_REG_COM
--MOSTRAR LOS NOMBRES DE CLIENTE QUE HICIERON RESERVA Y REGISTRO
select RES_REG_COM.codreserva, RES_REG_COM.fechreser,
RES_REG_COM.codregistro, RES_REG_COM.fechregis,
CLIENTE.nomclie, CLIENTE.apepclie, CLIENTE.apemclie
from CLIENTE INNER JOIN RES_REG_COM --sacar lo comun en las tablas
(INTERSECNCION)
ON CLIENTE.codclie=RES_REG_COM.codclie

--MOSTRAR LOS NOMBRES DE CLIENTE QUE HICIERON RESERVA de que ciudad vienen
select * from CLIENTE
select * from RES_REG_COM
select * from CIUDAD

select RES_REG_COM.codreserva, RES_REG_COM.fechreser,RES_REG_COM.codregistro,


RES_REG_COM.fechregis,
CLIENTE.nomclie, CLIENTE.apepclie, CLIENTE.apemclie,CIUDAD.nomciudad,
PAIS.nompais
from CLIENTE INNER JOIN RES_REG_COM --sacar lo comun en las tablas
(INTERSECNCION)
ON CLIENTE.codclie=RES_REG_COM.codclie
INNER JOIN CIUDAD
ON CLIENTE.codciudad= CIUDAD.codciudad
INNER JOIN PAIS
ON CIUDAD.codpais = PAIS.codpais

--Mostrar el precio de la habitacion( precio y numero),


--su tipo de habitacion(nombre del tipo) de aquellas reservas(fecha registro y
recha salida)

SELECT * FROM RES_REG_COM


SELECT * FROM HABITACION
SELECT * FROM TIPOHAB

select RES_REG_COM.fechregis, RES_REG_COM.fechsalida,


HABITACION.preciohab, HABITACION.nrohab, TIPOHAB.nomtipohab
from HABITACION INNER JOIN RES_REG_COM
ON HABITACION.nrohab = RES_REG_COM.nrohab
INNER JOIN TIPOHAB
ON TIPOHAB.codtipohab= HABITACION.codtipohab
--MOSTRAR LOS CLIENTES QUE PROCEDEN DE BARCELONA O MADRID QUE HAN REGISTRADO EN
EL HOTEL
--PERMANENCIA EN EL MES DE SETIEMBRE CON SUS SERVICIOS SOLICITADOS

Select CLIENTE.nomclie,CLIENTE.apepclie, CIUDAD.nomciudad, RES_REG_COM.fechregis,


RES_REG_COM.fechsalida, RESREGCOM_SERV.cantidad, SERVICIOS.nomserv,
RESREGCOM_SERV.fechped
from Cliente INNER JOIN CIUDAD
on Cliente.codciudad = Ciudad.codciudad
INNER JOIN RES_REG_COM
on CLIENTE.codclie = RES_REG_COM.codclie
INNER JOIN RESREGCOM_SERV
on RES_REG_COM.codreserva = RESREGCOM_SERV.codreserva
INNER JOIN SERVICIOS
on SERVICIOS.codserv = RESREGCOM_SERV.codserv
where CIUDAD.nomciudad in ('Barcelona', 'Madrid','Arequipa')
and res_reg_com.fechregis between '01/09/2021' and '30/09/2021'

--MOSTRAR AQUELLOS SERVICIOS QUE NO SEAN GASEOSAS


--PEDIDOS EN LAS HABITACIONES 101,102 O 104 Y QUE HAYAN SIDO REGISTRADO
--POR EL RECEPCIONISTA JUAN PEREZ
--DEL 01 DE SEPTIEMBRE AL 15 DE SEPTIEMBRE DEL 2021
--ordenados de la A a la Z por los servicios

select RES_REG_COM.nrohab,SERVICIOS.nomserv, RESREGCOM_SERV.fechped,


RES_REG_COM.codregistro,
RECEPCIONISTA.nomrecep, RECEPCIONISTA.apeprecep

From RES_REG_COM INNER JOIN RECEPCIONISTA


on RES_REG_COM.codrecep = RECEPCIONISTA.codrecep
INNER JOIN RESREGCOM_SERV
on RES_REG_COM.codreserva = RESREGCOM_SERV.codreserva
INNER JOIN SERVICIOS
on RESREGCOM_SERV.codserv = SERVICIOS.codserv
where SERVICIOS.nomserv not like ('Gaseosa%') --una pequeña parte like
and RES_REG_COM.nrohab in ('101','102','104') and RECEPCIONISTA.nomrecep
=('Juan') --en ves de = es in pero si es en varios por comparar
and RECEPCIONISTA.apeprecep = ('Perez') and RESREGCOM_SERV.fechped between
'01/09/2021' and '15/09/2021'
order by SERVICIOS.nomserv asc

--PRODUCTO CARTESIANO

select RES_REG_COM.nrohab,SERVICIOS.nomserv, RESREGCOM_SERV.fechped,


RES_REG_COM.codregistro,
RECEPCIONISTA.nomrecep, RECEPCIONISTA.apeprecep

From RES_REG_COM INNER JOIN RECEPCIONISTA


on RES_REG_COM.codrecep = RECEPCIONISTA.codrecep
INNER JOIN RESREGCOM_SERV
on RES_REG_COM.codreserva = RESREGCOM_SERV.codreserva
INNER JOIN SERVICIOS
on RESREGCOM_SERV.codserv = SERVICIOS.codserv
where SERVICIOS.nomserv not like ('Gaseosa%') --una pequeña parte like
and RES_REG_COM.nrohab in ('101','102','104') and RECEPCIONISTA.nomrecep
=('Juan') --en ves de = es in pero si es en varios por comparar
and RECEPCIONISTA.apeprecep = ('Perez') and RESREGCOM_SERV.fechped between
'01/09/2021' and '15/09/2021'
order by SERVICIOS.nomserv asc

--LEFT JOIN Y RGIH JOIN


SELECT * FROM CLIENTE
SELECT * FROM RES_REG_COM

--MOSTRAR A TODOS LOS CLIENTES QUE "NO" HAYAN REALIZADO RESERVA


SELECT CLIENTE.nomclie, CLIENTE.apepclie, RES_REG_COM.codreserva
from CLIENTE left join RES_REG_COM
on CLIENTE.codclie= RES_REG_COM.codclie
where RES_REG_COM.codreserva is null

--Mostrar el nombre de los servicios que no hayan sido solicitado


--por las habitaciones 101 o 102
select SERVICIOS.nomserv, RESREGCOM_SERV.codserv,
RESREGCOM_SERV.codreserva,RES_REG_COM.nrohab
from SERVICIOS left JOIN RESREGCOM_SERV
on SERVICIOS.codserv = RESREGCOM_SERV.codserv
LEFT JOIN RES_REG_COM
on RESREGCOM_SERV.codreserva= RES_REG_COM.codreserva
where RESREGCOM_SERV.codserv is null
or RES_REG_COM.nrohab not in ('101','102')

--Mostrar los tipos de habitacion que no han sido reservados por clientes
--de Arequipa
select TIPOHAB.nomtipohab, HABITACION.nrohab,RES_REG_COM.codreserva,
CLIENTE.nomclie, CLIENTE.apepclie, CIUDAD.nomciudad
from TIPOHAB INNER JOIN HABITACION
on TIPOHAB.codtipohab = HABITACION.codtipohab
left join RES_REG_COM
on HABITACION.nrohab = RES_REG_COM.nrohab
left JOIN CLIENTE
on RES_REG_COM.codclie = cliente.codclie
left JOIN CIUDAD
on CLIENTE.codciudad= CIUDAD.codciudad
where RES_REG_COM.codreserva is null
or ciudad.nomciudad <> 'Arequipa'

--FUNCIONES DE FECHA -----> MONTH(), YEAR(), DAY()


--MOSTRAR LOS CLIENTES QUE PROCEDEN DE AREQUIPA QUE HAN REGISTRADO EN EL HOTEL
--PERMANENCIA en el mes de setiembre

Select CLIENTE.nomclie,CLIENTE.apepclie, CIUDAD.nomciudad, RES_REG_COM.fechregis,


RES_REG_COM.fechsalida
from Cliente INNER JOIN CIUDAD
on Cliente.codciudad = Ciudad.codciudad
INNER JOIN RES_REG_COM
on CLIENTE.codclie = RES_REG_COM.codclie

where CIUDAD.nomciudad = 'Arequipa'


and month(res_reg_com.fechregis) ='09' --EXTRAE EL mes de la fecha y lo compara
and year(RES_REG_COM.fechregis)= '2021'
--mostrar los clientes que preceden de arquipa que han registrado en el holte
--con permanencia el 5,19,28 de setiembre o el 9 de octubre 2021
Select CLIENTE.nomclie,CLIENTE.apepclie, CIUDAD.nomciudad, RES_REG_COM.fechregis,
RES_REG_COM.fechsalida
from Cliente INNER JOIN CIUDAD
on Cliente.codciudad = Ciudad.codciudad
INNER JOIN RES_REG_COM
on CLIENTE.codclie = RES_REG_COM.codclie

where CIUDAD.nomciudad = 'Arequipa'


and ((month(RES_REG_COM.fechregis)='09'and day(RES_REG_COM.fechregis) in
(5,19,24))
or ((month(RES_REG_COM.fechregis)='10') and day (RES_REG_COM.fechregis)='09'))
and year(RES_REG_COM.fechregis)='2021'

--FUNCIONES AGREGADAS ---> COUNT(), SUM(), MAX(), MIN(),AVG()


select * from SERVICIOS
--cuantos servicios hay en el hotel
--count(*) or count(campo)
select count(*) from SERVICIOS

--cuanto suman todos los servicios de la reserva 001


select * from RESREGCOM_SERV
select sum(SERVICIOS.precioser)
FROM SERVICIOS inner join RESREGCOM_SERV
on SERVICIOS.codserv= RESREGCOM_SERV.codserv
where RESREGCOM_SERV.codreserva ='R001'

--cuanto es el promedio de todos los servicios


select avg(SERVICIOS.precioser)
FROM SERVICIOS inner join RESREGCOM_SERV
on SERVICIOS.codserv= RESREGCOM_SERV.codserv
where RESREGCOM_SERV.codreserva ='R001'

--cuanto es el promedio de todos los servicios qie sean gaseosas

select avg(PRECIOSER) FROM SERVICIOS


where nomserv like'Gaseosa%'

SELECT * FROM SERVICIOS


--CUAL ES EL PRECIO MAS CARO Y EL MAS BARATO
SELECT MAX(PRECIOSER) FROM SERVICIOS
SELECT MIN(PRECIOSER) FROM SERVICIOS

--FUNCIONES AGREGADAS
USE HOTEL_5ESTRELLAS
--COUNT ()---> CUENTA LOS REGISTROS , COUNT (CAMPO) CUENTA A NIVEL DEL CAMPO

SELECT * FROM CLIENTE


--CUANTOS CLIENTES TENGO?
SELECT COUNT(*) FROM CLIENTE
--CUANTOS CLIETNES TIENE DNI?
SELECT COUNT(DNI) AS 'cantidad de clientes con DNI' FROM CLIENTE
--CUANTOS CLIENTES HAN REALIZADO RESERVA?
SELECT * FROM CLIENTE
SELECT * FROM RES_REG_COM

select count(fechreser) as 'Clientes con reserva' from RES_REG_COM

--CUANTOS CLIENTES DE AREQUIPA HAN REALIZADO RESERVA


SELECT * FROM CLIENTE
SELECT * FROM RES_REG_COM

select COUNT(fechreser)
from ciudad inner join cliente
on ciudad.codciudad = cliente.codciudad
inner join res_reg_com
on cliente.codclie = res_reg_com.codclie
where ciudad.nomciudad = 'Arequipa'

--sum() sumar datos numericos


select * from RESREGCOM_SERV
--CUANTAS CANTIDADES SE HAN SOLICITADO EN LA RESERVA R001 DEL 24/09/2021 AL
25/09/2021
select sum(cantidad) from RESREGCOM_SERV
where codreserva= 'R001' and
fechped between '24/09/2021' and '25/09/2021'

--CUANTO ES EL MONTO SOLICITADO EN LA RESERVA R001 DEL 24/09/2021 AL 25/09/2021

select * from RESREGCOM_SERV


select * from SERVICIOS

SELECT SUM(RESREGCOM_SERV.cantidad*SERVICIOS.precioser)
AS 'monto reserva R001'
FROM RESREGCOM_SERV INNER JOIN SERVICIOS
ON RESREGCOM_SERV.codserv=SERVICIOS.codserv
WHERE RESREGCOM_SERV.codreserva='R001'
AND RESREGCOM_SERV.fechped BETWEEN '24/09/2021' AND '25/09/2021'

--AVG (PROMEDIO A UN DATO NUMERICO)


--cuanto es el PROMEDIO DE LOS SERVICIOS
select * from SERVICIOS
select AVG(precioser) from SERVICIOS

--cuanto es el PROMEDIO DE LOS SERVICIOS QUE SEAN GASEOSAS O GALLETAS

select avg(precioser) from SERVICIOS


where nomserv like 'gaseosa%' or nomserv like 'galleta%'

--cual es el precio mayor y cual es el precio menor en SERVICIOS

select max(precioser) from SERVICIOS


select min(precioser) from SERVICIOS

--GROUP BY (AGRUPAR POR)


select * from CLIENTE
--CUANTOS CLIENTES HAY POR ESTADO CIVIL (SOLTEROS Y CASADOS)
SELECT estcivil,count(*) as'Cantidad'
FROM CLIENTE
group by estcivil

--mostrar cuantos clientes hay por ciudad


select * from CLIENTE
select * from CIUDAD
--por nombreciudad
SELECT CIUDAD.codciudad,CIUDAD.nomciudad, COUNT(*) as 'Cantidad'
FROM CLIENTE inner join CIUDAD
on CLIENTE.codciudad=CIUDAD.codciudad
GROUP BY CIUDAD.codciudad,CIUDAD.nomciudad
order by COUNT(*) desc

--por codigociudad
select codciudad, count(*)
from CLIENTE
group by codciudad

--CUANTOS SERVICIOS HAY POR CADA TIPO Y CUAL ES EL MONTO DE CADA TIPO
select * from SERVICIOS
select * from TIPOSERV
SELECT TIPOSERV.nomtiposer ,COUNT (*) as 'cantidad', SUM(SERVICIOS.precioser) as
'total'
FROM SERVICIOS INNER JOIN TIPOSERV
ON SERVICIOS.codtiposer = TIPOSERV.codtiposer
GROUP BY TIPOSERV.nomtiposer

--CUANTOS SERVICIOS HAY POR CADA TIPO Y CUAL ES EL MONTO DE CADA TIPO, DE
AQUELLOS
--SERVICIOS QUE NO SEAN 'ALMUERZO'
SELECT TIPOSERV.nomtiposer ,COUNT (*) as 'cantidad', SUM(SERVICIOS.precioser) as
'total'
FROM SERVICIOS INNER JOIN TIPOSERV
ON SERVICIOS.codtiposer = TIPOSERV.codtiposer
WHERE SERVICIOS.nomserv <> 'Almuerzo'
GROUP BY TIPOSERV.nomtiposer

--BACKUP O COPIA DE RESPALDO DE LA BASE DE DATOS

--por ciudad diga cuantos clientes hay


--no considere clientes de paris y que sean >3
select * from CIUDAD
select * from CLIENTE
SELECT CIUDAD.codciudad ,COUNT (*) as 'clientes'
FROM CIUDAD INNER JOIN CLIENTE
ON CIUDAD.codciudad = CLIENTE.codciudad
WHERE CIUDAD.nomciudad <> 'Paris'
GROUP BY CIUDAD.codciudad
having count(*) >3

select ciudad.nomciudad, count(ciudad.codciudad)


from ciudad inner join cliente
on ciudad.codciudad = cliente.codciudad
where ciudad.nomciudad <> 'Paris'
group by ciudad.nomciudad
having count(ciudad.codciudad) > 3 order by count(ciudad.codciudad) asc
-------USA LA BASE DE DATOS MINERA
USE Minera
--Haga una consulta que muestre cuantas Escavadoras hay por proyecto
SELECT Maquinaria.ubicacion, COUNT(*) as 'Cantidad'
FROM MAQUINARIA
Where Maquinaria.descripcion like 'Escavadora%'
GROUP BY Maquinaria.ubicacion

--Haga una consulta que muestre el monto total de maquinaria por proyecto
select Maquinaria.ubicacion, sum(Maquinaria.costo_referencial)
from Maquinaria
group by Maquinaria.ubicacion

--Haga una consulta que muestre el monto total por maquinaria asignada
select asignacion.cod_maq,sum(Maquinaria.costo_referencial)
from Maquinaria inner join asignacion
on Maquinaria.cod_maq = asignacion.cod_maq
group by asignacion.cod_maq

--Haga una consulta que muestre cuantas personas estan asignadas por maquina
SELECT MAQUINARIA.cod_maq, COUNT(*) AS 'Cantidad'
FROM MAQUINARIA INNER JOIN asignacion
ON MAQUINARIA.cod_maq=ASIGNACION.cod_maq
GROUP BY MAQUINARIA.cod_maq

--Haga una consulta que muestre cuantas maquinas hay por proyecto, y cuanto es
su total de costo
SELECT Maquinaria.ubicacion, COUNT(*) as
'Cantidad',sum(Maquinaria.costo_referencial) as 'Monto total'
FROM MAQUINARIA
GROUP BY Maquinaria.ubicacion

--Cuantas personas hay por puesto ordenelas por puesto


SELECT personal.puesto, COUNT(*) AS 'Cantidad'
from personal
GROUP BY personal.puesto
order by count(*) desc

--HAVING (filtro a grupos)


select count(*) from Maquinaria --cantidad de registros

--cuantas maquinarias por ubicacion


select ubicacion,count(*)
from Maquinaria
group by ubicacion

--mostrar las maquinarias que sean escavadoras


select * from Maquinaria
where descripcion like 'Escavadora%' --where se utiliza para filtrar registros

--mostrar aquellos grupos que sean mayores de 5 maquinarias


select UBICACION, count(*)
from Maquinaria
group by ubicacion
having count(*) >5

--mostrar aquellos grupos que sean mayores de 5 maquinarias


--excluir a la maquinaria excavadora 700
--odernar la lista de mayor a menor

select UBICACION, count(*) as 'cantidad'


from Maquinaria
where descripcion <> 'Escavadora 700'
group by ubicacion
having count(*) >5
order by count(*) desc

--
use Minera
--diga el nombre completo del personal, que este asignado en mas de una
maquinaria
select top 1 personal.cod_personal, personal.nombres,personal.apellidopat,
count(personal.cod_personal)
from personal inner join asignacion
on asignacion.cod_personal = personal.cod_personal
group by personal.cod_personal,personal.nombres,personal.apellidopat
order by count(personal.cod_personal) desc

--funcion concat
--ejm Juan dominguez es ayudante de perforacion

select concat(nombres,' ',apellidopat,' es ', puesto)


from personal

select top 1 concat(personal.nombres,' ',personal.apellidopat, 'es el personla


con mas maquinas asignadas') , count(personal.cod_personal)
from personal inner join asignacion
on asignacion.cod_personal = personal.cod_personal
group by personal.cod_personal,personal.nombres,personal.apellidopat
order by count(personal.cod_personal) desc

update personal
set apellidopat= 'Perez'
where cod_personal= 'P05'
--sub string EXTRA CADENAS DE TEXTO INDICADAS
--generar una contraseña a cada personal
-- 2 primeras letras del nombr, 2 primeras letras del apellidopat, numero del
codigo del personal
select cod_personal, nombres, apellidopat,
concat(substring (nombres,1,2),
SUBSTRING(apellidopat,1,2),SUBSTRING(cod_personal,2,2))
from personal

--funcion LEN saca la longitud de los nombres

--saca la longitud de los nombres del personal


select nombres, len(nombres)
from personal

select * from personal


--generar una contraseña a cada personal
-- 2 ultimas letras del nombres, 2 ultimas letras del apellidopat, digiot del
medio del codigo personal
select cod_personal,nombres,apellidopat,
concat(substring (nombres, len(nombres)-1, 2),substring(apellidopat,
len(apellidopat)-1,2),substring(cod_personal,len(cod_personal)/2 +1,1)) as 'pass'
from personal
--LOWER, UPPER
--apellido en mayuscula seguida de la comida , seguida del nombre

select concat(UPPER(apellidopat),',',lower(nombres))
from personal

--colocar intercambios mayusculas con minusculas las 3 ultimas letras apellidopat


--Dominguez ---> domingUeZ
select apellidopat,
concat(substring(apellidopat,1,len(apellidopat)-3),
upper(substring(apellidopat,len(apellidopat)-2,1)),
substring(apellidopat,len(apellidopat)-1,1),
upper(substring(apellidopat, LEN(apellidopat),1))) as 'Apell.Intercambiado'
from personal

select apellidopat,
concat(substring (apellidopat,1,len(apellidopat)-3),
UPPER (substring (apellidopat,len(apellidopat)-2,1)),
LOWER (substring (apellidopat,len(apellidopat)-1,1)),
UPPER (substring (apellidopat,len(apellidopat),1)))
from personal

--DATEADD suma de fechas


--la produccion comienza hoy 06 de nopviembre, dura 59 dias, cuando termianra?

select dateadd(day,59, ' 06/11/2021')

--como se obtiene el instante de hoy


select getdate()

select dateadd(day,59, getdate())

-- de la fechga de mañana sumale 108 horas, que fecha sera despues de las 108
horas?
select dateadd(hour,108, getdate()+1)

select dateadd(hour,108,dateadd(day,1,getdate()))

--el 19/06/2021 empezo la produccion y termino el 04/11/2021


--cuantos dias duro?

select datediff(day,'19/06/2021','04/11/2021')
--el 19/06/2021 empezo la produccion y termino el 04/11/2021
--cuantas jpras duro?

select datediff(hour,'19/06/2021','04/11/2021')

select dateadd(day,-56,'04/11/2021')

--ROUND redondedo numericos


select round(25.639,0)

select cod_personal,round(len(cod_personal)/2,0)
from personal

use HOTEL_5ESTRELLAS

select * from RES_REG_COM

select fechregis, cast(fechregis as varchar)


from RES_REG_COM

--IIF
use Minera
select* from Maquinaria

--si es mas de 50000 el costo aplicar un 20% de descuento


select costo_referencial, iif(costo_referencial>50000,
cast(costo_referencial*0.20 as varchar),'sin descuento') as 'descuento'
from Maquinaria

select costo_referencial, iif(costo_referencial>50000,costo_referencial*0.20 ,0)


as 'descuento'
from Maquinaria

use Minera

--mostrar las 2 maquinarias con costo mas bajo asignadas a Arcata o Ares
--al puesto de perforista
select top 2 Maquinaria.descripcion,Maquinaria.costo_referencial, personal.puesto
from Maquinaria inner join asignacion
on Maquinaria.cod_maq = asignacion.cod_maq
inner join personal
on asignacion.cod_personal = personal.cod_personal

where personal.puesto = 'Perforista'


and (Maquinaria.ubicacion in ('Artcata','Ares'))
order by Maquinaria.costo_referencial asc

--mostrar el nombre y apellido del personal que se encuentre en mas ubicaciones


select top 1 Personal.nombres, Personal.apellidopat, count (Maquinaria.ubicacion)
as 'Nro Ubicaciones'
from Personal inner join Asignacion
on Personal.cod_personal = Asignacion.cod_personal
inner join Maquinaria
on Asignacion.cod_maq = Maquinaria.cod_maq
group by Personal.nombres, Personal.apellidopat
order by count (Maquinaria.ubicacion) desc

SELECT TOP 1 PERSONAL.nombres,PERSONAL.apellidopat,COUNT(MAQUINARIA.ubicacion) AS


'Cantidad'
FROM PERSONAL INNER JOIN ASIGNACION
ON PERSONAL.cod_personal=ASIGNACION.cod_personal
INNER JOIN MAQUINARIA
ON MAQUINARIA.cod_maq=ASIGNACION.cod_maq
GROUP BY PERSONAL.nombres,PERSONAL.apellidopat
ORDER BY COUNT(MAQUINARIA.ubicacion) DESC

--mostrar cuales son las ubicaciones


select distinct ubicacion from Maquinaria --saca lo no duplicado
select all ubicacion from Maquinaria --all saca duplicados

--mostrar cuales son los puestos en proyecto


select * from personal

select distinct puesto from personal

select * from Maquinaria

--mostrar la maquinaria con el tercer costo mas alto


select top 1 * from Maquinaria
where cod_maq in ( select top 3 cod_maq from Maquinaria
order by costo_referencial desc)

order by costo_referencial asc

--forma de realizar primero seleciono los 3 primeros de mayor a menor


--select top 3 * from Maquinaria
--order by costo_referencial desc
--luego hago una sub consulta
--select * from maquinaria
--where cod_maq in ( aqui entra la primera consulta )
--order by asc
--luego agregamos el top 1 antes de ordernar de forma menor a mayor

--MOSTRAR EL SEGUNDO PERFORISTA A MAS PROYECTOS


select * from maquinaria
SELECT top 1 personal.cod_personal, personal.nombres, count(*)
from personal inner join asignacion
on personal.cod_personal=asignacion.cod_personal
inner join maquinaria
on maquinaria.cod_maq = asignacion.cod_maq
where personal.cod_personal in (SELECT top 2 personal.cod_personal
FROM PERSONAL INNER JOIN ASIGNACION
ON
PERSONAL.cod_personal=ASIGNACION.cod_personal
INNER JOIN MAQUINARIA
ON MAQUINARIA.cod_maq=ASIGNACION.cod_maq
where personal.puesto = 'Perforista'
GROUP BY personal.cod_personal,
personal.nombres
ORDER BY COUNT(MAQUINARIA.ubicacion)
DESC)
group by personal.cod_personal, personal.nombres
order by count(*) asc

--Mostrar todas las maquinas de Ares, cuyo costo referencial este debajo del
--promedio
select * from Maquinaria
where ubicacion ='Ares' and
costo_referencial < (select avg(costo_referencial)from Maquinaria)

--exists y not exists


select * from Maquinaria
select * from asignacion

select *
from Maquinaria
where ubicacion ='Ares'
and exists (select * from asignacion where cod_maq ='x020') --consulta de
condicion , si existe un dato

select *
from Maquinaria
where not exists (select * from asignacion where cod_maq ='x020')
--FUNCION DEFINIDA POR EL USUARIO
USE Minera
select * from Maquinaria
--CREAR UNA FUNCION QUE DADO UN TIPO DE MAQUINARIA
--MUESTRE EL TOTAL DE COSTO REFERENCIAL
create function F_TOTXMAQ (@TEXTO1 VARCHAR(30), @TEXTO2 VARCHAR(30))
RETURNS MONEY
AS
BEGIN
declare @var1 as varchar(30)
declare @var2 as varchar(30)
declare @resultado as money

set @var1 = CONCAT(@TEXTO1,'%')


set @var2 = CONCAT(@TEXTO2,'%')

set @resultado= (select SUM(COSTO_REFERENCIAL)


FROM Maquinaria
WHERE descripcion LIKE @var1 OR descripcion
like @var2)
RETURN @resultado

END

--PRUEBA DE LA FUNCION
SELECT DBO.f_TOTXMAQ ('Amplificador','Generador')

--REALIZAR UNA FUNCION QUE DADO UN NOMBRE Y APELLIDO DE PERSONAL,


--PERMITA CONOCER A CUANTAS MAQUINARIAS ESTUVO ASIGNADO,
--ESTAS MAQUINARIAS SU COSTO REFERENCIAL DEBE ESTAR ENTRE 30000 Y 50000
create function F_TOTXPER (@NOMB1 VARCHAR(30), @APELL2 VARCHAR(30))
RETURNS MONEY
AS
BEGIN
declare @var3 as varchar(30)
declare @var4 as varchar(30)
declare @RESULTADO as money

set @var3 = @NOMB1


set @var4 = @APELL2

set @RESULTADO = (SELECT MAQUINARIA.cod_maq, COUNT(*)


FROM MAQUINARIA INNER JOIN asignacion
ON MAQUINARIA.cod_maq=ASIGNACION.cod_maq

WHERE (descripcion LIKE @var3 OR


descripcion like @var4) and costo_referencial>30000 and costo_referencial<50000)

RETURN @RESULTADO
END

create function f_persxmaq(@text1 varchar(30), @text2 varchar(30), @r1 money, @r2


money)
returns int
as
begin

declare @res as money


set @res =(select count(asignacion.cod_maq)
from personal inner join asignacion
on personal.cod_personal = asignacion.cod_personal
inner join Maquinaria
on Maquinaria.cod_maq = asignacion.cod_maq
where personal.nombres = @text1 and
personal.apellidopat = @text2
and maquinaria.costo_referencial between @r1 and @r2)
return @res
end
--PRUEBA DE LA FUNCION
SELECT DBO.f_persxmaq ('Julian','Perez',30000,80000)

--HACER UNA FUNCION QUE DIGA CUANTOS DIAS FALTA PARA SU PROXIMO CUMPLEAÑOS
create function f_diacumpl(@text1 date)
returns int
as
begin
declare @fecha as int
set @fecha = (select datediff(day,getdate(),@text1))

return @fecha
end
---------------------------------------------------
create function F_CUMPLE (@fechaCumple date)
returns int
as
begin
declare @dias as int

set @dias = (select DATEDIFF(day, GETDATE(), @fechaCumple))

RETURN @dias
end

--FUNCION DEFINIA POR EL USUARIO -- TABLA


--mostrar la maquinaria que este asignada en una determinada ubicacion
create function f_ubi(@ubi varchar(30))
returns table
as
return
(
select maquinaria.descripcion, maquinaria.ubicacion,
Maquinaria.costo_referencial
from Maquinaria inner join asignacion
on Maquinaria.cod_maq = asignacion.cod_maq
where ubicacion = @ubi
)

--
select * from f_ubi('Arcata')

--PROCEDIMIENTOS ALMACENADOS (stored procedure)

SELECT * FROM personal


CREATE PROCEDURE pa_actualper
@cod as char(5),
@nom as varchar(30),
@ape as varchar(30),
@pue as varchar(30)
as

update personal
set nombres=@nom, apellidopat=@ape, puesto=@pue
where cod_personal = @cod

execute pa_actualper 'P04','Julio','Perez','Ayudante perforacion'


execute pa_actualper 'P04','Julian','Perez','Almacenero'
select * from personal

--Realizar un procedimiento almacenado que dada una ubicacion


--si es Ares coloque 10% a los costos referenciales de la maquinaria
--si es Arcata coloque 1000 soles a los costos referenciales de las maquinarias
--si es otra ubicacion no tiene ningun aumento
select * from Maquinaria

CREATE PROCEDURE pa_actcosto


@costref as money,
@ubi as varchar(30)
as

update Maquinaria
set costo_referencial= @costref, ubicacion = @ubi
select costo_referencial, iif(ubicacion='Ares', costo_referencial*0.10,0)
from Maquinaria

select costo_referencial, iif(ubicacion='Arcata',costo_referencial + 1000,0)


from Maquinaria

select costo_referencial, iif(ubicacion!='Arcata','Ares',costo_referencia,0)


from Maquinaria

create procedure sp_colocaraumento


@ubi as varchar(30)
as
if @ubi='Ares'
begin
select descripcion, ubicacion, costo_referencial,
costo_referencial + costo_referencial*0.1
from Maquinaria
where ubicacion =@ubi
end
else
if @ubi ='Arcata'
begin

select descripcion, ubicacion, costo_referencial,


costo_referencial +1000
from Maquinaria
where ubicacion =@ubi
end
else
begin
select descripcion, ubicacion, costo_referencial,0
from Maquinaria
where ubicacion =@ubi
end
end

execute sp_colocaraumento'Cerro Azul'


--Realizar un procedimiento almacenado para insertar un nuevo personal
--el procedimiento debera verificar que el personal a insertar no esta repetido
select * from personal

create procedure pa_insertarnuevopersonal


@cod as char(5),
@nom as varchar(30),
@ape as varchar(30),
@pue as varchar(30)
as

declare @var as int

set @var =(select count(*) from personal


where nombres = @nom and apellidopat = @ape)

if @var = 0
begin
insert into personal
values (@cod, @nom, @ape, @pue)
end
else
print 'Personal existente'

--prueba
execute pa_insertarnuevopersonal 'P09','Clever','Machaca','Supervisor'
select * from personal

execute pa_insertarnuevopersonal 'P10','Clever','Machaca','Supervisor'

También podría gustarte