Sei sulla pagina 1di 17

use tutonetbeans

go
Create table docente(
DNI_Doc nvarchar(8) not null,
Nombre nvarchar(50) not null,
Apell_Paterno nvarchar(50) not null,
Apell_Materno nvarchar(50) not null,
Celular nvarchar(9) not null,
Correo nvarchar(50) null,
Foto varbinary(max)null
constraint pk_docente primary key(DNI_Doc)
)
insert into
docente(DNI_Doc,Nombre,Apell_Paterno,Apell_Materno,Celular,Correo)
values('43070036','Jhonny','Ramirez','Galindo','940215057','Jhonrgmar@hot
mail.com')
select*from docente

---====================================
--Creando los Procedimientos Almacenados
---Procedimiento para insertar docente

Create proc InsertarDocente
@DNI_Doc nvarchar(8),
@Nombre nvarchar(50),
@Apell_Paterno nvarchar(50),
@Apell_Materno nvarchar(50),
@Celular nvarchar(50),
@Correo nvarchar(50),
@Foto varbinary(max)
as
begin
declare @respuesta nvarchar(80)
if exists(select DNI_Doc from docente where DNI_Doc=@DNI_Doc)
begin
set @respuesta='El DNI ya existe'
select @respuesta as respuesta
end
else if exists (select*from docente where Nombre=@Nombre and
Apell_Paterno=@Apell_Paterno and Apell_Materno=@Apell_Materno)
begin
set @respuesta='El docente ya existe'
select @respuesta as respuesta
end
else if exists(select *from docente where Correo=@Correo)
begin
set @respuesta='El correo ya existe'
select @respuesta as respuesta
end
else
begin
begin tran IncertarDocente
insert into docente values(@DNI_Doc,@Nombre,@Apell_Paterno
,@Apell_Materno ,@Celular,@Correo ,@Foto)
set @respuesta='Docente registrado exitosamente'
select @respuesta as respuesta
commit tran IncertarDocente
end
end

---procedimiento para Actualizar docente
Create proc ActualizarDocente
@DNI_Doc nvarchar(8),
@Nombre nvarchar(50),
@Apell_Paterno nvarchar(50),
@Apell_Materno nvarchar(50),
@Celular nvarchar(9),
@Correo nvarchar(50),
@Foto varbinary(max)
as
begin
declare @respuesta nvarchar(80),@Cor nvarchar(50)
set @Cor=(select correo from docente where Correo=@Correo)
begin try
update docente set Nombre=@Nombre,
Apell_Paterno=@Apell_Paterno, Apell_Materno=@Apell_Materno,
Celular=@Celular, Correo=@Correo
from docente where DNI_Doc=@DNI_Doc

set @respuesta='Docente Actualizado con Exito'
select @respuesta as respuesta
end try
begin catch
set @respuesta='Ya existe un docente o coordinador con el
mismo correo'
select @respuesta as respuesta
end catch
end


---------Procedimiento para verificar si la foto existe o no en la BD

Create procedure fotoexiste
@codigo nvarchar (10)
as
begin
declare @respuesta nvarchar(10)
if exists (select Foto from docente where DNI_Doc=@codigo)
begin
set @respuesta='1'
select @respuesta
end
else begin
set @respuesta='0'
select @respuesta
end
end

---Procedimiento para eliminar docente
Create proc EliminarDocente
@DNI_Doc nvarchar(8)
as
begin
declare @respuesta nvarchar(40)
if not exists (select DNI_Doc from docente where DNI_Doc=@DNI_Doc)
begin
set @respuesta='El codigo del docente no existe, ingrese un codigo
que exista'
select @respuesta as respuesta
end
begin
delete from docente where DNI_Doc=@DNI_Doc
set @respuesta ='Docente eliminado con exito'
select @respuesta as respuesta
end
end

--procedimiento para actualizar foto
create proc ActualizaFoto
@DNI_Doc nvarchar(8),@foto varbinary(max)
as
begin
update docente set Foto=@foto where DNI_Doc=@DNI_Doc
end



*******************************************************************
use Hospital
use hospital
select*from Hospital
use hospital
use master
drop database Hospital

create database Hospital
use Hospital
create table Departamento (Dpto_No int primary key not null , Dep_Nombre
nvarchar(50), Local nvarchar(50))
create table Empleado(Empleado_No int primary key not null, Apellido
nvarchar(50), Oficio nvarchar(50), Direccion nvarchar(50),
Fecha_alt smalldatetime, Salario money, Comision money, Dpto_No int)
create table enfermo(Inscripcion int primary key not null, Apellido
nvarchar(50), Direccion nvarchar(50), Fecha_Nac date, Sexo char(1), NSS
nvarchar(50))
create table Sala(Hospital_Cod int, Sala_Cod int, Nombre nvarchar(50),
Num_cama int, Inscripcion int)
Create table Doctor(Hospital_cod int, Doctor_No int primary key not null,
Apellido nvarchar(50), Especialidad nvarchar(50))
Create table Hospital(Hospital_cod int primary key not null, Nombre
nvarchar(50), Direccion nvarchar(50), Telefono nvarchar(15), Num_cama
int)
Create table Plantilla(Hospital_cod int, Sala_cod int, Empleado_No int,
Apellido nvarchar(50), Funcion nvarchar(50), T nvarchar(50), Salario
money)
*******
insert into Departamento values(10,'contabilidad', 'Elche')
select *from Departamento
insert into Departamento values(20,'Investigacion', 'Madrid')
insert into Departamento values(30,'Ventas', 'Barcelona')
insert into Departamento values(40,'Produccion', 'Salamanca')
insert into Empleado
values(7369,'Sanchez','Empleado','7902','17/12/1980',104000,0,20)
select*from Empleado
insert into Empleado
values(7499,'Arroyo','Vendedor','7698','22/02/1981',208000,39000,30)
insert into Empleado
values(7521,'Sala','Vendedor','689','22/02/1981',162500,65000,30)
insert into Empleado
values(7566,'Jimenez','Director','7839','02/04/1981',386750,182000,20)
insert into Empleado
values(7654,'Martin','Vendedor','7698','28/09/1981',182000,182000,30)
insert into Empleado
values(7698,'Negro','Director','7839','01/05/1981',370500,0,30)
insert into Empleado
values(7782,'Cerezo','Director','7839','09/06/1981',318500,0,10)
insert into Empleado
values(7788,'Nino','Analista','7566','30/03/1987',390000,0,20)
insert into Empleado
values(7839,'Rey','Presidente','0','17/11/1981',650000,0,10)
insert into Empleado
values(7844,'Tovar','Vendedor','7698','08/09/1981',195000,0,30)
insert into Empleado
values(7876,'Alonso','Empleado','7788','03/05/1987',143000,0,20)
insert into Empleado
values(7900,'Jimeno','Empleado','7698','03/12/1981',123500,0,30)
insert into Empleado
values(7902,'Fernadez','Analista','7566','03/12/1981',390000,0,20)
insert into Empleado
values(7934,'Muoz','Empleado','7782','23/06/1982',169000,0,10)
insert into Empleado
values(7119,'Serra','Director','7839','19/11/1983',225000,39000,20)
insert into Empleado
values(7322,'Garcia','Empleado','7119','12/10/1982',129000,0,20)

insert into Hospital values(19,'Provincial','ODonell 50','964-
4256','502')
select*from Hospital
insert into Hospital values(18,'General','Atocha S/N','595-3111',987)
insert into Hospital values(22,'La paz','Castellana 1000','923-5411',412)
insert into Hospital values(45,'San carlos','Ciudad Universitaria','597-
1500','845')

insert into Doctor values(22,386,'Cabeza D','Psiquiatria')
insert into Doctor values(22,398,'Best D','Urologia')
insert into Doctor values(19,435,'Lopez A','Cardiologia')
insert into Doctor values(22,453,'Galo D','Pediatria')
insert into Doctor values(45,522,'Adams C','Neurologia')
insert into Doctor values(18,585,'Miller G','Ginecologia')
insert into Doctor values(45,607,'Chuki P','Pediatria')
insert into Doctor values(18,982,'Cajal R','Cardiologia')
select*from Doctor



select*from Plantilla
insert into Plantilla values (22,6,1009,'Higueras
D','Enfermera','T',200500)
insert into Plantilla values (45,4,1280,'Amigo R','Interino','N',221000)
insert into Plantilla values
(19,6,3106,'Hernandez','Enfermero','T',275000)
insert into Plantilla values (19,6,3754,'Diaz B','Enfermera','T',226200)
insert into Plantilla values (22,1,6065,'Rivera
G','Enfermera','N',162600)
insert into Plantilla values (18,4,6357,'Karplus
W','Interino','T',337900)
insert into Plantilla values (22,1,7379,'Carlos
R','Enfermera','T',211900)
insert into Plantilla values (22,6,8422,'Bocina
G','Enfermero','M',183800)
insert into Plantilla values (45,1,8526,'Frank H','Enfermera','T',252200)
insert into Plantilla values (22,2,9901,'Nuez C','Interino','M',221000)


--delete from Plantilla where Hospital_cod=22

select*from sala
insert into Sala values(22,1,'Recuperacion',10,'')
insert into Sala values(45,1,'Recuperacion',15,'')
insert into Sala values(22,2,'Maternidad',34,'')
insert into Sala values(45,2,'Maternidad',24,'')
insert into Sala values(19,3,'Cuidaddos Intensivos',21,'')
insert into Sala values(18,3,'Cuidaddos Intensivos',10,'')
insert into Sala values(18,4,'Cardiologia',53,'')
insert into Sala values(45,4,'Cardiologia',55,'')
insert into Sala values(19,6,'Psiquiatricos',67,'')
insert into Sala values(22,6,'Psiquiatricos',118,'')

-- verificar los primary key de sala, porque no pueden duplicarse, caso
contrario eliminar la opcion de primary key de sala, generar codigo de
nuevo
select*from enfermo
insert into enfermo values(10995,'Laguia M','Goya
20','16/05/56','M','280862422')
insert into enfermo values(14024,'Fernandez M','Recoletos
50','21/05/60','F','284991452')
insert into enfermo values(18004,'Serrano V','Alcala
12','23/06/67','F','321790059')
insert into enfermo values(36658,'Domin S','Mayor
71','01/01/42','M','160654471')
insert into enfermo values(38702,'Neal R','Orense
11','08/06/40','F','380010217')
insert into enfermo values(39217,'Cervantes M','Peron
38','29/02/52','M','440294390')
insert into enfermo values(59076,'Miller B','Lopez de Hoyos
2','16/09/45','F','311969044')
insert into enfermo values(63827,'Ruiz P','Ezquerdo
103','26/12/80','M','100973253')
insert into enfermo values(64823,'Fraiser A','Soto
3','10/07/80','F','285201776')
insert into enfermo values(74835,'Benitez
E','Argentina','05/10/57','M','154811767')

select *from Empleado
select Apellido, Oficio, Salario, Salario*14 as [Salario Anual] from
Empleado where Salario*14>220000
select Apellido, Oficio, Salario, Salario*14 as [Salario Anual] from
Empleado where Salario*14+Comision>300000

select *from Empleado order by Dpto_No,Oficio
select*from Hospital
select*from Sala where Hospital_Cod=45
select*from enfermo
select*from enfermo where Fecha_Nac <'01/01/70'
select*from enfermo where Fecha_Nac <'01/01/70' order by Inscripcion desc
select*from Plantilla
select*from Plantilla where T ='N'
select * from Plantilla where salario between 200000 and 250000
select*from Empleado
select *from Empleado where Fecha_alt not between 01/01/80 and 12/12/82
select*from Departamento
select*from Departamento where Local='madrid' or Local='barcelona'
select*from Departamento where local in ('madrid','barcelona')


SELECT CAST(table_name as varchar) FROM INFORMATION_SCHEMA.TABLES
Select name from sysobjects where type='U'
select name from sysobjects where type='V'

select*from Hospital inner join Doctor on
Hospital.Hospital_cod=Doctor.Hospital_cod
select*from Hospital inner join Sala on
Hospital.Hospital_cod=Sala.Hospital_Cod
select*from Departamento inner join Empleado on
Departamento.Dpto_No=Empleado.Dpto_No
select*from Sala inner join Plantilla on
Sala.Hospital_Cod=Plantilla.Hospital_cod
select*from Sala inner join Plantilla on Sala.Sala_Cod=Plantilla.Sala_cod

select*from Empleado where Fecha_alt>01/07/85
select*from Empleado where Fecha_alt>01/07/85 and Salario between 150000
and 400000
select*from Empleado where Fecha_alt>'01/07/85' and Salario between
150000 and 400000
or oficio <> 'analista' and Dpto_No=20
select*from Empleado where Apellido like '%z' order by Dpto_No, Fecha_alt
asc
select*from Empleado where Apellido like '%z' and not Salario >200000
order by Dpto_No,Fecha_alt asc
select*from Empleado where Oficio<>'analista'
select*from Empleado where Oficio<>'analista' order by Oficio,Salario
desc
select*from Empleado where Oficio<>'analista' and Empleado_No not between
7600 and 7900 order by Oficio,Salario desc

select distinct Oficio from Empleado
select oficio as Profesin from Empleado group by Oficio order by Oficio
select*from Sala
select nombre from Sala group by Nombre
select distinct nombre from Sala
select*from Plantilla
select *from Plantilla where Funcion<>'interino' order by Funcion,
Sala_cod
select*from enfermo
select sexo from enfermo group by Sexo
select distinct sexo from enfermo

select*from Hospital
select*from Plantilla
--select t as turno, Apellido from Plantilla group by turno order by
turno,Apellido
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
select*from Empleado where Apellido like 'M%'
select*from Empleado where Apellido like '%z'
select*from Empleado where Apellido like'%er%'
select*from Empleado where Apellido like '___a'
select*from Empleado where Apellido like '[E-F]%'
select*from Empleado where Apellido like 'A%[a-m]%o'
select * from Empleado where Apellido like 'M[^A]%'

select top 5 *from Empleado
select top 50 percent *from Empleado

select COUNT(*) as [numero de empleados], oficio, AVG(salario) from
Empleado group by oficio having Oficio = 'analista'
select max(salario) as maximo,MIN(salario)as minimo,MAX(Salario)-
MIN(Salario)as diferencia,Oficio from Empleado
group by Oficio having Oficio='empleado'

select oficio,MAX(salario) from Empleado group by Oficio
--Visualizar el nmero de personas que realizan cada oficio en cada
departamento.
select COUNT(*)as personas,Oficio,Dpto_No from Empleado group by
Oficio,Dpto_No order by 1
--Buscar aquellos departamentos con cuatro o mas personas trabajando.
select Dpto_No,COUNT(*) as personas from Empleado group by Dpto_No having
COUNT(*)>4
--Mostrar el nmero de directores que existen por departamento.
select COUNT(*) as cantidad, Dpto_No,Oficio from Empleado group by
Oficio, Dpto_No having Oficio='Director'
select COUNT(*) as cantidad, Dpto_No from Empleado where
Oficio='Director' group by Dpto_No
--Visualizar el nmero de enfermeros, enfermeras e interinos que hay en
la plantilla,
--ordenados por la funcin.
select*from Plantilla
select COUNT(*) as cantidad, Funcion from Plantilla group by Funcion
select COUNT(*) as cantidad, Funcion from Plantilla group by Funcion
having Funcion in ('enfermera','enfermero','interino')
order by Funcion

--pagina 20 pregunta 8
--visualizar departamentos, oficios, y numero de personas para aquellos
departamentos que tengan dos o mas personas
--trabajando en el mismo oficio
select*from Empleado
select Dpto_No as Departamento, Oficio, count(*) as Numero_de_personas
from Empleado group by Dpto_No, Oficio
having COUNT(*)>=2
--calcular el salario medio , diferencia, maximo y minimo de cada oficio.
Indicando el
--oficio y el numero de empleados de cada oficio
select*from Empleado
select AVG(Salario) as [Salario medio], MIN(Salario) as [salario minimo],
MAX(Salario) as [Salario Maximo],
MAX(Salario)-MIN(Salario) as Diferencia ,Oficio, COUNT(*)as [Numero de
empleados] from Empleado group by Oficio
--Calcular el valor medio de las camas que existen para cada nombre de
sala. Indicar
--el nombre de cada sala y el nmero de cada una de ellas.
select*from Sala
select Nombre,Sala_Cod, AVG(Num_cama) as [media de cama] from Sala group
by Sala_Cod, Nombre order by Sala_Cod asc
--Calcular el salario medio de la plantilla de la sala 6, segn la
funcin que realizan.
--Indicar la funcin y el nmero de empleados.
select*from Plantilla
select COUNT(*) as [numero de empleados], Funcion, AVG(Salario) as
[Salario medio] from Plantilla
group by Funcion,Sala_cod having Sala_cod=6
--pagina 22 pregunta 12
--Averiguar los ltimos empleados que se dieron de alta en la empresa en
cada uno de
--los oficios, ordenados por la fecha.
select*from Empleado
select Oficio,MAX(Fecha_alt) as fecha from Empleado group by Oficio
--Mostrar el nmero de hombres y el nmero de mujeres que hay entre los
enfermos.
select*from enfermo
select COUNT(*)as sexo,Sexo from enfermo group by Sexo
--Mostrar la suma total del salario que cobran los empleados de la
plantilla para cada
--funcin y turno.
select*from Plantilla
select funcion,SUM(Salario)as salario,t as turno from Plantilla group by
Funcion,t
--Calcular el nmero de salas que existen en cada hospital.
select*from Sala
select COUNT(*),Nombre from Sala group by Nombre
--Mostrar el nmero de enfermeras que existan por cada sala.
select*from Plantilla
select COUNT(*)as cantidad,Sala_cod,Funcion from Plantilla where
Funcion='enfermera' group by Sala_cod,Funcion
order by 1
--pagina 33 primera pregunta
---consultas de uniones internas
--Seleccionar el apellido, oficio, salario, numero de departamento y su
--nombre de todos los empleados cuyo salario sea mayor de 300000
select*from Empleado
select*from Departamento
select apellido,oficio, salario,Dep_nombre from Empleado inner join
Departamento
on Empleado.Dpto_No=Departamento.Dpto_No where Salario>300000
--Mostrar todos los nombres de Hospital con sus nombres de salas
--correspondientes.
select*from Hospital
select*from Sala
select Hospital.nombre as hopital, sala.nombre as sala from Hospital
inner join Sala
on Hospital.Hospital_cod=Sala.Hospital_Cod
--Calcular cuantos trabajadores de la empresa hay en cada ciudad.
select*from Empleado
select*from Departamento
select COUNT(*) as trabajadores,local as ciudad from Empleado inner join
Departamento
on Empleado.Dpto_No=Departamento.Dpto_No group by Local
--Visualizar cuantas personas realizan cada oficio en cada departamento
--mostrando el nombre del departamento.
select COUNT(*) as personas,oficio, dep_nombre from Empleado inner join
Departamento
on Empleado.Dpto_No=Departamento.Dpto_No group by Oficio,Dep_Nombre
--Contar cuantas salas hay en cada hospital, mostrando el nombre de las
--salas y el nombre del hospital.
select*from Sala, hospital
select COUNT(sala.Nombre) as cantidad,Sala.Nombre,Hospital.Nombre from
Sala inner join Hospital
on Sala.Hospital_Cod=Hospital.Hospital_cod group by
Sala.Nombre,Hospital.Nombre
--Calcular cuantos trabajadores hay en cada departamento(nombre de
--departamento)
select*from Empleado,Departamento
select COUNT(Empleado_No) as trabajadores,dep_Nombre from Empleado inner
join Departamento
on Empleado.Dpto_No=Departamento.Dpto_No group by Dep_Nombre
--Buscar aquellos departamentos con cuatro o mas personas trabajando.
select COUNT(Empleado_No) as trabajadores,dep_Nombre from Empleado inner
join Departamento
on Empleado.Dpto_No=Departamento.Dpto_No group by Dep_Nombre having
COUNT(Empleado_No) >=4
--Calcular el valor medio de las camas que existen para cada nombre de
sala.
--Indicar el nombre de cada sala y el codigo de cada una de ellas.
select*from Sala
select Sala_Cod,Nombre,AVG(Num_cama) as promedio from Sala group by
Sala_Cod,Nombre order by Sala_Cod asc
--Calcular la media salarial por ciudad.
select AVG(salario) as promedio, local as ciudad from Empleado inner join
Departamento
on Empleado.Dpto_No=Departamento.Dpto_No group by Local
--Mostrar los doctores junto con el nombre de hospital en el que ejercen,
la
--direccin y el telfono del mismo.
select*from Hospital,Doctor
select apellido, nombre, direccion, telefono from Hospital inner join
Doctor
on Hospital.Hospital_cod=Doctor.Hospital_cod
--Mostrar los nombres de los hospitales junto con el mejor salario de los
--empleados de cada hospital.
select*from Hospital,Plantilla
select MAX(salario) as [salario maximo], nombre from Hospital inner join
Plantilla
on Hospital.Hospital_cod=Plantilla.Hospital_cod group by Nombre
--Visualizar el nombre de los empleados de la plantilla junto con el
nombre de la sala,
--el nombre del hospital y el nmero de camas libres de cada una de
ellas.
--pagina 37 pregunta 12
select*from Empleado,Plantilla,Sala,Hospital
select Plantilla.Apellido,Sala.Nombre,Hospital.Nombre,Sala.Num_cama from
Plantilla inner join Sala
on Sala.Hospital_Cod=Plantilla.Hospital_cod inner join Hospital on
Plantilla.Hospital_cod=Hospital.Hospital_cod
--Visualizar el mximo salario, mnimo salario de los empleados
dependiendo
--de la ciudad en la que trabajen. Indicando el nmero total de
trabajadores
--por ciudad.
select*from Empleado,Departamento
select COUNT(Empleado.Empleado_No) as [cantidad de empleados],
MAX(Empleado.Salario) as [Maximo salario],
MIN(Empleado.Salario)
as [minimo salario],local as ciudad from Empleado inner join Departamento
on Empleado.Dpto_No=
Departamento.Dpto_No group by Local
--Averiguar la combinacin de que salas podra haber por cada uno de los
--hospitales.
select*from Sala,Hospital
select Sala.Nombre,Hospital.Nombre from Sala inner join Hospital
on Sala.Hospital_Cod=Hospital.Hospital_cod
--%%%%%%%%%%%%%%%%%%%%%%
select Sala.Nombre,Hospital.Nombre from Sala cross join Hospital
--Mostrar el Numero de empleado, apellido, oficio y Nombre del
--departamento de los empleados, junto al Nmero de empleado, apellido,
--oficio y Nombre del departamento de sus subordinados respectivamente,
--para obtener una visin jerarquica de la empresa.
select*from Empleado, Departamento
select Empleado.Empleado_No as numero, Empleado.Apellido as apellido,
Empleado.Oficio as oficio,
Departamento.Dep_Nombre as [nombre departamento] from Empleado inner join
Departamento on
Empleado.Dpto_No=Departamento.Dpto_No
--continuar con pagina 39 tema OPERADOR UNION

select Apellido,Oficio as casa,Salario from Empleado union select
Apellido,Funcion
,Salario from Plantilla
select Apellido,Salario,(select AVG(Salario) from Plantilla) from
Empleado
select s1.Apellido,s1.Oficio,s1.Salario from Empleado as s1 inner join
Empleado as s2 on s1.Oficio=s2.Oficio
group by s1.Oficio, s1.Salario, s1.Apellido
having s1.Salario>AVG(s2.Salario)
---Mostrar los empleados que no tienen departamento:
select*from Departamento
select*from Empleado
select apellido,fecha_alt,salario
from Empleado as e
where not exists(select * from Departamento as o
where e.Dpto_No = o.Dpto_No)
-------Subconsultas
--1. Mostrar el numero de empleado, el apellido y la fecha de alta del
empleado mas
--antiguo de la empresa
select Empleado_No,Apellido,Fecha_alt from Empleado where Fecha_alt
=(select MIN(Fecha_alt) from Empleado)
--2. Mostrar el numero de empleado, el apellido y la fecha de alta del
empleado mas
--modernos de la empresa.
select Empleado_No,Apellido, Fecha_alt from Empleado where Fecha_alt=
(select MAX(Fecha_alt) from Empleado)
--3. Visualizar el apellido y el oficio de los empleados con el mismo
oficio que
--Jimnez.
select Apellido, Oficio from Empleado where Oficio in (select Oficio from
Empleado where Apellido='jimenez')
select Apellido, Oficio from Empleado where Oficio = (select Oficio from
Empleado where Apellido='jimenez')
--4. Queremos saber el apellido, oficio, salario y nmero de departamento
de los
--empleados con salario mayor que el mejor salario del departamento 30.
select Apellido,Oficio,Salario, Dpto_No from Empleado where
Salario>(select MAX(Salario) from Empleado where Dpto_No=30)
--5. Mostrar el apellido, la funcin, sala o departamento de todos los
empleados que
--trabajen en la empresa.
select*from Empleado
select Empleado.Apellido,Plantilla.Funcion,
Sala.Nombre,Departamento.Dep_Nombre from Empleado inner join Departamento
on Empleado.Dpto_No=Departamento.Dpto_No inner join Plantilla on
Empleado.Empleado_No=Plantilla.Empleado_No inner join
Sala on Plantilla.Sala_cod=sala.Sala_Cod
--not
select Apellido as Nombre, oficio as Funcion, Departamento.Dep_Nombre as
Departamento from Empleado inner
join Departamento on Empleado.Dpto_No=Departamento.Dpto_No union
select apellido,funcion, Sala.Nombre from Plantilla inner join Sala on
Sala.Sala_Cod= Plantilla.Sala_cod
and Sala.Hospital_Cod=Plantilla.Hospital_cod union
select apellido,especialidad, nombre from Hospital inner join Doctor on
Hospital.Hospital_cod=Doctor.Hospital_cod
order by 3
--6. Averiguar el salario de todos los empleados de la empresa, de forma
que se
--aprecien las diferencias entre ellos.
select Apellido, Salario from Empleado union select Apellido, salario
from Plantilla order by 2 desc
--7. Mostrar apellidos y oficio de los empleados del departamento 20 cuyo
trabajo
--sea el mismo que el de cualquier empleado de ventas.
select Apellido,Oficio from Empleado where Oficio in(select Oficio from
Empleado where Dpto_No =(select Dpto_No from
Departamento where Dep_Nombre='ventas')) order by 2
--8. Mostrar los empleados que tienen mejor salario que la media de los
directores,
--no incluyendo al presidente.
select*from Empleado
select apellido,salario,Oficio from Empleado where Salario>(select
AVG(Salario) from Empleado where Oficio='Director')
and Oficio<>'Presidente'
--continuar pag 45 preg 9
--9. Mostrar el apellido, funcin, salario y cdigo de hospital de los
empleados de la
--plantilla que siendo enfermeros o enfermeras pertenecen al hospital SAN
CARLOS.
select*from Plantilla
select*from Hospital
select Apellido, Funcion, Salario, Hospital_cod from Plantilla where
Funcion in ('enfermero','enfermera')
and Hospital_cod=
(select Hospital_cod from Hospital where Nombre='San Carlos')
--10. Visualizar los datos de los hospitales que tienen personal
(Doctores) de
--cardiologa.
select * from Plantilla
select*from Doctor
select*from Hospital where Hospital_cod in(select Hospital_cod from
Doctor where Especialidad='Cardiologia')
--11. Visualizar el salario anual de los empleados de la plantilla del
Hospital
--Provincial y General.
select Apellido,funcion, 12*Salario as sueldo from Plantilla where
Hospital_cod in
(select Hospital_cod from Hospital where Nombre
in('Provincial','General') )
--12. Mostrar el apellido de los enfermos que nacieron antes que el Seor
Miller.
select*from enfermo
select Apellido,Fecha_Nac from enfermo where Fecha_Nac<(select Fecha_Nac
from enfermo where Apellido='Miller B')
--0******======actualizar fecha de naciemiento de Miller a 1945
--========================
--
declare @n int
set @n = 5
if (@n % 2)= 0
print 'PAR'
else
print 'IMPAR'

Declare @n int
set @n = 0
while @n < 10
begin
if (@n % 2) = 0
select @n as Numero
set @n = @n + 1
end

--1. Queremos saber a qu empleados eliminariamos si quitasemos los
--departamentos 10 y 30 y cales se mantendran. Mostrar un informe con
el
--apellido, salario, oficio y fechas de alta en la empresa.

select*from Empleado
select Apellido,Salario,Oficio,Fecha_alt,Accion=case
when Dpto_No<>10 and Dpto_No<>30 then 'Empleado de baja'
else 'Se mantiene'
end
from Empleado

-- 2. Debemos hacer recortes de salario en la empresa, para ello debemos
saber a que
--personas recortaremos el sueldo, cuales se mantendrn y cuales
subiremos el
--puesto. Utilizar todos los empleados de la empresa(Plantilla y
Empleados)
--Cuando el salario sea menor de 100000, Subiremos sueldo, cuando est
entre
--100000 y 250000 lo mantendremos y cuando sea superior, lo bajaremos.
select*from Empleado
select*from Plantilla
select Apellido, Salario, accion =case when
Salario<100000 then 'subir sueldo'
when Salario between 100000 and 250000 then 'mantener sueldo'
else
'bajar sueldo'
end
from Empleado
union
select Apellido,Salario,accion =case
when Salario<100000 then 'subir sueldo'
when Salario between 100000 and 250000 then 'mantener sueldo'
else 'bajar sueldo' end
from Empleado
--3. Queremos saber que empleados de la plantilla trabajan en turno de
tarde, noche
--o en otros, para ello mostraremos Tarde o Noche dependiendo de sus
valores.
select*from Plantilla
select Apellido,Funcion,turno = case
when t='t' then 'tarde'
when t='n' then 'noche'
else 'Maana' end
from Plantilla
select nombre_casa=Apellido from Empleado
--4. Queremos cambiar de localidad en Barcelona, para ello tenemos que
saber qu
--empleados cambiarian de localidad y cales no. Combinar tablas y
mostrar el
--nombre del departamento junto a los datos del empleado.
select*from Departamento
select*from Empleado
select Apellido,Local, accion =case
when Local='barcelona' then 'cambiar'
else 'no cambiar' end
from Empleado inner join Departamento on
Departamento.Dpto_No=Empleado.Dpto_No

--Queremos saber el nmero de trabajadores que cambiaran de localidad
si
--cambiasemos a Barcelona y que nmero de trabajadores no cambiarian de
localidad.
select Local, accion =case
when Local='barcelona' then 'cambiar'
else 'no cambiar' end, COUNT(*) as cantidad
from Empleado inner join Departamento on
Departamento.Dpto_No=Empleado.Dpto_No
group by Local

--6. Mostrar el apellido, la direccin, la fecha de nacimiento mostrando
la dcada en
--la que est cada persona y el sexo mostrando si es masculino o femenino
de la
--tabla enfermo.
select Apellido,Direccion,Fecha_Nac,decada = case
when Fecha_Nac between '01/01/1950' and '31/12/1959' then 'decada 50'
when Fecha_Nac between '01/01/1960' and '31/12/1969' then 'decada 60'
when Fecha_Nac between '01/01/1970' and '31/12/1979' then 'decada 70'
when Fecha_Nac between '01/01/1980' and '31/12/1989' then 'decada 80'
when Fecha_Nac between '01/01/1990' and '31/12/1999' then 'decada 90'
end, Sexo= case
when Sexo='M' then 'Masculino'
else 'Femenino' end
from enfermo order by Fecha_Nac
--7. Mostrar el apellido, el salario, el oficio y el nombre del
departamento de todos
--los empleados aunque no tengan departamento. Si no tienen departamento
--mostrar que no tienen departamento. Mostrar adems si tienen comisin
o si
--no tienen comisin.
--pagina 54 pregun 7
select*from Empleado,Departamento
select Apellido,Salario,Oficio, Departamento.Dep_Nombre,Comisionn=case
when Comision=0 then 'No tiene comision'
else
'Si tiene comision' end
from Empleado inner join Departamento on
Empleado.Dpto_No=Departamento.Dpto_No

select Apellido,Salario,Oficio, Departamento.Dep_Nombre,Comisionn=case
Comision
when 0 then 'No tiene comision'
else
'Si tiene comision' end
from Empleado inner join Departamento on
Empleado.Dpto_No=Departamento.Dpto_No
--8. Mostrar todas las camas que existen para cada hospital y cada sala.
Mostrar el
--nombre del hospital, las salas y su nmero de camas. Si no hubiese
camas para
--algn hospital las dejar a 0. Tambin mostrar que son muchas camas
cuando
--sean ms de 90, buen nmero cuando sean mayores de 40 y pocas camas
para las dems.
select *from Sala,Hospital
select Hospital.Nombre,Sala.Nombre,Sala.Num_cama,camas=case
when Sala.Num_cama>90 then 'Muchas camas'
when sala.Num_cama between 40 and 90 then 'Buen Numero'
else 'Pocas Camas' end from Sala inner join Hospital
on Sala.Hospital_Cod=Hospital.Hospital_cod
group by Sala.Nombre,Hospital.Nombre,Sala.Num_cama

select Hospital.Nombre,Sala.Nombre,isnull(Sala.Num_cama,0),camas=case
when Sala.Num_cama>90 then 'Muchas camas'
when sala.Num_cama between 40 and 89 then 'Buen Numero'
else 'Pocas Camas' end from Sala inner join Hospital
on Sala.Hospital_Cod=Hospital.Hospital_cod
group by Sala.Nombre,Hospital.Nombre,Sala.Num_cama

--9. Seleccionar qu empleados estn dentro de la media y cuales estn
por debajo de
--la media, mostrando el apellido, oficio, salario, comisin y el nombre
de los
--departamentos. No dejar ningn campo a NULL.
select*from Empleado
select Apellido,Oficio, Salario,Comision,
Departamento.Dep_Nombre,condicion=case
when Salario>=AVG(Salario) then 'Dentro de la media' else 'Debajo de la
media' end
from Empleado inner join Departamento
on Empleado.Dpto_No=Departamento.Dpto_No
group by Apellido,Oficio,Salario,Comision,Dep_Nombre
--pregunta 1, pagina 59
--consultas de accion
--1. Dar de alta con fecha actual al empleado Jose Escriche Barrera como
--programador perteneciente al departamento de informatica.Tendra un
salario
--base de 70000 pts/mes y no cobrara comision, qu dificultad plantea el
alta de
--este empleado? Cmo podria solucionarse ?
select*from Empleado
select*from Departamento
insert into Departamento(Dpto_No,Dep_Nombre,Local)
values(60,'Informatica','Madrid')
insert into Empleado(Empleado_No,
Apellido,Oficio,Fecha_alt,Salario,Comision,Dpto_No)
values(8000,'Escriche','Programador','07/02/02',70000,0,60)
SELECT DATENAME(dw, GETDATE())
--2. Se quiere dar de alta(ingresar) un departamento de informtica
situado en Fuenlabrada(Madrid).
insert into Departamento(Dpto_No,Dep_Nombre,Local) values
(70,'Informatica','Fuenlabrada')
--3. El departamento de ventas por motivos de peseteros se traslada a
Lerida ,
--realizar dicha modificacin.///era local = barcelona
update Departamento set Local='Lerida' from Departamento where
Dep_Nombre='Ventas'--ambas
update Departamento set Local='Lerida' where Dep_Nombre='Ventas'--ambas
--4. En el departamento anterior se dan de alta(ingresan) dos empleados:
Julin Romeral y Luis
--Alonso. Su salario base es de 80000 pts y cobrarn una comisin del 15%
de su salario.
insert into Empleado(Empleado_No,Apellido,Salario,Comision,Dpto_No)
values (7500,'Romeral',8000,0.15*8000,30)
--vamos a actualizar el sueldo a 80000
update Empleado set Salario=80000,Comision=0.15*80000 where
Empleado_No=7500
insert into Empleado(Dpto_No,Apellido,Comision,Salario, Empleado_No)
values(30,'Alonso',0.15*80000,80000,7600)
--5. Modificar la comisin de los empleados de la empresa, de forma que
todos
--tengan un incremento del 10% del salario.
update Empleado set Comision=1.1*Salario
--6. Incrementar un 5% el salario de los interinos de la plantilla que
trabajen en el
--turno de noche.
select*from Plantilla
update Plantilla set Salario=Salario+0.05*Salario where T ='N' and
Funcion='Interino'
--7. Incrementar en 5000 pts el salario de los empleados del departamento
de ventas
--y del presidente, tomando en cuenta los que se dieron de
alta(ingresaron) antes que el
--presidente de la empresa.
select*from Empleado,Departamento
update Empleado set Salario=Salario+5000
where Oficio='Presidente' and Fecha_alt<(select Fecha_alt from empleado
where Oficio='Presidente') and
Dpto_No=(select Departamento.Dpto_No from Departamento where Dep_Nombre
='Ventas')
--============================================================
update Empleado set Salario=Salario+5000 from Empleado inner join
Departamento on Empleado.Dpto_No=Departamento.Dpto_No
where Oficio='Presidente' and Fecha_alt<(select Fecha_alt from empleado
where Oficio='Presidente')
or Dep_Nombre='Ventas'
--pagina 60 pregunta 8
--8. Se tienen que desplazar cien camas del Hospital SAN CARLOS para un
--Hospital de Venezuela. Actualizar el nmero de camas del Hospital SAN
CARLOS.
select*from Hospital,Departamento
update Hospital set Num_cama=Num_cama-100 where Nombre='San Carlos'
--9. Crear una tabla llamada Mujeres e insertar los enfermos con este
sexo.
select*from enfermo
create table Mujeres(Inscricion_mujer int primary key not null,Apellido
nvarchar(50),Direccion nvarchar(50),Fecha_Nac Date,Sexo char(1),NSS
nvarchar(50))
insert into mujeres select*from enfermo where Sexo ='F'
select*from Mujeres
--10. Crear una tabla llamada Empleados e introducir todos los datos de
la tabla EMP en ella.
create table Emp(Empleado_No int primary key not null,Apellido
nvarchar(50),Oficio nvarchar(50),Direccion nvarchar(50),Fecha_alt date,
Salario money, comision money,Dpto_No int)
insert into Emp select*from Empleado
select*from Emp
--11. Utilizar la tabla anterior. Subir el salario y la comisin en un
milln de pesetas y
--doscientas veinticinco mil pesetas respectivamente a los empleados que
se dieron de alta(ingresaron) en este ao 01/01/02.
update Emp set Salario=Salario+1000000/12,comision=comision+225000/12
where Fecha_alt>'01/01/02'
--12. Borrar de la tabla mujer al enfermo con nmero de inscripcin igual
a 64823.
select*from Mujeres
delete Mujeres where Inscricion_mujer=64823
--13. Borrar todos los registros de la tabla Mujeres de la forma ms
rpida.
truncate table mujeres
--14. Utilizar la tabla Empleados(Emp). Borrar todos los empleados dados
de alta entre las
--fechas 01/01/80 y 31/12/82.
select*from Emp
delete from Emp where fecha_alt between '01/01/80'and'31/12/82'
--15. Modificar el salario de los empleados trabajen en la paz y esten
destinados a
--Psiquiatra. Subirles el sueldo 20000 ptas ms que al seor Amigo R.
select*from Plantilla,Hospital,Sala
update Plantilla set Salario=(select Salario+20000 from Plantilla where
Apellido='Amigo R') from Plantilla inner join Hospital
on Hospital.Hospital_cod=Plantilla.Hospital_cod inner join Sala on
Sala.Sala_Cod=Plantilla.Sala_cod
where Hospital.Nombre='La paz' and Sala.Nombre='Psiquiatricos'
--16. Borrar los empleados cuyo nombre de departamento sea produccin.
select*from Emp,Departamento
delete Emp where Dpto_No=(select Dpto_No from Departamento where
Dep_Nombre='Produccion')
---===================================iguales
delete from Emp from Emp inner join Departamento on
Emp.Dpto_No=Departamento.Dpto_No
where Dep_Nombre='Produccion'
--pagina 62 --Procedimientos para Agrupar y resumir datos

Potrebbero piacerti anche