Académique Documents
Professionnel Documents
Culture Documents
SQL Almacenado
1 de 20
1.1. Introduccin
SQL es un lenguaje potente para trabajar con BBDD, nos permite consultar, crear, modifcar y administrar bases de datos relacinales, pero que no posee la fle ibilidad de los lenguajes de programacin a la !ora de mantener un estado y encadenar acciones sucesi"as sobre los datos# $ara superar esta limitacin, todos los lenguajes de programacin, nos proporcionan librer%as de acceso a bases de datos mediante las cuales combinamos SQL con el lenguaje de programacin# Sin embargo, esta solucin, no siempre es ptima y ser%a con"eniente que la propia BD ofreciera un lenguaje interno de programacin, como efecti"amente !acen todos los productos# &ransact SQL es el lenguaje de programacin que proporciona SQL Ser"er para ampliar SQL con los elementos caracter%sticos de los lenguajes de programacin' "ariables, sentencias de control de flujo, bucles ###
*omo "emos consta de cuatro tablas, cada una con su cla"e y sus campos# (n el caso de la tabla Sesin la cal"e est+ formada por dos campos' d%a y nums# Las relaciones e istentes entre las tablas !an producido la e istencia de cla"es e ternas en dos tablas'
2 de 20
La descripcin de estas tablas es la siguiente' - (n la tabla sesin aparece dni como cla"e e terna, que es la cla"e de la tabla $onente y representa que cada sesin est+ presidida por un ponente del congreso# &ambi.n aparece numsala como cla"e e terna, que es la cla"e de la tabla Sala y representa que cada sesin se celebrar+ en una sala# - (n la tabla $onencia aparece dni como cla"e e terna, que es la cla"e de la tabla $onente y representa que cada ponencia es presentada por un ponente# &ambi.n aparece la cla"e de la tabla Sesin /d%a0nums1 como cla"e e terna y representa que cada ponencia est+ incluida en una sesin del congreso# 2 las restricciones de los campos son las siguientes' - (n una sala determinada puede que no se celebre ninguna sesin del congreso o que se celebren "arias# - &odas las sesiones deben tener asignada una sala en la que se "an a celebran y un ponente que las "a a presidir, por tanto estos campos no podr+n tomar el "alor null# - 3n ponente puede o no presidir alguna sesin y puede presidir m+s de una# Lo mismo ocurre con la presentacin de ponencias, un ponente puede no presentar ninguna ponencia y asistir al congreso solo para presidir alguna sesin o como oyente, pero tambi.n, puede presentar m+s de una ponencia# - 3na ponencia tiene que estar incluida obligatoriamente en una sesin y tener asignado un ponente que la presentar+, por tanto estos campos /dni y d%a0nums1 no podr+n tomar el "alor null# - (l campo capacidad de la tabla Sala es obligatorio /no puede ser null1 y debe estar comprendido entre 24 y 55 personas# - (l campo nombre de la tabla $onente tambi.n es obligatorio /no puede ser null1 y adem+s es 6nico, no pueden dos ponentes tener el mismo nombre, lo que le con"ierte en una cla"e candidata#
, de 20
$uesto 1B
:78*;78/201
*8(7&( &7BL( Sesion / Dia D7&(&<=(, 9ums 93=(8<*/1,01, 9omsala :78*;78/51 9@& 93LL, Dni :78*;78/C1 9@& 93LL, &itulsesion :78*;78/241, $8<=782 >(2 /Dia,9ums1, E@8(<?9 >(2 /Dni1 8(E(8(9*(S $onente/Dni1, E@8(<?9 >(2 /9omsala1 8(E(8(9*(S Sala/9omsala1 1B *8(7&( &7BL( $onencia / *odponencia :78*;78/41 $8<=782 >(2, Dia D7&(&<=( 9@& 93LL, 9ums 93=(8<*/1,01 9@& 93LL, &itulponencia :78*;78/241, Dni :78*;78/C1 9@& 93LL, E@8(<?9 >(2 /Dni1 8(E(8(9*(S $onente/Dni1, E@8(<?9 >(2 /Dia,9ums1 8(E(8(9*(S Sesion /Dia,9ums11B
D de 20
4 de 20
INSERT INTO S!/0o VALUES ( '0210#1200#',4,'BOSQUE','33344550','COMUNICACIONES'); INSERT INTO S!/0o VALUES ( '0310#1200#',1,'SAUCE','30))))$0','BASES 'E 'ATOS');
F de 20
INSERT INTO S!/0o VALUES ( '0310#1200#',2,'BOSQUE','30))))$0','INTELI&ENCIA ARTI+ICIAL'); INSERT INTO S!/0o VALUES ( '0410#1200#',1,'ROBLE','3050#0$0','O+IMATICA'); INSERT INTO S!/0o VALUES ( '0410#1 200#',2,'ROBLE','00003443','O+IMATICA'); INSERT INTO S!/0o VALUES ( '0410#1200#',3,'ALAMO','354#)0$0','SISTEMAS OPERATIVOS'); INSERT INTO Po ! 30a VALUES ( '00010','0110#1200#',1,'TERMINALES','4550#0$0'); INSERT INTO Po ! 30a VALUES ( '00020','0110#1200#',1,'IMPRESORAS','($)#00$0'); INSERT INTO Po ! 30a VALUES ( '00030','0110#1 200#',2,''I&ITALI%A'ORES','30(0#0(0'); INSERT INTO Po ! 30a VALUES ( '00040','0110#1200#',2,'PERI+ERICOS','33344550'); INSERT INTO Po ! 30a VALUES ( '00050','0210#1200#',1,'RE'ES 'E OR'ENA'OR','00003443'); INSERT INTO Po ! 30a VALUES ( '000#0','0210#1200#',2,'ARQUITECTURA 'E RE'ES','5#)$2341'); INSERT INTO Po ! 30a VALUES ( '000)0','0210#1200#',2,'RE'ES 'E AREA LOCAL','0000#0$0'); INSERT INTO Po ! 30a VALUES ( '000$0','0210#1200#',3,'PROTOCOLOS','30500000'); INSERT INTO Po ! 30a VALUES ( '000(0','0210#1 200#',4,'ESTAN'ARES','30345#$0'); INSERT INTO Po ! 30a VALUES ( '00100','0210#1 200#',4,'NORMATIVAS','1$2)35$0'); INSERT INTO Po ! 30a VALUES ( '00110','0310#1200#',1,'B4'4 &RA+ICAS','($)#(0$0'); INSERT INTO Po ! 30a VALUES ( '00120','0310#1200#',1,'B4'4 RELACIONALES','354#)0$0'); INSERT INTO Po ! 30a VALUES ( '00130','0310#1200#',2,'SISTEMAS E5PERTOS','($)#(0$0'); INSERT INTO Po ! 30a VALUES ( '00140','0310#1200#',2,'PROLO&','0050#0$0'); INSERT INTO Po ! 30a VALUES ( '00150','0410#1200#',1,',O.AS 'E CALCULO','30(0#0(0'); INSERT INTO Po ! 30a VALUES ( '001#0','0410#1200#',2,'AUTOE'ICION','30))))$0'); INSERT INTO Po ! 30a VALUES ( '001)0','0410#1200#',3,'MS1'OS','($)#00$0'); INSERT INTO Po ! 30a VALUES ( '001$0','0410#1200#',3,'UNI5','5#)$2341');
G de 20
C de 20
1B *8(7&( &7BL( 8eceta / *odJrece :78*;78/41 $8<=782 >(2, 9ombreJrece :78*;78/241, &iempo <9&(?(8 *;(*> /&iempo K 4001, *alorias <9&(?(8, *odJ"ino :78*;78/41, Dni :78*;78/C1 9@& 93LL, E@8(<?9 >(2 /*odJ"ino1 8(E(8(9*(S :ino/*odJ"ino1, E@8(<?9 >(2 /Dni1 8(E(8(9*(S *ocinero/Dni1 1B *8(7&( &7BL( 8ecetaJ<ngre / *odJrece :78*;78/41, *odJingr :78*;78/41, *antidad 93=(8<*/F,21, $8<=782 >(2 /*odJrece, *odJingr1, E@8(<?9 >(2 /*odJrece1 8(E(8(9*(S 8eceta/*odJrece1, E@8(<?9 >(2 /*odJingr1 8(E(8(9*(S <ngrediente/*odJingr1 1B
5 de 20
10 de 20
11 de 20
INSERT INTO R!3!"aFI >6! VALUES ('30002', '"C(($', 04#); INSERT INTO R!3!"aFI >6! VALUES ('30003', '><54(', $00); INSERT INTO R!3!"aFI >6! VALUES ('30003', '"C(($', 143); INSERT INTO R!3!"aFI >6! VALUES ('30003', '/a(03', 1); INSERT INTO R!3!"aFI >6! VALUES ('30003', '/a123', 250); INSERT INTO R!3!"aFI >6! VALUES ('30003', '8l3)#', 044);
2.
3na "e) establecido el entorno de trabajo, proponemos reali)ar una serie de ejercicios que nos permitir+n manipular informacin sobre el contenido de las tablas, de forma indi"idual o combinada, utili)ando los diferentes mecanismos proporcionados por el lenguaje procedimental &ransact#SQL#
12 de 20
2. . Ejemplo
Utilizacin de variables
<ntercambiar los contenidos de las columnas en una tabla## D(*L78( Lau iliar "arc!ar/101 3$D7&( $@9(9&( S(& @8?79<T7*<@9MLau iliar S(L(*& O E8@= $@9(9&( Lau iliarM$7<S, $7<SM@8?79<T7*<@9,
1, de 20
1D de 20
14 de 20
1F de 20
ERROR_SEVER%T&#$, de"uel"e la se"eridad del error# ERROR_STATE#$, de"uel"e el estado del error# ERROR_'ROCE( RE#$, de"uel"e el nombre del procedimiento almacenado que !a pro"ocado el error# ERROR_L%NE#$, de"uel"e el n6mero de l%nea en el que se !a producido el error# ERROR_!ESSA)E#$, de"uel"e el mensaje de error# $robar las siguientes secuencias de comandos# B(?<9 &82 D(*L78( Ldi"isor int , Ldi"idendo int, Lresultado int S(& Ldi"idendo M 100 S(& Ldi"isor M 0 YY (sta linea da un error S(& Lresultado M Ldi"idendo0Ldi"isor $8<9& N9o !ay errorN (9D &82 B(?<9 *7&*; $8<9& (88@8J93=B(8/1 $8<9& (88@8JS(:(8<&2/1 $8<9& (88@8JS&7&(/1 $8<9& (88@8J$8@*(D38(/1 $8<9& (88@8JL<9(/1 $8<9& (88@8J=(SS7?(/1 (9D *7&*;
(jecutar a!ora' D(*L78( Ldi"isor int , Ldi"idendo int , Lresultado int S(& Ldi"idendo M 100 S(& Ldi"isor M 0 YY (sta linea pro"oca un error de di"ision por 0 S(& Lresultado M Ldi"idendo0Ldi"isor $8<9& N*ontrolando el error ###N YY (sta linea estable LL(88@8 a cero <E LL(88@8 M 0 B(?<9 YY Se ejecuta esta parteZ $8<9& N9o !ay errorN (9D (LS( B(?<9 $8<9& N;ay errorN (9D
1C de 20
15 de 20
return / select dia, nums, dni, titulsesion from sesion R!ere nomsala liWe NSNVLnomsalaVNSN 1B Llamamos a la funcin creada anteriormente en"iando una sala' select Ofrom fJsesiones/[S73*(\1B select Ofrom fJsesiones/D(E73L&1B
20 de 20
2.21. Ejercicio 1
:amos a trabajar con la tabla QlibroQ de una librer%a# 1Y (liminamos la tabla si e iste'
if object_id('libros') is not null drop table libros;
2Y *reamos la tabla'
create table libros( codigo int identity, titulo varchar(40) not null, autor varchar(30), editorial varchar(20), precio deci al(!,2), cantidad tinyint, pri ary "ey (codigo) );
D ] Se solicita' =ostrar los t%tulos de los cuales no !ay libros disponibles /cantidadM01B en caso que no !aya, mostramos un mensajeB ;acer un descuento del 10S a todos los libros de editorial Q(meceQB si no !ay, mostramos un mensajeB (liminar los libros de los cuales no !ay stocW /cantidadM01B si no !ay, mostramos un mensaje'
2.22. Ejercicio 2
3na empresa registra los datos de sus empleados en una tabla llamada QempleadosQ# 1Y (liminamos la tabla QempleadosQ si e iste'
if object_id('e pleados') is not null drop table e pleados;
2Y *reamos la tabla'
create table e pleados( docu ento char(1) not null,
21 de 20
no bre varchar(30) not null, se2o char('), fechanaci iento dateti e, sueldo deci al(!,2), pri ary "ey(docu ento) );
DY (s pol%tica de la empresa festejar cada fin de mes, los cumplea^os de todos los empleados que cumplen ese mes# Si los empleados son de se o femenino, se les regala un ramo de rosas, si son de se o masculino, una corbata# La secretaria de la ?erencia necesita saber cu+ntos ramos de rosas y cu+ntas corbatas debe comprar para el mes de mayo#
2.23. Ejercicio 3
3tili)ando la Base de Datos de 8ecetas @btener los "inos con grado de alco!ol entre 10 y 20, o todos si no e iste ninguno con este rango# 8epetir el ejercicio con rango entre ,0 y D0# *omparar los resultados#
2.24. Ejercicio 4
3tili)ando la Base de Datos de 8ecetas' =ientras el tiempo medio de las recetas sea inferior a F0, aumentar el tiempo de las recetas con incrementos de 4 !asta que el precio mayor no llegue a 400, pero se acerque el m+ imo posible# 7l final de la ejecucin "isuali)ar el resultado, pero no guardar los cambios !ec!os a la base de datos# (jecutar tambi.n con el tiempo medio de las recetas inferior a F00#
22 de 20