Académique Documents
Professionnel Documents
Culture Documents
insert into UbicacionCliente values(205,'Prolongacion union 1456','El porvenir','Trujillo'); insert into UbicacionCliente values(206,'Psj. san luis 1458','salaverry','Trujillo'); insert into UbicacionCliente values(207,'Psj. Santa Lucia 254','Moche','Trujillo'); insert into UbicacionCliente values(208,'Av. Gonzales prada 1245','Bolivar','Chepen'); insert into UbicacionCliente values(209,'calle fujimori 1457','guadalupe','Guadalupe'); insert into UbicacionCliente values(210,'las quintanas 458','Buenos Aires','Trujillo'); --INSERTAR DATOS EN LA TABLA Idiomas_Ofertados insert insert insert insert insert insert insert insert into into into into into into into into Idiomas_Ofertados Idiomas_Ofertados Idiomas_Ofertados Idiomas_Ofertados Idiomas_Ofertados Idiomas_Ofertados Idiomas_Ofertados Idiomas_Ofertados values(1,'Frances'); values(2,'Ingles Britanico'); values(3,'aymara'); values(4,'Chino mandarin'); values(5,'Portugues'); values(6,'Italiano'); values(7,'Aleman'); values(8,'quechua');
--INSERTAR DATOS EN LA TABLA Horario_Cursos insert into Horario_Cursos values(1,'9:00-11:00','11:0013:00','18:00-20:00'); insert into Horario_Cursos values(2,'9:00-11:00','11:0013:00','18:00-20:00'); insert into Horario_Cursos values(3,'7:00-9:00','15:0017:00','19:00-21:00'); insert into Horario_Cursos values(4,'7:00-9:00','15:0017:00','19:00-21:00'); insert into Horario_Cursos values(5,'7:00-9:00','15:0017:00','19:00-21:00'); insert into Horario_Cursos values(6,'9:00-11:00','11:0013:00','18:00-20:00'); insert into Horario_Cursos values(7,'7:00-9:00','15:0017:00','19:00-21:00'); insert into Horario_Cursos values(8,'9:00-11:00','11:0013:00','18:00-20:00'); --INSERTAR DATOS EN LA TABLA Medio_Comunicacion insert insert insert insert insert insert insert insert insert insert insert insert into into into into into into into into into into into into Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion Medio_Comunicacion values(1,200,'Revista'); values(2,201,'TV'); values(3,202,'RADIO'); values(4,203,'pERIODICO'); values(5,204,'TV'); values(6,205,'Radio'); values(7,206,'TV'); values(8,207,'RADIO'); values(9,208,'PERIODICO'); values(10,209,'PERIODICO'); values(11,210,'PERIODICO'); values(12,211,'TV');
--INSERTAR DATOS EN LA TABLA Interes_Cliente insert insert insert insert insert insert insert insert insert insert insert insert into into into into into into into into into into into into Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente Interes_Cliente values(201,8,'19:00-21:00'); values(202,5,'9:00-11:00'); values(203,4,'15:00-17:00'); values(204,2,'18:00-20:00'); values(205,3,'11:00-13:00'); values(206,6,'19:00-21:00'); values(207,5,'18:00-20:00'); values(208,1,'9:00-11:00'); values(209,8,'18:00-20:00'); values(210,6,'11:00-13:00'); values(211,7,'19:00-21:00'); values(212,1,'19:00-21:00');
3. Realizar las siguientes consultas: 3.1. Listar los interesados por ciudades, distritos 3.2. Listar los interesados por idioma 3.3. Reportar un conteo o total de interesados por idiomas (cursos) 3.4. Reportar un conteo o total de interesados por medios de comunicacin 3.5. Listar instituciones a las que pertenecen los interesados 3.6. Listar los horarios(disponibilidad de los clientes) 3.7. Listar los clientes que empiezan sus apellidos con la letra p 3.8. Listar las ubicaciones de los clientes que pertenecen a los distritos de la esperanza, los granados y el porvenir 3.9. Listar el 75% de clientes ordenados por telfono del cliente 3.10. Listar el total de clientes
1. USO DE JOIN (JUNTURA NATURAL DE TABLAS) 1.1. Listar los idiomas y sus respectivos horarios.
use ExamenBDII select I.idIdioma,I.nomIdioma , H.manana, H.tarde ,H.noche from dbo.Idiomas_Ofertados I,dbo.Horario_Cursos H where I.idIdioma=H.idIdioma
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
2. FUNCIONES EN MSSQLSERVER 2008-2005 2.1. LEFT (IZQUIERDA) Permite recortar un conjunto de caracteres, desde la izquierda hacia la derecha. left(cadena,longitud) 2.1.1. Vamos a colocar el nombre de los idiomas, que empiecen con una letra mayscula y las dems en minscula.
SELECT * FROM dbo.Idiomas_Ofertados
2.1.2.
Viendo el escenario anterior, ahora usando la funcin left vamos a obtener el primer carcter, luego lo convertimos en mayscula, seguidamente obtenemos el resto de la cadena inicial y finalmente lo concatenamos y tenemos lo deseado. Paso 1. Obtenemos el Primer carcter
SELECT idIdioma, left(nomIdioma,1)from dbo.Idiomas_Ofertados
Paso 3: Obtenemos la subcadena de nombre del idioma. SELECT idIdioma, lower (substring(nomIdioma,2,len(nomIdioma)-1)) from dbo.Idiomas_Ofertados
de
caracteres,
2.2.
2.3.
LOWER Permite cambiar una cadena de caracteres en minscula. lower(cadena) SUBSTRING Permite obtener una subcadena, dada la cadena original, posicin desde donde empezara la subcadena y el tamao de caracteres a mostrar. Substring (cadena, inicio, longitud) + Permite concatenar cadenas. Cadena1+cadena2 LEN Obtiene el tamao de una cadena de caracteres. len (cadena)
2.4.
2.5.
2.6.
3. REPORTES DE DATOS USANDO FUNCIONES 3.1. Colocar los centros de trabajo de los clientes en mayscula y colocar los apellidos de los clientes la primera letra con mayscula.
select * from Clientes
3.2.
Solucin: primero colocamos en mayscula primera letra del apellido y luego convertimos a mayscula todos los datos del campo LaboraCliente.
select idCliente,nomCliente, upper (left(apeCliente,1))+ lower (substring(apeCliente,2,len(apeCliente)-1)) as apeCliente, Ocupacioncliente, upper (LaboraCliente) as LaboraCliente from dbo.Clientes
3.3.
Concatenar el nombre del cliente con el apellido, cada campo debe empezar con mayscula y el centro de trabajo con su ocupacin, el centro de trabajo debe estar todo en mayscula.
select idCliente,nomCliente+' '+ upper (left(apeCliente,1))+ lower (substring(apeCliente,2,len(apeCliente)-1)) as DatosCliente, Ocupacioncliente+' '+ upper (LaboraCliente) as Ocupacion_CentroLaboral from dbo.Clientes
3.4.
Actualizar los datos de los clientes, es decir sus apellidos deben empezar por mayscula y su centro de trabajo debera estar en maysculas.
select * from Clientes;
3.5.
Primero adecuamos el apellido y luego el centro de trabajo Paso1: Primero actualizamos adecuadamente el apellido y el centro de trabajo.
update Clientes set apeCliente =upper (left(apeCliente,1))+ lower (substring(apeCliente,2,len(apeCliente)-1)), LaboraCliente=upper (LaboraCliente) Nos debe salir el siguiente mensaje. (13 filas afectadas)
Paso2: Reportamos los datos de la tabla Clientes y debemos observar los cambios realizados.
select * from Clientes;
insert into PagoDocentesCurso (idPagoDocente,preHora,CantHoras) select idPagoDocente,preHora,CantHoras from PagoDocentes select idPagoDocente, preHora,pagoHTrab from PagoDocentesCurso
6. Usando agrupamientos GROUP BY Listar centro laboral y cantidad de clientes de ese centro laboral. Paso 1: Seleccionamos los centros laborales de todos los clientes.
select LaboraCliente from dbo.Clientes
Paso 2: Como observamos en el resultado anterior existen centros de trabajos repetidos vamos a agruparlo.
select LaboraCliente from dbo.Clientes group by LaboraCliente
7. CREACIN DE VISTAS EN MSSQLSERVER 7.1. Listar los clientes interesados en un determinado idioma y en un determinado horario. 7.1.1. Primero creamos la vista, con la consulta que nos reporta todo lo pedido.
create view v_RepCliente_Idioma_HI as select Inte.idCliente,C.nomCliente,I.nomIdioma, Inte.horaInteres from dbo.Interes_Cliente as Inte inner join dbo.Idiomas_Ofertados I on (I.idIdioma=Inte.idIdioma) inner join dbo.Clientes as C on (C.idCliente=Inte.idCliente)
7.1.2.
Guardamos la vista, seleccionando el cdigo anterior y presionando F5 o simplemente hacemos clic en ejecutar de MSSQLServer 2008. Con ello hemos logrado crear nuestra vista y lo podemos utilizar en cualquier momento. Ejecutamos la vista para ver el resultado que esta produce.
select * from v_RepCliente_Idioma_HI
7.1.3.
7.2.
7.3.
Para modificar una vista simplemente hacemos lo siguiente y agregamos ms clausulas o campos que se desean agregar o modificar.
alter view v_RepCliente_Idioma_HI
7.4.
Crear una vista que permitir reportar todos los clientes que son Estudiantes. 7.4.1. Creamos la vista
create view v_Clientes_Estudiantes as select idCliente, nomCliente,apeCliente, OcupacionCliente,LaboraCliente from Clientes where OcupacionCliente= 'Estudiante'
7.4.2.
7.5.
Insertamos datos a la tabla clientes, usando la vista creada anteriormente, pero debemos de tener en cuenta que la restriccin establecida indica que solo va admitir actualizar la tabla clientes siempre y cuando la ocupacin del cliente sea igual a estudiante. Para ello tenemos que modificar la vista creada anteriormente y colocar la restriccin, caso contrario no podr almacenar en la vista los clientes que no cumplan la condicin. Paso 1: Modificamos la vista anterior.
ALTER view v_Clientes_Estudiantes as select idCliente, nomCliente,apeCliente, OcupacionCliente,LaboraCliente from Clientes where OcupacionCliente= 'Estudiante' with check option
Paso 2: ahora insertamos los datos Nota: la vista es un puente para llegar a la base de datos y la vista creada.
insert into v_Clientes_Estudiantes (idCliente,nomCliente,apeCliente, OcupacionCliente,LaboraCliente) values (213,'Hobby','Saavedra','Estudiante','UNT')
8. FUNCIONES DEFINIDAS POR EL USUARIO 8.1. Tipos de funciones 8.1.1. Funciones Escalares Una funcin escalar retorna un nico valor, cuando se le llama. Ejercicio 1: Crear una funcin que permita calcular el sueldo de un docente, dado su cantidad de horas y el precio por hora. Paso 1: Creamos la funcin y declaramos las variables necesarias.
create function pagoTotalDocentes(@cantidad int , @preUnitario decimal(9,2)) Returns decimal(9,2) as Begin Declare @pagoDocente decimal(9,2) set @pagoDocente=@cantidad*@preUnitario
Ejercicio 2: Crear una funcin que permita ingresar un nmero correspondiente a cada mes (1=Enero, 2=Febrero12=Diciembre), y la funcin debe reportar el mes correspondiente al nmero ingresado. Paso 1: Creamos la funcin y usamos instrucciones condicionales mltiples, select case.
create function f_nombreMes (@numero int ) returns varchar(10) as begin declare @nombre varchar(10) set @nombre= case @numero when '1' then 'Enero' when '2' then 'Febrero' when '3' then 'Marzo' when '4' then 'Abril' when '5' then 'Mayo' when '6' then 'Junio' when '7' then 'Julio' when '8' then 'Agosto' when '9' then 'Setiembre' when '10' then 'Octubre' when '11' then 'Noviembre' when '12' then 'Diciembre' end--case return @nombre end;
Paso 2: Ahora llamamos a la funcin, f_nombreMes y le mandamos un parmetro en este caso el nmero 3 y debe devolvernos que corresponde al mes de marzo. Nunca olvidar de colocar el usuario que lo ha creado.
select dbo.f_nombreMes(3) as Mes_Consultado
8.1.2. Funciones con valores de tabla de varias instrucciones Ejercicio 1: Creamos una funcin que se le ingrese por parmetro la ocupacin y devuelva los clientes que pertenecen a esa ocupacin. Paso 1: Creamos la funcin ListadoOcupacion
create function ListadoOcupacion(@ocupacion varchar(30)) returns @clientes table ( idcliente int , nomCliente varchar(30) , ocupacionCliente varchar(30),LaboraCliente varchar(30) ) as Begin Insert into @clientes select idcliente,nomCliente, ocupacionCliente,LaboraCliente from clientes where ocupacionCliente=@ocupacion return End
8.1.3. Funciones con valores de tablas en lnea Las funciones son la evolucin de las vistas, pero la diferencia es que las funciones aceptan parmetros. Paso 1: Creamos la funcin
create function f_Clientes_Estudiantes ( @ocupacionCliente varchar(30)) returns table as return ( select idCliente, nomCliente,apeCliente,
Paso 2: Llamamos al funcin, teniendo en cuenta el nombre del usuario que lo ha creado, el nombre de la funcin y el o los parmetros necesarios.
select * from dbo.f_Clientes_Estudiantes('Estudiante')
9. PROCEDIMIENTOS ALMACENADOS EN MSSQLSERVER 2008 Es un conjunto de cdigo puro del lenguaje que utilizamos dentro de las bases de datos como por ejemplo: create table, insert into, Select from. Que se almacena fsicamente en la base de datos y de la misma forma se exportan cuando creamos una copia de seguridad de nuestra base de datos. Como funcionan: Los procedimientos almacenados se basan en una estructura definida por SQL SERVER Iniciamos con: CREATE PROCEDURE nombre_del_procedimiento @variables tipo(longitud) } AS BEGIN Todo el cdigo puro de base de datos END Como probamos: Esto es lo ms fcil de realizar solo necesitamos lo siguiente: Escribimos EXEC nombre_del_procedimiento ' variables', 12,' variables' Nota: Cabe destacar que no necesariamente se deben definir variables en el caso de un Select * From solo pondremos EXEC y nombre del procedimiento 9.1. Tipos de procedimientos almacenados 9.1.1. Procedimientos almacenados sin parmetros (vistas)
Ejemplo 1: El procedimiento almacenado creado anteriormente permite listar los clientes que pertenecen a los distritos de La noria , Trujillo y El Porvenir.
Ejemplo 2: Crear un procedimiento almacenado, el cual permita reportar a todos los clientes, que estan interesados en algun idioma y en un determinado horario. Paso 1: Creamos el procedimiento almacenado create procedure sp_Listar_Cliente_I_IC as begin select C.idCliente,C.nomCliente , I.nomIdioma , IC.horaInteres from dbo.Interes_Cliente as IC inner join dbo.Clientes as C on (IC.idCliente=C.idCliente) inner join dbo.Idiomas_Ofertados I on (I.idIdioma=IC.idIdioma) end Paso 2: Ejecutamos el procedimiento almacenado. exec sp_Listar_Cliente_I_IC
9.1.2.
9.1.3. Procedimientos almacenados para realizar lo siguiente: 9.1.3.1. Insertar datos Ejemplo 1: Crear un procedimiento almacenado, para insertar datos en una determinada tabla en este caso, tabla Clientes. Paso 1: Creamos el procedimiento almacenado.
create procedure sp_Insertar_Clientes @idCliente int , @nomCliente varchar(30), @apeCliente varchar(30), @telfCliente varchar(12), @email varchar(30), @OcupacionCliente varchar(30), @LaboraCliente varchar(30)as Begin insert into Clientes values (@idCliente,@nomCliente, @apeCliente,@telfCliente,@email, @OcupacionCliente,@LaboraCliente) End
9.1.3.2.
Actualizar datos Ejemplo 1: Crear un procedimiento almacenado, para actualizar los datos en una determinada tabla en este caso, tabla Clientes. La actualizacin se hace por el cdigo del cliente. Paso 1: Creamos el procedimiento almacenado.
create procedure sp_Actualizar_Clientes @idCliente int , @nomCliente varchar(30), @apeCliente varchar(30), @telfCliente varchar(12), @email varchar(30), @OcupacionCliente varchar(30), @LaboraCliente varchar(30) as begin update Clientes set nomCliente=@nomCliente, apeCliente=@apeCliente, telfCliente=@telfCliente, email=@email, OcupacionCliente=@OcupacionCliente, LaboraCliente=@LaboraCliente where idCliente=@idCliente end Paso 2: Revisamos el contenido de la tabla clientes. select * from Clientes
Paso 3: vamos a actualizar los datos del cliente con cdigo igual a 213. Para ello ejecutamos el procedimiento almacenado.
exec sp_Actualizar_Clientes '213','Hobby','Saavedra','83833','saavedravh@gmail.com','Docente',' UNT'
paso 4: Reportamos nuevamente los clientes y observamos que se actualizaron los datos correctamente.
select * from Clientes where idCliente=213
9.1.3.3.
Buscar un cliente, dado su cdigo del cliente. Ejemplo 1: Crear un procedimiento, que permita realizar una bsqueda de un cliente, por un determinado cdigo. Paso 1: Crear el procedimiento almacenado.
create procedure sp_Buscar_Clientes @idCliente int as begin select * from Clientes where idCliente=@idCliente end
Paso 2: Ejecutar el procedimiento almacenado, y buscar los datos del cliente, que tiene codigo igual a 200.
exec sp_Buscar_Clientes '200'
9.1.3.4.
Eliminar datos Ejemplo 1: Crear un procedimiento almacenado, que permita eliminar los datos de un determinado cliente, dado su cdigo. Paso 1: Crear el procedimiento almacenado.
create procedure sp_Eliminar_Clientes @idCliente int as begin delete from Clientes where idCliente=@idCliente end
Paso 2: ejecutar el procedimiento almacenado, ingresando como parametro el codigo del cliente a eliminar en este caso el 203.
exec sp_Eliminar_Clientes '203'
10. TRIGGERS Un trigger es un bloque PL/SQL asociado a una tabla, que se ejecuta como consecuencia de una determinada instruccin SQL (una operacin DML: INSERT, UPDATE o DELETE) sobre dicha tabla. Ejemplo 1: Crear un trigger, que permita insertar datos en la tabla Horario de Cursos, cuando se ingrese un nuevo idioma. Paso 1: Creamos en primer lugar el Trigger.
create trigger Idioma_Horararios on Idiomas_Ofertados for insert as begin insert into Horario_Cursos (idIdioma,manana,tarde,noche) select idIdioma, '9:00-11:00','15:00-17:00','19:00-21:00' from inserted end
Paso 2: Insertamos los datos, para ver si se ejecuta correctamente el Trigger creado.
insert into Idiomas_Ofertados select 9,'Ingles Estadounidense'