ejer cici os transact sq l

11
Ejercicios Transact-SQL Vistas Un club dicta cursos de distintos deportes. Almacena la información en varias tablas. El director no quiere que los empleados de administración conozcan la estructura de las tablas ni algunos datos de los profesores y socios, por ello se crean vistas a las cuales tendrán acceso. 1.- Crear una base de datos llamada “db_Ejercicios” 2.- Correr el siguiente Script, para crear las tabla e insertarle los datos. create table socios( documento char(8) not null, nombre varchar(40), domicilio varchar(30), constraint PK_socios_documento primary key (documento) ) Go create table profesores( documento char(8) not null, nombre varchar(40), domicilio varchar(30), constraint PK_profesores_documento primary key (documento) ) Go create table cursos( numero tinyint identity, deporte varchar(20), dia varchar(15), constraint CK_inscriptos_dia check (dia in('lunes','martes','miercoles','jueves','viernes','sabado')), documentoprofesor char(8), constraint PK_cursos_numero primary key (numero), ) Go create table inscriptos( documentosocio char(8) not null, numero tinyint not null, matricula char(1), constraint CK_inscriptos_matricula check (matricula in('s','n')), constraint PK_inscriptos_documento_numero primary key (documentosocio,numero)

Upload: yaritza-miranda

Post on 02-Feb-2016

215 views

Category:

Documents


1 download

DESCRIPTION

sql

TRANSCRIPT

Page 1: Ejer Cici Os Transact Sq l

Ejercicios Transact-SQL

Vistas

Un club dicta cursos de distintos deportes. Almacena la información en varias tablas.

El director no quiere que los empleados de administración conozcan la estructura de las tablas ni

algunos datos de los profesores y socios, por ello se crean vistas a las cuales tendrán acceso.

1.- Crear una base de datos llamada “db_Ejercicios”

2.- Correr el siguiente Script, para crear las tabla e insertarle los datos.

create table socios(

documento char(8) not null,

nombre varchar(40),

domicilio varchar(30),

constraint PK_socios_documento

primary key (documento)

)

Go

create table profesores(

documento char(8) not null,

nombre varchar(40),

domicilio varchar(30),

constraint PK_profesores_documento

primary key (documento)

)

Go

create table cursos(

numero tinyint identity,

deporte varchar(20),

dia varchar(15),

constraint CK_inscriptos_dia check (dia

in('lunes','martes','miercoles','jueves','viernes','sabado')),

documentoprofesor char(8),

constraint PK_cursos_numero

primary key (numero),

)

Go

create table inscriptos(

documentosocio char(8) not null,

numero tinyint not null,

matricula char(1),

constraint CK_inscriptos_matricula check (matricula in('s','n')),

constraint PK_inscriptos_documento_numero

primary key (documentosocio,numero)

Page 2: Ejer Cici Os Transact Sq l

)

Go

--Ingrese algunos registros para todas las tablas:

insert into socios values('30000000','Fabian Fuentes','Caseros 987')Go

insert into socios values('31111111','Gaston Garcia','Guemes 65')Go

insert into socios values('32222222','Hector Huerta','Sucre 534')Go

insert into socios values('33333333','Ines Irala','Bulnes 345')Go

insert into profesores values('22222222','Ana Acosta','Avellaneda 231')Go

insert into profesores values('23333333','Carlos Caseres','Colon 245')Go

insert into profesores values('24444444','Daniel Duarte','Sarmiento 987')Go

insert into profesores values('25555555','Esteban Lopez','Sucre 1204')Go

insert into cursos values('tenis','lunes','22222222')Go

insert into cursos values('tenis','martes','22222222')Go

insert into cursos values('natacion','miercoles','22222222')Go

insert into cursos values('natacion','jueves','23333333')Go

insert into cursos values('natacion','viernes','23333333')Go

insert into cursos values('futbol','sabado','24444444')Go

insert into cursos values('futbol','lunes','24444444')Go

insert into cursos values('basquet','martes','24444444')Go

insert into inscriptos values('30000000',1,'s')Go

insert into inscriptos values('30000000',3,'n')Go

insert into inscriptos values('30000000',6,null)Go

insert into inscriptos values('31111111',1,'s')Go

insert into inscriptos values('31111111',4,'s')Go

insert into inscriptos values('32222222',8,'s')Go

1- Cree una vista en la que aparezca el nombre y documento del socio, el deporte, el día y el

nombre del profesor.

2- Realice una consulta a la vista donde muestre la cantidad de socios inscriptos en cada

deporte

3- ordenados por cantidad.

4- Muestre (consultando la vista) los cursos (deporte y día) para los cuales no hay inscriptos.

5- Muestre los nombres de los socios que no se han inscripto en ningún curso (consultando la

vista)

6- Cree una vista para que muestre la cantidad de inscriptos por curso, incluyendo el número

del curso, el nombre del deporte y el día.

7- Cree la vista "vis_deudores" que muestre el documento y nombre del socio, el deporte, el

día y la matrícula, de todas las inscripciones no pagas colocando "with check option".

8- Modifique la vista "vis_deudores" para que muestre el domicilio, coloque la opción de

encriptación y omita with check option".

Page 3: Ejer Cici Os Transact Sq l

Procedimientos almacenados

Una empresa almacena los datos de sus empleados en una tabla llamada "empleados".

1.- En la misma base de datos llamada “db_Ejercicios” creada en los ejercicios de vista

2.- Correr el siguiente Script, para crear las tablas e insertarle los datos.

create table empleados(

documento char(8),

nombre varchar(20),

apellido varchar(20),

sueldo decimal(6,2),

cantidadhijos tinyint,

seccion varchar(20),

primary key(documento)

)Go

-- Ingrese algunos registros:

insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria')Go

insert into empleados values('22333333','Luis','Lopez',300,0,'Contaduria')Go

insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas')Go

insert into empleados values('22555555','Susana','Garcia',400,2,'Secretaria')Go

insert into empleados values('22666666','Jose Maria','Morales',400,3,'Secretaria')Go

insert into empleados values('22777777','Andres','Perez',3,'Sistemas')Go

insert into empleados values('22888888','Laura','Garcia',3,'Secretaria')

1. Cree un procedimiento almacenado llamado "pa_emp_sueldo" que seleccione los

nombres, apellidos y sueldos de los empleados.

Page 4: Ejer Cici Os Transact Sq l

2. Cree un procedimiento almacenado llamado "pa_emp_hijos" que seleccione los nombres,

apellidos y cantidad de hijos de los empleados con hijos.

3. Cree un procedimiento almacenado llamado "pa_emp_sueldo" que seleccione los

nombres, apellidos y sueldos de los empleados que tengan un sueldo superior o igual al

enviado como parámetro.

4. Cree un procedimiento almacenado llamado "pa_emp_actualizar_sueldo" que actualice

los sueldos iguales al enviado como primer parámetro con el valor enviado como segundo

parámetro.

a. Ejecute el procedimiento creado anteriormente y verifique si se ha ejecutado

correctamente: exec pa_emp_actualizar_sueldo 300,350

b. Ejecute el procedimiento almacenado "pa_emp_actualizar_sueldo" enviando en

primer lugar el parámetro @sueldonuevo y en segundo lugar @sueldoanterior

(parámetros por nombre).

5. Cree un procedimiento llamado "pa_suetotal" que reciba el documento de un empleado y

muestre su nombre, apellido y el sueldo total (resultado de la suma del sueldo y salario

por hijo, que es de $200 si el sueldo es menor a $500 y $100, si el sueldo es mayor o igual

a $500). Coloque como valor por defecto para el parámetro el patrón "%".

a. Ejecute el procedimiento anterior enviando diferentes valores:

exec pa_suetotal '22333333'

6. Cree un procedimiento que muestre todos los empleados de una sección determinada que

se ingresa como parámetro. Si no se ingresa un valor, o se ingresa "null", se muestra un

mensaje y se sale del procedimiento.

7. Cree un procedimiento almacenado que permita modificar la cantidad de hijos ingresando

el documento de un empleado y la cantidad de hijos nueva. Ambos parámetros DEBEN

ingresarse con un valor distinto de "null". El procedimiento retorna "1" si la actualización

se realiza (si se ingresan valores para ambos parámetros) y "0", en caso que uno o ambos

parámetros no se ingresen o sean nulos.

Un profesor guarda en una tabla llamada "alumnos" el nombre de los alumnos y su nota.

create table alumnos(

documento char(8),

nombre varchar(40),

nota decimal(4,2),

primary key(documento)

)Go

Page 5: Ejer Cici Os Transact Sq l

-- Ingrese algunos registros:

insert into alumnos values ('22222222','Pedro Lopez',5)Go

insert into alumnos values ('23333333','Ana Lopez',4)Go

insert into alumnos values ('24444444','Maria Juarez',8)Go

insert into alumnos values ('25555555','Juan Garcia',5.6)Go

insert into alumnos values ('26666666','Karina Torres',2)Go

insert into alumnos values ('27777777','Nora Torres',7.5)Go

insert into alumnos values ('28888888','Mariano Herrero',3.5)

Go

create table aprobados(

documento char(8),

nombre varchar(40),

nota decimal(4,2)

)

Go

create table desaprobados(

documento char(8),

nombre varchar(40)

)

8. Cree el procedimiento para que seleccione todos los datos de los alumnos cuya nota es

igual o superior a 4. Y los Ingrese en la tabla "aprobados". Los alumnos cuya nota es

menor a 4. Los Ingrese en la tabla "desaprobados".

Una librería almacena los datos de los libros en una tabla denominada "libros" y en una tabla

"ventas" las ventas de los mismos.

create table libros(

codigo int identity,

titulo varchar(40),

Page 6: Ejer Cici Os Transact Sq l

autor varchar(30),

editorial varchar(20),

precio decimal(6,2),

cantidad int,

primary key (codigo)

)

Go

create table ventas(

numero int identity,

codigo int not null,

preciounitario decimal(6,2),

cantidad int,

constraint PK_ventas primary key (numero),

constraint FK_ventas_codigolibro

foreign key (codigo)

references libros(codigo)

on update cascade

) Go

--Ingrese algunos registros para ambas:

insert into libros values('Uno','Richard Bach','Planeta',15,100)Go

insert into libros values('Ilusiones','Richard Bach','Planeta',18,150)Go

insert into libros values('El aleph','Borges','Emece',25,200)Go

insert into libros values('Matematica estas ahi','Paenza','Nuevo siglo',20,300)Go

insert into libros values('Aprenda PHP','Mario Molina','Nuevo siglo',45,200)Go

insert into ventas values(1,15,1)Go

Page 7: Ejer Cici Os Transact Sq l

insert into ventas values(2,18,1)Go

insert into ventas values(3,25,100)Go

insert into ventas values(1,15,50)Go

9. Cree un procedimiento que muestre los datos de las ventas (número, título, autor y

editorial del libro vendido, precio unitario, cantidad vendida, total por item).

10. Cree un procedimiento que permita ingresar una venta en "ventas" con los siguientes

datos: código del libro y cantidad que se vende. El procedimiento debe controlar que haya

libros disponibles (es decir, que la cantidad que se vende sea mayor o igual a la cantidad

existente del libro) y luego restar la cantidad vendida de la tabla "libros": Este

procedimiento recibe parámetros, declara variables locales y modifica 2 tablas, en una de

ellas realiza una inserción y en la otra una actualización.

Funciones

Una clínica almacena los turnos para los distintos médicos en una tabla llamada "consultas" y en

otra tabla "medicos" los datos de los médicos.

create table medicos (

documento char(8) not null,

nombre varchar(30),

constraint PK_medicos

primary key clustered (documento)

)Go

create table consultas(

fecha datetime,

medico char(8) not null,

paciente varchar(30),

constraint PK_consultas

primary key (fecha,medico),

constraint FK_consultas_medico

foreign key (medico)

Page 8: Ejer Cici Os Transact Sq l

references medicos(documento)

on update cascade

on delete cascade

)Go

3- Ingrese algunos registros:

insert into medicos values('22222222','Alfredo Acosta')Go

insert into medicos values('23333333','Pedro Perez')Go

insert into medicos values('24444444','Marcela Morales')Go

insert into consultas values('2007/03/26 8:00','22222222','Juan Juarez')Go

insert into consultas values('2007/03/26 8:00','23333333','Gaston Gomez')Go

insert into consultas values('2007/03/26 8:30','22222222','Nora Norte')Go

insert into consultas values('2007/03/28 9:00','22222222','Juan Juarez')Go

insert into consultas values('2007/03/29 8:00','24444444','Nora Norte')Go

insert into consultas values('2007/03/24 8:30','22222222','Hector Huerta')Go

insert into consultas values('2007/03/24 9:30','23333333','Hector Huerta')Go

11. Cree la función "f_nombreDia" que recibe una fecha (tipo string) y nos retorne el nombre

del día en español.

12. Cree la función "f_horario" que recibe una fecha (tipo string) y nos retorne la hora y

minutos.

13. Muestre todas las consultas del médico llamado 'Alfredo Acosta', incluyendo el día

(emplee la función "f_nombreDia", el horario (emplee la función "f_horario") y el nombre

del paciente.

Disparador (trigger)

Una empresa almacena los datos de sus empleados en una tabla denominada "empleados2" y en

otra tabla llamada "secciones2", el código de la sección y el sueldo máximo de cada una de ellas.

create table secciones2(

Page 9: Ejer Cici Os Transact Sq l

codigo int identity,

nombre varchar(30),

sueldomaximo decimal(8,2),

constraint PK_secciones primary key(codigo)

)

Go

create table empleados2(

documento char(8) not null,

nombre varchar(30) not null,

domicilio varchar(30),

codigoseccion int not null,

sueldo decimal(8,2),

constraint PK_empleados primary key(documento),

constraint FK_empelados_seccion

foreign key (codigoseccion) references secciones(codigo)

)Go

--Ingrese algunos registros en ambas tablas:

insert into secciones2 values('Administracion',1500)Go

insert into secciones2 values('Sistemas',2000)Go

insert into secciones2 values('Secretaria',1000)Go

insert into empleados2 values('22222222','Ana Acosta','Avellaneda 88',1,1100)Go

insert into empleados2 values('23333333','Bernardo Bustos','Bulnes 345',1,1200)Go

insert into empleados2 values('24444444','Carlos Caseres','Colon 674',2,1800)Go

insert into empleados2 values('25555555','Diana Duarte','Colon 873',3,1000)Go

14. Cree un disparador para que se ejecute cada vez que una instrucción "insert" ingrese

datos en "empleados2"Go el mismo debe verificar que el sueldo del empleado no sea

Page 10: Ejer Cici Os Transact Sq l

mayor al sueldo máximo establecido para la sección, si lo es, debe mostrar un mensaje

indicando tal situación y deshacer la transacción.

15. Cree un disparador para controlar que no se elimine un empleado si su sueldo es mayor

que 0. El disparador se activará cada vez que se ejecuta un "delete" sobre " empleados2",

si se está eliminando un empleado cuyo sueldo sea mayor a 0, el disparador debe retornar

un mensaje de error y deshacer la transacción.

Una empresa almacena los datos de sus empleados en una tabla denominada "empleados" y los

datos de las distintas sucursales en una tabla "sucursales".

create table sucursales(

codigo int identity,

domicilio varchar(30),

constraint PK_sucursales primary key (codigo)

)Go

create table empleados3(

documento char(8) not null,

nombre varchar(30),

domicilio varchar(30),

sucursal int not null,

constraint PK_empleados primary key (documento),

constraint FK_empleados_sucursal foreign key(sucursal)

references sucursales(codigo)

)Go

-- Ingrese algunos registros en las dos tablas:

insert into sucursales values ('Colon 123')Go

insert into sucursales values ('Sucre 234')Go

insert into sucursales values ('Rivadavia 345')Go

Page 11: Ejer Cici Os Transact Sq l

insert into empleados3 values ('22222222','Ana Acosta','Avellaneda 1258',1)Go

insert into empleados3 values ('23333333','Betina Bustos','Bulnes 345',2)Go

insert into empleados3 values ('24444444','Carlos Caseres','Caseros 948',3)Go

insert into empleados3 values ('25555555','Fabian Fuentes','Francia 845',1)Go

insert into empleados3 values ('26666666','Gustavo Garcia','Guemes 587',2)Go

insert into empleados3 values ('27777777','Maria Morales','Maipu 643',3)Go

16. Cree un disparador de inserción, eliminación y actualización que no permita

modificaciones en la tabla "empleados" si tales modificaciones afectan a empleados de la

sucursal de 1