Sie sind auf Seite 1von 4

Solucin al examen practico de sql

--Examen prctico modulo bases de datos.


--Crear un script de sql para realizar las siguientes tareas.
--1. Crear una base de datos llamada clnica:
--a. La base de datos tendr dos archivos.
--b. El archivo de datos se llamara clnica_data (.mdf) con tamao inicial de 20
mb, tamao mximo 50mb y crecimiento del 20%.
--c. El archivo de registro (log) se llamara clnica_log (.ldf) con tamao
inicial de 15 mb, tamao mximo 30 mb y crecimiento del 10%.
use master;
drop database ClinicaGPV;
go

create database ClinicaGPV on ( name ='ClinicaGPV_data', filename = 'C:\Program


Files\Microsoft SQL
Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ ClinicaGPV_data.mdf',size=20mb, maxsize=
50mb, filegrowth=20% )
log on ( name = 'ClinicaGPV_log', filename = 'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ ClinicaGPV_log.ldf', size= 15mb, maxsize
=30mb, filegrowth=10% ); go use ClinicaGPV;

go
--2. En la base de datos crear las siguientes tablas:
--a. Tabla Pacientes con la siguientes columnas:
--i. PacienteID entero clave principal
--ii. Nombre texto requerido.
--iii. Apellidos texto requerido.
--iv. Direccin texto opcional
--v. CodigoPostal texto requerido
--vi. Provincia texto requerido
--vii. Telfono texto opcional
--viii. FechaNacimiento Fecha requerido.
create table Pacientes( PacienteID int not null primary key, Nombre varchar(50) n
otnull, Apellidos varchar(50) not null, Direccin varchar(100) null, CodigoPostal
char(5) not null, Provincia varchar(50) not null, Telefono varchar(12) null,Fecha
Nacimiento Date not null);

go
--b. Tabla Mdicos con la siguientes columnas:
--i. MedicoID entero clave principal
--ii. Nombre texto requerido.
--iii. Apellidos texto requerido.
--iv. Telfono texto requerido.
create table Medicos( MedicoID int not null primary key, Nombre varchar(50) notnu
ll, Apellidos varchar(50) not null, Telefono varchar(12) not null, );
--c. Tabla Ingresos con la siguientes columnas:
--i. NumIngreso entero auto incrementado clave principal
--ii. PacienteID entero requerido clave ajena Pacientes
--iii. Habitacin entero requerido
--iv. Cama texto requerido
--v. FechaIngreso FechaHora requerido
create table Ingresos( NumIngreso int not null identity(1,1) primary key, Pacient
eIDint not null, Habitacion int not null, Cama char(1) not null, FechaIngreso Dat
eTimenot null, constraint Ingresos_PacientesFk Foreign key (PacienteID) reference
sPacientes(PacienteID) );
go
--d. Tabla Especialidades con la siguientes columnas:
--i. EspecialidadID entero clave principal
--ii. Especialidad texto requerido
create table Especialidades( EspecialidadID int not null identity(1,1) primary ke
y,Especialidad varchar(50) not null );
go
--e. Tabla MedicosEspecialidades con la siguientes columnas:
--i. EspecialidadID entero clave principal, clave ajena a Especialidades
--ii. MedicoID entero clave principal clave ajena a Mdicos
create table MedicosEspecialidades ( EspecialidadID int not null, MedicoID int no
tnull, constraint MedicosEspecialidadesPK primary key (EspecialidadID, MedicoID),
constraint MedicosEspecialidades_EspFK foreign key (EspecialidadID) referencesEsp
ecialidades(EspecialidadID), constraint MedicosEspecialidades_MedFK foreign key(M
edicoID) references Medicos(MedicoID), );
go

alter table Pacientes add constraint ProvinciaDEF Default 'Alicante' for Provincia
;
go
--b. El Telfono tiene que empezar por 9.

alter table Pacientes add constraint TelefonoCheck Check (Telefono like '9%'); go
--4. Crear las siguientes restricciones en la tabla Ingresos:--a. El campo cama
solo puede tener o P o V.

alter table Ingresos add constraint CamaCheck Check (Cama in ('P', 'V'));
go
--b. El valor por defecto del campo FechaIngreso es la fecha y hora
actual. altertable Ingresos add constraint FechaIngresoDef Default getDate() for F
echaIngreso;
Go
--5. Insertar datos en la tabla Pacientes.
insert into Pacientes( PacienteID, Nombre, Apellidos, CodigoPostal, Provincia,Tele
fono, FechaNacimiento ) values(100,'Jos','Romero','28935','Murcia','912563256','
12/03/1975'),(101,'Juan','Romero','28935','Murcia','912563256','12/03/1975'),(102
,'Carmen','Gmez','28936','Alicante','9125631110','12/09/2012'),(103,'Mara','Rom
ero','28935','Murcia','912563222','15/03/1985'),(110,'Alberto','Saboya','28935','
Murcia','912563333','12/08/1975'),(120,'Jaime','Perles','28936','Alicante','91356
3444','17/03/1975'),(130,'Jos','Romero','28935','Alicante','913563555','12/03/19
95'),(131,'Ana','Martin','28935','Murcia','913563666','17/06/1975'),(140,'Carlos'
,'Romero','28936','Alicante','912563256','12/03/1995'),(141,'Pedro','Perles','289
38','Alicante','912563777','11/05/1993'),(150,'Jos','Alamar','28935','Alicante',
'913563256','12/03/1975');
go--6. Insertar datos en la tabla Mdicos.

insert into Especialidades(Especialidad) values ('Pediatra'), ('Psiquiatra'),('G


eneral'), ('Intensivos'), ('Ciruga'),('Ginecologa');
go
insert into Medicos( MedicoID, Nombre, Apellidos, Telefono) values (1,'Antonio','
Gmez','653998877'), (2,'Carmen','Snchez','666999885'),(3,'Eva','Moreno','666584
523'), (4,'Juana','Romero','633998877'),(5,'Olga','Pardos','633948877'), (6,'Sant
iago','Gmez','654798877');

go
insert into MedicosEspecialidades( MedicoID, EspecialidadID) values (1,1), (2,2),
(3,1),(3,3),(4,1), (4,4), (5,3), (5,5), (6,3), (6,6);
go
--7.

insert into Ingresos(PacienteID, Habitacion,Cama, FechaIngreso) values (100, 101,'


P','12/06/2010 16:48:00'), (102, 111,'P','12/06/2010
18:55:00'), (110, 105,'P','19/06/2010 12:00:00'), (130, 105, 'V','19/06/2010
20:00:00'), (100, 110,'P','31/12/2010 20:48:00'), (140, 106, 'P','31/12/2010
22:48:00'), (102, 101,'P','12/06/2011 16:48:00'), (100, 103, 'P','15/06/2011
16:48:00'),(150,101,'P','19/06/2011 16:48:00');
go
--8. Sacar un listado de los mdicos que tienen ms de una especialidad.
select m.Nombre, m.Apellidos, COUNT(me.EspecialidadID ) as NumEspec from Medicos
minner join MedicosEspecialidades me on m.MedicoID = me.MedicoID group by m.Nombr
e,m.Apellidos having COUNT(me.EspecialidadID ) > 1

go
--9. Mostar el nombre del paciente con ms ingresos en el ao 2010
select top 1 p.Nombre, p.Apellidos, COUNT(i.NumIngreso) as NumIngresos fromPacien
tes p inner join Ingresos i on p.PacienteID = i.PacienteID whereDATEPART(year, i.
fechaingreso) = 2010 group by p.Nombre, p.Apellidos order byNumIngresos desc
go
--10. Mostrar los pacientes que no han tenido ingresos.
select * from Pacientes p where p.PacienteID not in ( select distinct PacienteIDf
rom Ingresos)

go
--11. Mostrar los pacientes que han estado en la habitacin 101.
select distinct p.PacienteID, p.Nombre, p.Apellidos from Pacientes p inner joinIn
gresos i on p.PacienteID = i.PacienteID where i.Habitacion = 101
go
--12 Crear lo necesaria para almacenar esta informacin.
create table Visitas( NumVisita int not null identity(1,1) primary key, PacienteI
Dint not null, MedicoID int not null, Fecha date not null, Diagnostico varchar(50
)not null, Tratamiento varchar(100) not null, constraint Visitas_PacintesFK forei
gnkey (PacienteID) references pacientes(PacienteId),
constraint Visitas_MedicosFK foreign key (MedicoID) references Medicos(MedicoID))
;
go
insert into Visitas(PacienteID,MedicoID, Fecha , Diagnostico,Tratamiento) values(
100,2,'12/06/2010','Posible Loco','Ingresar para
seguimiento'),(100,5,'15/06/2010','Heridas','Tratar con
antibiticos'),(102,1,'19/06/2010','Gastroenteritis','Tratar antibiticos y
suero'),(131,6,'20/06/2010','Infeccin','Tratar antibiticos y revisin 1
mes'),(150,2,'22/06/2010','Depresin','Tratar con
antidepresivos'),(131,6,'12/07/2010','revisin','Alta');
go
--13. Mostrar un listado de los pacientes de Psiquiatra,
--incluyendo la fecha y el diagnostico.
select p.Nombre , p.Apellidos, v.Fecha, v.Diagnostico from Pacientes p inner join
Visitas v on p.PacienteID = v.PacienteID inner join Medicos m on m.MedicoID =v.Me
dicoID inner join MedicosEspecialidades me on m.MedicoID = me.MedicoID innerjoin
Especialidades e on e.EspecialidadID = me.EspecialidadID where e.Especialidad ='P
siquiatra'

--14. Mostrar los pacientes ingresados en junio de 2011 y


--sus tratamientos, ordenados por la fecha de nacimiento y la fecha del
--tratamiento.
select p.Nombre, p.Apellidos,v.Tratamiento from Pacientes p inner join Ingresos i
onp.PacienteID = i.PacienteID inner join Visitas v on v.PacienteID = i.PacienteI
Dwhere i.FechaIngreso >= '01/06/2011' and i.FechaIngreso <'01/07/2011' order byp.
FechaNacimiento, v.Fecha
--15. Atender a Pedro Perles en medicina general --por el doctor de la
especialidad que tenga menos visitas.

insert into Visitas(PacienteID,MedicoID, Fecha , Diagnostico,Tratamiento) select t


op1
(select MAX( PacienteID) from Pacientes where Nombre='Pedro' and Apellidos='Perle
s') as PID
, m.MedicoID, GETDATE(), 'agotamiento', 'reposo
absoluto' from Medicos m left joinVisitas v on m.MedicoID = v.MedicoID inner join
MedicosEspecialidades me onm.MedicoID = me.MedicoID inner join Especialidades e
one.EspecialidadID=me.EspecialidadID where e.Especialidad = 'General' group bym.M
edicoID order by COUNT(v.MedicoID)

Das könnte Ihnen auch gefallen