Sunteți pe pagina 1din 107

Apuntes de

Lenguaje

y bases de datos relacionales

SQL

Claudio Casares
personal.lobocom.es/claudio/

SQL y bases de datos relacionales Claudio Casares

ndice de contenido
1. Generalidades..........................................................................................................................................5
1.1. Arquitecturas..................................................................................................................................................5

1.1.1. Cliente / Servidor............................................................................................................5 1.1.2. Motor Distribuido............................................................................................................5 1.1.3. Componentes Distribuidos..............................................................................................5


1.2. Cursores y B !eres.........................................................................................................................................5

1.2.1. "bicaci#n de los cursores................................................................................................$ 1.2.2. %ipos de cursores.............................................................................................................$ 1.2.3. %ipos de b !eres..............................................................................................................& 2. Modelo de datos.......................................................................................................................................9
2.1. 'ntroducci#n...................................................................................................................................................( 2.2. )os "suarios.................................................................................................................................................1* 2.3. Ciclo de vida de una base de datos...............................................................................................................11

2.3.1. An+lisis de las necesidades............................................................................................11 2.3.2. ,studio de viabilidad.....................................................................................................11 2.3.3. De!inici#n de requisitos.................................................................................................11 2.3.-. Dise.o...........................................................................................................................12 2.3.5. 'mplementaci#n.............................................................................................................12 2.3.$. ,valuaci#n y /er!eccionamiento...................................................................................12
2.-. Criterios de calidad.......................................................................................................................................12 2.5. 'ndicadores de calidad..................................................................................................................................15 2.$. ,l modelo l#0ico..........................................................................................................................................15 2.&. 1estricciones de inte0ridad..........................................................................................................................1&

3. Modelo Relacional.................................................................................................................................20
3.1. 'ntroducci#n.................................................................................................................................................2*

3.1.1. Clave primaria...............................................................................................................2* 3.1.2. Dominio........................................................................................................................21 3.1.3. 'nte0ridad re!erencial.....................................................................................................21 3.1.-. 2l0ebra relacional.........................................................................................................21
3.2. /roceso de normali3aci#n.............................................................................................................................23

3.2.1. De!inici#n de la clave....................................................................................................23 3.2.2. /rimera !orma normal 41567.........................................................................................23 3.2.3. Se0unda !orma normal 42567........................................................................................23.2.-. %ercera !orma normal 43567.........................................................................................25 3.2.5. Cuarta !orma normal 4-567...........................................................................................2$ 3.2.$. 8tras !ormas normales...................................................................................................2$
3.3. )as interrelaciones........................................................................................................................................2$

3.3.1. 'nterrelaciones uno a uno...............................................................................................2$ 3.3.2. 'nterrelaciones uno a varios...........................................................................................2&

SQL y bases de datos relacionales Claudio Casares

3.3.3. 'nterrelaciones varios a varios.......................................................................................2& 3.3.-. /roblemas con las interrelaciones..................................................................................29 3.3.5. Atributos de las interrelaciones.....................................................................................29
3.-. 2l0ebra relacional........................................................................................................................................2(

3.-.1. "ni#n.............................................................................................................................2( 3.-.2. 'ntersecci#n...................................................................................................................3* 3.-.3. Di!erencia......................................................................................................................3* 3.-.-. /roducto........................................................................................................................3* 3.-.5. Selecci#n.......................................................................................................................3* 3.-.$. /royecci#n.....................................................................................................................31 3.-.&. 1euni#n 4"ni#n natural7 ...............................................................................................31 3.-.9. Divisi#n.........................................................................................................................31 3.-.(. Asi0naci#n.....................................................................................................................32
3.5. C+lculo relacional.........................................................................................................................................32

4. Lenguaje SQL.........................................................................................................................................33
-.1. 'ntroducci#n.................................................................................................................................................33

-.1.1. Breve :istoria................................................................................................................33 -.1.2. Componentes del S;)...................................................................................................33


-.2. Consultas de Selecci#n.................................................................................................................................3$

-.2.1. Consultas b+sicas...........................................................................................................3$ -.2.2. Devolver literales..........................................................................................................3$ -.2.3. 8rdenar los re0istros.....................................................................................................3$ -.2.-. "so de <ndices de las tablas...........................................................................................3& -.2.5. Consultas con /redicado................................................................................................3& -.2.$. 1ecuperar 'n!ormaci#n de una base de Datos ,=terna...................................................3(
-.3. Consultas de Acci#n.....................................................................................................................................-*

-.3.1. D,),%,........................................................................................................................-* -.3.2. '5S,1% '5%8..............................................................................................................-* -.3.3. "/DA%,.......................................................................................................................-2


-.-. Consultas de "ni#n 'nternas........................................................................................................................-3

-.-.1. Consultas de Combinaci#n entre tablas.........................................................................-3 -.-.2. Consultas de Autocombinaci#n.....................................................................................-$ -.-.3. Consultas de Combinaciones no Comunes....................................................................-$ -.-.-. C18SS >8'5 4S;)?Server7..........................................................................................-& -.-.5. S,)6 >8'5....................................................................................................................-& -.-.$. 6")) >8'5...................................................................................................................-(
-.5. Consultas de "ni#n ,=ternas.......................................................................................................................5* -.$. Consultas de 1e!erencias Cru3adas..............................................................................................................51

-.$.1. MS?Access....................................................................................................................51
-.&. Criterios de Selecci#n...................................................................................................................................5-

-.&.1. 8peradores )#0icos.......................................................................................................55 -.&.2. @alores 5ulos................................................................................................................5& -.&.3. 'ntervalos de @alores.....................................................................................................5&

SQL y bases de datos relacionales Claudio Casares

-.&.-. ,l 8perador )iAe...........................................................................................................5& -.&.5. ,l 8perador 'n...............................................................................................................59 -.&.$. )a cl+usula BC,1,.....................................................................................................5(


-.9. A0rupamiento de 1e0istros..........................................................................................................................$*

-.9.1. D18"/ BE...................................................................................................................$* -.9.2. A@D..............................................................................................................................$1 -.9.3. Count.............................................................................................................................$1 -.9.-. Ma=F Min.......................................................................................................................$2 -.9.5. StDevF StDev/...............................................................................................................$2 -.9.$. Sum...............................................................................................................................$3 -.9.&. @arF @ar/.......................................................................................................................$3 -.9.9. C8M/"%, de S;)?Server...........................................................................................$-.(. %ipos de Datos..............................................................................................................................................$-.1*. Subconsultas...............................................................................................................................................$$ -.11. ,structuras de las %ablas............................................................................................................................&1

-.11.1. Creaci#n de %ablas 5uevas.........................................................................................&1 -.11.2. )a cl+usula C85S%1A'5%.........................................................................................&2 -.11.3. Creaci#n de <ndices.....................................................................................................&3 -.11.-. Modi!icar el Dise.o de una %abla................................................................................&-.12. /roblemas resueltosG 1e0istros duplicados................................................................................................&5 -.13. /roblemas resueltosG 1e0istros no relacionados........................................................................................&$ -.1-. Cursores......................................................................................................................................................&$ -.15. 61,,%,H% y C85%A'5S 46"))%,H% S;)?Server7...........................................................................&(

-.15.1. 6")) %,H% S,A1CC...............................................................................................&( -.15.2. Consultas e Indices de te=to.........................................................................................91 -.15.3. Componentes de las consultas de te=to de %ransact?S;)............................................92 -.15.-. 6unciones de conJunto de !ilas C85%A'5S%AB), y 61,,%,H%%AB),...............93 -.15.5. C85%A'5S%AB), 4%?S;)7.....................................................................................9-.15.$. 61,,%,H%%AB),....................................................................................................9( -.15.&. "tili3ar el predicado C85%A'5S...............................................................................(* -.15.9. "tili3ar el predicado 61,,%,H%................................................................................(2 -.15.(. 6unciones de conJunto de !ilas C85%A'5S%AB), y 61,,%,H%%AB),...............(2 -.15.1*. 'denti!icaci#n del nombre de la columna de la clave nica........................................(-.15.11. Buscar palabras o !rases con valores ponderados 4tKrmino ponderado7.....................(& -.15.12. Combinar predicados de te=to con otros predicados de %ransact?S;)......................(& -.15.13. "tili3ar predicados de te=to para consultar columnas de tipo 'MAD,......................(9
-.1$. MS?AccessG Bases e=ternas........................................................................................................................(( -.1&. MS?AccessG /ar+metros...........................................................................................................................1** -.19. MS?AccessG 8mitir permisos...................................................................................................................1** -.1(. MS?AccessG Cl+usula /18C,D"1,......................................................................................................1*1 -.2*. 8ptimi3ar Sentencias................................................................................................................................1*2

5. AP !"#$%S........................................................................................................................................104
5.1. )as 12 re0las de Codd que determinan la !idelidad de un sistema relacional al modelo relacional..........1*-

Generalidades SQL y bases de datos relacionales Claudio Casares

1. Generalidades
1.1. Arquitecturas
,n muc:as ocasionesF despuKs de :aber reali3ado un 0ran estudio detallado del SGBD y :aber revisado su dise.oF nos podemos encontrar que :a implementado sobre un equipo con insu!icientes recursos o no se :a seleccionado la arquitectura adecuada para su e=plotaci#n. ,ntre otras arquitecturasF caben destacar las si0uientesG

1.1.1. Cliente / Servidor


,sta arquitectura consta de un cliente inteli0ente que puede solicitar servicios de un servidor en red. ,n el lado del cliente de esta arquitectura encontramos una aplicaci#n !rontal bastante sencilla eJecut+ndose en un ordenador personal. A una aplicaci#n cliente / servidor se le puede pedir que realice validaciones o que muestre listas de opciones v+lidasF pero la mayor parte de las re0las de inte0ridad de los datos y de ne0ocio se imponen en la propia base de datosG relacionesF IndicesF valores predeterminadosF ran0osF disparadoresF procedimientos almacenadosF etc. ,n el lado del servidor encontramos un motor de servidor de bases de datos inteli0ente. ,l servidor est+ dise.ado para aceptar consultas S;) desde la aplicaci#n !rontalF 0eneralmente en !orma de llamadas a procedimientos almacenados que devuelven conJunto de resultados claramente de!inidos y de +mbito limitado. DeneralmenteF la aplicaci#n cliente es responsableF al menosF de la administraci#n de la cone=i#nF la captura de los datosF la presentaci#n de datos y la administraci#n de los errores. ,l servidor es el responsable de la administraci#n inteli0ente de los recursosF la administraci#n de la se0uridadF la administraci#n de los datosF de las consultas y sobre todo de la inte0ridad de los datos.

1.1.2. Motor Distribuido


,n este casoF cada uno de los clientes posee el motor necesario para acceder a la base de datos y acceden de !orma independiente del resto de los usuarios. ,sta arquitectura tiene la ventaJa del aprovec:amiento de los recursos del cliente pero la desventaJa del control de versiones.

1.1.3. Componentes Distribuidos


,sta arquitectura a.ade un tercer elemento al sistema de acceso a la base de datosF se trata de los obJetos de l#0ica de ne0ocioF encar0ados de procesar las peticiones de los clientes y :acKrselas lle0ar al servidor. ,stos obJetos pueden estar instalados en m+quinas di!erentes a la del cliente y del servidor. )a principal ventaJa radica en el aprovec:amiento de los servicios cliente / servidor y en ase0urar el control de las versiones del motor de acceso a datos. )a aplicaci#n !rontal reali3a peticiones a los obJetos de l#0ica de ne0ocio que son trasmitidas al servidorF la respuestas del mismo lle0an a los obJetos y Kstos las devuelven al cliente.

1.2. Cursores y !"eres


B+sicamenteF un cursor es un conJunto de punteros a las !ilas devueltas por una consultaF la mayorIaF son como un conJunto de resultadosF e=cepto por que los datos reales 0eneralmente permanecen en el servidor. "n b !er es un dep#sito RAM en el lado del cliente donde se 0uardan los datos del conJunto de resultados de manera temporal :asta que pueden llevarse a otro lu0ar para su almacenamiento. )as columnas de datos de una o varias !ilas se dice que son miembros del cursor si la cl+usula WHERE de la consulta las incluye. ,sta columnasF combinadas en !ilas l#0icas se convierten en !ilas miembro del conJunto de resultados. /or eJemploG

Generalidades SQL y bases de datos relacionales Claudio Casares SELECT Nombre, Genero FROM Animales WHERE Edad < 10

Cuando se eJecuta esta consultaF el motor cliente empie3a inmediatamente a seleccionar miembros para el conJunto de resultados. ,n este caso son todos los animales menores de die3 a.os. Si no es necesaria una ordenadorF el SGDB pasa las primeras !ilas de este conJunto de resultados de vuelta a la estaci#n de trabaJo nada m+s capturarlas y despuKs detiene el procesamiento :asta que la estaci#n recupera las !ilas capturadasF una ve3 recuperadas el 0estor de datos pasa m+s !ilas y asI sucesivamente. Debido a este procesoF si otros usuarios est+n actuali3ando la base de datosF :ay posibilidades que se a.ada otra !ila que cumpla las condiciones del conJunto de resultadosL en este caso la !ila a.adida pasa a ser miembro del conJunto y es recuperada por la estaci#n de trabaJo. %ambiKn e=iste la posibilidad de la eliminaci#n o modi!icaci#n de una !ilaF en estos casosF si la !ila no :a sido enviada a la estaci#n de trabaJo o no se envIa o se envIa modi!icadaL pero siempre cabe la posibilidad de que la estaci#n de trabaJo :aya leIdo una !ila que ya no e=iste o que :aya sido modi!icada por otro usuario. ,stas actuali3aciones no se incluir+n en el conJunto de resultados si la estaci#n de trabaJo :a comen3ado a procesar los resultados. ,l proceso de relleno del cursor !inali3a cuando el 0estor de datos :a determinado cual es la ltima !ila del conJunto de resultados y se considera completamente relleno cuando la estaci#n de trabaJo :a capturado la ltima !ilaF en este momento cuando se conoce el n mero de !ilas que componen el cursor. /or este motivo los mKtodos o propiedades que in!orman del n mero de !ilas devueltas o a!ectadas no son reales :asta que el cursor no se rellenado completamente.

1.2.1. #bicaci$n de los cursores


Como ya se :a comentado un cursor es un conJunto de punteros a un conJunto de resultados. ,stos punteros pueden estar ubicados en el servidor o en la estaci#n de trabaJoF ori0inando dos tipos de cursoresF los cursores del lado del cliente y los cursores del lado del servidor. /ero no todos los 0estores de datos permiten crear cursores en el lado del servidorF s#lo se pueden crear con aquellos 0estores que ten0an comportamiento cliente / servidor. )as ventaJas e inconvenientes de cada tipo de cursor es muy variable y depende siempre de la e=plotaci#n que se desee :acer de los datosF de la topolo0Ia de la red y de los equipos empleados. ,n 0eneral los cursores en el lado del servidor reducen los tiempos de acceso a los datos y meJoran el despla3amiento por el conJunto de resultadosF si embar0o consumen m+s cantidad de recursos de servidor y de red.

1.2.2. %ipos de cursores


Con&untos de resultados sin cursor
Con un conJunto de resultados sin cursor las !ilas de datos pasan al !rontal para su procesamiento. ,ste el sistema m+s r+pido para llevar los datos desde el servidor al clienteF pero no o!rece los bene!icios del cursorF por queF si bien al0unos son actuali3ablesF a menudo no lo son y :ay que controlar el proceso desde el !rontal para controlar las modi!icaciones.

Cursores despla'ables
"no de los aspectos m+s costosos de la administraci#n de los cursores es dar soporte a la capacidad de despla3amiento. ,sta capacidad si0ni!ica queF una ve3 eJecutada una consultaF un cursor despla3able permite la colocaci#n en cualquier !ila del conJunto de resultados. ,stos mKtodos de reubicaci#n son

Generalidades SQL y bases de datos relacionales Claudio Casares

costosos en el sentido que consumen recursos del sistema. /ara aumentar el rendimiento se aconseJa limitar los cursores y seleccionar los no despla3ables.

Cursores de s$lo avance


,ste tipo de cursor s#lo permite utili3ar los mKtodos para despla3arse avan3ando por las !ilas del conJunto de resultadosF no permiten el retroceso por las mismas. ,n este caso el 0estor de datos enviar+ las !ilas del conJunto de resultados tan r+pido como le sea posible.

Cursores est(ticos
"n cursor est+tico proporciona la capacidad de direccionamiento por todo el conJunto de resultados 0enerando una copia en la estaci#n de trabaJo de las !ilas devueltasF todos los trabaJos reali3ados sobre este conJunto de resultados a!ectar+ nicamente a la copia local. /or su naturale3a este cursor necesita de un espacio de almacenamiento en el cliente. ,ste cursor no es la meJor opci#n para datos que cambian constantementeF pero para tablas de b squeda cuyos valores no es probable que cambienF este cursor tiene muc:o sentido.

Cursores de con&unto de claves


"n cursor de conJunto de clavesF u :oJa de respuesta din+micaF almacena un conJunto de clavesF b+sicamente un conJunto de punterosF y permite volver a capturar una !ila seleccionada de acuerdo con la in!ormaci#n especI!ica de la !ila almacenada en dic:as claves. ,stos cursores necesitan espacio de almacenamiento independiente para los datos de cada una de las claves que lo componen. Cualquier cambio o modi!icaci#n sobre una !ila del conJunto de resultados por parte de cualquier usuario es re!leJado en cualquier estaci#n de trabaJo al leer la in!ormaci#n de dic:a !ila.

Cursores din(micos
Al i0ual que en los dos casos anterioresF un cursor din+mico almacena un bloque de claves. Sin embar0oF con este tipo de cursorF la consulta que se :a utili3ado para 0enerar el conJunto de resultados se vuelve a eJecutar constantemente siempre que se :ace re!erencia al cursor. Debido a esta actividad repetidaF los cursores din+micos consumen 0ran cantidad de recursosF pero poseen la 0ran ventaJa que Jam+s cierran la pertenencia o no pertenencia de las !ilas al conJunto de resultados. ,n los dos casos anteriores una ve3 rellenado el cursor no se admite la inclusi#n o e=clusi#n de !ilas.

Cursores de s$lo lectura


%odos los tipos de cursores citados admiten la posibilidad de s#lo lecturaF en este caso nin0una de las !ilas del conJunto de resultados pueden ser modi!icadas por la estaci#n de trabaJo. ,ste cursor es muy til para la 0eneraci#n de consultas o in!ormes en donde se sabe que nin0 n dato ser+ modi!icado. /oseen la ventaJa y el inconveniente de no 0enerar bloqueos sobre las !ilas consultadasF de tal !orma que cualquier usuario puede editar las !ilas contenidas en este cursor.

1.2.3. %ipos de b!"eres


!"eres de una !nica "ila
"n b !er de una nica !ila no es en realidad un cursorF aunque aquI se apliquen las mismas re0las de pertenencia que se aplican a un cursor de conJunto de claves de s#lo avance. Con un b !er de una nica !ila s#lo es posible e=aminar los datos de la !ila del conJunto de resultados. )as !ilas anteriores no est+n disponibles y la !ila actual no estar+ accesible despuKs de pasar a la si0uiente !ila del conJunto de resultados.

Generalidades SQL y bases de datos relacionales Claudio Casares

!"eres de n "ilas
"n b !er de n !ilas amplIa el +mbito y la capacidad de despla3amiento del b !er de una nica !ila. ,n este casoF a la estaci#n de trabaJo se le e=pone un n mero determinado de !ilas del conJunto de resultados y a la aplicaci#n se le permite que se desplace libremente por esas !ilas.

Modelo de datos SQL y bases de datos relacionales Claudio Casares

2. Modelo de datos
2.1. )ntroducci$n
Desde tiempos remotosF los datos :an sido re0istrados por el :ombre en al0 n tipo de soporte 4piedraF papelF maderaF etc.7 a !in de que quedara constancia de un !en#meno o idea. )os datos :an de ser interpretados para que se conviertan en in!ormaci#n tilF esta interpretaci#n supone un !en#meno de a0rupaci#n y clasi!icaci#n. ,n la era actual y con el au0e de los medios in!orm+ticos aparece el almacenamiento en soporte electroma0nKticoF o!reciendo mayores posibilidades de almacenaJeF ocupando menos espacio y a:orrando un tiempo considerable en la b squeda y tratamiento de los datos. ,s en este momento donde sur0e el concepto de bases de datos y con ellas las di!erentes metodolo0Ias de dise.o y tratamiento. ,l obJetivo b+sico de toda base de datos es el almacenamiento de sImbolosF n meros y letras carentes de un si0ni!icado en sIF que con un tratamiento adecuado se convierten en in!ormaci#n til. "n eJemplo podrIa ser el si0uiente datoG 19941224F con el tratamiento correcto podrIa convertirse en la si0uiente in!ormaci#nG MFecha de nacimiento: 24 de diciembre de 1994M. Se0 n van evolucionando los tiemposF las necesidades de almacenamiento de datos van creciendo y con ellas las necesidades de trans!ormar los mismos datos en in!ormaci#n de muy diversa naturale3a. ,sta in!ormaci#n es utili3ada diariamente como :erramientas de trabaJo y como soporte para la toma de decisiones por un 0ran colectivo de pro!esionales que toman dic:a in!ormaci#n como base de su ne0ocio. /or este motivo el trabaJo del dise.ador de bases de datos es cada ve3 m+s delicadoF un error en el dise.o o en la interpretaci#n de datos puede dar lu0ar a in!ormaci#n incorrecta y conducir al usuario a la toma de decisiones equivocadas. Se :ace necesario la creaci#n de un sistema que ayude al dise.ador a crear estructuras correctas y !iablesF minimi3ando los tiempos de dise.o y e=plotando todos los datosF nace asI la metodolo0Ia de dise.o de bases de datos. )a metodolo0Ia de dise.o de datos divide cada modelo en tres esquemasG A7 Modelo GlobalG se trata de una representaci#n 0r+!ica le0ible por el usuario y que nos aporta el !luJo de in!ormaci#n dentro de una or0ani3aci#n. 5o e=isten re0las para su construcci#n y se debe reali3ar siempre el esquema m+s sencillo posible para la comprensi#n por parte del usuario de la base de datos. /or eJemploG

Modelo de datos SQL y bases de datos relacionales Claudio Casares

10

B7 Modelo LgicoG se trata de una representaci#n 0r+!icaF mediante sImbolos y si0nos normali3adosF de la base de datos. Su obJetivo es representar la estructura de los datos y las dependencias de los mismosF 0aranti3ando la consistencia y evitando la duplicidad. ,ste modelo de datos se estudiar+ con pro!undidad en los capItulos si0uientes. C7 Modelo FsicoG se trata del almacKn de los datosF es la base de datos en sI mismaF el soporte donde se almacenan los datos y de donde se e=traen para convertir los datos en in!ormaci#n. ,n !unci#n del 0estor de bases de datos empleado las re0las de almacenamiento varIan.

2.2. *os #suarios


,n todo sistema de base de datos cabe di!erenciar tres tipos di!erentes de usuariosF entre todos comparten la in!ormaci#n pero acceden a ella de una !orma di!erenteF siempre en !unci#n de sus necesidades. 17 ,l primer 0rupo de usuarios es el PED 4Procesa&iento %lectr'nico de "atos7F normalmente compuestos por los operarios de la or0ani3aci#n. )as necesidades b+sicas de este 0rupo de usuarios sonG ,l !oco operativo !undamental se centra en el almacenamiento de los datosF el procesamiento de los mismos y el flujo de datosL /oseen acceso restrin0ido a la in!ormaci#nL Deneran in!ormes de tipo listados.

27 ,l se0undo 0rupo de usuarios es el SIM 4Siste&as de #n(or&aci'n de Gesti'n7 y suele estar !ormado por los mandos medios de la or0ani3aci#n. )as necesidades b+sicas de este 0rupo de usuarios sonG ,l !oco operativo se !undamenta en la toma de decisionesF tomando como partida los datos del 0rupo /,D e introduciendo un volumen peque.o de in!ormaci#nL /oseen acceso medianamente restrin0ido a la in!ormaci#nL Deneran in!ormes de res menes de datos del 0rupo /,D y listados de la in!ormaci#n que introducen.

37 ,l tercer ltimo 0rupo de usuarios lo !orman el STD 4Siste&a de a)o*o a +o&a de "ecisiones7F este 0rupo se centra en el nivel m+s alto de la or0ani3aci#n y poseen las caracterIsticas si0uientesG ,l !oco operativo se centra en la decisinF con una entrada mInima de datosL 5o tienen acceso restrin0idoL Deneran in!ormes 0lobales que les sirven como apoyo a las tomas de decisiones del ne0ocioF estos son los in!ormes m+s importantes y suelen ir acompa.ados de res menesF 0r+!icas y sobre todo centrados en la evoluci#n y comparaci#n de la in!ormaci#n.

-7 Cabe destacar la !i0ura de un cuarto 0rupo de usuariosF en este caso usuarios avan3adosF que est+ compuesto por los administradores del sistemaF cuya opini#n es !undamental para seleccionar el soporte de los datosF evitar la duplicaci#n de in!ormaci#n ya e=istente en otros sistemas y sobre todo puede aportar el conocimiento de sus usuariosF sus necesidades y los problemas ya resueltos. ,n 0eneralF podemos decir que los objetivos de una base de datos son los si0uientesG Ayudar en la toma de decisionesL Compartir de !orma controlada y restrin0ida los datos y el acceso a la in!ormaci#nL 'nte0rar los datos de una !orma l#0icaF evitando la duplicidadL Ase0urar un r+pido acceso a la in!ormaci#n y los datos.

Modelo de datos SQL y bases de datos relacionales Claudio Casares

11

2.3. Ciclo de vida de una base de datos


2.3.1. An(lisis de las necesidades
,n reuni#n con el cliente se deben documentar los tres 0rupos de usuarios de!inidos en la introducci#nF las necesidades de in!ormaci#n de cada uno de ellosF asI como los in!ormes que cada uno necesita para su actividad y el contenido de los mismos. Cuanta m+s precisi#n e=ista en estos requisitos iniciales m+s preciso ser+ el desarrollo de la base de datos. ,n esta reuni#n tambiKn debe quedar documentados los niveles de seguridad de los 0rupos de usuariosF los derechos de cada uno de ellos sobre los datosF los requisitos de los sistemas in!orm+ticos del cliente 4sistema operativoF tipo de redF servidoresF etc.7 y la ubicacin de los usuarios. 5o :ay que olvidar que normalmente en las empresas e=isten ya sistemas de almacenamiento de datosF por tanto es conveniente anali3ar los datos ya e=istentes y anali3ar las posibles relaciones con la base de datos a desarrollar. "n cuestionario muy sencillo pero muy til para el administrador es el si0uiente 4a rellenar por todos los usuarios7G 5ombreG Car0oG 2rea de responsabilidadG 8bli0aciones principales que requieren in!ormaci#n de la base datosG NDe quK aplicaciones recibe in!ormaci#nO NCon cu+nta !recuencia recibe in!ormaci#nO N;uK :ace con esta in!ormaci#nO N;uK precauciones de se0uridad debe tomar con respecto a la in!ormaci#nO N/ara que aplicaci#n proporciona datosO N,st+n contemplados cambios para al0una de sus actividades actuales que involucren al0una de las in!ormaciones anterioresO

2.3.2. +studio de viabilidad


"n estudio de viabilidad implica la preparaci#n de un in!orme con las caracterIsticas si0uientesG Viabilidad tecnolgica. NCay tecnolo0Ia su!iciente para el desarrolloO Viabilidad operacional. N,=isten su!icientes recursos :umanosF presupuestoF e=periencia y !ormaci#n para el desarrolloO Viabilidad econmica. NSe pueden identi!icar los bene!iciosO N)os bene!icios costearIan el desarrollo del sistemaO NSe pueden medir los costes y los bene!iciosO

2.3.3. De"inici$n de requisitos


)os requisitos de desarrollo involucran el so!tPare y :ardPare necesario para la implementaci#nF los recursos :umanos necesarios 4tanto internos como e=ternos7F la !ormaci#n al personal. Aunque un poco al mar0en del tema es conveniente parar en este momento y plani!icar las acciones a reali3ar elaborando un crono0rama del proyecto y un or0ani0rama con las responsabilidades de cada miembro del equipo. Conviene se.alar quienes van a ser los interlocutores y !iJar un calendario de reuniones de se0uimiento del proyecto.

Modelo de datos SQL y bases de datos relacionales Claudio Casares

12

Cay que de!inir la !i0ura del validadorF esta persona ser+ la encar0ada de velar en cada momento que no se est+ rebasando el alcance del proyectoF asI como ase0urar que la implementaci#n est+ encaminada a subsanar las necesidades del cliente.

2.3.,. Dise-o
,n esta etapa se crea un esquema conceptual de la base de datos. Se desarrollan las especi!icaciones :asta el punto en que puede comen3ar la implementaci#n. Durante esta etapa se crean modelos detallados de las vistas de usuario y sobre todo las relaciones entre cada elemento del sistemaF documentando los derec:os de uso y manipulaci#n de los di!erentes 0rupos de usuarios. Si parte de la in!ormaci#n necesaria para crear al0 n elemento establecido ya se encuentra implementado en otro sistema de almacenamiento :ay que documentar que relaci#n e=istir+ entre uno y otro y detallar los sistemas que eviten la duplicidad o inco:erencia de los datos. ,l dise.o constaF como se vio anteriormenteF de tres !asesG el dise.o 0lobal o conceptualF el dise.o l#0ico y el modelo !Isico.

2.3... )mplementaci$n
"na ve3 totalmente detallado el modelo conceptual se comien3a con la implementaci#n !Isica del modelo de datosF a medida que se va avan3ando en el modelo el administrador del sistema va ase0urando la correcci#n del modelo y el validador la utilidad del mismo. )a implementaci#n consiste en el desarrollo de las tablasF los Indices de los mismosF las condiciones de validaci#n de los datosF la relaci#n entre las di!erentes tablas. /or otro ladoF la de!inici#n de las consultas y los par+metros a utili3ar por cada una de ellas. "na ve3 !inali3ada la implementaci#n !IsicaF se asi0nan las correspondientes medidas de se0uridad y se ubica la base de datos en el lu0ar correspondiente.

2.3./. +valuaci$n y 0er"eccionamiento


,n esta ltima etapa todos los usuarios del sistema acceden a la base de datos y deben ase0urarse el correcto !uncionamiento de la mismaF que sus derec:os son los adecuadosF teniendo a su disposici#n cuanta in!ormaci#n necesiten. %ambiKn deber+n ase0urarse que el acceso a los datos es c#modoF pr+cticoF se0uro y que se :an eliminadoF en la medida de lo posibleF las posibilidades de error. ,l administrador se ase0ura que todos los derec:os y todas las restricciones :an sido implementadas correctamente y que se :a se0uido en manual de estilo en la totalidad de la implementaci#n. ,l validador se ase0urar+ que todas las necesidades del cliente :an sido satis!ec:as.

2.,. Criterios de calidad


*e1ibilidad
,l dise.o de una base de datos :a de estar redactado con la su!iciente claridad para que pueda ser entendido r+pidamente. ,l len0uaJe utili3ado debe ser lo su!icientemente claroF conciso y detallado para que e=plique con total claridad el dise.o del modeloF sus obJetivosF sus restriccionesF en 0eneral todo aquello que a!ecte al sistema de !orma directa o indirecta. ,n este punto conviene aplicar el principio que una ima0en vale m+s que mil palabrasF pero en ocasiones son necesarias esas mil palabras y obviar la ima0en.

Modelo de datos SQL y bases de datos relacionales Claudio Casares

13

2iabilidad
Se trata de reali3ar un sistema de bases de datos lo su!icientemente robusto para que sea capa3 de recuperarse !rente a errores o usos inadecuados. Se deben utili3ar 0estores con las :erramientas necesarias para la reparaci#n de los posibles errores que las bases de datos pueden su!rirF por eJemplo tras un corte inesperado de lu3.

0ortabilidad
,l dise.o deber permitir la implementaci#n del modelo !Isico en di!erentes 0estores de bases de datos.

Modi"icabilidad
5in0 n sistema in!orm+tico es est+ticoF las necesidades de los usuarios varIan con el tiempo y por lo tanto las bases de datos se deben adaptar a las nuevas necesidadesF por lo que se precisa que un buen dise.o !acilite el mantenimientoF esto esF las modi!icaciones y actuali3aciones necesarias para adaptarlo a una nueva situaci#n.

+"iciencia
Se deben aprovec:ar al m+=imo los recursos de la computadoraF minimi3ando la memoria utili3ada y el tiempo de proceso o eJecuci#nF siempre que no sea a costa de los requisitos anteriores. ,n este punto se debe tener en cuenta los 0estores cliente / servidor de bases de datos. ,n muc:as ocasiones es m+s rentable car0ar de trabaJo al servidor y liberar recursos de los clientesF pero no todos los 0estores permiten este tipo de trabaJoF por lo tanto se :a de tener en cuenta estas dos circunstancias en el dise.o de la base de datos.

Auto descripci$n
,n la documentaci#n 0enerada debe estar todo el detalle del dise.oF evitando re!erencias a otros documentos que no estKn incluidos dentro de la documentaci#n de la base de datos.

%rivialidad
%anto el dise.o como la implantaci#n se deben reali3ar utili3ando los est+ndares !iJados a prioriF estos est+ndares deber+n quedar re!leJados al inicio del documento.

Claridad
%odos los documentos deben estar redactados de !orma clara y !+cil de entenderF los nombre utili3ados para las tablasF los camposF IndicesF etc. deben ser autodescriptivos y estar per!ectamente documentados.

Co3erencia
)as anotaciones y terminolo0Ia utili3ada deben ser uni!ormesF para ello se debe se0uir al0 n tipo de metodolo0Ia est+ndarF indicado cual se :a empleadoF en los casos en que se utilice al0una metodolo0Ia no est+ndar se debe adJuntar a la documentaci#n.

Completo
%odos los elementos constitutivos de la base de datos e=istenF no se :an deJado partes incompletasF sin documentar o sin implementar.

Modelo de datos SQL y bases de datos relacionales Claudio Casares

14

Concisi$n
5o e=isten elementos in tiles ni repetitivos. ,n este apartado :ay que :acer un especial :incapiK en la repetici#n de datos en di!erentes tablasF :ay que evitar a toda costa que el mismo dato se repita en varias tablas para conse0uir asI una optimi3aci#n del tama.o de la base de datos.

2acilidad de Aprendi'a&e
)a documentaci#n de la base de datos se puede utili3ar sin necesidad de otros conocimientos in!orm+ticos !uera del alcance del dise.o e implementaci#n de la base de datos.

2acilidad de #so
)os datos deben ser !+ciles de elaborar y los resultados !+ciles de entender.

Generalidad
)a base de datos debe ser capa3 de adaptarse a cualquier tipo de empresa y a cualquier casuIstica.

)ndependencia de #suario
)a base de datos no debe estar li0ada a la utili3aci#n en una nica instalaci#nF :ay que tener en cuenta queF aunque se trate de un desarrollo a medidaF en un !uturo se podrIa reali3ar la instalaci#n en un cliente di!erente al inicial.

)ndependencia de Sistema
)as prestaciones y dise.o de la base de datos no est+n vinculadas al entorno.

)ndependencia de )nstalaci$n
)a base de datos se puede transportar !+cilmente de una instalaci#n a otra.

Modularidad
)a base de datos puede ser descompuesta en elementos independientes. Si se trata de un dise.o 0randeF en donde :ay un 0ran n mero de tablasF conviene reali3ar a0rupaciones entre ellaF creando m#dulos !uncionales que permitan la meJor compresi#n del dise.o y de la implantaci#n.

4bservable
)a base de datos debe permitir observar los accesos a los datos. Siempre que se pueda :ay que deJar un rastro de la utili3aci#n de los datos por parte de los usuariosF esta in!ormaci#n ayuda al redimensionado de la base de datos y a conocer el n mero de accesos a los datos.

0recisi$n
)os c+lculos e!ectuados se deben reali3ar con la precisi#n requerida.

0rotecci$n
)a base de datos debe permitir la protecci#n de los datos !rente a usos no debidosF para ello :ay que elaborar un sistema de accesos de!iniendo di!erentes usuarios con di!erentes claves y especi!icar que autori3aciones tendr+ cada usuario sobre los di!erentes datos.

Modelo de datos SQL y bases de datos relacionales Claudio Casares

15

%ra'abilidad
%omando como punto de partida la versi#n actual se puede remontar su dise.o :asta las especi!icaciones iniciales

2... )ndicadores de calidad


Al !inali3ar el dise.o de una base de datos podemos utili3ar la si0uiente tabla para comprobar el 0rado de calidad del trabaJo.
1 "e#ibilidad %iabilidad &or'abilidad (odi)i*abilidad E)i*ien*ia Au'o +es*ri,*i-n .ri/ialidad Claridad Co0eren*ia Com,le'o Con*iso %a*ilidad de A,rendi1a2e %a*ilidad de 3so Generalidad 4nde,enden*ia de 3suario 4nde,enden*ia del 5is'ema 4nde,enden*ia de 4ns'ala*i-n (odularidad 6bser/able &re*ision &ro'e**i-n .ra1able "e#ibilidad .6.A" &3N.3AC47N %4NA" $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ 2 $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ 3 $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ 4 $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ 5 $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ 6 $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ 7 $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ ! $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ 10 $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$

2./. +l modelo l$1ico


Anteriormente se e=puso el ciclo de vida del desarrollo de una base de datos. ,ste capItulo se centrar+ en el dise.o del modelo l#0ico de los datosF por tanto antes de comen3ar esta modelaci#n es necesario tener documentado las necesidadesF viabilidad y de!inici#n de los requisitosF asI como tener elaborado el modelo 0lobal o conceptual del dise.o.

Modelo de datos SQL y bases de datos relacionales Claudio Casares

16

,l paso del modelo 0lobal o conceptual de datos al modelo l#0ico supone una abstracci#nF un mecanismo para la conversi#n del mundo real a un mundo !ormado por datosF a su a0rupaci#n y clasi!icaci#n. ,l proceso de abstracci#n consiste en identi!icar los elementos o conceptos empleados en el modelo 0lobal y trans!ormarlo en lo que denominamos entidades en el modelo l#0ico. )a abstracci#n se puede reali3ar de las si0uientes !ormasG

Clasi"icaci$n
Consiste en 0enerar una nica entidad conceptos con caracterIsticas comunesF todos ellos tendr+n las mismas caracterIsticas y se di!erencian unos de otros por los valores que toman dic:as caracterIsticas. /or eJemploG los conceptos cursos de inglsF cursos de espaol y cursos de francs se pueden a0rupar en una nica entidad denominada M !"S#SM que en0lobe y di!erencie cada uno de los di!erentes cursos que se imparten.

A1re1aci$n
Consiste en separar cada una de las partes de un concepto para 0enerar distintas entidadesF por eJemplo el concepto coche lo podemos de!inir utili3ando las entidades ruedaF motor y chasis.

Generali'aci$n
Consiste en ir 0enerado entidades de di!erentes niveles de tal !orma que cada entidad de nivel superior a0rupe las de nivel in!erior.

Asociaci$n
Consiste en la 0enerali3aci#n de entidades a partir de entidades ya e=istentes.

Modelo de datos SQL y bases de datos relacionales Claudio Casares

17

2.5. 6estricciones de inte1ridad


,n el mundo real e=isten ciertas restricciones que deben cumplir los elementos en Kl e=istentesL por eJemploF una persona s#lo puede tener un n mero de D5' y una nica direcci#n o!icial. Cuando se dise.a una base de datos se debe re!leJar !ielmente el universo del discurso que estamos tratandoF lo que es los mismoF re!leJar las restricciones e=istentes en el mundo real.

*os componentes de una restricci$n son los si1uientes7


)a operaci#n de actuali3aci#n 4inserci#nF borrado o eliminaci#n7 cuya eJecuci#n :a de dar lu0ar a la comprobaci#n del cumplimiento de la restricci#n. )a condici#n que debe cumplirseF la cual es en 0eneral una proposici#n l#0icaF de!inida sobre uno o varios elementos del esquemaF que puede tomar uno de los valores de verdad 4cierto o !also7. )a acci#n que debe llevarse a cabo dependiendo del resultado de la condici#n.

+n 1eneral8 se puede decir que e9isten tres tipos de inte1ridad7


Integridad de dominio: restrin0imos los valores que puede tomar un atributo respecto a su dominioF por eJemplo $%&% '( 1) * +,. Integridad de entidadG la clave primaria de una entidad no puede tener valores nulos y siempre deber+ ser nicaF por eJemplo %-.. Integridad referencialG las claves aJenas de una tabla :iJa se tienen que corresponder con la clave primaria de la tabla padre con la que se relaciona. /or eJemploF en la tabla familiares de los empleados necesitaremos el %-. de empleado/ 0ue es la cla1e a2ena de la tabla.

*as restricciones se clasi"ican en7


! Inherentes o ,st+n impuestas por el modeloF o 5o tiene que ser de!inidas por el usuarioF ya que se encuentran en el propio modeloF o Se activan en el momento de la de!inici#n del esquema cuando se produce un intento de violaci#nF o Se rec:a3a todo esquema que no cumple estas restriccionesF o 'ntroducen ri0ideces en el modelo. "! #em$nticas o 'mpuestas por el universo del discursoF o %ienen que ser de!inidas por los dise.adoresF o Se activan en el momento de la actuali3aci#n de la base de datosF o Se rec:a3a todo eJemplar que no cumpla estas restricciones 4o se ponen en marc:a otros medios a !in de que no se produ3ca un estado de inconsistencia7F o Ayudan a capturar la sem+ntica de los datos y a conse0uir su consistencia. %!

jenas Se especi!ican en los pro0ramas de aplicaci#nF 5o est+n almacenadas en el esquema de la base de datosF /ueden ser violadas por actuali3aciones en las que no se :aya pro0ramado la restricci#nF ,l sistema de bases de datos no puede comprobar si son consistentes en sI mismas. ,l optimi3ador no puede tomarlas en consideraci#nF /roporcionan el m+=imo de !le=ibilidadF

Modelo de datos SQL y bases de datos relacionales Claudio Casares

18

/ueden ser pro0ramadas en un len0uaJe de prop#sito 0eneral o en al0 n len0uaJe propio del sistema de bases de datosF Suponen una importante car0a de pro0ramaci#n y mantenimiento.

&! 'ropias Se identi!ican en el esquemaF ,st+n almacenadas en el esquema de la base de datosF 5o pueden ser violadas por nin0una actuali3aci#n. a! ccin General ,s obli0atorio especi!icar la condici#n y la acci#nF Son procedimentales 4al menos en parteF ya que la acci#n se especi!ica siempre mediante un procedimiento7F Suponen car0a de pro0ramaci#nF ,s muy di!Icil 4pr+cticamente imposible en la mayor parte de los casos7 que el sistema de bases de datos pueda comprobar su consistenciaF ,l optimi3ador no puede tomarlas en consideraci#nF Casta a:ora no est+n estandari3adasF ,st+n muy li0adas a los productosF Son muy !le=iblesF %ienen nombre y e=istencia propia dentro del pro0rama.

i!

'rocedimientos almacenados ,s obli0atorio especi!icar la condici#n 4adem+s de la acci#n7F Son totalmente procedimentalesF /ueden ser tan compleJas como impon0a la sem+ntica del mundo real 4tanto en la condici#n como en la acci#n7F Son las m+s !le=ibles dentro de las restricciones propias.

ii!

(isparadores Combinan los en!oques declarativo 4en la condici#n7 y procedimental 4en la acci#n7F /ueden ser tan compleJas como impon0a la sem+ntica del mundo real en cuanto a la acci#nF y bastantes compleJas en la condici#n 4todo lo que permite la proposici#n l#0ica mediante la que se e=presa la condici#n7F ,l cumplimiento de la condici#n dispara la acci#nF Son m+s !le=ibles que las restricciones de acci#n especI!ica.

b!

ccin )specfica )a acci#n est+ implIcita en la misma restricci#nF por lo que no :ay que de!inirlaF Son declarativasF puesto que no especi!ica la acci#n y la condici#nF si se de!ineF es declarativaF ,l no cumplimiento de la condici#n lleva a aplicar la acci#nF /odrIan ser de!inidas mediante un len0uaJe de tipo 0eneralF ,l sistema de bases de datos puede comprobar si son consistentes en sI mismasF ,l optimi3ador puede tomarlas en consideraci#nF 5o suponen car0a de pro0ramaci#nF s#lo de de!inici#n.

i!

*ondicin General 5o se especi!ica la acci#nF que es siempre de rec:a3o 4el no cumplimiento de la condici#n lleva consi0o el rec:a3o de la actuali3aci#n7F

Modelo de datos SQL y bases de datos relacionales Claudio Casares

19

,s obli0atorio declarar la condici#n mediante una proposici#n l#0ica que permite condiciones de compleJidad arbitrariaF Adem+s de la condici#nF se puede especi!icar al0 n otro componenteF Son m+s !le=ibles que las de condici#n especI!icaF ,s m+s di!Icil optimi3ar su eJecuci#n que en el caso de las de condici#n especI!ica. I! Verificacin

5o tienen e=istencia en sI mismasF Su de!inici#n !orma parte de la de!inici#n del elemento a!ectado por la restricci#nF Se aplican a un nico elemento y aunque pueden a!ectar a otrosF en este caso se complica su de!inici#nF /ueden no tener nombre. sercin %ienen e=istencia por sI mismasF Se de!inen con independencia de cualquier elemento del esquemaF /ueden a!ectar a m+s de un elementoF %ienen nombre.

II!

ii!

*ondicin )specfica Son opciones proporcionadas por el propio modeloF 5o se especi!ica nin0uno de los componentes relativos a una restricci#n 4ni la operaci#nF ni la condici#nF ni la acci#n7F Son poco !le=iblesF ,l optimi3ador puede tomarlas en consideraci#nF Su eJecuci#n puede ser m+s !+cilmente optimi3ada que las de condici#n 0eneral.

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

20

3. Modelo 6elacional
3.1. )ntroducci$n
)as bases de datos relacionales son el tipo de bases de datos actualmente m+s di!undido. )os motivos de este K=ito son !undamentalmente dosG 1. o!recen sistemas simples y e!icaces para representar y manipular los datos 2. se basan en un modeloF el relacionalF con s#lidas bases te#ricas ,l modelo relacional !ue propuesto ori0inariamente por E.F. Codd en un ya !amoso artIculo de 1(&*. Dracias a su co:erencia y !acilidad de usoF el modelo se :a convertido en los a.os 9* en el m+s usado para la producci#n de DBMS 4"ata,ase Manage&ent S*ste&7. )a estructura !undamental del modelo relacional es precisamente esaF Mrelaci#nMF es decir una tabla bidimensional constituida por lneas 4tu)las7 y columnas 4atri,utos7. )as relaciones representan las entidades que se consideran interesantes en la base de datos. Cada instancia de la entidad encontrar+ sitio en una tupla de la relaci#nF mientras que los atributos de la relaci#n representar+n las propiedades de la entidad. /or eJemploF si en la base de datos se tienen que representar personasF se podr+ de!inir una relaci#n llamada M3ersonasMF cuyos atributos describen las caracterIsticas de las personas 4tabla si0uiente7. Cada tupla de la relaci#n M3ersonasM representar+ una persona concreta.
Persona Nombre 8uan 4sabel (i*aela Apellido "o1a G:l/e1 Ru;1 Nacimiento 1590691!71 2391291!6! 0291091! 5 Sexo H ( ( Estado Civil 5ol'ero Casada 5ol'era

,n realidadF siendo ri0urososF una relaci#n es s#lo la de!inici#n de la estructura de la tablaF es decir su nombre y la lista de los atributos que la componen. Cuando se puebla con las tuplasF se :abla de Minstancia de relaci#nM. /or esoF la tabla anterior representa una instancia de la relaci#n persona. "na representaci#n de la de!inici#n de esa relaci#n podrIa ser la si0uienteG
&ersonas <nombre, a,ellido, )e*0a$na*imien'o, se=o, es'ado$*i/il>

A continuaci#nF se indicar+n ambas 4relaci#n e instancia de relaci#n7 con el tKrmino Mrelaci#nMF a no ser que no quede claro por el conte=to a quK acepci#n se re!iere.

3.1.1. Clave primaria


)as tuplas en una relaci#n son un conJunto en el sentido matem+tico del tKrminoF es decir una colecci#n no ordenada de elementos di!erentes. /ara distin0uir una tupla de otraF se recurre al concepto de clave primariaF o sea a un conjunto de atri,utos -ue )er&iten identi(icar un./oca&ente una tu)la en una relaci'n. 5aturalmenteF en una relaci#n puede :aber m+s combinaciones de atributos que permitan identi!icar unIvocamente una tupla 4 claves candidatas7F pero entre Kstas se ele0ir+ una sola para utili3ar como clave primaria. )os atributos de la clave primaria no pueden asumir el valor nulo 4que si0ni!ica un valor no determinado7F en tanto que ya no permitirIan identi!icar una tupla concreta en una relaci#n. ,sta propiedad de las relaciones y de sus claves primarias est+ baJo el nombre de integridad de las entidades 4entity inte0rity7. A menudoF para obtener una clave primaria Mecon#micaMF es decir compuesta de pocos atributos !+cilmente manipulablesF se introducen uno o m+s atributos !icticiosF con c#di0os identi!icativos unIvocos para cada tupla de la relaci#n.

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

21

3.1.2. Dominio
Cada atributo de una relaci#n se caracteri3a por un nombre y por un dominio. ,l dominio indica quK valores pueden ser asumidos por una columna de la relaci#n. A menudo un dominio se de!ine a travKs de la declaraci#n de un tipo para el atributo 4por eJemplo diciendo que es una cadena de die3 caracteres7F pero tambiKn es posible de!inir dominios m+s compleJos y precisos. /or eJemploF para el atributo se4o de nuestra relaci#n 3ersonas podemos de!inir un dominio por el cual los nicos valores v+lidos son 565 y 5F5L o bien por el atributo fecha7nacimiento podremos de!inir un dominio por el que se consideren v+lidas s#lo las !ec:as de nacimiento despuKs del uno de enero de 19+8F si en nuestra base de datos no est+ previsto que :aya personas con !ec:a de nacimiento anterior a esa. ,l motor de datos se ocupar+ de controlar que en los atributos de las relaciones se incluyan s#lo los valores permitidos por sus dominios.

3.1.3. )nte1ridad re"erencial


"na caracterIstica !undamental de los dominios de una base de datos relacional es que sean atmicosF es decir que los valores contenidos en las columnas no se puedan separar en valores de dominios m+s simples. M+s !ormalmente se dice que no es posible tener atributos multivalor 4multivalued7. /or eJemploF si una caracterIstica de las personas en nuestra base de datos !uese la de tener uno o m+s :iJosF no serIa posible escribir la relaci#n /ersonas de la si0uiente maneraG
&ersonas <nombre, a,ellido, )e*0a$na*imien'o, se=o, es'ado$*i/il, 0i2os>

,n e!ectoF el atributo :iJos es un atributo no?at#micoF bien porque una persona puede tener m+s de un :iJo o porque cada :iJo tendr+ di!erentes caracterIsticas que lo describen. /ara representar estas entidades en una base de datos relacional :ay que de!inir dos relacionesG
&ersonas <?n@mero$,ersona, nombre, a,ellido, )e*0a$na*imien'o, se=o, es'ado$*i/il> Hi2os<?n@mero$,ersona, ?nombre$a,ellido, edad, se=o>

,n las relaciones precedentesF los asteriscos 4Q7 indican los atributos que componen sus claves primarias. 5#tese la introducci#n en la relaci#n 3ersonas del atributo n9mero7personaF a travKs del cual se asi0na a cada persona un identi!icativo numKrico unIvoco que se usa como llave primaria. ,stas relaciones contienen s#lo atributos at#micos. Si una persona tiene m+s de un :iJoF Kstos se representar+n en tuplas di!erentes de la relaci#n :i2os. )as di!erentes caracterIsticas de los :iJos las representan los atributos de la relaci#n :i2os. )a uni#n entre las dos relaciones est+ constituida por los atributos n9mero7persona que aparecen en ambas relaciones y que permiten que se asi0ne cada tupla de la relaci#n :i2os a una tupla concreta de la relaci#n 3ersonas. M+s !ormalmente se dice que el atributo n9mero7persona de la relaci#n :i2os es una clave e+terna 4!orei0n Aey7 :acia la relaci#n 3ersonas. "na clave e=terna es una combinaci#n de atributos de una relaci#n que sonF a su ve3F una clave primaria para otra relaci#n. "na caracterIstica !undamental de los valores presentes en una clave e=terna es queF a no ser que no sean nullF tienen que corresponder a valores e=istentes en la clave primaria de la relaci#n a la que se re!ieren. ,n nuestro eJemploF esto si0ni!ica que no puede e=istir en la relaci#n :i2os una tupla con un valor del atributo n9mero7persona sin que tambiKn en la relaci#n 3ersonas e=ista una tupla con el mismo valor para su llave primaria. ,sta propiedad va baJo el nombre de integridad referencial 4re!erential inte0rity7.

3.1.,. :l1ebra relacional


"na de las 0randes ventaJas del modelo relacional es que de!ine tambiKn un +l0ebraF llamada $lgebra relacional. %odas las manipulaciones posibles sobre las relaciones se obtienen 0racias a la combinaci#n de tan s#lo cinco operadoresG RE5.R4C.F &R68EC.F .4(E5F 3N46N y (4N35. /or comodidadF se :an de!inido tambiKn tres operadores adicionales que de todos modos se pueden obtener aplicando los cinco !undamentalesG 864NF 4N.ER5EC. y +4A4+E. )os operadores relacionales reciben como ar0umento una relaci#n o un conJunto de relaciones y restituyen una nica relaci#n como resultado.

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

22

@eamos brevemente estos oc:o operadoresG 1. RESTRICTG restituye una relaci#n que contiene un subconjunto de las tuplas de la relaci#n a la que se aplica. )os atributos se quedan como estaban. 2. PROJECTG restituye una relaci#n con un subconjunto de los atributos de la relaci#n a la que viene aplicado. )as tuplas de la relaci#n resultado se componen de las tuplas de la relaci#n ori0inalF de manera que si0uen siendo un conJunto en sentido matem+tico. 3. TIMESG se aplica a dos relaciones y e!ect a el producto cartesiano de las tuplas. Cada tupla de la primera relaci#n est+ concatenada con cada tupla de la se0unda. -. JOING se concatenan las tuplas de dos relaciones de acuerdo con el valor de un conJunto de sus atributos. 5. UNIONG aplicando este operador a dos relaciones compatiblesF se obtiene una que contiene las tuplas de ambas relaciones. Dos relaciones son compatibles si tienen el mismo n mero de atributos y los atributos correspondientes en las dos relaciones tienen el mismo dominio. $. MINUSG aplicado a dos relaciones compatibles restituye una tercera que contiene las tuplas que se encuentran s#lo en la primera relaci#n. &. INTERSECTG aplicado a dos relaciones compatibles restituye una relaci#n que contiene las tuplas que e=isten en ambas. 9. DIVIDEG aplicado a dos relaciones que ten0an atributos comunesF restituye una tercera que contiene todas las tuplas de la primera relaci#n que se puede :acer que correspondan con todos los valores de la se0unda relaci#n. ,n las si0uientes tablasF a tItulo de eJemploF se representan los resultados de la aplicaci#n de al0unos operadores relacionales a las relaciones 3ersonas e :i2os. Como nombres para las relaciones resultado se :an utili3ado las e=presiones que las producen. 'ersonas
n@mero$,ersona 2 1 3 nombre (ario Giuse,,e Alessandra a,ellido Rossi Russo (ondella )e*0a$na*imien'o se=o es'ado$*i/il 2!90391!65 1591191!72 1390691!70 ( ( % Casado 5ol'ero 5ol'era

,ijos
n@mero$,ersona 2 2 nombre$a,ellido (aria Rossi Gianni Rossi edad 3 5 se=o % (

-)#.-I*. /'ersonas0 se+o12M2


n@mero$,ersona 2 1 nombre (ario Giuse,,e a,ellido Rossi Russo )e*0a$na*imien'o 2!90391!65 1591191!72 se=o es'ado$*i/il ( ( Casado 5ol'ero

)as bases de datos relacionales e!ect an todas las operaciones en las tablas usando el +l0ebra relacionalF aunque normalmente no le permiten al usuario usarla. ,l usuario interacciona con la base de datos a travKs de una inter!a3 di!erente el len0uaJe S;)F un len0uaJe declarativo que permite escribir conJuntos de datos. )as instrucciones S;) vienen descompuestas por el motor de datos en una serie de operaciones relacionales.

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

23

3.2. 0roceso de normali'aci$n


,l proceso de normali3aci#n es un est+ndar que consisteF b+sicamenteF en un proceso de conversi#n de las relaciones entre las entidadesF evitandoG

La redundancia de los datosG repetici#n de datos en un sistema. nomalas de actuali3acinG inconsistencias de los datos como resultado de datos redundantes y actuali3aciones parciales. nomalas de borradoG pKrdidas no intencionadas de datos debido a que se :an borrado otros datos. nomalas de insercinG imposibilidad de adicionar datos en la base de datos debido a la ausencia de otros datos.
Autores y libros N6(BRE +a'e AdC(i#C (aC&ia'C +a'e NAC46N 35A E5& 4.A 35A 777 666 C6+"4BR6 !!! .4.3"6 4B+ CD+ CD+ Bd+ E+4.6R AW R( R( AW

%omando como re!erencia la tabla si0uienteG

Se plantean una serie de problemasG


RedundanciaG cuando un autor tiene varios librosF se repite la nacionalidad. Ano&al.as de &odi(icaci'nG Si ;&d<6ig<; y ;6a<3iat<; desean cambiar de editorF se modi!ica en los 2 lu0ares. A priori no podemos saber cu+ntos autores tiene un libro. )os errores son !recuentes al olvidar la modi!icaci#n de un autor. Se pretende modi!icar en un s#lo sitio. Ano&al.as de inserci'nG Se desea dar de alta un autor sin librosF en un principio. -#6="$ y #%L.="# son campos claveF una clave no puede tomar valores nulos. #ntegridad entre los datosG consistencia de la in!ormaci#n.

Ase0urandoG

,l proceso de normali3aci#n nos conduce :asta el modelo !Isico de datos y consta de varias !ases denominadas formas normalesF estas !ormas se detallan a continuaci#n.

3.2.1. De"inici$n de la clave


Antes de proceder a la normali3aci#n de la tabla lo primero que debemos de de!inir es una claveF esta clave deber+ contener un valor nico para cada re0istro 4no podr+n e=istir dos valores i0uales en toda la tabla7 y podr+ estar !ormado por un nico campo o por un 0rupo de campos. ,n la tabla de alumnos de un centro de estudios no podemos de!inir como campo clave el nombre del alumno ya que pueden e=istir varios alumnos con el mismo nombre. /odrIamos considerar la posibilidad de de!inir como clave los campos nombre y apellidosF pero estamos en la misma situaci#nG podrIa darse el caso de alumnos que tuvieran los mismo apellidos y el mismo nombre 4 >uan Fern?nde@ 6artAn7. )a soluci#n en este caso es asi0nar un c#di0o de alumno a cada unoF un n mero que identi!ique al alumno y que estemos se0uros que es nico. "na ve3 de!inida la clave podremos pasar a estudiar la primera !orma normal.

3.2.2. 0rimera "orma normal ;1<2=

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

24

Se dice que una tabla se encuentra en primera !orma normal 4 1NF7 si y solo si cada uno de los campos contiene un 4nico valor para un re0istro determinado. Supon0amos que deseamos reali3ar una tabla para 0uardar los cursos que est+n reali3ando los alumnos de un determinado centro de estudiosF podrIamos considerar el si0uiente dise.oG
C-di#o? 1 2 3 Nombre (ar*os "u*as (ar'a Cursos 4n#lEs Con'abilidad, 4n)orm:'i*a 4n#lEs, Con'abilidad

/odemos observar que el re0istro de c#di0o 1 si cumple la primera !orma normalF cada campo del re0istro contiene un nico datoF pero no ocurre asI con los re0istros 2 y 3 ya que en el campo cursos contiene m+s de un dato cada uno. )a soluci#n en este caso es crear dos tablas del si0uiente modoG
TABLA A C-di#o? 1 2 3 Nombre (ar*os "u*as (ar'a C-di#o? 1 2 2 3 3 TABLA B Curso? 4n#lEs Con'abilidad 4n)orm:'i*a 4n#lEs 4n)orm:'i*a

Como se puede comprobar a:ora todos los re0istros de ambas tablas contienen valores nicos en sus camposF por lo tanto ambas tablas cumplen la primera !orma normal. "na ve3 normali3ada la tabla en 156F podemos pasar a la se0unda !orma normal.

3.2.3. Se1unda "orma normal ;2<2=


)a se0unda !orma normal compara todos y cada uno de los campos de la tabla con la clave de!inida. Si todos los campos dependen directamente de la clave se dice que la tabla est+ es se0unda !orma normal 42NF7. Supon0amos que construimos una tabla con los a.os que cada empleado :a estado trabaJando en cada departamento de una empresaG
C-di#o Em,leado? 1 2 3 4 2 C-di#o +,'oC? Nombre 6 3 2 3 6 8uan &edro 5onia Aer-ni*a &edro +e,ar'amen'o Con'abilidad 5is'emas 4G+ 5is'emas Con'abilidad AFos 6 3 1 10 5

%omando como punto de partida que la clave de esta tabla est+ !ormada por los campos c#di0o de empleado y c#di0o de departamentoF podemos decir que la tabla se encuentra en primera !orma normalF por tanto vamos a estudiar la se0undaG 1. ,l campo nombre no depende !uncionalmente de toda la claveF s#lo depende del c#di0o del empleado.

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

25

2. ,l campo departamento no depende !uncionalmente de toda la claveF s#lo del c#di0o del departamento. 3. ,l campo a.os si que depende !uncionalmente de la clave ya que depende del c#di0o del empleado y del c#di0o del departamento 4representa el n mero de a.os que cada empleado :a trabaJado en cada departamento7 /or tantoF al no depender todos los campos de la totalidad de la clave la tabla no est+ en se0unda !orma normalF la soluci#n es la si0uienteG
Tabla A C-di#o Em,leado? 1 2 3 4 Nombre 8uan &edro 5onia Aer-ni*a Tabla B C-di#o +e,ar'amen'o? 2 3 6 +,'oC 4G+ 5is'emas Con'abilidad C-di#o Em,leado? 1 2 3 4 2 Tabla C C-di#o +e,ar'amen'o? 6 3 2 3 6 AFos 6 3 1 10 5

/odemos observar que a:ora si se encuentras las tres tabla en se0unda !orma normalF considerando que la tabla A tiene como Indice el campo C#di0o ,mpleadoF la tabla B C#di0o Departamento y la tabla C una clave compuesta por los campos C#di0o ,mpleado y C#di0o Departamento.

3.2.,. %ercera "orma normal ;3<2=


Se dice que una tabla est+ en tercera !orma normal si y solo si los campos de la tabla dependen nicamente de la claveF dic:o en otras palabras los campos de las tablas no dependen unos de otros . %omando como re!erencia el eJemplo anteriorF supon0amos que cada alumno s#lo puede reali3ar un nico curso a la ve3 y que deseamos 0uardar en que aula se imparte el curso. A vo3 de pronto podemos plantear la si0uiente estructuraG
C-di#o? 1 2 3 Nombre (ar*os "u*as (ar'a Curso 4n)orm:'i*a 4n#lEs Con'abilidad Aula Aula A Aula B Aula C

,studiemos la dependencia de cada campo con respecto a la clave c#di0oG


5ombre depende directamente del c#di0o del alumno. Curso depende de i0ual modo del c#di0o del alumno. ,l aulaF aunque en parte tambiKn depende del alumnoF est+ mas li0ado al curso que el alumno est+ reali3ando.
Tabla A C-di#o? Nombre 1 2 3 (ar*os "u*as (ar'a Curso 4n)orm:'i*a 4n#lEs Con'abilidad Curso? 4n)orm:'i*a 4n#lEs Con'abilidad Tabla B Aula Aula A Aula B Aula C

/or esta ltima ra3#n se dice que la tabla no est+ en 356. )a soluci#n serIa la si0uienteG

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

26

"na ve3 conse0uida la tercera !orma normalF se puede estudiar la cuarta !orma normal.

3.2... Cuarta "orma normal ;,<2=


"na tabla est+ en cuarta !orma normal si y s#lo si para cualquier combinacin de los campos de la clave no e+isten valores duplicados. @e+moslo con un eJemploG
Geometr a %i#ura? Cuadrado Cuadrado Cuadrado C;r*ulo C;r*ulo C;r*ulo Color? Ro2o A1ul A1ul Blan*o A1ul A1ul .amaFo? Grande Grande (ediano (ediano &eHueFo (ediano

Comparemos a:ora la clave 46i0ura7 con el atributo %ama.oF podemos observar que uadrado Brande est+ repetidoL i0ual pasa con Arculo &@ulF entre otras. ,stas repeticiones son las que se deben evitar para tener una tabla en -56. )a soluci#n en este caso serIa la si0uienteG
Tama!o %i#ura? Cuadrado Cuadrado C;r*ulo C;r*ulo .amaFo? Grande &eHueFo (ediano &eHueFo %i#ura? Cuadrado Cuadrado C;r*ulo C;r*ulo Color Color? Ro2o A1ul Blan*o A1ul

3.2./. 4tras "ormas normales


,=isten otras dos !ormas normalesF la llamada quinta !orma normal 45657 que no detallo por su dudoso valor pr+ctico ya que conduce a una 0ran divisi#n de tablas y la !orma normal dominio / clave 465D))7 de la que no e=iste mKtodo al0uno para su implantaci#n.

3.3. *as interrelaciones


)as interrelaciones son las relaciones que e=isten entre varias tablas del sistema 4 lientes y 3edidosF por eJemplo7. ,=isten tres !ormas de interrelaciones dependiendo de la cardinalidad con la que se combinan los elementos de ambas tablas.

3.3.1. )nterrelaciones uno a uno


"na interrelaci#n es de uno a uno entre la tabla A y la tabla B cuando a cada elemento de la clave de A se le asi0na un nico elemento de la tabla B y para cada elemento de la clave de la tabla B contiene un nico elemento en la tabla A. "n eJemplo de interrelaci#n de este tipo es la !ormada por las tablas %atos Benerales de lientes y %atos ontables de lientes. ,n esta relaci#n cada cliente tiene una nica direcci#n y una direcci#n en cada una de las tablas. 1epresentamos la relaci#n como A 1I1 B. Ante la presencia de este tipo de relaci#n nos podemos plantear el caso de uni!icar todos los datos en nica tabla pues no es necesario mantener ambas tablas a la misma ve3.

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

27

,ste tipo de relaci#n se 0enera cuando aparecen tablas muy 0randesF con 0ran cantidad de camposF dis0re0ando la tabla principal en dos para evitar tener una tabla muy 0rande. %ambiKn sur0e cuando los di!erentes 0rupos de usuario cumplimentan una in!ormaci#n di!erente para un mismo re0istrosL en este caso se crean tantas tablas como re0istrosF evitando asI tener que acceder a in!ormaci#n que el usuario del 0rupo actual no necesita.

3.3.2. )nterrelaciones uno a varios


"na interrelaci#n es de uno a varios entre las tablas A y B cuando una clave de la tabla A posee varios elementos relacionados en la tabla B y cuando una clave de la tabla B posee un nico elemento relacionado en la tabla A. ,studiemos la relaci#n entre la tabla de clientes y la tabla de pedidos. "n cliente puede reali3ar varios pedidos pero un pedido pertenece a un nico clienteF por tanto se trata de una relaci#n uno a varios y la representamos A 1In B. ,stas relaciones suelen sur0ir de aplicar la 156 a una tabla.

3.3.3. )nterrelaciones varios a varios


"na interrelaci#n es de varios a varios entre las tablas A y B cuando una clave de la tabla A posee varios elementos relacionados en la tabla B y cuando una clave de la tabla B posee varios elementos relacionados en la tabla A. "n caso muy caracterIstico de esta interrelaci#n es la que sur0e entre las tablas de 3uestos de Craba2o y $mpleados de una empresa. "n ,mpleado puede desempe.ar reali3ar varias !unciones dentro de una empresa 4desempe.ar varios puestos de trabaJo7F y un puesto de trabaJo puede estar ocupado por varios empleados a la misma ve3. ,sta interrelaci#n la representamos como A nIn B. 5o se deben de!inir relaciones de este tipo en un sistema de bases de datosF debido a su compleJidad a la :ora de su mantenimientoF por este motivo se debe trans!ormar este tipo de relaci#n es dos interrelaciones de tipo 1InF empleando para ello una tabla puente y que estar+ !ormada por las claves de ambas tablas. ,sta tabla puente debe contener una nica clave compuesta !ormada por los campos clave de las tablas primeras.
"m#lea$os C-di#o Em,leado? 103 105 251 736 Em,leado 8uan "uisa (ar';n Ana (ar;a Tabla Puente C-di#o Em,leado? 103 103 105 251 736 736 C-di#o &ues'o? 52 73 73 52 52 73 C-di#o &ues'o? 52 73 Puestos &ues'o Comer*ial Adminis'ra'i/o

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

28

A:ora e=iste una relaci#n 1In entre $mpleados y Cabla 3uente y otra relaci#n 1In entre 3uestos y Cabla 3uente ya que un empleado posee varios c#di0os de empleado en la tabla puente pero cada elemento de la tabla puente pertenece a un nico empleado. /or otro la un puesto de trabaJo posee varios elementos relacionados en la tabla puenteF pero cada elemento de la tabla puente est+ relacionado con un nico elemento de la tabla puestos.

3.3.,. 0roblemas con las interrelaciones


A la :ora de establecer las interrelaciones e=istentes en un sistema de bases de datos nos podemos encontrar dos problemasG 1. Interrelaciones recursivasG un elemento se relaciona consi0o mismo directamente. 2. Interrelaciones circulares o cclicas G A se relaciona con BF B se relaciona con C y C se relaciona con A. Ambos casos pueden suponer un 0rave problema si de!inimos una relaci#n con inte0ridad re!erencial y decimos eliminar en cascada 4al eliminar una clave de la tabla A se eliminan los elementos relacionados en la tabla B7. Supon0amos la relaci#n recursiva e=isten en la relaci#n $mpleado y Super1isor 4ambos son empleados de la empresa7. ,st+ claro que un empleado est+ supervisado por otro empleado. @eamos la !orma de solucionarloG
"m#lea$os C-di#o? 102 105 21 !56 Nombre 8uan "uis (ar;a (ar';n 5u,er/isor N6 54 N6 54

/ara solucionar la relaci#n debemos crear una tabla !ormada por dos campos. Ambos campos deben ser el c#di0o del empleado pero como no podemos tener dos campos con el mismo nombre a uno de ellos le llamaremos c#di0o supervisor.
Tabla Puente C-di#o Em,leado? 102 105 21 !56 C-di#o 5u,er/isor? 105 !56 105 105

/ara terminar de resolver la interrelaci#n recursiva basta con de!inir dos interrelaciones entre la tabla empleados y la tabla puente de tipo 1In. )a primera relaci#n se crea utili3ando las claves $mpleadosD EdigoF y Cabla 3uenteD Edigo $mpleadoF. )a se0unda entre $mpleadosD EdigoF y Cabla 3uente D Edigo Super1isorF. )as interrelaciones cIclicas o circulares no son muy !recuentes y no e=iste una metodolo0Ia est+ndar para su eliminaci#nF normalmente son debidas a errores de dise.o en la base de datosF principalmente en el dise.o conceptual del sistema de datos. /or tanto si lle0amos a este punto :ay que volver a replantearse todo el dise.o de la base de datos.

3.3... Atributos de las interrelaciones

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

29

,n la mayorIa de las interrelaciones de!inidas ser+ conveniente e=i0ir integridad relacional entre las claves. ,=i0iendo la inte0ridad re!erencial se consi0ue que en una relaci#n de tipo 1In o de tipo 1I1F no se puede a.adir nin0 n valor en la tabla destino si no e=iste en la tabla ori0en. Dic:o con un eJemploG en la relaciEn lientes y 3edidosF la tabla 3edidos contiene un campo que se corresponde con el cEdigo del lienteF si se e=i0e la inte0ridad re!erencial no se podr+ escribir un cEdigo de cliente en la tabla 3edidos que no e=ista en la tabla lientesL de no e=i0ir la inte0ridad re!erencial se podr+n crear pedidos con c#di0os de clientes que no e=istenF 0enerando incon0ruencia de datos en la base de datos. De!inida la inte0ridad re!erencial 4siempre necesaria7 podemos e=i0ir la actuali3acin en cascada 4siempre necesaria7L esta actuali3aci#n implica que si cambiamos el c#di0o a un clienteF debemos actuali3ar dic:o c#di0o en la tabla de pedidosF de no ser asIF al cambiar el c#di0o a un clienteF perderemos los pedidos que tenIa reali3ados. /ara concluir debemos :ablar de la eliminacin en cascada 458 siempre necesaria7F la eliminaci#n en cascada consiste en eliminar todos los datos dependientes de una clave. ,n nuestro eJemplo implica que al borrar un cliente :ay que eliminar todos los pedidos que :a reali3ado. ,n muc:as ocasiones no interesa reali3ar esta operaci#n de eliminaci#n en cascada por motivos diversos. Si en el caso de clientes y pedidos no se e=i0e eliminaci#n en cascada no se podr+ borrar nin0 n cliente en tanto en cuanto ten0a reali3ado al0 n pedido 4de lo contrario tendrIamos incon0ruencia de datos7.

3.,. :l1ebra relacional


)as operaciones de +l0ebra relacional manipulan relaciones. ,sto si0ni!ica que estas operaciones usan uno o dos relaciones e=istentes para crear una nueva relaci#n. ,sta nueva relaci#n puede entonces usarse como entrada para una nueva operaci#n. ,ste poderoso concepto Rla creaci#n de una nueva relaci#n a partir de relaciones e=istentesR :ace considerablemente m+s !+cil la soluci#n de las consultasF debido a que se puede e=perimentar con soluciones parciales :asta encontrar la proposici#n con la que se trabaJar+. ,l +l0ebra relacional consta de nueve operacionesG 1. 2. 3. -. 5. $. &. 9. (. "ni#n 'ntersecci#n Di!erencia /roducto Selecci#n /royecci#n 1euni#n Divisi#n Asi0naci#n S ? T U V W X

)as cuatro primeras se toman de la teorIa de conJunto de las matem+ticasL las cuatro si0uientes son operaciones propias del +l0ebra relacional y la ltima es la operaci#n est+ndar de dar un valor a un elemento.

3.,.1. #ni$n
)a operaci#n de uni#n 47 permite combinar datos de varias relaciones. Supon0amos que una determinada empresa internacional posee una tabla de empleados para cada uno de los paIses en los que opera. /ara conse0uir un listado completo de todos los empleados de la empresa tenemos que reali3ar una uni#n de todas las tablas de empleados de todos los paIses. 5o siempre es posible reali3ar consultas de uni#n entre varias tablasF para poder reali3ar esta operaci#n es necesario e imprescindible que las tablas a unir ten0an las mismas estructurasF que sus campos sean i0uales.

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

30

3.,.2. )ntersecci$n
)a operaci#n de intersecci#n 4S7 permite identi!icar filas que son comunes en dos relaciones . Supon0amos que tenemos una tabla de empleados y otra tabla con los asistentes que :an reali3ado un curso de in0lKs 4los asistentes pueden ser empleados o 0ente de la calle7. ;ueremos crear una !i0ura virtual en la tabla denominada M $mpleados 0ue hablan .nglsMF esta !i0ura podemos crearla reali3ando una intersecci#n de empleados y curso de in0lKsF los elementos que e=istan en ambas tablas ser+n aquellos empleados que :an asistido al curso.

3.,.3. Di"erencia
)a operaci#n di!erencia 4?7 permite identi!icar filas que est$n en una relacin 5 no en otra . %omando como re!erencia el caso anteriorF deberIamos aplicar una di!erencia entre la tabla empleados y la tabla asistentes al curso para saber aquellos asistentes e=ternos a la or0ani3aci#n que :an asistido al curso.

3.,.,. 0roducto
)a operaci#n producto 4T7 consiste en la reali3aci#n de un producto cartesiano entre dos tablas dando como resultado todas las posibles combinaciones entre los re0istros de la primera y los re0istros de la se0unda. ,sta operaci#n se entiende meJor con el si0uiente eJemploG
Tabla A J 10 11 K 22 25 W 33 37 42 Tabla B L 54 ! 100

,l producto de A M B darIa como resultado la si0uiente tablaG


Tabla A % Tabla B J 10 10 10 11 11 11 K 22 22 22 25 25 25 W 33 37 42 33 37 42 L 54 ! 100 54 ! 100

3.,... Selecci$n
)a operaci#n selecci#n 4U7 consiste en recuperar un conJunto de re0istros de una tabla o de una relaci#n indicando las condiciones que deben cumplir los registros recuperados F de tal !orma que los re0istros devueltos por la selecci#n :an de satis!acer todas las condiciones que se :ayan establecido. ,sta operaci#n es la que normalmente se conoce como consulta. /odemos emplearla para saber que empleados son mayores de 4, aosF o cuales viven en 6adridF incluso podemos averi0uar los que son mayores de 4, aos y residen en 6adridF los que son mayores de 4, aos y no 1i1en en 6adridF etc.. ,n este tipo de consulta se emplean los di!erentes operadores de comparaci#n 4 NFOF <F ONF <NF <O7F los operadores l#0icos 4andF orF =or7 o la ne0aci#n l#0ica 4no'7.

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

31

3.,./. 0royecci$n
"na proyecci#n 4V7 es un caso concreto de la operaci#n selecci#nF esta ltima devuelve todos los campos de aquellos re0istros que cumplen la condici#n que :e establecido. "na proyecci#n es una selecci#n en la que seleccionamos aquellos campos que deseamos recuperar. %omando como re!erencia el caso de la operaci#n selecci#n es posible que lo nico que nos interese recuperar sea el n mero de la se0uridad socialF omitiendo asI los campos telK!onoF direcci#nF etc.. ,ste ltimo casoF en el que seleccionamos los campos que deseamosF es una proyecci#n.

3.,.5. 6euni$n ;#ni$n natural=


)a reuni#n 47 se utili3a para recuperar datos a trav6s de varias tablas conectadas unas con otras mediante cl+usulas 864NF en cualquiera de sus tres variantes 4NNERF "E%.F R4GH.. )a operaci#n reuni#n se puede combinar con las operaciones selecci#n y proyecci#n. "n eJemplo de reuni#n es conse0uir los pedidos que nos :an reali3ado los clientes nacionales cuyo importe supere 15.*** unidades de productoF 0enerando un in!orme con el nombre del cliente y el c#di0o del pedido. ,n este caso se da por supuesto que la tabla clientes es di!erente a la tabla pedidos y que :ay que conectar ambas medianteF en este casoF un 4NNER 864N. 8tro tipos de reunionesG Semi?uni#n i3quierda 47 y semi?uni#n derec:a 4 7

3.,.>. Divisi$n
)a operaci#n divisi#n 4W7 es la contraria a la operaci#n producto y qui3+s sea la m+s compleJa de e=plicarF por tanto comen3arK con directamente con un eJemplo. "na determinada empresa posee una tabla de comercialesF otra tabla de productos y otra con las 1entas de los comerciales. ;ueremos averi0uar que comerciales :an vendido todo tipo de producto. )o primero que :acemos es e=traer en una tabla todos los c#di0os de todos los productosF a esta tabla la denominamos A.
Tabla A C-di#o &rodu*'o 1035 2241 224! 5 1

,n una se0unda tabla e=traemosF de la tabla de ventasF el c#di0o del producto y el comercial que lo :a vendidoF lo :acemos con una proyecci#n y evitamos traer valores duplicados. ,l resultado podrIa ser el si0uienteG
Tabla B C-di#o Comer*ial 10 23 23 3! 37 10 23 23 C-di#o &rodu*'o 2241 251 1035 251 251 224! 224! 2241

Modelo 6elacional SQL y bases de datos relacionales Claudio Casares

32

Si dividimos la tabla B entre la tabla A obtendremos como resultado una tercera tabla queG 1. )os campos que contiene son aquellos de la tabla B que no e=isten en la tabla A. ,n este caso el campo C#di0o Comercial es el nico de la tabla B que no e=isten en la tabla A. 2. "n re0istro se encuentra en la tabla resultado si y s#lo si est+ asociado en tabla B con cada !ila de la tabla A
Tabla &esulta$o C-di#o Comer*ial 23

N/or quK el resultado es 23O. ,l comercial 23 es el nico de la tabla B que tiene asociados todos los posibles c#di0os de producto de la tabla A.

3.,.?. Asi1naci$n
,sta operaci#n al0ebraica consiste en asi0nar un valor a uno o varios campos de una tabla.

3... C(lculo relacional


,l c+lculo relacional usa un en!oque completamente di!erente al +l0ebra relacional. 5o obstanteF los dos len0uaJes son l#0icamente equivalentes. ,sto si0ni!ica que cualquier consulta que pueda resolverse en un len0uaJe puede resolverse en el otro. )a soluci#n para toda consulta en este tipo de c+lculo se de!ine porG 1. "na lista de resultados 2. "na sentencia de cuali!icaci#n )a lista de resultados est+ claraF son aquellos re0istros que cumplen las condiciones que deseamos. )a sentencia de cuali!icaci#n contiene las condiciones que deseamos que cumplan los re0istros de la lista de resultados. )a di!erencia entre el c+lculo y el +l0ebra radica en que el c+lculo reali3a la operaci#n en un nico pasoF sin necesidad de tener que obtener tablas intermediasF el +l0ebra reali3a las operaciones paso a paso. 5ormalmente el c+lculo relacional se apoya en al0 n len0uaJe de interro0aci#n de bases de datos como puede ser el SQL y que desarrollarK m+s adelante. ,l c+lculo relacional incluye un concepto nuevo denominado cuantificadorF los cuanti!icadores tratan de averi0uar el n mero de re0istros a!ectados por una determinada operaci#nF incluso antes de reali3arla. Se0 n su naturale3a los podemos dividir en dos 0ruposG

Cuanti"icadores e9istenciales
Son aquellos que tratan de averi0uar el n mero de re0istros que devolverIa un tipo de consulta. /or eJemploG saber el n mero de clientes de Madrid que :an comprado el producto 2*15. Si el n mero de re0istros que satis!acen esta relaci#n es mayor que ceroF podemos 0enerar la consulta para lan3ar posteriormente un in!ormeF en caso contrario se puede enviar un mensaJe al usuario para que sepa que no :ay nin0 n cliente con estas caracterIsticas.

Cuanti"icadores universales
Son aquellos que indican que una condici#n se aplica a todas las !ilas de al0 n tipo. Se usa para brindar la misma capacidad que la operaci#n divisi#n del +l0ebra relacional.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

33

,. *en1ua&e S@*
,.1. )ntroducci$n
,l lenguaje de consulta estructurado 4SQL7 es un len0uaJe de base de datos normali3adoF utili3ado por los di!erentes &otores de ,ases de datos para reali3ar determinadas operaciones sobre los datos o sobre la estructura de los mismos. /ero como sucede con cualquier sistema de normali3aci#n :ay e=cepciones para casi todoL de :ec:oF cada motor de bases de datos tiene sus peculiaridades y lo :ace di!erente de otro motorF por lo tantoF el len0uaJe SQL normali3ado 4ANSI7 no nos servir+ para resolver todos los problemasF aunque si se puede ase0urar que cualquier sentencia escrita en ANSI ser+ interpretable por cualquier motor de datos.

,.1.1. reve 3istoria


)a :istoria de S;) 4que se pronuncia deletreando en in0lKs las letras que lo componenF es decir Mese*cu*eleM y no Msi0uelM como se oye a menudo7 empie3a en 1(&- con la de!inici#nF por parte de Donald C:amberlin y de otras personas que trabaJaban en los laboratorios de investi0aci#n de IBMF de un len0uaJe para la especi!icaci#n de las caracterIsticas de las bases de datos que adoptaban el modelo relacional. ,ste len0uaJe se llamaba SEQUEL 4Structured English Query Language7 y se implement# en un prototipo llamado SEQUEL-XRM entre 1(&- y 1(&5. )as e=perimentaciones con ese prototipo conduJeronF entre 1(&$ y 1(&&F a una revisi#n del len0uaJe 4 SEQUEL/27F que a partir de ese momento cambi# de nombre por motivos le0alesF convirtiKndose en S;). ,l prototipo 4 System R7F basado en este len0uaJeF se adopt# y utili3# internamente en 'BM y lo adoptaron al0unos de sus clientes ele0idos. Dracias al K=ito de este sistemaF que no estaba todavIa comerciali3adoF tambiKn otras compa.Ias empe3aron a desarrollar sus productos relacionales basados en S;). A partir de 1(91F 'BM comen3# a entre0ar sus productos relacionales y en 1(93 empe3# a vender DB2. ,n el curso de los a.os oc:entaF numerosas compa.Ias 4por eJemplo Or !"e y Sy# seF s#lo por citar al0unos7 comerciali3aron productos basados en S;)F que se convierte en el est+ndar industrial de :ec:o por lo que respecta a las bases de datos relacionales. ,n 1(9$F el ANSI adopt# SQL 4sustancialmente adopt# el dialecto SQL de IBM7 como est+ndar para los len0uaJes relacionales y en 1(9& se trans!orm# en est+ndar ISO. ,sta versi#n del est+ndar va con el nombre de SQL/$%. ,n los a.os si0uientesF Kste :a su!rido diversas revisiones que :an conducido primero a la versi#n SQL/$& yF posteriormenteF a la actual SQL/&2. ,l :ec:o de tener un est+ndar de!inido por un len0uaJe para bases de datos relacionales abre potencialmente el camino a la intercomunicabilidad entre todos los productos que se basan en Kl. Desde el punto de vista pr+cticoF por des0racia las cosas !ueron de otro modo. ,!ectivamenteF en 0eneral cada productor adopta e implementa en la propia base de datos s#lo el cora3#n del len0uaJe S;) 4el asI llamado ,ntry level o al m+=imo el 'ntermediate level7F e=tendiKndolo de manera individual se0 n la propia visi#n que cada cual ten0a del mundo de las bases de datos. ActualmenteF est+ en marc:a un proceso de revisi#n del len0uaJe por parte de los comitKs ANSI e ISOF que deberIa terminar en la de!inici#n de lo que en este momento se conoce como SQL'. )as caracterIsticas principales de esta nueva encarnaci#n de SQL deberIan ser su trans!ormaci#n en un len0uaJe stand?alone 4mientras a:ora se usa como len0uaJe :ospedado en otros len0uaJes7 y la introducci#n de nuevos tipos de datos m+s compleJos que permitanF por eJemploF el tratamiento de datos multimediales.

,.1.2. Componentes del S@*


,l len0uaJe S;) est+ compuesto por comandosF cl+usulasF operadores y !unciones de a0re0ado. ,stos elementos se combinan en las instrucciones para crearF actuali3ar y manipular las bases de datos.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

34

Comandos
,=isten dos tipos de comandos S;)G DDL 4Data De!inition )an0ua0e7 que permiten crear y de!inir nuevas bases de datosF campos e Indices. DCL 4Data Control )an0ua0e7 que permite administrar el control de acceso. Se utili3an los comandos GRAN. y REA6PE DML 4Data Manipulation )an0ua0e7 que permiten 0enerar consultas para ordenarF !iltrar y e=traer datos de la base de datos.
Coman$os ''L Comando *-) .) (-7' L.)Descripcin 3'ili1ado ,ara *rear nue/as 'ablas, *am,os e ;ndi*es Em,leado ,ara eliminar 'ablas e ;ndi*es 3'ili1ado ,ara modi)i*ar las 'ablas a#re#ando *am,os o *ambiando la de)ini*i-n de los *am,osC Coman$os '(L Comando #)L)*. I8#)-. 9'( .) ()L).) Descripcin 3'ili1ado ,ara *onsul'ar re#is'ros de la base de da'os Hue sa'is)a#an un *ri'erio de'erminado 3'ili1ado ,ara *ar#ar lo'es de da'os en la base de da'os en una @ni*a o,era*i-nC 3'ili1ado ,ara modi)i*ar los /alores de los *am,os D re#is'ros es,e*i)i*ados 3'ili1ado ,ara eliminar re#is'ros de una 'abla de una base de da'os

Cl(usulas
)as cl+usulas son condiciones de modi!icaci#n utili3adas para de!inir los datos que desea seleccionar o manipular.
Clusula F-7M :,)-) G-79' "; , VI8G 7-()- "; Descripcin 3'ili1ada ,ara es,e*i)i*ar la 'abla de la *ual se /an a sele**ionar los re#is'ros 3'ili1ada ,ara es,e*i)i*ar las *ondi*iones Hue deben reunir los re#is'ros Hue se /an a sele**ionar 3'ili1ada ,ara se,arar los re#is'ros sele**ionados en #ru,os es,e*;)i*os 3'ili1ada ,ara e=,resar la *ondi*i-n Hue debe sa'is)a*er *ada #ru,o 3'ili1ada ,ara ordenar los re#is'ros sele**ionados de a*uerdo *on un orden es,e*;)i*o

4peradores *$1icos
Operador 8( Uso Es el K l-#i*oC E/al@a dos *ondi*iones D de/uel/e un /alor de /erdad s-lo si ambas son *ier'asC

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Es el 6 l-#i*oC E/al@a dos *ondi*iones D de/uel/e un /alor de /erdad si al#una de las dos es *ier'aC Ne#a*i-n l-#i*aC +e/uel/e el /alor *on'rario de la e=,resi-nC

35

787.

4peradores de Comparaci$n
Operador < = <= <1 =1 1 ").:))8 LI>) I8 Uso (enor Hue (aDor Hue +is'in'o de (enor o i#ual Hue (aDor o i#ual Hue 4#ual Hue 3'ili1ado ,ara es,e*i)i*ar un in'er/alo de /aloresC 3'ili1ado en la *om,ara*i-n de un modelo 3'ili1ado ,ara es,e*i)i*ar re#is'ros de una base de da'os

2unciones de A1re1ado
)as !unciones de a0re0ado se usan dentro de una cl+usula 5E"EC. en 0rupos de re0istros para devolver un nico valor que se aplica a un 0rupo de re0istros.
Funcin VG *798. #9M M ? MI8 Descripcin 3'ili1ada ,ara *al*ular el ,romedio de los /alores de un *am,o de'erminado 3'ili1ada ,ara de/ol/er el n@mero de re#is'ros de la sele**i-n 3'ili1ada ,ara de/ol/er la suma de 'odos los /alores de un *am,o de'erminado 3'ili1ada ,ara de/ol/er el /alor m:s al'o de un *am,o es,e*i)i*ado 3'ili1ada ,ara de/ol/er el /alor m:s ba2o de un *am,o es,e*i)i*ado

4rden de e&ecuci$n de los comandos


Dada una sentencia S;) de selecci#n que incluye todas las posibles cl+usulasF el orden de eJecuci#n de las mismas es el si0uienteG 1. Cl+usula 5E"EC. 2. Cl+usula %R6( 3. Cl+usula WHERE -. Cl+usula GR63& BK 5. Cl+usula HAA4NG $. Cl+usula 6R+ER BK

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

36

,.2. Consultas de Selecci$n


)as consultas de selecci#n se utili3an para indicar al motor de datos que devuelva in!ormaci#n de las bases de datosF esta in!ormaci#n es devuelta en !orma de conJunto de re0istros que se pueden almacenar en un obJeto re*ordse'. ,ste conJunto de re0istros puede ser modi!icable.

,.2.1. Consultas b(sicas


)a sinta=is b+sica de una consulta de selecci#n es la si0uienteG
5E"EC. Cam,os %R6( .abla

,n donde campos es la lista de campos que se deseen recuperar y tabla es el ori0en de los mismosF por eJemploG
)"L"CT Nombre, .elE)ono *&+( Clien'es

,sta sentencia devuelve un conJunto de resultados con el campo nombre y telK!ono de la tabla clientes.

,.2.2. Devolver literales


,n determinadas ocasiones nos puede interesar incluir una columna con un te=to !iJo en una consulta de selecci#nF por eJemploF supon0amos que tenemos una tabla de empleados y deseamos recuperar las tarifas semanales de los electricistasF podrIamos reali3ar la si0uiente consultaG
)"L"CT Em,leadosCNombre, Q.ari)a semanalI Q, Em,leadosC.ari)aHora ? 40 *&+( Em,leados ,-"&" Em,leadosCCar#o N QEle*'ri*is'aQ

,.2.3. 4rdenar los re1istros


Adicionalmente se puede especi!icar el orden en que se desean recuperar los re0istros de las tablas mediante la cl+usula 6R+ER BK lis'a de *am,os. ,n donde lista de campos representa los campos a ordenar. ,JemploG
)"L"CT Codi#o&os'al, Nombre, .ele)ono *&+( Clien'es +&'"& B. Nombre

,sta consulta devuelve los campos campo -ombre.

odigo3ostalF -ombreF Celefono de la tabla

lientes ordenados por el

Se pueden ordenar los re0istros por mas de un campoF como por eJemploG
)"L"CT

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Codi#o&os'al, Nombre, .ele)ono *&+( Clien'es +&'"& B. Codi#o&os'al, Nombre

37

'ncluso se puede especi!icar el orden de los re0istrosG ascendente mediante la cl+usula 4A5C se toma por omisi#n7 o descendente 4+E5C7
)"L"CT Codi#o&os'al, Nombre, .ele)ono *&+( Clien'es +&'"& B. Codi#o&os'al +E5C, Nombre A5C

,.2.,. #so de Andices de las tablas


Si deseamos que la sentencia S;) utilice un Indice para mostrar los resultados se puede utili3ar la palabra reservada 4N+EJ de la si0uiente !ormaG
5E"EC. CCC %R6( .abla <4N+EJN4ndi*e> CCC

5ormalmente los motores de las bases de datos deciden que Indice se debe utili3ar para la consultaF para ello utili3an criterios de rendimiento y sobre todo los campos de b squeda especi!icados en la cl+usula WHERE. Si se desea !or3ar a no utili3ar nin0 n Indice utili3aremos la si0uiente sinta=isG
5E"EC. CCC %R6( .abla <4N+EJN0> CCC

,.2... Consultas con 0redicado


,l predicado se incluye entre la cl+usula y el primer nombre del campo a recuperarF los posibles predicados sonG
Predicado LL .7' (I#.I8*. (I#.I8*.-7: Descripcin +e/uel/e 'odos los *am,os de la 'abla +e/uel/e un de'erminado n@mero de re#is'ros de la 'abla 6mi'e los re#is'ros *uDos *am,os sele**ionados *oin*idan 'o'almen'e 6mi'e los re#is'ros du,li*ados bas:ndose en la 'o'alidad del re#is'ro D no s-lo en los *am,os sele**ionadosC

A**
Si no se incluye nin0uno de los predicados se asume A"". ,l Motor de ,ase de datos selecciona todos los re0istros que cumplen las condiciones de la instrucci#n S;) y devuelve todos y cada uno de sus campos. 5o es conveniente abusar de este predicado ya que obli0amos al motor de la base de datos a anali3ar la estructura de la tabla para averi0uar los campos que contieneF es muc:o m+s r+pido indicar el listado de campos deseados.
)"L"CT A"" *&+( Em,leados )"L"CT ?

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares *&+( Em,leados

38

%40
Devuelve un cierto n mero de re0istros que entran entre al principio o al !inal de un ran0o especi!icado por una cl+usula 6R+ER BK. Supon0amos que queremos recuperar los nombres de los 2, primeros estudiantes del curso 1994G
)"L"CT .6& 25 Nombre, A,ellido *&+( Es'udian'es +&'"& B. No'a +E5C

Si no se incluye la cl+usula 6R+ER BKF la consulta devolver+ un conJunto arbitrario de 25 re0istros de la tabla de ,studiantes. ,l predicado .6& no eli0e entre valores i0uales. ,n el eJemplo anteriorF si la nota media n mero 25 y la 2$ son i0ualesF la consulta devolver+ 2$ re0istros. Se puede utili3ar la palabra reservada &ERCEN. para devolver un cierto porcentaJe de re0istros que caen al principio o al !inal de un ran0o especi!icado por la cl+usula 6R+ER BK. Supon0amos que en lu0ar de los 25 primeros estudiantes deseamos el 1* por ciento del cursoG
)"L"CT .6& 10 &ERCEN. Nombre, A,ellido *&+( Es'udian'es +&'"& B. No'a +E5C

,l valor que va a continuaci#n de .6& debe ser un entero sin si0no. .6& no a!ecta a la posible actuali3aci#n de la consulta.

D)S%)<C%
8mite los re0istros que contienen datos duplicados en los campos seleccionados. /ara que los valores de cada campo listado en la instrucci#n 5E"EC. se incluyan en la consulta deben ser nicos. /or eJemploF varios empleados listados en la tabla $mpleados pueden tener el mismo apellido. Si dos re0istros contienen ;LEpe@; en el campo &pellidoF la si0uiente instrucci#n S;) devuelve un nico re0istroG
)"L"CT +45.4NC. A,ellido *&+( Em,leados

Con otras palabras el predicado +45.4NC. devuelve aquellos re0istros cuyos campos indicados en la cl+usula 5E"EC. posean un contenido di!erente. ,l resultado de una consulta que utili3a +45.4NC. no es actuali3able y no re!leJa los cambios subsi0uientes reali3ados por otros usuarios.

D)S%)<C%64B
,ste predicado no es compatible con ANSI. A dIa de :oy s#lo !unciona con MS-A!!ess. Devuelve los re0istros di!erentes de una tablaL a di!erencia del predicado anterior que s#lo se !iJaba en el contenido de los campos seleccionadosF Kste lo :ace en el contenido del re0istro completo independientemente de los campos indicados en la cl+usula 5E"EC..

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares )"L"CT +45.4NC.R6W A,ellido *&+( Em,leados

39

Si la tabla empleados contiene dos re0istrosG ;&ntonio LEpe@; y ;6arta LEpe@; el eJemplo del predicado +45.4NC. devuelve un nico re0istro con el valor ;LEpe@; en el campo Apellido ya que busca no duplicados en dic:o campo. ,ste ltimo eJemplo devuelve dos re0istros con el valor ;LEpe@; en el apellido ya que se buscan no duplicados en el re0istro completo.

A*)AS
,n determinadas circunstancias es necesario asi0nar un nombre a al0una columna determinada de un conJunto devueltoF otras veces por simple capric:o o porque estamos recuperando datos de di!erentes tablas y resultan tener un campo con i0ual nombre. /ara resolver todas ellas tenemos la palabra reservada A5 que se encar0a de asi0nar el nombre que deseamos a la columna deseada. %omado como re!erencia el eJemplo anterior podemos :acer que la columna devuelta por la consultaF en lu0ar de llamarse &pellido 4i0ual que el campo devuelto7 se llame $mpleado. ,n este caso procederIamos de la si0uiente !ormaG
)"L"CT A,ellido A5 Em,leado *&+( Em,leados

A5 no es una palabra reservada de ANSIF e=isten di!erentes sistemas de asi0nar los alias en !unci#n del motor de bases de datos. ,n Or !"e para asi0nar un alias a un campo :ay que :acerlo de la si0uiente !ormaG
)"L"CT A,ellido A5 REm,leadoR *&+( Em,leados

%ambiKn podemos asi0nar alias a las tablas dentro de la consulta de selecci#nF en esta caso :ay que tener en cuenta que en todas las re!erencias que deseemos :acer a dic:a tabla se :a de utili3ar el alias en lu0ar del nombre. ,sta tKcnica ser+ de 0ran utilidad m+s adelante cuando se estudien las vinculaciones entre tablas. /or eJemploG
)"L"CT A,ellido *&+( Em,leados A5 .raba2adores

/ara asi0nar alias a las tablas en Or !"e y SQL-Ser(er los alias se asi0nan escribiendo el nombre de la tablaF deJando un espacio en blanco y escribiendo el alias 4se asi0nan dentro de la cl+usula %R6(7.
)"L"CT .raba2adoresCA,ellido A5 Em,leado *&+( Em,leados .raba2adores

417,sta nomenclatura S.ablaTCSCam,oT se debe utili3ar cuando se est+ recuperando un campo cuyo nombre se repite en varias de las tablas que se utili3an en la sentencia. 5o obstante cuando en la sentencia se emplean varias tablas es aconseJable utili3ar esta nomenclatura para evitar el trabaJo que supone al motor de datos averi0uar en que tabla est+ cada uno de los campos indicados en la cl+usula 5E"EC..

,.2./. 6ecuperar )n"ormaci$n de una base de Datos +9terna

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

40

/ara concluir este capItulo se debe :acer re!erencia a la recuperaci#n de re0istros de bases de datos e=ternas. ,s ocasiones es necesario la recuperaci#n de in!ormaci#n que se encuentra contenida en una tabla que no se encuentra en la base de datos que eJecutar+ la consulta o que en ese momento no se encuentra abiertaF esta situaci#n la podemos salvar con la palabra reservada 4N de la si0uiente !ormaG
)"L"CT A,ellido A5 Em,leado *&+( Em,leados 4N Q*IUda'abasesU#es'ionCmdbQ

,n donde *IUda'abasesU#es'ionCmdb es la base de datos que contiene la tabla ,mpleados. ,sta tKcnica es muy sencilla y com n en bases de datos de tipo MS-A!!ess en otros sistemas como SQL-Ser(er u Or !"eF la cosa es m+s complicada la tener que e=istir relaciones de con!ian3a entre los servidores o al ser necesaria la vinculaci#n entre las bases de datos. ,ste eJemplo recupera la in!ormaci#n de una base de datos de SQL-Ser(er ubicada en otro servidor 4se da por supuesto que los servidores est+n vinculados7G
)"L"CT A,ellido *&+( 5er/idor1CBase+a'os1CdboCEm,leados

,.3. Consultas de Acci$n


)as consultas de acci#n son aquellas que no devuelven nin0 n re0istroF son las encar0adas de acciones como a@adir y borrar y modificar re0istros. %anto las sentencias de actuali3aci#n como las de borrado desencadenar+n 4se0 n el motor de datos7 las actuali3aciones en cascadaF borrados en cascadaF restricciones y valores por de!ecto de!inidos para los di!erentes campos o tablas a!ectadas por la consulta.

,.3.1. D+*+%+
Crea una consulta de eliminaci#n que elimina los re0istros de una o m+s de las tablas listadas en la cl+usula %R6( que satis!a0an la cl+usula WHERE. ,sta consulta elimina los re0istros completosF no es posible eliminar el contenido de al0 n campo en concreto. Su sinta=is esG
+E"E.E %R6( .abla WHERE *ri'erio

"na ve3 que se :an eliminado los re0istros utili3ando una consulta de borradoF no puede des:acer la operaci#n. Si desea saber quK re0istros se eliminar+nF primero e=amine los resultados de una consulta de selecci#n que utilice el mismo criterio y despuKs eJecute la consulta de borrado. Manten0a copias de se0uridad de sus datos en todo momento. Si elimina los re0istros equivocados podr+ recuperarlos desde las copias de se0uridad.
'"L"T" *&+( Em,leados ,-"&" Car#o N QAendedorQ

,.3.2. )<S+6% )<%4


A0re0a un re0istro en una tabla. Se la conoce como una consulta de datos a.adidos. ,sta consulta puede ser de dos tipoG insertar un nico re0istro # insertar en una tabla los re0istros contenidos en otra tabla.

0ara insertar un !nico 6e1istro


,n este caso la sinta=is es la si0uienteG

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares /0)"&T /0T+ .abla <*am,o1, *am,o2, CCC, *am,oN> 1AL2") </alor1, /alor2, CCC, /alorN>

41

,sta consulta 0raba en el campo1 el valor1F en el campo2 y valor2 y asI sucesivamente.

0ara seleccionar re1istros e insertarlos en una tabla nueva


,n este caso la sinta=is es la si0uienteG
5E"EC. *am,o1, *am,o2, CCC, *am,oN /0T+ nue/a'abla %R6( 'ablaori#en SWHERE *ri'eriosT

Se pueden utili3ar las consultas de creaci#n de tabla para arc:ivar re0istrosF :acer copias de se0uridad de las tablas o :acer copias para e=portar a otra base de datos o utili3ar en in!ormes que muestren los datos de un periodo de tiempo concreto. /or eJemploF se podrIa crear un in!orme de @entas mensuales por re0i#n eJecutando la misma consulta de creaci#n de tabla cada mes.

0ara insertar 6e1istros de otra %abla


,n este caso la sinta=is esG
/0)"&T /0T+ .abla S4N base$e='ernaT <*am,o1, *am,o2, , *am,oN> )"L"CT .abla6ri#enC*am,o1, .abla6ri#enC*am,o2,,.abla6ri#enC*am,oN %R6( .abla 6ri#en

,n este caso se seleccionar+n los campos 1F2F...F n de la tabla ori0en y se 0rabar+n en los campos 1F2F..F n de la %abla. )a condici#n 5E"EC. puede incluir la cl+usula WHERE para !iltrar los re0istros a copiar. Si %abla y %abla 8ri0en poseen la misma estructura podemos simpli!icar la sinta=is aG
4N5ER. 4N.6 .abla 5E"EC. .abla 6ri#enC? %R6( .abla 6ri#en

De esta !orma los campos de %abla 8ri0en se 0rabar+n en %ablaF para reali3ar esta operaci#n es necesario que todos los campos de %abla 8ri0en estKn contenidos con i0ual nombre en %abla. Con otras palabras que %abla posea todos los campos de %abla 8ri0en 4i0ual nombre e i0ual tipo7. ,n este tipo de consulta :ay que tener especial atenci#n con los campos contadores o autonumKricos puesto que al insertar un valor en un campo de este tipo se escribe el valor que conten0a su campo :om#lo0o en la tabla ori0enF no increment+ndose como le corresponde. Se puede utili3ar la instrucci#n 4N5ER. 4N.6 para a0re0ar un re0istro nico a una tablaF utili3ando la sinta=is de la consulta de adici#n de re0istro nico tal y como se mostr# anteriormente. ,n este casoF su c#di0o especi!ica el nombre y el valor de cada campo del re0istro. Debe especi!icar cada uno de los campos del re0istro al que se le va a asi0nar un valor asI como el valor para dic:o campo. Cuando no se especi!ica dic:o campoF se inserta el valor predeterminado o Null. )os re0istros se a0re0an al !inal de la tabla. %ambiKn se puede utili3ar 4N5ER. 4N.6 para a0re0ar un conJunto de re0istros pertenecientes a otra tabla o consulta utili3ando la cl+usula 5E"EC.CCC %R6( como se mostr# anteriormente en la sinta=is de la consulta de adici#n de m ltiples re0istros. ,n este caso la cl+usula 5E"EC. especi!ica los campos que se van a a0re0ar en la tabla destino especi!icada. )a tabla destino u ori0en puede especi!icar una tabla o una consulta. Si la tabla destino contiene una clave principalF :ay que ase0urarse que es nicaF y con valores no nulosL si no es asIF no se a0re0ar+n los re0istros. Si se a0re0an re0istros a una tabla con un campo ContadorF no se debe incluir el campo Contador en la consulta. Se puede emplear la cl+usula 4N para a0re0ar re0istros a una tabla en otra base de datos.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

42

Se pueden averi0uar los re0istros que se a0re0ar+n en la consulta eJecutando primero una consulta de selecci#n que utilice el mismo criterio de selecci#n y ver el resultado. "na consulta de adici#n copia los re0istros de una o m+s tablas en otra. )as tablas que contienen los re0istros que se van a a0re0ar no se ver+n a!ectadas por la consulta de adici#n. ,n lu0ar de a0re0ar re0istros e=istentes en otra tablaF se puede especi!icar los valores de cada campo en un nuevo re0istro utili3ando la cl+usula AA"3E5. Si se omite la lista de camposF la cl+usula AA"3E5 debe incluir un valor para cada campo de la tablaF de otra !orma !allar+ 4N5ER..

+&emplos
/0)"&T /0T+ Clien'es )"L"CT Clien'esNue/osC? %R6( Clien'esNue/os )"L"CT Em,leadosC? /0T+ &ro#ramadores *&+( Em,leados ,-"&" Ca'e#oria N Q&ro#ramadorQ

,sta consulta crea una tabla nueva llamada pro0ramadores con i0ual estructura que la tabla empleado y copia aquellos re0istros cuyo campo cate0orIa sea programador
/0)"&T /0T+ Em,leados <Nombre, A,ellido, Car#o> 1AL2") <Q"uisQ, Q5:n*0e1Q, QBe*arioQ > /0)"&T /0T+ Em,leados )"L"CT AendedoresC? %R6( Aendedores WHERE &ro/in*ia N Q(adridQ

,.3.3. #0DA%+
Crea una consulta de actuali3aci#n que cambia los valores de los campos de una tabla especi!icada bas+ndose en un criterio especI!ico. Su sinta=is esG
2P'AT" .abla )"T Cam,o1NAalor1, Cam,o2NAalor2, Cam,oNNAalorN WHERE Cri'erio

3&+A.E es especialmente til cuando se desea cambiar un 0ran n mero de re0istros o cuando Kstos se encuentran en m ltiples tablas. /uede cambiar varios campos a la ve3. ,l eJemplo si0uiente incrementa los valores Cantidad pedidos en un 18 por ciento y los valores Cransporte en un G por ciento para aquellos que se :ayan enviado al "eino !nidoG
2P'AT" &edidos

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares )"T &edido N &edidos ? 1C1, .rans,or'e N .rans,or'e ? 1C03 WHERE &aisEn/;o N Q3PQ

43

3&+A.E no 0enera nin0 n resultado. /ara saber quK re0istros se van a cambiarF :ay que e=aminar primero el resultado de una consulta de selecci#n que utilice el mismo criterio y despuKs eJecutar la consulta de actuali3aci#n.
2P'AT" Em,leados )"T Grado N 5 WHERE Grado N 2 2P'AT" &rodu*'os )"T &re*io N &re*io ? 1C1 WHERE &ro/eedor N AN+ %amilia N 3

Si en una consulta de actuali3aci#n suprimimos la cl+usula WHERE todos los re0istros de la tabla se.alada ser+n actuali3ados.
2P'AT" Em,leados )"T 5alario N 5alario ? 1C1

,.,. Consultas de #ni$n )nternas


,.,.1. Consultas de Combinaci$n entre tablas
)as vinculaciones entre tablas se reali3an mediante la cl+usula 4NNER que combina re0istros de dos tablas siempre que :aya concordancia de valores en un campo com n. Su sinta=is esG
5E"EC. *am,os %R6( 'b1 4NNER 864N 'b2 6N 'b1C*am,o1 *om, 'b2C*am,o2

,n dondeG
'b1, 'b2 *am,o1, *am,o2 *om, 5on los nombres de las 'ablas desde las Hue se *ombinan los re#is'rosC 5on los nombres de los *am,os Hue se *ombinanC 5i no son numEri*os, los *am,os deben ser del mismo 'i,o de da'os D *on'ener el mismo 'i,o de da'os, ,ero no 'ienen Hue 'ener el mismo nombreC Es *ualHuier o,erador de *om,ara*i-n rela*ionalI N, <,<O, <N, NO, - OC

Se puede utili3ar una operaci#n 4NNER 864N en cualquier cl+usula %R6(. ,sto crea una combinaci#n por equivalenciaF conocida tambiKn como uni#n interna. )as combinaciones equivalentes son las m+s comunesL Kstas combinan los re0istros de dos tablas siempre que :aya concordancia de valores en un campo com n a ambas tablas. Se puede utili3ar 4NNER 864N con las tablas Departamentos y ,mpleados

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

44

para seleccionar todos los empleados de cada departamento. /or el contrarioF para seleccionar todos los departamentos 4incluso si al0uno de ellos no tiene nin0 n empleado asi0nado7 se emplea "E%. 864N o todos los empleados 4incluso si al0uno no est+ asi0nado a nin0 n departamento7F en este caso R4GH. 864N. Si se intenta combinar campos que conten0an datos Memo u O#)eto OLEF se produce un error. Se pueden combinar dos campos numKricos cualesquieraF incluso si son de di!erente tipo de datos. /or eJemploF puede combinar un campo 5umKrico para el que la propiedad S*+e de su obJeto F*e"d est+ establecida como ,nteroF y un campo Contador. ,l eJemplo si0uiente muestra c#mo podrIa combinar las tablas campo .% ategoriaG
)"L"CT NombreCa'e#oria, Nombre&rodu*'o *&+( Ca'e#orias 4NNER 864N &rodu*'os 6N Ca'e#oriasC4+Ca'e#oria N &rodu*'osC4+Ca'e#oria

ategorAas y 3roductos bas+ndose en el

,n el eJemplo anteriorF .% ategoria es el campo combinadoF pero no est+ incluido en la salida de la consulta ya que no est+ incluido en la instrucci#n 5E"EC.. /ara incluir el campo combinadoF incluir el nombre del campo en la instrucci#n 5E"EC.F en este casoF Ca'e#oriasC4+Ca'e#oria. %ambiKn se pueden enla3ar varias cl+usulas 6N en una instrucci#n 864NF utili3ando la sinta=is si0uienteG
5E"EC. *am,os %R6( 'abla1 4NNER 864N 'abla2 6N <'b1C*am,o1 *om, 'b2C*am,o1 AN+ 6N 'b1C*am,o2 *om, 'b2C*am,o2> 6R 6N <'b1C*am,o3 *om, 'b2C*am,o3>

%ambiKn puede anidar instrucciones 864N utili3ando la si0uiente sinta=isG


5E"EC. *am,os %R6( 'b1 4NNER 864N <'b2 4NNER 864N S< T'b3 S4NNER 864N S< T'abla= S4NNER 864N CCC>T 6N 'b3C*am,o3 *om, 'b=C*am,o=>T 6N 'b2C*am,o2 *om, 'b3C*am,o3> 6N 'b1C*am,o1 *om, 'b2C*am,o2

"n "E%. 864N o un R4GH. 864N puede anidarse dentro de un 4NNER 864NF pero un 4NNER 864N no puede anidarse dentro de un "E%. 864N o un R4GH. 864N. ,JemploG
)"L"CT +45.4NC. 5um<&re*io3ni'ario ? Can'idad> A5 5ales, <Nombre G Q Q G A,ellido> A5 Name *&+( Em,leados 4NNER 864N< &edidos 4NNER 864N +e'alles&edidos 6N &edidosC4d&edido N +e'alles&edidosC4d&edido> 6N Em,leadosC4dEm,leado N &edidosC4dEm,leado

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares G&+2P B. Nombre G Q Q G A,ellido

45

4Crea dos combinaciones equivalentesG una entre las tablas %etalles de pedidos y 3edidosF y la otra entre las tablas 3edidos y $mpleados. ,sto es necesario ya que la tabla $mpleados no contiene datos de ventas y la tabla %etalles de pedidos no contiene datos de los empleados. )a consulta produce una lista de empleados y sus ventas totales.7 Si empleamos la cl+usula 4NNER en la consulta se seleccionar+n s#lo aquellos re0istros de la tabla de la que :ayamos escrito a la i3quierda de 4NNER 864N que conten0an al menos un re0istro de la tabla que :ayamos escrito a la derec:a. /ara solucionar esto tenemos dos cl+usulas que sustituyen a la palabra clave 4NNERF estas cl+usulas son "E%. y R4GH.. "E%. toma todos los re0istros de la tabla de la i3quierda aunque no ten0an nin0 n re0istro en la tabla de la i3quierda. R4GH. reali3a la misma operaci#n pero al contrarioF toma todos los re0istros de la tabla de la derec:a aunque no ten0a nin0 n re0istro en la tabla de la i3quierda. )a sinta=is e=puesta anteriormente pertenece a MS-A!!essF en donde todas las sentencias con la sinta=is !uncionan correctamente. )os manuales de SQL-Ser(er dicen que esta sinta=is es incorrecta y que :ay que a.adir la palabra reservada 63.ERG "E%. 63.ER 864N y R4GH. 63.ER 864N. ,n la pr+ctica !unciona correctamente de una u otra !orma. 5o obstanteF los 4NNER 864N Or !"e no es capa3 de interpretarlosF pero e=iste una sinta=is en !ormato ANSI para los 4NNER 864N que !uncionan en todos los sistemas. %omando como re!erencia la si0uiente sentenciaG
)"L"CT %a*'urasC?, AlbaranesC? *&+( %a*'uras 4NNER 864N Albaranes 6N %a*'urasC4dAlbaran N AlbaranesC4dAlbaran ,-"&" %a*'urasC4dClien'e N 325

)a trans!ormaci#n de esta sentencia a !ormato A5S' serIa la si0uienteG


)"L"CT %a*'urasC?, AlbaranesC? *&+( %a*'uras, Albaranes ,-"&" %a*'urasC4dAlbaran N AlbaranesC4dAlbaran AN+ %a*'urasC4dClien'e N 325

Como se puede observar los cambios reali3ados :an sido los si0uientesG 1. %odas las tablas que intervienen en la consulta se especi!ican en la cl+usula %R6(. 2. )as condiciones que vinculan a las tablas se especi!ican en la cl+usula WHERE y se vinculan mediante el operador l#0ico AN+.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

46

1e!erente a los 63.ER 864NF no !uncionan en Or !"e y adem+s cono3co una sinta=is que !uncione en los tres sistemas. )a sinta=is en Or !"e es i0ual a la sentencia anterior pero a.adiendo los caracteres 4 G7 detr+s del nombre de la tabla en la que deseamos aceptar valores nulosF esto equivale a un "E%. 864NG
)"L"CT %a*'urasC?, AlbaranesC? *&+( %a*'uras, Albaranes ,-"&" %a*'urasC4dAlbaran N AlbaranesC4dAlbaran <G> AN+ %a*'urasC4dClien'e N 325

E esto a un 1'DC% >8'5G


)"L"CT %a*'urasC?, AlbaranesC? *&+( %a*'uras, Albaranes ,-"&" %a*'urasC4dAlbaran <G> N AlbaranesC4dAlbaran AN+ %a*'urasC4dClien'e N 325

,n SQL-Ser(er se puede utili3ar una sinta=is parecidaF en este caso no se utili3a los caracteres 4 G7 sino los caracteres N? para el "E%. 864N y ?N para el R4GH. 864N.

,.,.2. Consultas de Autocombinaci$n


)a autocombinaci#n se utili3a para unir una tabla consi0o mismaF comparando valores de dos columnas con el mismo tipo de datos. )a sinta=is en la si0uienteG
5E"EC. alias1C*olumna, alias2C*olumna, CCC %R6( 'abla1 as alias1, 'abla2 as alias2 WHERE alias1C*olumna N alias2C*olumna AN+ o'ras *ondi*iones

/or eJemploF para visuali3ar el n meroF nombre y puesto de cada empleadoF Junto con el n meroF nombre y puesto del supervisor de cada uno de ellos se utili3arIa la si0uiente sentenciaG
5E"EC. 'Cnum$em,, 'Cnombre, 'C,ues'o, 'Cnum$su,,sCnombre, sC,ues'o %R6( em,leados A5 ', em,leados A5 s WHERE 'Cnum$su, N sCnum$em,

,.,.3. Consultas de Combinaciones no Comunes

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

47

)a mayorIa de las combinaciones est+n basadas en la i0ualdad de valores de las columnas que son el criterio de la combinaci#n. )as no comunes se basan en otros operadores de combinaci#nF tales como N6.F BE.WEENF <OF etc. /or eJemploF para listar el 0rado salarialF nombreF salario y puesto de cada empleado ordenando el resultado por 0rado y salario :abrIa que eJecutar la si0uiente sentenciaG
)"L"CT #radosC#rado,em,leadosCnombre, em,leadosCsalario, em,leadosC,ues'o *&+( em,leados, #rados ,-"&" em,leadosCsalario BE.WEEN #radosCsalarioin)erior And #radosCsalariosu,erior +&'"& B. #radosC#rado, em,leadosCsalario

/ara listar el salario medio dentro de cada 0rado salarial :abrIa que lan3ar esta otra sentenciaG
)"L"CT #radosC#rado, AAG<em,leadosCsalario> *&+( em,leados, #rados ,-"&" em,leadosCsalario BE.WEEN #radosCsalarioin)erior And #radosCsalariosu,erior G&+2P B. #radosC#rado

,.,.,. C64SS C4)< ;S@*DServer=


Se utili3a en SQL-Ser(er para reali3ar consultas de uni#n. Supon0amos que tenemos una tabla con todos los autores y otra con todos los libros. Si dese+ramos obtener un listado combinar ambas tablas de tal !orma que cada autor apareciera Junto a cada tItuloF utili3arIamos la si0uiente sinta=isG
)"L"CT Au'oresCNombre, "ibrosC.i'ulo *&+( Au'ores CR655 864N "ibros

,.,... S+*2 C4)<


5E"% 864N es una tKcnica empleada para conse0uir el producto cartesiano de una tabla consi0o misma. Su utili3aci#n no es muy !recuenteF pero pon0amos al0 n eJemplo de su utili3aci#n. Supon0amos la si0uiente tabla 4,l campo autor es numKricoF aunque para ilustrar el eJemplo utilice el nombre7G
Autores C-di#o <C-di#o del libro> B0012 B0012 B0012 C0014 C0014 +0120 Au'or <Nombre del Au'or> 1C %ran*is*o "-,e1 2C 8a/ier Alonso 3C (ar'a Rebolledo 1C %ran*is*o "-,e1 2C 8a/ier Alonso 2C 8a/ier Alonso

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares +0120 3C (ar'a Rebolledo

48

;ueremos obtenerF para cada libroF pareJas de autoresG


)"L"CT ACCodi#o, ACAu'or, BCAu'or *&+( Au'ores A, Au'ores B ,-"&" ACCodi#o N BCCodi#o

,l resultado es el si0uienteG
C-di#o B0012 B0012 B0012 B0012 B0012 B0012 B0012 B0012 B0012 C0014 C0014 C0014 C0014 +0120 +0120 +0120 +0120 Au'or 1C %ran*is*o "-,e1 1C %ran*is*o "-,e1 1C %ran*is*o "-,e1 2C 8a/ier Alonso 2C 8a/ier Alonso 2C 8a/ier Alonso 3C (ar'a Rebolledo 3C (ar'a Rebolledo 3C (ar'a Rebolledo 1C %ran*is*o "-,e1 1C %ran*is*o "-,e1 2C 8a/ier Alonso 2C 8a/ier Alonso 2C 8a/ier Alonso 2C 8a/ier Alonso 3C (ar'a Rebolledo 3C (ar'a Rebolledo Au'or 1C %ran*is*o "-,e1 2C 8a/ier Alonso 3C (ar'a Rebolledo 2C 8a/ier Alonso 1C %ran*is*o "-,e1 3C (ar'a Rebolledo 3C (ar'a Rebolledo 2C 8a/ier Alonso 1C %ran*is*o "-,e1 1C %ran*is*o "-,e1 2C 8a/ier Alonso 2C 8a/ier Alonso 1C %ran*is*o "-,e1 2C 8a/ier Alonso 3C (ar'a Rebolledo 3C (ar'a Rebolledo 2C 8a/ier Alonso

Como podemos observarF las pareJas de autores se repiten en cada uno de los librosF podemos omitir estas repeticiones de la si0uiente !ormaG
)"L"CT ACCodi#o, ACAu'or, BCAu'or *&+( Au'ores A, Au'ores B ,-"&" ACCodi#o N BCCodi#o AN+ ACAu'or < BCAu'or

,l resultado a:ora es el si0uienteG


C-di#o B0012 B0012 C0014 Au'or 1C %ran*is*o "-,e1 1C %ran*is*o "-,e1 1C %ran*is*o "-,e1 Au'or 2C 8a/ier Alonso 3C (ar'a Rebolledo 2C 8a/ier Alonso

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares +0120 2C 8a/ier Alonso 3C (ar'a Rebolledo

49

A:ora tenemos un conJunto de resultados en !ormato &utor * o&utor. Si en la tabla de empleados quisiKramos e=traer todas las posibles pareJas que podemos reali3arF utili3arIamos la si0uiente sentenciaG
)"L"CT HombresCNombre, (u2eresCNombre *&+( Em,leados Hombre, Em,leados (u2eres ,-"&" HombreC5e=o N QHombreQ AN+ (u2eresC5e=o N Q(u2erQ AN+ HombresC4d <O (u2eresC4d

/ara concluir supon0amos la tabla si0uienteG


"m#lea$os 4d 1 2 3 4 5 6 Nombre (ar*os "u*as Ana E/a 8uan An'onio 5u8e)e 6 1 2 1 6

;ueremos obtener un conJunto de resultados con el nombre del empleado y el nombre de su Je!eG
5E"EC. Em,leCNombre, 8e)esCNombre %R6( Em,leados Em,le, Em,leados 8e)e WHERE Em,leC5u8e)e N 8e)esC4d

,.,./. 2#** C4)<


,ste tipo de operador se utili3a para devolver todas las !ilas de una combinaci#n ten0an o no correspondencia. ,s el equivalente a la utili3aci#n de "E%. 864N y R4GH. 864N a la misma ve3. Mediante este operador se obtendr+n por un lado las !ilas que ten0an correspondencia en ambas tablas y tambiKn aquellas que no ten0an correspondencia sean de la tabla que sean. Si dese+ramos obtener un listado que incluyera todos los autores con sus libros correspondientesF pero adem+s todos los autores que no :an escrito nin0 n libro y todos aquellos libros sin autor 4debemos suponer que no e=iste un autor llamado an#nimo7G
)"L"CT Au'oresC?, "ibrosC? *&+( Au'ores %3"" "ibros 6N Au'oresC4dAu'or N "ibrosC4dAu'or

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

50

,... Consultas de #ni$n +9ternas


Se utili3a la operaci#n 3N46N para crear una consulta de uni#nF combinando los resultados de dos o m+s consultas o tablas independientes. Su sinta=is esG
S.AB"ET *onsul'a1 3N46N SA""T S.AB"ET *onsul'a2 S3N46N SA""T S.AB"ET *onsul'an S CCC TT

,n dondeG
*onsul'a 1, *onsul'a 2, *onsul'a n 5on ins'ru**iones 5E"EC., el nombre de una *onsul'a alma*enada o el nombre de una 'abla alma*enada ,re*edido ,or la ,alabra *la/e .AB"EC

/uede combinar los resultados de dos o m+s consultasF tablas e instrucciones 5E"EC.F en cualquier ordenF en una nica operaci#n 3N46N. ,l eJemplo si0uiente combina una tabla e=istente llamada 5uevas Cuentas y una instrucci#n 5E"EC.G
TABL" Nue/asCuen'as 20/+0 A"" 5E"EC. ? %R6( Clien'es WHERE Can'idad&edidos O 1000

Si no se indica lo contrarioF no se devuelven re0istros duplicados cuando se utili3a la operaci#n 3N46NF no obstante puede incluir el predicado A"" para ase0urar que se devuelven todos los re0istros. ,sto :ace que la consulta se eJecute m+s r+pidamente. %odas las consultas en una operaci#n 3N46N deben pedir el mismo n mero de camposF no obstante los campos no tienen porquK tener el mismo tama.o o el mismo tipo de datos. Se puede utili3ar una cl+usula GR63& BK y/o HAA4NG en cada ar0umento consulta para a0rupar los datos devueltos. /uede utili3ar una cl+usula 6R+ER BK al !inal del ltimo ar0umento consulta para visuali3ar los datos devueltos en un orden especI!ico.
)"L"CT NombreCom,ania, Ciudad *&+( &ro/eedores ,-"&" &ais N QBrasilQ 20/+0 5E"EC. NombreCom,ania, Ciudad %R6( Clien'es WHERE &ais N QBrasilQ

41ecupera los nombres y las ciudades de todos pro1eedores y clientes de =rasil7


)"L"CT NombreCom,ania, Ciudad *&+( &ro/eedores ,-"&" &ais N QBrasilQ 20/+0

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 5E"EC. NombreCom,ania, Ciudad %R6( Clien'es WHERE &ais N QBrasilQ 6R+ER BK Ciudad

51

41ecupera los nombres y las ciudades de todos pro1eedores y clientes radicados en =rasilF ordenados por el nombre de la ciudad7
)"L"CT NombreCom,ania, Ciudad *&+( &ro/eedores ,-"&" &ais N QBrasilQ 20/+0 5E"EC. NombreCom,ania, Ciudad %R6( Clien'es WHERE &ais N QBrasilQ 20/+0 5E"EC. A,ellidos, Ciudad %R6( Em,leados WHERE Re#ion N QAmEri*a del 5urQ

41ecupera los nombres y las ciudades de todos los pro1eedores y clientes de =rasil y los apellidos y las ciudades de todos los empleados de &mrica del Sur7
TABL" "is'a$Clien'es 20/+0 .AB"E "is'a&ro/eedores

41ecupera los nombres y c#di0os de todos los proveedores y clientes7

,./. Consultas de 6e"erencias Cru'adas


,./.1. MSDAccess
"na consulta de re!erencias cru3adas es aquella que nos permite visuali3ar los datos en !ilas y en columnasF estilo tablaF por eJemploG
&rodu*'o 9 AFo &an'alones Camisas La,a'os 1!!6 1C250 C560 4C36! 1!!7 3C000 1C253 2C563

Si tenemos una tabla de productos y otra tabla de pedidosF podemos visuali3ar en total de productos pedidos por a.o para un artIculo determinadoF tal y como se visuali3a en la tabla anterior. )a sinta=is para este tipo de consulta es la si0uienteG
.RAN5%6R( )un*i-n a#re#ada ins'ru**i-n sele*' &4A6. *am,o ,i/o' S4N </alor1S, /alor2S, CCCTT>T

,n dondeG
)un*i-n a#re#ada Es una )un*i-n 5V" a#re#ada Hue o,era sobre los da'os sele**ionadosC

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares ins'ru**i-n sele*' *am,o ,i/o' /alor1, /alor2 Es una ins'ru**i-n 5E"EC.C Es el *am,o o e=,resi-n Hue desea u'ili1ar ,ara *rear las *abe*eras de la *olumna en el resul'ado de la *onsul'aC 5on /alores )i2os u'ili1ados ,ara *rear las *abe*eras de la *olumnaC

52

/ara resumir datos utili3ando una consulta de re!erencia cru3adaF se seleccionan los valores de los campos o e=presiones especi!icadas como cabeceras de columnas de tal !orma que pueden verse los datos en un !ormato m+s compacto que con una consulta de selecci#n. .RAN5%6R( es opcional pero si se incluye es la primera instrucci#n de una cadena S;). /recede a la instrucci#n 5E"EC. que especi!ica los campos utili3ados como encabe3ados de !ila y una cl+usula GR63& BK que especi!ica el a0rupamiento de las !ilas. 8pcionalmente puede incluir otras cl+usulas como por eJemplo WHEREF que especi!ica una selecci#n adicional o un criterio de ordenaci#n. )os valores devueltos en campo pIvot se utili3an como encabe3ados de columna en el resultado de la consulta. /or eJemploF al utili3ar las ci!ras de ventas en el mes de la venta como pIvot en una consulta de re!erencia cru3ada se crearIan 12 columnas. /uede restrin0ir el campo pIvot para crear encabe3ados a partir de los valores !iJos 4valor1F valor27 listados en la cl+usula opcional 4N. %ambiKn puede incluir valores !iJosF para los que no e=isten datosF para crear columnas adicionales.

+&emplos
T&A0)*+&( 5um<Can'idad> A5 Aen'as )"L"CT &rodu*'o, Can'idad *&+( &edidos ,-"&" %e*0a Be'Ween X01Y01Y1!! X And X12Y31Y1!! X G&+2P B. &rodu*'o +&'"& B. &rodu*'o P/1+T +a'e&ar'<RmR, %e*0a>

4Crea una consulta de tabla de re!erencias cru3adas que muestra las ventas de productos por mes para un a.o especI!ico. )os meses aparecen de i3quierda a derec:a como columnas y los nombres de los productos aparecen de arriba :acia abaJo como !ilas.7
T&A0)*+&( 5um<Can'idad> A5 Aen'as )"L"CT Com,ania *&+( &edidos ,-"&" %e*0a Be'Ween X01Y01Y1!! X And X12Y31Y1!! X G&+2P B. Com,ania +&'"& B. Com,ania P/1+T R.rimes're R Z

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares +a'e&ar'<RHR, %e*0a> 4n <Q.rimes're1Q, Q.rimes're2Q, Q.rimes're 3Q, Q.rimes're 4Q>

53

4Crea una consulta de tabla de re!erencias cru3adas que muestra las ventas de productos por trimestre de cada proveedor en el a.o indicado. )os trimestres aparecen de i3quierda a derec:a como columnas y los nombres de los proveedores aparecen de arriba :acia abaJo como !ilas.7 #n caso pr(ctico Se trata de resolver el si0uiente problemaG tenemos una tabla de productos con dos camposF el c#di0o y el nombre del productoF tenemos otra tabla de pedidos en la que anotamos el c#di0o del productoF la !ec:a del pedido y la cantidad pedida. Deseamos consultar los totales de producto por a.oF calculando la media anual de ventas. +structura y datos de las tablas
A&T/C2L+) 4+ 1 2 3 Nombre La,a'os &an'alones Blusas 4+ 1 2 3 1 2 3 1 2 3 1 2 3 P"'/'+) %e*0a 1191191!!6 1191191!!6 1191191!!6 1291091!!6 0491091!!6 0590 91!!6 0190191!!7 0290 91!!7 0591091!!7 1291291!!7 1591291!!7 1791091!!7 520 1C250 Can'idad 250 125 520 50 250 100 40 60 70

/ara resolver la consulta planteamos la si0uiente consultaG


T&A0)*+&( 5um<&edidosCCan'idad> A5 Resul'ado )"L"CT Nombre A5 &rodu*'o, &edidosC4d A5 C-di#o, 5um<&edidosCCan'idad> A5 .6.A", A/#<&edidosCCan'idad> A5 (edia *&+( &edidos, Ar';*ulos ,-"&" &edidosC4d N Ar';*ulosC4d G&+2P B. &edidosC4d, Ar';*ulosCNombre P/1+T Kear<%e*0a>

E obtenemos el si0uiente resultadoG

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares &rodu*'o La,a'os &an'alones Blusas C-di#o 1 2 3 .o'al 34 !55 1!40 (edia 7 23 ,75 4 5 1!!6 300 375 620 1!!7 4 5 0 1320

54

Comentarios a la consulta7 )a cl+usula .RAN5%6R( indica el valor que deseamos visuali3ar en las columnas que realmente pertenecen a la consultaF en este caso 1(($ y 1((&F puesto que las dem+s columnas son opcionales. 5E"EC. especi!ica el nombre de las columnas opcionales que deseamos visuali3arF en este caso 3roductoF EdigoF Cotal y 6ediaF indicando el nombre del campo que deseamos mostrar en cada columna o el valor de la misma. Si incluimos una !unci#n de c+lculo el resultado se :ar+ bas+ndose en los datos de la !ila actual y no al total de los datos. %R6( especi!ica el ori0en de los datos. )a primera tabla que debe !i0urar es aquella de donde deseamos e=traer los datosF esta tabla debe contener al menos tres camposF uno para los tItulos de la !ilaF otros para los tItulos de la columna y otro para calcular el valor de las celdas. ,n este caso en concreto se deseaba visuali3ar el nombre del productoF como en la tabla de pedidos s#lo !i0uraba el c#di0o del mismo se a.adi# una nueva columna en la cl+usula sele*' llamada 3roducto que se corresponda con el campo 5ombre de la tabla de artIculos. /ara vincular el c#di0o del artIculo de la tabla de pedidos con el nombre del mismo de la tabla artIculos se insert# la cl+usula 4NNER 864N. )a cl+usula GR63& BK especi!ica el a0rupamiento de los re0istrosF contrariamente a los manuales de instrucci#n esta cl+usula no es opcional ya que debe !i0urar siempre y debemos a0rupar los re0istros por el campo del cual e=traemos la in!ormaci#n. ,n este caso e=isten dos campos de los que e=traemos la in!ormaci#nG ,edidosC*an'idad y ar';*ulosCnombreF por ello a0rupamos por los campos. /ara !inali3ar la cl+usula &4A6. indica el nombre de las columnas no opcionalesF en este caso 199+ y 199H y como vamos a el dato que aparecer+ en las columnasF en este caso empleamos el a.o en que se produJo el pedidoF e=trayKndolo del campo ,edidosC)e*0a. 8tras posibilidades de !ec:a de la cl+usula pIvot son las si0uientesG 1. /ara a0rupamiento por %rimestresG &4A6. R.ri R Z +a'e&ar'<RHR,S%e*0aT>[ 2. /ara a0rupamiento por meses 4sin tener en cuenta el a.o7 &4A6. %orma'<S%e*0aT,RmmmR> 4n <REneR, R%ebR, R(arR, RAbrR, R(aDR, R8unR, R8ulR, RA#oR, R5e,R, R6*'R, RNo/R, R+i*R>[ 3. /ara a0rupar por dIas &4A6. %orma'<S%e*0aT,R50or' +a'eR>[

,.5. Criterios de Selecci$n


,n el apartado anterior se vio la !orma de recuperar los re0istros de las tablasF las !ormas empleadas devolvIan todos los re0istros de la mencionada tabla. A lo lar0o de este apartado se estudiar+n las posibilidades de !iltrar los re0istros con el !in de recuperar solamente aquellos que cumplan unas condiciones preestablecidas. Antes de comen3ar el desarrollo de este apartado :ay que recalcar tres detalles de vital importancia. ,l primero de ellos es que cada ve3 que se desee establecer una condici#n re!erida a un campo de te=to la condici#n de b squeda debe ir encerrada entre comillas simplesL la se0unda es que no es posible establecer condiciones de b squeda en los campos memo yL la tercera y ltima :ace re!erencia a las !ec:as. A dIa de :oy no :e sido capa3 de encontrar una sinta=is que !uncione en todos los sistemasF por lo que se :ace necesario particulari3arlas se0 n el banco de datosG

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Banco de Datos #ALB#erver 7racle M#B ccess Sintaxis %e*0a N XmmYddYaaaaX %e*0a N 'o$da'e<QKKKK++((Q,QaaaammddQ,> %e*0a N XmmYddYaaaaX

55

,Jemplo
Banco de Datos #ALB#erver 7racle M#B ccess E emplo !para "rabar la #ec$a %& de ma'o de %()(* %e*0a N X05Y1 Y1!6!X %e*0a N 1!6!051 %e*0a N 'o$da'e<QKKKK++((Q, Q1!6!051 Q> %e*0a N X05Y1 Y1!6!X

1e!erente a los valores l#0icos .rue o %alse cabe destacar que no son reconocidos en Or !"eF ni en este sistema de bases de datos ni en SQL-Ser(er e=isten los campos de tipo MS.I-#M de MS-A!!essL en estos sistemas se utili3an los campos B'% que permiten almacenar valores de 8 # 1. 'nternamenteF MS-A!!essF almacena en estos campos valores de 8 # *1F asI que todo se complica bastanteF pero aprovec:ando la coincidencia del * para los valores %A"5EF se puede utili3ar la sinta=is si0uiente que !unciona en todos los casosG si se desea saber si el campo es !also M CCC CA(&6 N 0M y para saber los verdaderos M CA(&6 <O 0M.

,.5.1. 4peradores *$1icos


)os operadores l#0icos soportados por S;) sonG AN+F 6RF J6RF EH/F 4m,F 4s y No'. A e=cepci#n de los dos ltimos todos poseen la si0uiente sinta=isG
<e=,resi-n1O o,erador <e=,resi-n2O

,n donde e=presi#n1 y e=presi#n2 son las condiciones a evaluarF el resultado de la operaci#n varIa en !unci#n del operador l#0ico. )a tabla adJunta muestra los di!erentes posibles resultadosG
+expresin%, Aerdad Aerdad %also %also +expresin%, Aerdad Aerdad %also %also +expresin%, Aerdad Aerdad Operador AN+ AN+ AN+ AN+ Operador 6R 6R 6R 6R Operador J6R J6R +expresin-, %also Aerdad Aerdad %also +expresin-, %also Aerdad Aerdad %also +expresin-, Aerdad %also .esultado Falso Verdad Falso Falso .esultado Verdad Verdad Verdad Falso .esultado Falso Verdad

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares +expresin%, %also %also +expresin%, Aerdad Aerdad %also %also +expresin%, Aerdad Aerdad Aerdad %also %also %also Null Null Null Operador J6R J6R Operador EH/ EH/ EH/ EH/ Operador 4m, 4m, 4m, 4m, 4m, 4m, 4m, 4m, 4m, +expresin-, Aerdad %also +expresin-, Aerdad %also Aerdad %also +expresin-, Aerdad %also Null Aerdad %also Null Aerdad %also Null .esultado Verdad Falso .esultado Verdad Falso Falso Verdad .esultado Verdad Falso 8ull Verdad Verdad Verdad Verdad 8ull 8ull

56

Si a cualquiera de las anteriores condiciones le anteponemos el operador N6. el resultado de la operaci#n ser+ el contrario al devuelto sin el operador N6.. ,l ltimo operador denominado 4s se emplea para comparar dos variables de tipo obJeto <6b2e'o1O 4s <6b2e'o2O. este operador devuelve verdad si los dos obJetos son i0uales.
5E"EC. ? %R6( Em,leados WHERE Edad O 25 AN+ Edad < 50 5E"EC. ? %R6( Em,leados WHERE <Edad O 25 AN+ Edad < 50> 6R 5ueldo N 100 5E"EC. ? %R6( Em,leados WHERE N6. Es'ado N Q5ol'eroQ 5E"EC. ? %R6(

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Em,leados WHERE <5ueldo O 100 AN+ 5ueldo < 500> 6R <&ro/in*ia N Q(adridQ AN+ Es'ado N QCasadoQ>

57

,.5.2. Ealores <ulos


,n muc:as ocasiones es necesario emplear como criterio de selecci#n valores nulos en los campos. /odemos emplear el operaci#n 45 N3"" para reali3ar esta operaci#n. /or eJemploG
5E"EC. ? %R6( Em,leados WHERE +N4 45 N3""

,ste operador no est+ reconocido en MS-A!!ess y por ello :ay que utili3ar la si0uiente sinta=isG
5E"EC. ? %R6( Em,leados WHERE 4sNull<+N4>N.rue

,.5.3. )ntervalos de Ealores


/ara indicar que deseamos recuperar los re0istros se0 n el intervalo de valores de un campo emplearemos el operador Be'Ween cuya sinta=is esG
*am,o SNo'T Be'Ween /alor1 And /alor2 <la *ondi*i-n No' es o,*ional>

,n este caso la consulta devolverIa los re0istros que conten0an en McampoM un valor incluido en el intervalo valor1F valor2 4ambos inclusive7. Si anteponemos la condici#n No' devolver+ aquellos valores no incluidos en el intervalo.
5E"EC. ? %R6( &edidos WHERE Cod&os'al Be'Ween 2 000 And 2 !!!

4Devuelve los pedidos reali3ados en la provincia de Madrid7

,.5.,. +l 4perador *iFe


Se utili3a para comparar una e=presi#n de cadena con un modelo en una e=presi#n S;). Su sinta=is esG
e=,resi-n "i\e modelo

,n donde e=presi#n es una cadena modelo o campo contra el que se compara e=presi#n. Se puede utili3ar el operador "i\e para encontrar valores en los campos que coincidan con el modelo especi!icado. /or modelo puede especi!icar un valor completo 4 &na 6arAa7F o se puede utili3ar una cadena de caracteres comodIn como los reconocidos por el sistema operativo para encontrar un ran0o de valores 4 "i\e An?7. ,l operador "i\e se puede utili3ar en una e=presi#n para comparar un valor de un campo con una e=presi#n de cadena. /or eJemploF si introduce "i\e C? en una consulta S;)F la consulta devuelve todos

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

58

los valores de campo que comiencen por la letra C. ,n una consulta con par+metrosF puede :acer que el usuario escriba el modelo que se va a utili3ar. ,l eJemplo si0uiente devuelve los datos que comien3an con la letra / se0uido de cualquier letra entre A y 6 y de tres dI0itosG
"i\e Q&SAY%TXXXQ

,ste eJemplo devuelve los campos cuyo contenido empiece con una letra de la A a la D se0uidas de cualquier cadena.
"i\e QSAY+T?Q

,n la tabla si0uiente se muestra c#mo utili3ar el operador "i\e para comprobar e=presiones con di!erentes modelos.
()3A44ess /ipo de coincidencia Aarios *ara*'eres Car:*'er es,e*ial Aarios *ara*'eres 3n solo *ar:*'er 3n solo d;#i'o Ran#o de *ara*'eres %uera de un ran#o +is'in'o de un d;#i'o Combinada 0odelo Planteado Qa?aQ QaS?TaQ Qab?Q Qa]aQ QaXaQ QSaY1TQ QS^aY1TQ QS^0Y!TQ QaS^bYmTXQ Coincide QaaQ, QaBaQ, QaBBBaQ Qa?aQ Qab*de)#Q, Qab*Q QaaaQ, Qa3aQ, QaBaQ Qa0aQ, Qa1aQ, Qa2aQ Q)Q, Q,Q, Q2Q Q!Q, QZQ, Q_Q QAQ, QaQ, QZQ, Q`Q QAn!Q, Qa10Q, Qa!!Q )5L3)er6er E emplo "4PE QA_Q "4PE Q$NGQ "4PE QSA%T_Q "4PE QSAY%T_Q "4PE QSAaBT_Q Descripcin .odo lo Hue *omien*e ,or A .odo lo Hue *omien*e ,or *ualHuier *ar:*'er D lue#o si#a NG .odo lo Hue *omien*e ,or A - % .odo lo Hue *omien*e ,or *ualHuier le'ra *om,rendida en're la A D la % .odo lo Hue *omien*e ,or A D la se#unda le'ra no sea una B No coincide QaBCQ QaaaQ Q*abQ, QaabQ QaBBBaQ QaaaQ, Qa10aQ Q2Q, QZQ QbQ, QaQ Q0Q, Q1Q, Q!Q Qab*Q, Qa20Q

,n determinado motores de bases de datosF esta cl+usulaF no reconoce el asterisco como car+cter comodIn y :ay que sustituirlo por el car+cter tanto por ciento 4Y7.

,.5... +l 4perador )n
,ste operador devuelve aquellos re0istros cuyo campo indicado coincide con al0uno de los en una lista. Su sinta=is esG
e=,resi-n SNo'T 4n</alor1, /alor2, C C C>

5E"EC. ?

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares %R6( &edidos WHERE &ro/in*ia 4n <Q(adridQ, QBar*elonaQ, Q5e/illaQ>

59

,.5./. *a cl(usula BG+6+


)a cl+usula WHERE puede usarse para determinar quK re0istros de las tablas enumeradas en la cl+usula %R6( aparecer+n en los resultados de la instrucci#n 5E"EC.. DespuKs de escribir esta cl+usula se deben especi!icar las condiciones e=puestas en los apartados anteriores. Si no se emplea esta cl+usulaF la consulta devolver+ todas las !ilas de la tabla. WHERE es opcionalF pero cuando aparece debe ir a continuaci#n de %R6(.
5E"EC. A,ellidos, 5alario %R6( Em,leados WHERE 5alario N 21000 5E"EC. 4d&rodu*'o, E=is'en*ias %R6( &rodu*'os WHERE E=is'en*ias <N Nue/o&edido 5E"EC. ? %R6( &edidos WHERE %e*0aEn/io N X05Y30Y1!!4X 5E"EC. A,ellidos, Nombre %R6( Em,leados WHERE A,ellidos N QPin#Q 5E"EC. A,ellidos, Nombre %R6( Em,leados WHERE A,ellidos "i\e Q5?Q 5E"EC. A,ellidos, 5alario %R6( Em,leados WHERE 5alario Be'Ween 200 And 300 5E"EC. A,ellidos, 5alario %R6( Em,leados WHERE

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares A,ellidos Be'Ween Q"onQ And Q.olQ 5E"EC. 4d&edido, %e*0a&edido %R6( &edidos WHERE %e*0a&edido Be'Ween X01Y01Y1!!4X And X12Y31Y1!!4X 5E"EC. A,ellidos, Nombre, Ciudad %R6( Em,leados WHERE Ciudad 4n <Q5e/illaQ, Q"os An#elesQ, QBar*elonaQ>

60

,.>. A1rupamiento de 6e1istros


,.>.1. G64#0 H
Combina los re0istros con valores idKnticosF en la lista de campos especi!icadosF en un nico re0istro. /ara cada re0istro se crea un valor sumario si se incluye una !unci#n S;) a0re0adaF como por eJemplo 5um o Coun'F en la instrucci#n 5E"EC.. Su sinta=is esG
5E"EC. *am,os %R6( 'abla WHERE *ri'erio GR63& BK *am,os del #ru,o

GR63& BK es opcional. )os valores de resumen se omiten si no e=iste una !unci#n S;) a0re0ada en la instrucci#n 5E"EC.. )os valores Null en los campos GR63& BK se a0rupan y no se omiten. 5o obstanteF los valores Null no se eval an en nin0una de las !unciones S;) a0re0adas. Se utili3a la cl+usula WHERE para e=cluir aquellas !ilas que no desea a0ruparF y la cl+usula HAA4NG para !iltrar los re0istros una ve3 a0rupados. A menos que conten0a un dato Memo u 8bJeto 8),F un campo de la lista de campos GR63& BK puede re!erirse a cualquier campo de las tablas que aparecen en la cl+usula %R6(F incluso si el campo no esta incluido en la instrucci#n 5E"EC.F siempre y cuando la instrucci#n 5E"EC. incluya al menos una !unci#n S;) a0re0ada. %odos los campos de la lista de campos de 5E"EC. deben o bien incluirse en la cl+usula GR63& BK o como ar0umentos de una !unci#n S;) a0re0ada.
5E"EC. 4d%amilia, 5um<5'o*\> A5 5'o*\A*'ual %R6( &rodu*'os GR63& BK 4d%amilia

"na ve3 que GR63& BK :a combinado los re0istrosF HAA4NG muestra cualquier re0istro a0rupado por la cl+usula GR63& BK que satis!a0a las condiciones de la cl+usula HAA4NG. HAA4NG es similar a WHEREF determina quK re0istros se seleccionan. "na ve3 que los re0istros se :an a0rupado utili3ando GR63& BKF HAA4NG determina cuales de ellos se van a mostrar.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 5E"EC. 4d%amilia, 5um<5'o*\> A5 5'o*\A*'ual %R6( &rodu*'os GR63& BK 4d%amilia HAA4NG 5'o*\A*'ual O 100 AN+ Nombre&rodu*'o "i\e B65?

61

,.>.2. AEG
Calcula la media aritmKtica de un conJunto de valores contenidos en un campo especi!icado de una consulta. Su sinta=is es la si0uiente
A/#<e=,r>

,n donde e=,r representa el campo que contiene los datos numKricos para los que se desea calcular la media o una e=presi#n que reali3a un c+lculo utili3ando los datos de dic:o campo. )a media calculada por A/# es la media aritmKtica 4la suma de los valores dividido por el n mero de valores7. )a !unci#n A/# no incluye nin0 n campo Null en el c+lculo.
5E"EC. A/#<Gas'os> A5 &romedio %R6( &edidos WHERE Gas'os O 100

,.>.3. Count
Calcula el n mero de re0istros devueltos por una consulta. Su sinta=is es la si0uiente
Coun'<e=,r>

,n donde e=,r contiene el nombre del campo que desea contar. )os operandos de e=,r pueden incluir el nombre de un campo de una tablaF una constante o una !unci#n 4la cual puede ser intrInseca o de!inida por el usuario pero no otras de las !unciones a0re0adas de S;)7. /uede contar cualquier tipo de datos incluso te=to. Aunque e=,r puede reali3ar un c+lculo sobre un campoF Coun' simplemente cuenta el n mero de re0istros sin tener en cuenta quK valores se almacenan en los re0istros. )a !unci#n Coun' no cuenta los re0istros que tienen campos null a menos que e=,r sea el car+cter comodIn asterisco 4 ?7. Si utili3a un asteriscoF Coun' calcula el n mero total de re0istrosF incluyendo aquellos que contienen campos null. Coun'<?> es considerablemente m+s r+pida que Coun'<Cam,o>. 5o se debe poner el asterisco entre dobles comillas 4Q?Q7.
5E"EC. Coun'<?> A5 .o'al %R6( &edidos

Si e=,r identi!ica a m ltiples camposF la !unci#n Coun' cuenta un re0istro s#lo si al menos uno de los campos no es Null. Si todos los campos especi!icados son NullF no se cuenta el re0istro. Cay que separar los nombres de los campos con m,ers -d 4Z7.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 5E"EC. Coun'<%e*0aEn/;o Z .rans,or'e> A5 .o'al %R6( &edidos

62

/odemos :acer que el 0estor cuente los datos di!erentes de un determinado campo
5E"EC. Coun'<+45.4NC. "o*alidad> A5 .o'al %R6( &edidos

,.>.,. Ma98 Min


Devuelven el mInimo o el m+=imo de un conJunto de valores contenidos en un campo especi!ico de una consulta. Su sinta=is esG
(in<e=,r> (a=<e=,r>

,n donde e=,r es el campo sobre el que se desea reali3ar el c+lculo. E=,r pueden incluir el nombre de un campo de una tablaF una constante o una !unci#n 4la cual puede ser intrInseca o de!inida por el usuario pero no otras de las !unciones a0re0adas de S;)7.
5E"EC. (in<Gas'os> A5 El(in %R6( &edidos WHERE &ais N QEs,aFaQ 5E"EC. (a=<Gas'os> A5 El(a= %R6( &edidos WHERE &ais N QEs,aFaQ

,.>... StDev8 StDev0


Devuelve estimaciones de la desviaci#n est+ndar para la poblaci#n 4el total de los re0istros de la tabla7 o una muestra de la poblaci#n representada 4muestra aleatoria7. Su sinta=is esG
5'+e/<e=,r> 5'+e/&<e=,r>

,n donde e=,r representa el nombre del campo que contiene los datos que desean evaluarse o una e=presi#n que reali3a un c+lculo utili3ando los datos de dic:os campos. )os operandos de e=,r pueden incluir el nombre de un campo de una tablaF una constante o una !unci#n 4la cual puede ser intrInseca o de!inida por el usuario pero no otras de las !unciones a0re0adas de S;)7. 5'+e/& eval a una poblaci#nF y 5'+e/ eval a una muestra de la poblaci#n. Si la consulta contiene menos de dos re0istros 4o nin0 n re0istro para 5'+e/&7F estas !unciones devuelven un valor Null 4el cual indica que la desviaci#n est+ndar no puede calcularse7.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 5E"EC. 5'+e/<Gas'os> A5 +es/ia*i-n %R6( &edidos WHERE &a;s N QEs,aFaQ 5E"EC. 5'+e/&<Gas'os> A5 +es/ia*i-n %R6( &edidos WHERE &a;s N QEs,aFaQ

63

,.>./. Sum
Devuelve la suma del conJunto de valores contenido en un campo especi!ico de una consulta. Su sinta=is esG
5um<e=,r>

,n donde e=,r representa el nombre del campo que contiene los datos que desean sumarse o una e=presi#n que reali3a un c+lculo utili3ando los datos de dic:os campos. )os operandos de e=,r pueden incluir el nombre de un campo de una tablaF una constante o una !unci#n 4la cual puede ser intrInseca o de!inida por el usuario pero no otras de las !unciones a0re0adas de S;)7.
5E"EC. 5um<&re*io3nidad ? Can'idad> A5 .o'al %R6( +e'alle&edido

,.>.5. Ear8 Ear0


Devuelve una estimaci#n de la varian3a de una poblaci#n 4sobre el total de los re0istros7 o una muestra de la poblaci#n 4muestra aleatoria de re0istros7 sobre los valores de un campo. Su sinta=is esG
Aar<e=,r> Aar&<e=,r>

Aar& eval a una poblaci#nF y Aar eval a una muestra de la poblaci#n. E=,r el nombre del campo que contiene los datos que desean evaluarse o una e=presi#n que reali3a un c+lculo utili3ando los datos de dic:os campos. )os operandos de e=,r pueden incluir el nombre de un campo de una tablaF una constante o una !unci#n 4la cual puede ser intrInseca o de!inida por el usuario pero no otras de las !unciones a0re0adas de S;)7 Si la consulta contiene menos de dos re0istrosF Aar y Aar& devuelven Null 4esto indica que la varian3a no puede calcularse7. /uede utili3ar Aar y Aar& en una e=presi#n de consulta o en una 'nstrucci#n S;).
5E"EC. Aar<Gas'os> A5 Aarian1a %R6( &edidos WHERE &a;s N QEs,aFaQ

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 5E"EC. Aar&<Gas'os> A5 Aarian1a %R6( &edidos WHERE &a;s N QEs,aFaQ

64

,.>.>. C4M0#%+ de S@*DServer


,sta cl+usula a.ade una !ila en el conJunto de datos que se est+ recuperandoF se utili3a para reali3ar c+lculos en campos numKricos. C6(&3.E act a siempre sobre un campo o e=presi#n del conJunto de resultados y esta e=presi#n debe !i0urar e=actamente i0ual en la cl+usula 5E"EC. y siempre se debe ordenar el resultado por la misma o al memos a0rupar el resultado. ,sta e=presi#n no puede utili3ar nin0 n ALIAS.
5E"EC. 4dClien'e, Coun'<4d&edido> %R6( &edidos GR63& BK 4d&edido HAA4NG Coun'<4d&edido> O 20 C6(&3.E 5um<Coun'<4d&edido>> 5E"EC. 4d&edido, <&re*io3nidad ? Can'idad Y +es*uen'o> %R6( S+e'alles de &edidosT 6R+ER BK 4d&edido C6(&3.E 5um<<&re*io3nidad ? Can'idad Y +es*uen'o>> 99 Cal*ula el .o'al BK 4d&edido 99 Cal*ula el 5ub'o'al

,.?. %ipos de Datos


)os tipos de datos S;) se clasi!ican en 13 tipos de datos primarios y de varios sin#nimos v+lidos reconocidos por dic:os tipos de datos. )os tipos de datos primarios sonG
Datos "I8 -; "I. ";.) *798.)*9--)8*; ( .).IM) #I8GL) 1on"itud 1 bD'e 1 bD'e 1 bD'e 4 bD'es bD'es bD'es 4 bD'es Descripcin &ara *onsul'as sobre 'abla ad2un'a de ,rodu*'os de bases de da'os Hue de)inen un 'i,o de da'os BinarioC Aalores 5i9No - .rue9%alse 3n /alor en'ero en're 0 D 255C 3n n@mero in*remen'ado au'om:'i*amen'e <de 'i,o "on#> 3n en'ero es*alable en're !22C337C203C6 5C477,5 0 D !22C337C203C6 5C477,5 07C 3n /alor de )e*0a u 0ora en're los aFos 100 D !!!!C 3n /alor en ,un'o )lo'an'e de ,re*isi-n sim,le *on un

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares ran#o de Y 3C402 23?103 a Y1C4012! ?10Y45 ,ara /alores ne#a'i/os, 1C4012! ?10Y 45 a 3C402 23?103 ,ara /alores ,osi'i/os, D 0C 3n /alor en ,un'o )lo'an'e de doble ,re*isi-n *on un ran#o de Y 1C7!76!3134 6232?1030 a Y4C!4065645 41247?10Y324 ,ara /alores ne#a'i/os, 4C!4065645 41247?10Y324 a 1C7!76!3134 6232?1030 ,ara /alores ,osi'i/os, D 0C 3n en'ero *or'o en're Y32,76 D 32,767C 3n en'ero lar#o en're Y2,147,4 3,64 D 2,147,4 3,647C +e *ero a un m:=imo de 1C2 #i#abD'esC +e *ero 1 #i#abD'eC 3'ili1ado ,ara ob2e'os 6"EC +e *ero a 255 *ara*'eresC

65

(79"L)

bD'es

#,7-. L78G L78G.)?. L78G"I8 -; .)?.

2 bD'es 4 bD'es 1 bD'e ,or *ar:*'er 5e#@n se ne*esi'e 1 bD'e ,or *ar:*'er

)a si0uiente tabla reco0e los sin#nimos de los tipos de datos de!inidosG


/ipo de Dato "I8 -; "I. ";.) *798.)*9--)8*; ( .).IM) Sinnimos AARB4NARK B66"EAN "6G4CA" "6G4CA"1 KE5N6 4N.EGER1 A3.64NCRE(EN. (6NEK +A.E .4(E .4(E5.A(& %"6A.4 4EEE54NG"E REA" %"6A. %"6A. 4EEE+63B"E N3(BER N3(ER4C 4N.EGER2 5(A""4N. 4N. 4N.EGER 4N.EGER4 GENERA" 6"E6B8EC. "6NGCHAR

#I8GL)

(79"L)

#,7-. L78G L78G"I8 -; L78G.)?.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares (E(6 N6.E .)?. V -I 8. /8o dmitido0 A"&HAN3(ER4C CHAR Y CHARAC.ER 5.R4NG Y AARCHAR AA"3E

66

,.1I. Subconsultas
"na subconsulta es una instrucci#n 5E"EC. anidada dentro de una instrucci#n 5E"EC.F 5E"EC.CCC4N.6F 4N5ER.CCC4N.6F +E"E.EF o 3&+A.E o dentro de otra subconsulta. /uede utili3ar tres !ormas de sinta=is para crear una subconsultaG
*om,ara*i-n SANK b A"" b 56(ET <ins'ru**i-n sHl> e=,resi-n SN6.T 4N <ins'ru**i-n sHl> SN6.T EJ45.5 <ins'ru**i-n sHl>

,n dondeG
*om,ara*i-n e=,resi-n ins'ru**i-n 5V" Es una e=,resi-n D un o,erador de *om,ara*i-n Hue *om,ara la e=,resi-n *on el resul'ado de la sub*onsul'aC Es una e=,resi-n ,or la Hue se bus*a el *on2un'o resul'an'e de la sub*onsul'aC Es una ins'ru**i-n 5E"EC., Hue si#ue el mismo )orma'o D re#las Hue *ualHuier o'ra ins'ru**i-n 5E"EC.C +ebe ir en're ,arEn'esisC

Se puede utili3ar una subconsulta en lu0ar de una e=presi#n en la lista de campos de una instrucci#n 5E"EC. o en una cl+usula WHERE o HAA4NG. ,n una subconsultaF se utili3a una instrucci#n 5E"EC. para proporcionar un conJunto de uno o m+s valores especi!icados para evaluar en la e=presi#n de la cl+usula WHERE o HAA4NG. Se puede utili3ar el predicado ANK o 56(EF los cuales son sin#nimosF para recuperar re0istros de la consulta principalF que satis!a0an la comparaci#n con cualquier otro re0istro recuperado en la subconsulta. ,l eJemplo si0uiente devuelve todos los productos cuyo precio unitario es mayor que el de cualquier producto vendido con un descuento i0ual o mayor al 25 por cientoG
5E"EC. ? %R6( &rodu*'os WHERE &re*io3nidad ANK < 5E"EC. &re*io3nidad %R6( +e'alle&edido WHERE +es*uen'o N 0 C25 >

,l predicado A"" se utili3a para recuperar nicamente aquellos re0istros de la consulta principal que satis!acen la comparaci#n con todos los re0istros recuperados en la subconsulta. Si se cambia ANK por A"" en el eJemplo anteriorF la consulta devolver+ nicamente aquellos productos cuyo precio unitario sea

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

67

mayor que el de todos los productos vendidos con un descuento i0ual o mayor al 25 por ciento. ,sto es muc:o m+s restrictivo. ,l predicado 4N se emplea para recuperar nicamente aquellos re0istros de la consulta principal para los que al0unos re0istros de la subconsulta contienen un valor i0ual. ,l eJemplo si0uiente devuelve todos los productos vendidos con un descuento i0ual o mayor al 25 por cientoG
5E"EC. ? %R6( &rodu*'os WHERE 4+&rodu*'o 4N < 5E"EC. 4+&rodu*'o %R6( +e'alle&edido WHERE +es*uen'o N 0C25 >

'nversamente se puede utili3ar N6. 4N para recuperar nicamente aquellos re0istros de la consulta principal para los que no :ay nin0 n re0istro de la subconsulta que conten0a un valor i0ual. ,l predicado EJ45.5 4con la palabra reservada N6. opcional7 se utili3a en comparaciones de verdad/!also para determinar si la subconsulta devuelve al0 n re0istro. Supon0amos que deseamos recuperar todos aquellos clientes que :ayan reali3ado al menos un pedidoG
5E"EC. Clien'esCCom,aF;a, Clien'esC.elE)ono %R6( Clien'es WHERE EJ45.5 < 5E"EC. %R6( &edidos WHERE &edidosC4d&edido N Clien'esC4dClien'e >

,sta consulta es equivalente a esta otraG


5E"EC. Clien'esCCom,aF;a, Clien'esC.elE)ono %R6( Clien'es WHERE 4dClien'es 4N < 5E"EC. &edidosC4dClien'e %R6( &edidos >

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

68

Se puede utili3ar tambiKn alias del nombre de la tabla en una subconsulta para re!erirse a tablas listadas en la cl+usula %R6( !uera de la subconsulta. ,l eJemplo si0uiente devuelve los nombres de los empleados cuyo salario es i0ual o mayor que el salario medio de todos los empleados con el mismo tItulo. A la tabla ,mpleados se le :a dado el alias %1G
5E"EC. A,ellido, Nombre, .i'ulo, 5alario %R6( Em,leados A5 .1 WHERE 5alario N < 5E"EC. A/#<5alario> %R6( Em,leados WHERE .1C.i'ulo N Em,leadosC.i'ulo > 6R+ER BK .i'ulo

,n el eJemplo anteriorF la palabra reservada A5 es opcional.


5E"EC. A,ellidos, Nombre, Car#o, 5alario %R6( Em,leados WHERE Car#o "4PE QA#en'e Aen?Q AN+ 5alario A"" < 5E"EC. 5alario %R6( Em,leados WHERE Car#o "4PE Q?8e)e?Q 6R Car#o "4PE Q?+ire*'or?Q >

48btiene una lista con el nombreF car0o y salario de todos los a0entes de ventas cuyo salario es mayor que el de todos los Je!es y directores7.
5E"EC. +45.4NC. Nombre&rodu*'o, &re*io$3nidad %R6( &rodu*'os WHERE &re*io3nidad N < 5E"EC. &re*io3nidad %R6( &rodu*'os WHERE

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Nombre&rodu*'o N QAlm;bar anisadoQ >

69

48btiene una lista con el nombre y el precio unitario de todos los productos con el mismo precio que el MalmIbar anisadoM7.
5E"EC. +45.4NC. NombreCon'a*'o, NombreCom,ania, Car#oCon'a*'o, .ele)ono %R6( Clien'es WHERE 4dClien'e 4N < 5E"EC. +45.4NC. 4dClien'e %R6( &edidos WHERE %e*0a&edido <X0790191!!3X >

48btiene una lista de las compa.Ias y los contactos de todos los clientes que :an reali3ado un pedido en el se0undo trimestre de 1((3.7
5E"EC. Nombre, A,ellidos %R6( Em,leados A5 E WHERE EJ45.5 < 5E"EC. ? %R6( &edidos A5 6 WHERE 6C4dEm,leado N EC4dEm,leado >

4Selecciona el nombre de todos los empleados que :an reservado al menos un pedido.7
5E"EC. +45.4NC. &edidosC4d$&rodu*'o, &edidosCCan'idad, < 5E"EC. &rodu*'osCNombre %R6( &rodu*'os WHERE &rodu*'osC4d&rodu*'o N &edidosC4d&rodu*'o > A5 El&rodu*'o %R6( &edidos WHERE &edidosCCan'idad N 150 6R+ER BK &edidosC4d$&rodu*'o

41ecupera el C#di0o del /roducto y la Cantidad pedida de la tabla pedidosF e=trayendo el nombre del producto de la tabla de productos.7
5E"EC. NumAuelo, &la1as %R6(

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Auelos WHERE 6ri#en N Q(adridQ AN+ E=is's < 5E"EC. .1CNumAuelo %R6( Auelos A5 .1 WHERE .1C&la1as"ibres O 0 AN+ .1CNumAueloNAuelosCNumAuelo >

70

41ecupera n meros de vuelo y capacidades de aquellos vuelos con destino Madrid y pla3as libres Supon0amos a:ora que tenemos una tabla con los identi!icadores de todos nuestros productos y el stocA de cada uno de ellos. ,n otra tabla se encuentran todos los pedidos que tenemos pendientes de servir. Se trata de averi0uar que productos no se podemos servir por !alta de stocA.
5E"EC. &edidos&endien'esCNombre %R6( &edidos&endien'es GR63& BK &edidos&endien'esCNombre HAA4NG 53( <&edidos&endien'esCCan'idad < < 5E"EC. &rodu*'osC5'o*\ %R6( &rodu*'os WHERE &rodu*'osC4d&rodu*'o N &edidos&endien'esC4d&rodu*'o > >

Supon0amos que en nuestra tabla de empleados deseamos buscar todas las muJeres cuya edad sea mayor a la de cualquier :ombreG
5E"EC. Em,leadosCNombre %R6( Em,leados WHERE 5e=o N Q(Q AN+ Edad O ANK < 5E"EC. Em,leadosCEdad %R6( Em,leados WHERE 5e=o NQHQ >

# lo que serIa lo mismoG


5E"EC. Em,leadosCNombre %R6( Em,leados WHERE 5e=o N Q(Q AN+ Edad O <5E"EC. (a=< Em,leadosCEdad >%R6( Em,leados WHERE 5e=o NQHQ>

)a si0uiente tabla muestra al0 n eJemplo del operador ANK y A""

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 2alor % 3 3 3 3 3 Operador O ANK N ANK N ANK O A"" < A"" 2alor <2,5,7> <2,5,7> <2,3,5,7> <2,5,7> <5,6,7> .esultado Cier'o %also Cier'o %also %also

71

)a operaci#n NANK es equivalente al operador 4NF ambos devuelven el mismo resultado. /ara concluir este apartado comentar queG la cl+usula EJ45.5 se puede emplear para 0enerar la intersecci#n entre dos consultas yF por tantoF la cl+usula N6. EJ45.5 para 0enerar la di!erencia entre consultas.

,.11. +structuras de las %ablas


"na base de datos en un sistema relacional est+ compuesta por un conJunto de tablasF que corresponden a las relaciones del modelo relacional. ,n la terminolo0Ia usada en S;) no se alude a las relacionesF del mismo modo que no se usa el tKrmino atributoF pero sI la palabra columnaF y no se :abla de tuplaF sino de lInea.

,.11.1. Creaci$n de %ablas <uevas


CREA.E .AB"E 'abla < *am,o1 'i,o <'amaFo> ;ndi*e1, *am,o2 'i,o <'amaFo> ;ndi*e2,CCC , ;ndi*e mul'i*am,o , CCC >

,n dondeG
'abla *am,o1 *am,o2 'i,o 'amaFo ;ndi*e1 ;ndi*e2 ;ndi*e mul'i*am,os Es el nombre de la 'abla Hue se /a a *rearC Es el nombre del *am,o o de los *am,os Hue se /an a *rear en la nue/a 'ablaC "a nue/a 'abla debe *on'ener, al menos, un *am,oC Es el 'i,o de da'os de *am,o en la nue/a 'ablaC <Aer .i,os de +a'os> Es el 'amaFo del *am,o s-lo se a,li*a ,ara *am,os de 'i,o 'e='oC Es una *l:usula C6N5.RA4N. Hue de)ine el 'i,o de ;ndi*e a *rearC Es'a *l:usula en o,*ionalC Es una *l:usula C6N5.RA4N. Hue de)ine el 'i,o de ;ndi*e mul'i*am,os a *rearC 3n ;ndi*e mul'i*am,o es aHuel Hue es': inde=ado ,or el *on'enido de /arios *am,osC Es'a *l:usula en o,*ionalC

CREA.E .AB"E Em,leados < Nombre .EJ. <25>, A,ellidos .EJ. <50> >

4Crea una nueva tabla llamada $mpleados con dos camposF uno llamado -ombre de tipo te=to y lon0itud 25 y otro llamado apellidos con lon0itud 5*7.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares CREA.E .AB"E Em,leados < Nombre .EJ. <10>, A,ellidos .EJ., %e*0aNa*imien'o +A.E.4(E > C6N5.RA4N. 4ndi*eGeneral 3N4V3E < Nombre, A,ellidos, %e*0aNa*imien'o >

72

4Crea una nueva tabla llamada $mpleados con un campo 5ombre de tipo te=to y lon0itud 1*F otro con llamado &pellidos de tipo te=to y lon0itud predeterminada 45*7 y uno m+s llamado Fecha-acimiento de tipo FechaI:ora. %ambiKn crea un Indice nico ? no permite valores repetidos ? !ormado por los tres campos.7
CREA.E .AB"E Em,leados < 4dEm,leado 4N.EGER C6N5.RA4N. 4ndi*e&rimario &R4(ARK, Nombre .EJ., A,ellidos .EJ., %e*0aNa*imien'o +A.E.4(E >

4Crea una tabla llamada $mpleados con un campo %e=to de lon0itud predeterminada 45*7 llamado 5ombre y otro i0ual llamado &pellidosF crea otro campo llamado Fecha-acimiento de tipo FechaI:ora y el campo .d$mpleado de tipo entero el que establece como clave principal.7

,.11.2. *a cl(usula C4<S%6A)<%


Se utili3a la cl+usula C6N5.RA4N. en las instrucciones A".ER .AB"E y CREA.E .AB"E para crear o eliminar Indices. ,=isten dos sinta=is para esta cl+usula dependiendo si desea Crear # ,liminar un Indice de un nico campo o si se trata de un campo multi?Indice. Si se utili3a el motor de datos de M*!roso.tF s#lo podr+ utili3ar esta cl+usula con las bases de datos propias de dic:o motor. /ara los Indices de campos nicosG
C6N5.RA4N. nombre c&R4(ARK PEK b 3N4V3E b RE%ERENCE5 'abla e='erna S<*am,o e='erno1, *am,o e='erno2>Td

/ara los Indices de campos m ltiplesG


C6N5.RA4N. nombre c&R4(ARK PEK <,rimario1S, ,rimario2 S,CCCTT> b 3N4V3E <@ni*o1S, @ni*o2 S, CCCTT> b %6RE4GN PEK <re)1S, re)2 S,CCCTT> RE%ERENCE5 'abla e='erna S<*am,o e='erno1 ,*am,o e='erno2 S,CCCT>Td

,n dondeG
nombre ,rimarioN @ni*oN re)N 'abla e='erna Es el nombre del ;ndi*e Hue se /a a *rearC Es el nombre del *am,o o de los *am,os Hue )orman el ;ndi*e ,rimarioC Es el nombre del *am,o o de los *am,os Hue )orman el ;ndi*e de *la/e @ni*aC Es el nombre del *am,o o de los *am,os Hue )orman el ;ndi*e e='erno <0a*en re)eren*ia a *am,os de o'ra 'abla>C Es el nombre de la 'abla Hue *on'iene el *am,o o los *am,os re)eren*iados

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares en re)N *am,os e='ernos Es el nombre del *am,o o de los *am,os de la 'abla e='erna es,e*i)i*ados ,or re)1, re)2,CCC , re)N

73

Si se desea crear un Indice para un campo cuando se esta utili3ando las instrucciones A".ER .AB"E o CREA.E .AB"E la cl+usula C6N.RA4N. debe aparecer inmediatamente despuKs de la especi!icaci#n del campo inde=ado. Si se desea crear un Indice con m ltiples campos cuando se est+ utili3ando las instrucciones A".ER .AB"E o CREA.E .AB"E la cl+usula C6N5.RA4N. debe aparecer !uera de la cl+usula de creaci#n de tabla.
3ndice 98IA9) '-IM -; >); Descripcin Genera un ;ndi*e de *la/e @ni*aC "o Hue im,li*a Hue los re#is'ros de la 'abla no ,ueden *on'ener el mismo /alor en los *am,os inde=adosC Genera un ;ndi*e ,rimario el *am,o o los *am,os es,e*i)i*adosC .odos los *am,os de la *la/e ,rin*i,al deben ser @ni*os D no nulos, *ada 'abla s-lo ,uede *on'ener una @ni*a *la/e ,rin*i,alC Genera un ;ndi*e e='erno <'oma *omo /alor del ;ndi*e *am,os *on'enidos en o'ras 'ablas>C 5i la *la/e ,rin*i,al de la 'abla e='erna *ons'a de m:s de un *am,o, se debe u'ili1ar una de)ini*i-n de ;ndi*e de m@l'i,les *am,os, lis'ando 'odos los *am,os de re)eren*ia, el nombre de la 'abla e='erna, D los nombres de los *am,os re)eren*iados en la 'abla e='erna en el mismo orden Hue los *am,os de re)eren*ia lis'adosC 5i los *am,os re)eren*iados son la *la/e ,rin*i,al de la 'abla e='erna, no 'iene Hue es,e*i)i*ar los *am,os re)eren*iados, ,rede'erminado ,or /alor, el mo'or 8e' se *om,or'a *omo si la *la/e ,rin*i,al de la 'abla e='erna es'u/iera )ormada ,or los *am,os re)eren*iadosC

F7-)IG8 >);

,.11.3. Creaci$n de Andices


Si se utili3a el motor de d tos /et de M*!roso.t s#lo se pueden crear Indices en bases de datos del mismo motor. )a sinta=is para crear un Indice en una tabla ya de!inida en la si0uienteG
CREA.E S 3N4V3E T 4N+EJ ;ndi*e 6N .abla <*am,o SA5Cb+E5CTS, *am,o SA5Cb+E5CT, CCCT> SW4.H c &R4(ARK b +45A""6W N3"" b 4GN6RE N3"" dT

,n dondeG
4ndice tabla campo #*C()#* 98IA9) (I# LL7: 89LL IG87-) 89LL '-IM -; Es el nombre del 4ndice a crear5 Es el nombre de una 'abla e=is'en'e en la Hue se *rear: el ;ndi*eC Es el nombre del *am,o o lis'a de *am,os Hue *ons'i'uDen el ;ndi*eC 4ndi*a el orden de los /alores de los *am,os A5C indi*a un orden as*enden'e </alor ,rede'erminado> D +E5C un orden des*enden'eC 4ndi*a Hue el ;ndi*e no ,uede *on'ener /alores du,li*adosC &ro0;be /alores nulos en el ;ndi*e E=*luDe del ;ndi*e los /alores nulos in*luidos en los *am,os Hue lo *om,onenC Asi#na al ;ndi*e la *a'e#or;a de *la/e ,rin*i,al, en *ada 'abla s-lo ,uede e=is'ir un @ni*o ;ndi*e Hue sea RCla/e &rin*i,alRC 5i un ;ndi*e es *la/e ,rin*i,al im,li*a Hue no ,uede *on'ener /alores nulos ni

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares du,li*adosC

74

,n el caso de MS-A!!essF se puede utili3ar CREA.E 4N+EJ para crear un pseudo Indice sobre una tabla adJunta en una !uente de datos ODBC tal como SQL-Ser(er que no ten0a todavIa un Indice. 5o necesita permiso o tener acceso a un servidor remoto para crear un pseudo IndiceF adem+s la base de datos remota no es consciente y no es a!ectada por el pseudo Indice. Se utili3a la misma sinta=is para las tablas adJuntas que para las ori0inales. ,sto es especialmente til para crear un Indice en una tabla que serIa de s#lo lectura debido a la !alta de un Indice.
CREA.E 4N+EJ (i4ndi*e 6N Em,leados <&re)i2o, .ele)ono>

4Crea un Indice llamado Mi'ndice en la tabla empleados con los campos /re!iJo y %elK!ono7.
CREA.E 3N4V3E 4N+EJ (i4ndi*e 6N Em,leados <4dEm,leado> W4.H +45A""6W N3""

4Crea un Indice en la tabla $mpleados utili3ando el campo .d$mpleadoF obli0ando que el campo .d$mpleado no conten0a valores nulos ni repetidos.7

,.11.,. Modi"icar el Dise-o de una %abla


Modi!ica el dise.o de una tabla ya e=istenteF se pueden modi!icar los campos o los Indices e=istentes. Su sinta=is esG
A".ER .AB"E 'abla cA++ cC6"3(N 'i,o de *am,oS<'amaFo>T SC6N5.RA4N. ;ndi*eT C6N5.RA4N. ;ndi*e mul'i*am,od b +R6& cC6"3(N *am,o 4 C6N5.RA4N. nombre del ;ndi*edd

,n dondeG
'abla *am,o 'i,o 'amaFo ;ndi*e ;ndi*e mul'i*am,o Es el nombre de la 'abla Hue se desea modi)i*arC Es el nombre del *am,o Hue se /a a aFadir o eliminarC Es el 'i,o de *am,o Hue se /a a aFadirC Es el 'amaFo del *am,o Hue se /a a aFadir <s-lo ,ara *am,os de 'e='o>C Es el nombre del ;ndi*e del *am,o <*uando se *rean *am,os> o el nombre del ;ndi*e de la 'abla Hue se desea eliminarC Es el nombre del ;ndi*e del *am,o mul'i*am,o <*uando se *rean *am,os> o el nombre del ;ndi*e de la 'abla Hue se desea eliminarC

Operacin (( *7L9M8 (( (-7' *7L9M8

Descripcin 5e u'ili1a ,ara aFadir un nue/o *am,o a la 'abla, indi*ando el nombre, el 'i,o de *am,o D o,*ionalmen'e el 'amaFo <,ara *am,os de 'i,o 'e='o>C 5e u'ili1a ,ara a#re#ar un ;ndi*e de mul'i*am,os o de un @ni*o *am,oC 5e u'ili1a ,ara borrar un *am,oC 5e es,e*i)i*a @ni*amen'e el nombre

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares del *am,oC (-7' 5e u'ili1a ,ara eliminar un ;ndi*eC 5e es,e*i)i*a @ni*amen'e el nombre del ;ndi*e a *on'inua*i-n de la ,alabra reser/ada C6N5.RA4N.C

75

A".ER .AB"E Em,leados A++ C6"3(N 5alario C3RRENCK

4A0re0a un campo Salario de tipo Moneda a la tabla ,mpleados.7


A".ER .AB"E Em,leados +R6& C6"3(N 5alario

4,limina el campo Salario de la tabla $mpleados.7


A".ER .AB"E &edidos A++ C6N5.RA4N. Rela*ion&edidos %6RE4GN PEK <4dEm,leado> RE%ERENCE5 Em,leados <4dEm,leado>

4A0re0a un Indice e=terno a la tabla 3edidos. ,l Indice e=terno se basa en el campo .d$mpleado y se re!iere al campo .d$mpleado de la tabla $mpleados. ,n este eJemplo no es necesario indicar el campo Junto al nombre de la tabla en la cl+usula RE%ERENCE5F pues .%7$mpleado es la clave principal de la tabla $mpleados.7
A".ER .AB"E &edidos +R6& C6N5.RA4N. Rela*ion&edidos

4,limina el Indice de la tabla 3edidos.7

,.12. 0roblemas resueltos7 6e1istros duplicados


/ara 0enerar este tipo de consultas lo m+s sencillo es utili3ar el asistente de consultas de MS-A!!essF editar la sentencia S;) de la consulta y pe0arla en nuestro c#di0o. 5o obstante este tipo de consulta se consi0ue de la si0uiente !ormaG
5E"EC. +45.4NC. "is'a de Cam,os a Aisuali1ar %R6( .abla WHERE Cam,o+eBusHueda 4n <5E"EC. Cam,o+eBusHueda %R6( .abla As ,sud-nimo GR63& BK Cam,o+eBusHueda HAA4NG Coun'<?> O 1 > 6R+ER BK Cam,o+eBusHueda

"n caso pr+cticoF si deseamos locali3ar aquellos empleados con i0ual nombre y visuali3ar su c#di0o correspondienteF la consulta serIa la si0uienteG
5E"EC. +45.4NC.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Em,leadosCNombre, Em,leadosC4dEm,leado %R6( Em,leados WHERE Em,leadosCNombre 4n < 5E"EC. Nombre %R6( Em,leados As .m, GR63& BK Nombre HAA4NG Coun'<?> O 1> 6R+ER BK Em,leadosCNombre

76

,.13. 0roblemas resueltos7 6e1istros no relacionados


,ste tipo de consulta se emplea en situaciones tales como saber que productos no se :an vendido en un determinado periodo de tiempoG
5E"EC. +45.4NC. &rodu*'osC4d&rodu*'o, &rodu*'osCNombre %R6( &rodu*'os "E%. 864N&edidos 6N &rodu*'osC4d&rodu*'o N &edidosC4d&rodu*'o WHERE <&edidosC4d&rodu*'o 4s Null> AN+ <&edidosC%e*0a Be'Ween X01Y01Y1!! X And X01Y30Y1!! X>

)a sinta=is es sencillaF se trata de reali3ar una uni#n interna entre dos tablas seleccionadas mediante un "E%. 864NF estableciendo como condici#n que el campo relacionado de la se0unda sea N3"".

,.1,. Cursores
,n al0unos SDDB es posible la abertura de cursores de datos desde el propio entorno de trabaJoF para ello se utili3anF normalmente procedimientos almacenados. )a sinta=is para de!inir un cursor es la si0uienteG
+EC"ARE nombreY*ursor %6R es,e*i)i*a*ionY*onsul'a S6R+ER BKT

/or eJemploG
+EC"ARE (i$Cursor %6R 5E"EC. num$em,, nombre, ,ues'o, salario %R6( em,leados WHERE num$de,' N Qin)orma'i*aQ

,ste comando es meramente declarativoF simplemente especi!ica las !ilas y columnas que se van a recuperar. )a consulta se eJecuta cuando se abre o se activa el cursor. )a cl+usula Z 6R+ER BK[ es opcional y especi!ica una ordenaci#n para las !ilas del cursorL si no se especi!icaF la ordenaci#n de las !ilas es de!inida el 0estor de SGBD. /ara abrir o activar un cursor se utili3a el comando 6&EN del S;)F la sinta=is en la si0uienteG
6&EN nombreY*ursor

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares S354NG lis'aY/ariablesT

77

Al abrir el cursor se eval a la consulta que aparece en su de!inici#nF utili3ando los valores actuales de cualquier par+metro re!erenciado en la consultaF para producir una colecci#n de !ilas. ,l puntero se posiciona delante de la primera !ila de datos 4re0istro actual7F esta sentencia no recupera nin0una !ila. "na ve3 abierto el cursos se utili3a la cl+usula %E.CH para recuperar las !ilas del cursorF la sinta=is es la si0uienteG
%E.CH nombreY*ursor 4N.6 lis'aY/ariables

)ista ? variables son las variables que van a contener los datos recuperados de la !ila del cursorF en la de!inici#n deben ir separadas por comas. ,n la lista de variables se deben de!inir tantas variables como columnas ten0a la !ila a recuperar. /ara cerrar un cursor se utili3a el comando C"65EF este comando :ace desaparecer el puntero sobre el re0istro actual. )a sinta=is esG
C"65E nombreY*ursor

/or ltimoF y para eliminar el cursor se utili3a el comando +R6& C3R56R. Su sinta=is es la si0uienteG
+R6& C3R56R nombreY*ursor

,Jemplo 4sobre SQL-Ser(er7G


QAbrir un *ursor D re*orrelo +EC"ARE Em,loDee$Cursor C3R56R %6R 5E"EC. "as'Name, %irs'Name %R6( Nor'0WindCdboCEm,loDees WHERE "as'Name li\e QB_Q 6&EN Em,loDee$Cursor %E.CH NEJ. %R6( Em,loDee$Cursor WH4"E ee%E.CH$5.A.35 N 0 BEG4N %E.CH NEJ. %R6( Em,loDee$Cursor EN+ C"65E Em,loDee$Cursor +EA""6CA.E Em,loDee$Cursor

QAbrir un *ursor e im,rimir su *on'enido 5E. N6C63N. 6N +EC"ARE eau$id /ar*0ar<11>, eau$)name /ar*0ar<20>, eau$lname /ar*0ar<40>, emessa#e /ar*0ar< 0>, e'i'le /ar*0ar< 0>

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares &R4N. RYYYYYYYY 3'a0 Au'0ors re,or' YYYYYYYYR +EC"ARE au'0ors$*ursor C3R56R %6R 5E"EC. au$id, au$)name, au$lname %R6( au'0ors WHERE s'a'e N R3.R 6R+ER BK au$id 6&EN au'0ors$*ursor %E.CH NEJ. %R6( au'0ors$*ursor 4N.6 eau$id, eau$)name, eau$lname WH4"E ee%E.CH$5.A.35 N 0 BEG4N &R4N. R R 5E"EC. emessa#e N RYYYYY Boo\s bD Au'0orI R G eau$)name G R R G eau$lname &R4N. emessa#e +EC"ARE 'i'les$*ursor C3R56R %6R 5E"EC. 'C'i'le %R6( 'i'leau'0or 'a, 'i'les ' WHERE 'aC'i'le$id N 'C'i'le$id AN+ 'aCau$id N au$id 6&EN 'i'les$*ursor %E.CH NEJ. %R6( 'i'les$*ursor 4N.6 e'i'le 4% ee%E.CH$5.A.35 <O 0 &R4N. R <<No Boo\sOOR WH4"E ee%E.CH$5.A.35 N 0 BEG4N 5E"EC. emessa#e N R R G e'i'le &R4N. emessa#e %E.CH NEJ. %R6( 'i'les$*ursor 4N.6 e'i'le EN+ C"65E 'i'les$*ursor +EA""6CA.E 'i'les$*ursor %E.CH NEJ. %R6( au'0ors$*ursor 4N.6 eau$id, eau$)name, eau$lname EN+ C"65E au'0ors$*ursor +EA""6CA.E au'0ors$*ursor G6

78

QRe*orrer un *ursor 35E ,ubs G6 +EC"ARE au'0ors$*ursor C3R56R %6R 5E"EC. au$lname %R6( au'0ors WHERE au$lname "4PE RB_R 6R+ER BK au$lname

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 6&EN au'0ors$*ursor %E.CH NEJ. %R6( au'0ors$*ursor WH4"E ee%E.CH$5.A.35 N 0 BEG4N %E.CH NEJ. %R6( au'0ors$*ursor EN+ C"65E au'0ors$*ursor +EA""6CA.E au'0ors$*ursor

79

QRe*orrer un *ursor #uardando los /alores en /ariables 35E ,ubs G6 +EC"ARE eau$lname /ar*0ar<40> +EC"ARE eau$)name /ar*0ar<20> +EC"ARE au'0ors$*ursor C3R56R %6R 5E"EC. au$lname, au$)name %R6( au'0ors WHERE au$lname "4PE RB_R 6R+ER BK au$lname, au$)name 6&EN au'0ors$*ursor %E.CH NEJ. %R6( au'0ors$*ursor 4N.6 eau$lname, eau$)name WH4"E ee%E.CH$5.A.35 N 0 BEG4N &R4N. RAu'0orI R G eau$)name G R R G eau$lname %E.CH NEJ. %R6( au'0ors$*ursor 4N.6 eau$lname, eau$)name EN+ C"65E au'0ors$*ursor +EA""6CA.E au'0ors$*ursor

,.1.. 26++%+J% y C4<%A)<S ;2#**%+J% S@*DServer=


,.1..1. 2#** %+J% S+A6CG
Se utili3an en campos de te=to de 0ran tama.o utili3ando unos Indices denominados cat+lo0os. ,stos cat+lo0os s#lo se pueden utili3ar con tablas que ten0an de!inidas claves primarias y almacenan todas las palabras del contenido de las tablas a e=cepci#n de los artIculosF preposicionesF etc. )os cat+lo0os no se actuali3an autom+ticamente ni se 0uardan Junto con la base de datos y cada tabla puede tener un nico cat+lo0o. /ara la utili3aci#n de estos cat+lo0os dentro de una consultaF podemos utili3ar dos mKtodosF el primero consiste en incluir los criterios dentro de una cl+usula WHERE 4C6N.A4N5 # %REE.EJ.7 y la se0unda es utili3ando una tabla temporal que contiene el ratio de acierto en la consulta 4C6N.A4N5.AB"E # %REE.EJ..AB"E7.

+l predicado C4<%A)<S
Se utili3a este predicado para buscar un te=to especI!ico en una tabla. Su !uncionamiento es similar al predicado "4PEF a di!erencia que Kste no puede reali3ar b squedas en los campos 0randes de te=to. C6N.A4N5 no di!erencia entre may sculas y min sculas.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

80

Sinta=isG
5E"EC. <Cam,osO %R6( <.ablaO WHERE C6N.A4N5<<Cam,oO,<CadenaO> 6R9AN+ C6N.A4N5<<Cam,oO,<CadenaO>

,l predicado C6N.A4N5 soporta sinta=is compleJas para buscarG "na o m+s palabras utili3ando los operadores l#0icos AN+/6R. 6amilias de palabras "na palabra o una !rase que comiencen por un determinado te=to. /alabras o !rases que estKn unas cerca de otra.

0ara buscar una palabra en un campo7


5E"EC. 'i'le$id, 'i'le, no'es %R6( 'i'les WHERE C6N.A4N5<no'es,fbusinessf>

0ara locali'ar una "rase en un campo7


5E"EC. 'i'le$id, 'i'les, no'es %R6( 'i'les WHERE C6N.A4N5<no'es,f R*ommon business a,,li*a'ionsR g>

0ara locali'ar una "rase en todos los campos 3abilitados7


5E"EC. 'i'le$id, 'i'les, no'es %R6( 'i'les WHERE C6N.A4N5<?, g R*ommon business a,,li*a'ionsR g>

"tili3ando AN+F 6R y N6.


5E"EC. 'i'le, no'es %R6( 'i'les WHERE C6N.A4N5<no'es, g R)a/ori'e re*i,esR 6R R#ourme' re*i,esR g> 5E"EC. 'i'les, no'es %R6( 'i'les WHERE C6N.A4N5<no'es, g *oo\in# AN+ N6. <R*om,u'er?R> g> 5E"EC. 'i'les, no'es %R6( 'i'les WHERE C6N.A4N5<no'es, g beer AN+ ales g> 5E"EC. 'i'les, no'es %R6( 'i'les WHERE C6N.A4N5<?, g<Ri*e s\a'in#R 6R 0o*\eD> AN+ N6. olDm,i*sf>

"tili3ando caracteres comodines


5E"EC. 'i'les, no'es %R6( 'i'les WHERE C6N.A4N5<no'es,f Ri*e?R g> 5E"EC. 'i'les, no'es %R6( 'i'les WHERE C6N.A4N5<no'es, g Rli#0' bread?R g>

!squeda de palabras o "rases indicando la importancia de las palabras7 ,sta b squeda permite indicar el peso que tendr+ cada una de las palabras o !rases que se buscan sobre el resultado de la b squedaF el peso oscila entre el valor m+s baJo 8<8 y el valor m+s alto 1<8.
5E"EC. Clien'e, Nombre, +ire**ion %R6( Clien'e WHERE C6N.A4N5 <+ire**ion, g45AB63. < RCalle?R, Aela1Hue1 WE4GH.<0C5>, 5errano<0C!>f>

4Se encontrar+n todos aquellos re0istros que en el campo direcci#n e=ista la cadena calle se0uida de cualquier valorF ordenando primero los de M alle SerranoMF lue0o los de M alle Jel?@0ue@M y despuKs el resto.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

81

!squeda de palabras cercanas7 /odemos reali3ar b squedas por dos palabras e indicar que se encuentren pr#=imas una de otra. ,l orden de las palabras no altera el resultado de la b squeda.
5E"EC. 'i'ulo, no'as %R6( libros WHERE C6N.A4N5 <no'as, Rusuario NEAR *om,u'adoraR> 5E"EC. 'i'ulo, no'as %R6( libros WHERE C6N.A4N5 <no'as, Rusuario ` *om,u'adoraR>

Se pueden indicar tres palabrasF de tal !orma que la se0unda y la primera deben estar pr#=imas al i0ual que la se0unda y la tercera.
5E"EC. 'i'ulo, no'as %R6( libros WHERE C6N.A4N5 <no'as, Rusuario ` ,rin*i,ian'e ` *om,u'adoraR>

!squedas con "rases7


CCC WHERE C6N.A4N5<+es*ri,*ion, R salsas ` Rme1*l?R R> CCC WHERE C6N.A4N5<+es*ri,*ion, R R*arne?R ` Rsalsa em,anada?R R>

+l predicado 26++%+J%
Al utili3ar este predicado se anali3an todas las palabras de las !rases y nos devuelve como resultadoF aquellos re0istros que contiene la !rase completa o al0 n !ra0mento de la misma. )a sinta=is es i0ual que el predicado C6N.A4N5.
CCC %REE.EJ.<des*ri,*ion, g REn un lu#ar de la man*0a de *uDo nombre no Huiero a*ordarmeR g>

+l predicado C4<%A)<S%A *+
,ste predicado tiene i0ual !uncionamiento y sinta=is que C6N.A4N5 a di!erencia que en este caso devuelve una tabla con dos columnasF la primera llamada Z PEK[ contiene el valor de la clave primaria de la tabla que la que buscamosF la se0unda llamada RANP devuelve un valor indicando el porcentaJe de acierto en la b squeda para cada re0istro.
5E"EC. &re#un'asC&re#un'a, &re#un'asCRes,ues'a, Resul'adoCRANP %R6( &re#un'as, C6N.A4N5.AB"E<Res,ues'a, R 5V" 5er/erR> A5 Resul'ado WHERE &re#un'asC4d&re#un'a N Resul'adoCSPEKT 6R+ER BK Resul'adoCRANP +es* 5E"EC. &re#un'asC&re#un'a, &re#un'asCRes,ues'a, Resul'adoCRANP %R6( &re#un'as 4NNER 864N C6N.A4N5.AB"E <Res,ues'a, R5V" 5er/erR> A5 Resul'ado 6N &re#un'asC4d&re#un'a N Resul'adosCPEK

+l predicado 26++%+J%%A *+
,s el equivalente a C6N.A4N5.AB"E pero reali3ando b squedas de %REE.EJ..

,.1..2. Consultas e Kndices de te9to


,l principal requisito de dise.o de los IndicesF consultas y sincroni3aci#n de te=to es la presencia de una columna de clave e=clusiva de te=to 4o clave principal de columna nica7 en todas las tablas que se re0istren para reali3ar b squedas de te=to. "n Indice de te=to reali3a el se0uimiento de las palabras si0ni!icativas que m+s se usan y d#nde se encuentran.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

82

/or eJemploF ima0ine un Indice de te=to para la tabla %e1Cools. "n Indice de te=to puede indicar que la palabra M6icrosoftM se encuentra en la palabra n mero -23 y en la palabra (92 de la columna &bstract para la !ila asociada con el 3roduct.% i0ual a $. ,sta estructura de Indices admite una b squeda e!iciente de todos los elementos que conten0an palabras indi3adas y operaciones de b squeda avan3adasF como b squedas de !rases y b squedas de pro=imidad. /ara impedir que los Indices de te=to se inunden con palabras que no ayudan en la b squedaF las palabras innecesarias 4vacIas de si0ni!icado7F como M unMF MyMF MesM o MelMF se pasan por alto. /or eJemploF especi!icar la !rase Mlos productos pedidos durante estos meses de 1erano M es lo mismo que especi!icar la !rase M productos pedidos durante meses 1eranoM. Se devuelven las !ilas que conten0an al0una de las cadenas. ,n el directorio U(ssHl7U%'da'aU5Hlser/erUCon)i# se proporcionan listas de palabras que no son relevantes en las b squedas de muc:os idiomas. ,ste directorio se creaF y los arc:ivos de palabras no relevantes se instalanF cuando se instala M*!roso.t0 SQL Ser(er1 con la !uncionalidad de b squeda de te=to. )os arc:ivos de palabras no relevantes se pueden modi!icar. /or eJemploF los administradores del sistema de las empresas de alta tecnolo0Ia podrIan a0re0ar la palabra M sistemaM a su lista de palabras no relevantes. 4Si modi!ica un arc:ivo de palabras no relevantesF debe volver a rellenar los cat+lo0os de te=to para que los cambios surtan e!ecto7. Consulte la ayuda de SQL-Ser(er para conocer los correspondientes !ic:eros. Cuando se procesa una consulta de te=toF el motor de b squeda devuelve a SQL-Ser(er los valores de clave de las !ilas que coinciden con los criterios de b squeda. 'ma0ine una tabla ienciaFicciEn en la que la columna -9mLibro es la columna de clave principalG
N@m"ibro A025 A027 C011 A10! Es*ri'or Asimo/ Asimo/ Clar\e Aerne .;'ulo "os l;mi'es de la )unda*i-n %unda*i-n e im,erio El )in de la in)an*ia "a isla mis'eriosa

Supon0a que desea usar una consulta de recuperaci#n de te=to para buscar los tItulos de los libros que incluyen la palabra FundaciEn. ,n este casoF del Indice de te=to se obtienen los valores &82, y &82H. SQL-Ser(er usaF a continuaci#nF estas claves y el resto de la in!ormaci#n de los campos para responder a la consulta.

,.1..3. Componentes de las consultas de te9to de %ransactDS@*


SQL-Ser(er proporciona estos componentes de 2r -s !t-SQL para las consultas de te=toG /redicados de 2r -s !t-SQLG C6N.A4N5 %REE.EJ.

)os predicados C6N.A4N5 y %REE.EJ. se pueden usar en cualquier condici#n de b squeda 4incluida una cl+usula WHERE7 de una instrucci#n 5E"EC.. 6unciones de conJuntos de !ilas de 2r -s !t-SQLG C6N.A4N5.AB"E %REE.EJ..AB"E

)as !unciones C6N.A4N5.AB"E y %REE.EJ..AB"E se pueden usar en la cl+usula %R6( de una instrucci#n 5E"EC..

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

83

0ropiedades de te9to de %ransactDS@*7 \stas son al0unas de las propiedades que se usan con las consultas de te=to y las !unciones que se utili3an para obtenerlasG )a propiedad 4s%ull.e='Enabled indica si una base de datos est+ :abilitada para te=to y se encuentra disponible mediante la !unci#n +a'abase&ro,er'D. )a propiedad .ableHasA*'i/e%ull'e='4nde= indica si una tabla est+ :abilitada para te=to y se encuentra disponible mediante la !unci#n 6b2e*'&ro,er'D. )a propiedad 4s%ull.e='4nde=ed indica si una columna est+ :abilitada para te=to y se encuentra disponible mediante la !unci#n Column&ro,er'D. )a propiedad .able%ull.e='PeDColumn proporciona el identi!icador de la columna de clave e=clusiva de te=to y se encuentra disponible mediante la !unci#n 6b2e*'&ro,er'D. )os procedimientos almacenados que de!inen los Indices de te=to e inician el relleno de los Indices de te=toF comoF por eJemploF s,$)ull'e='$*a'alo#F s,$)ull'e='$'able y s,$)ull'e='$*olumn. )os procedimientos almacenados que consultan los metadatos de los Indices de te=to que se :an de!inido mediante los procedimientos almacenados del sistema mencionados anteriormenteF comoF por eJemploF s,$0el,$)ull'e='$*a'alo#sF s,$0el,$)ull'e='$'ablesF s,$0el,$)ull'e='$*olumnsF y una variaci#n de Kstos que permite utili3ar cursores sobre los conJuntos de resultados devueltos.

0rocedimientos de te9to almacenados del sistema de %ransactDS@*7

,stos procedimientos almacenados se pueden usar en conJunci#n con la escritura de una consulta. /or eJemploF puede usarlos para buscar los nombres de las columnas indi3adas de te=to de una tabla y el identi!icador de una columna de clave nica de te=to antes de especi!icar una consulta.

,.1..,. 2unciones de con&unto de "ilas C4<%A)<S%A *+ y 26++%+J%%A *+


)as !unciones C6N.A4N5.AB"E y %REE.EJ..AB"E se usan para especi!icar las consultas de te=to que devuelve la clasi!icaci#n por porcentaJe de aciertos de cada !ila. ,stas !unciones son muy similares a los predicados de te=to C6N.A4N5 y %REE.EJ.F pero se utili3an de !orma di!erente. Aunque tanto los predicados de te=to como las !unciones de conJunto de !ilas de te=to se usan para las consultas de te=to y la instrucci#n 2r -s !t-SQL usada para especi!icar la condici#n de b squeda de te=to es la misma en los predicados y en las !uncionesF :ay importantes di!erencias en la !orma en la que Kstas se usanG C+0TA/0) 5 *&""T"7T devuelven ambos el valor .R3E o 6A)S,F con lo que normalmente se especi!ican en la cl+usula WHERE de una instrucci#n 5E"EC.. S#lo se pueden usar para especi!icar los criterios de selecci#nF que usa SQL-Ser(er para determinar la pertenencia al conJunto de resultados. C+0TA/0)TABL" 5 *&""T"7TTABL" devuelven ambas una tabla de ceroF una o m+s !ilasF con lo que deben especi!icarse siempre en la cl+usula %R6(.Se usan tambiKn para especi!icar los criterios de selecci#n. )a tabla devuelta tiene una columna llamada PEK que contiene valores de claves de te=to. Cada tabla de te=to re0istrada tiene una columna cuyos valores se 0aranti3an como nicos. )os valores devueltos en la columna PEK de C6N.A4N5.AB"E o %REE.EJ..AB"E son los valores nicosF procedentes de la tabla de te=to re0istradaF de las !ilas que coinciden con los criterios de selecci#n en la condici#n de b squeda de te=to.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

84

Adem+sF la tabla que producen C6N.A4N5.AB"E y %REE.EJ..AB"E tiene una columna denominada RANPF que contiene valores de * a 1***. ,stos valores se utili3an para ordenar las !ilas devueltas de acuerdo al nivel de coincidencia con los criterios de selecci#n. )as consultas que usan las !unciones C6N.A4N5.AB"E y %REE.EJ..AB"E son m+s compleJas que las que usan los predicados C6N.A4N5 y %REE.EJ. porque las !ilas que cumplen los criterios y que son devueltas por las !unciones deben ser combinadas e=plIcitamente con las !ilas de la tabla ori0inal de SQL-Ser(er.

,.1.... C4<%A)<S%A *+ ;%DS@*=


Devuelve una tabla con ceroF una o m+s !ilas para aquellas columnas de tipos de datos car+cter que conten0an palabras o !rases en !orma precisa o Mapro=imadaM 4menos precisa7F la pro=imidad de palabras medida como distancia entre ellasF o coincidencias medidas. A C6N.A4N5.AB"E se le puede :acer re!erencia en una cl+usula %R6( de una instrucci#n 5E"EC. como si !uera un nombre de tabla normal. )as consultas que u'ili1an C6N.A4N5.AB"E especi!ican consultas de te=to contenido que devuelven un valor de distancia 4RANP7 por cada !ila. )a !unci#n C6N.A4N5.AB"E utili3a las mismas condiciones de b squeda que el predicado C6N.A4N5.

Sinta9is
C6N.A4N5.AB"E <'abla, c*olumna b ?d, Q<*ondi*i-nB@sHuedaCon'enidoOQ> <*ondi*i-nB@sHuedaO IIN c b <'ErminoGenera*i-nO b <'Ermino&re)i2oO b <'Ermino&ro=imidadO b <'Ermino5im,leO b <'Ermino&esoO d b c <<*ondi*i-nB@sHuedaO> cAN+ b AN+ N6. b 6Rd <*ondi*i-nB@sHuedaO SCCCnT d <'Ermino&esoO IIN 45AB63. <cc <'ErminoGenera*i-nO> b <'Ermino&re)i2oO> b <'Ermino&ro=imidadO> b <'Ermino5im,leO> d SWE4GH. </alor&eso>T d S,CCCnT > <'ErminoGenera*i-nO IIN %6R(56% <4N%"EC.46NA", <'Ermino5im,leO S,CCCnT > <'Ermino&re)i2oO IIN c R,alabra ? R b R)rase ? R d <'Ermino&ro=imidadO IIN c<'Ermino5im,leO b <'Ermino&re)i2oOd c cNEAR b `d c<'Ermino5im,leO b <'Ermino&re)i2oOd d ShnT <'Ermino5im,leO IIN ,alabra b R )rase R

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

85

Ar1umentos
Ar"umento 'abla Descripcin Es el nombre de la 'abla Hue 0a sido re#is'rada ,ara b@sHuedas de 'e='oC 'abla ,uede ser el nombre de un ob2e'o de una base de da'os de una sola ,ar'e o el nombre de un ob2e'o de una base de da'os *on /arias ,ar'esC &ara ob'ener m:s in)orma*i-n, *onsul'e Con/en*iones de sin'a=is de 2r -s !t-SQLC Es el nombre de la *olumna Hue se /a a e=aminar, Hue reside en 'ablaC "as *olumnas de 'i,os de da'os de *adena de *ara*'eres son *olumnas /:lidas ,ara b@sHuedas de 'e='oC Es,e*i)i*a Hue 'odas las *olumnas de la 'abla Hue se 0aDan re#is'rado ,ara b@sHuedas de 'e='o se deben u'ili1ar en las *ondi*iones de b@sHuedaC Es,e*i)i*a el 'e='o Hue se /a a bus*ar en *olumnaC En la *ondi*i-n de b@sHueda no se ,uede u'ili1ar /ariablesC Es una *adena de *ara*'eres sin es,a*ios ni si#nos de ,un'ua*i-nC Es una o /arias ,alabras *on es,a*ios en're *ada una de ellasC No'aI Al#unos idiomas, *omo los orien'ales, ,ueden 'ener )rases Hue *on'en#an una o /arias ,alabras sin es,a*ios en're ellasC Es,e*i)i*a Hue las )ilas *oin*iden'es <de/uel'as ,or la *onsul'a> *oin*idan *on una lis'a de ,alabras D )rases a las Hue se asi#na o,*ionalmen'e un /alor de ,esoC Es,e*i)i*a la ,alabra *la/e <trmino3esoOC Es,e*i)i*a el /alor de ,eso *omo n@mero en're 0,0 D 1,0C Cada *om,onen'e de <trmino3esoO ,uede in*luir un 1alor3esoC 1alor3eso es una )orma de modi)i*ar *-mo /arias ,ar'es de una *onsul'a a)e*'an al /alor de dis'an*ia asi#nado a *ada )ila de la *onsul'aC El ,eso 0a*e una medida di)eren'e de la dis'an*ia de un /alor ,orHue 'odos los *om,onen'es de <trmino3esoO se u'ili1an ,ara de'erminar la *oin*iden*iaC 5e de/uel/en las )ilas Hue *on'en#an una *oin*iden*ia *on *ualHuiera de los ,ar:me'ros 45AB63., aunHue no 'en#an un ,eso asi#nadoC Es,e*i)i*a una o,era*i-n l-#i*a en're dos *ondi*iones de b@sHuedaC Cuando <condiciEn=9s0uedaO *on'iene #ru,os en're ,arEn'esis, di*0os #ru,os en're ,arEn'esis se e/al@an ,rimeroC +es,uEs de e/aluar los #ru,os en're ,arEn'esis, se a,li*an las re#las si#uien'es *uando se u'ili1an es'os o,eradores l-#i*os *on *ondi*iones de b@sHuedaI N6. se a,li*a an'es Hue AN+C N6. s-lo ,uede es'ar a *on'inua*i-n de AN+, *omo en AN+ N6.C No se a*e,'a el o,erador 6R N6.C No se ,uede es,e*i)i*ar N6. an'es del ,rimer 'Ermino <,or e2em,lo, #-C&.-SKmycolumn/ 5-#C ;frase=uscada; 5 LC AN+ se a,li*a an'es Hue 6RC "os o,eradores booleanos del mismo 'i,o <AN+, 6R> son aso*ia'i/os D, ,or 'an'o, se ,ueden a,li*ar en *ualHuier ordenC Es,e*i)i*a la *oin*iden*ia de ,alabras *uando los 'Erminos sim,les in*luDen /aria*iones de la ,alabra ori#inal Hue se bus*aC

*olumna

<*ondi*i-nB@sHuedaO ,alabra )rase

<'Ermino&esoO

45AB63. WE4GH. </alor&eso>

AN+ b AN+ N6. b 6R

<'ErminoGenera*i-nO

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Ar"umento 4N%"EC.46NA" Descripcin Es,e*i)i*a Hue se a*e,'en las *oin*iden*ias de las )ormas ,lurales D sin#ulares de los nombres D los dis'in'os 'iem,os /erbalesC 3n <trminoSimpleO dado den'ro de un <trminoBeneraciEnO no *oin*ide *on nombres D /erbos a la /e1C Es,e*i)i*a la *oin*iden*ia de ,alabras o )rases Hue *omien*en *on el 'e='o es,e*i)i*adoC EnmarHue el ,re)i2o en're *omillas dobles <RR> D un as'eris*o <?> an'es de la se#unda *omilla dobleC Coin*ide 'odo el 'e='o Hue *omien*e ,or el 'Ermino sim,le es,e*i)i*ado an'es del as'eris*oC El as'eris*o re,resen'a *ero, uno o /arios *ara*'eres <de la ,alabra o ,alabras ra;1 de la ,alabra o la )rase>C Cuando < trmino3refi2oO es una )rase, 'odas las ,alabras de di*0a )rase se *onsideran ,re)i2osC &or 'an'o, una *onsul'a Hue es,e*i)iHue el ,re)i2o Rlocal Mine NR 0a*e Hue se de/uel/an 'odas las )ilas Hue *on'en#an el 'e='o R local MineryR, Rlocally Mined and dinedR, e'*C Es,e*i)i*a la *oin*iden*ia de ,alabras o )rases Hue es'En *er*anas en're ellasC <trmino3ro4imidadO o,era de )orma similar al o,erador AN+I ambos reHuieren Hue e=is'an /arias ,alabras o )rases en la *olumna e=aminadaC Cuan'o m:s ,r-=imas es'En las ,alabras de <trmino3ro4imidadO, me2or ser: la *oin*iden*iaC 4ndi*a Hue la ,alabra o )rase del lado i1Huierdo del o,erador NEAR o ` 'iene Hue es'ar bas'an'e *er*a de la ,alabra o )rase del lado dere*0o del o,erador NEAR o `C 5e ,ueden en*adenar /arios 'Erminos de ,ro=imidad, ,or e2em,loI

86

<'Ermino&re)i2oO

<'Ermino&ro=imidadO

NEAR b `

a -$&" b -$&" c
Es'o si#ni)i*a Hue la ,alabra o )rase a 'iene Hue es'ar *er*a de la ,alabra o )rase b, Hue, a su /e1, 'iene Hue es'ar *er*a de la ,alabra o )rase *C SQL-Ser(er mide la dis'an*ia en're la ,alabra o )rase i1Huierda D dere*0aC 3n /alor de dis'an*ia ba2o <,or e2em,lo, 0> indi*a una dis'an*ia #rande en're las dosC 5i las ,alabras o )rases es,e*i)i*adas es':n le2os unas de las o'ras, sa'is)a*en la *ondi*i-n de la *onsul'a[ sin embar#o, la *onsul'a 'iene un /alor de dis'an*ia muD ba2o <0>C 5in embar#o, si <condiciEn=9s0uedaO s-lo *ons'a de uno o /arios 'Erminos de ,ro=imidad NEAR, SQL-Ser(er no de/uel/e )ilas *on un /alor de dis'an*ia de 0C <'Ermino5im,leO Es,e*i)i*a la *oin*iden*ia *on una ,alabra e=a*'a <uno o /arios *ara*'eres sin es,a*ios o si#nos de ,un'ua*i-n en idiomas *on *ara*'eres de un solo bD'e> o una )rase <una o /arias ,alabras *onse*u'i/as se,aradas ,or es,a*ios D si#nos de ,un'ua*i-n o,*ionales en idiomas *on *ara*'eres de un solo bD'e>C E2em,los de 'Erminos sim,les /:lidos son ;blue berry;, blueberry D R6icrosoft SQL Ser1erRC "as )rases 'ienen Hue ir en're *omillas dobles <RR>C "as ,alabras de una )rase 'ienen Hue a,are*er en la *olumna de la base de da'os en el mismo orden Hue el es,e*i)i*ado en <condiciEn=9s0uedaOC "a b@sHueda de *ara*'eres en la ,alabra o la )rase dis'in#ue en're maD@s*ulas D min@s*ulasC "as ,alabras de una sola s;laba <*omo un, D, la> de las *olumnas de 'e='o indi1adas no se alma*enan en los ;ndi*es de los 'e='osC 5i @ni*amen'e se u'ili1a una de es'as ,alabras en una b@sHueda, SQL-Ser(er de/uel/e un

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Ar"umento Descripcin mensa2e de error indi*ando Hue en la *onsul'a s-lo 0aD monos;labosC SQL-Ser(er in*luDe una lis'a es':ndar de ,alabras monos;labas en el dire*'orio U(ssHl7U%'da'aU5Hlser/erUCon)i#C "os si#nos de ,un'ua*i-n se omi'enC &or lo 'an'o, el /alor ;O%Ende est? mi e0uipoP; sa'is)a*e la *ondi*i-n #-C&.-SKtesting/ ;fallo del e0uipo;L El )allo de la b@sHueda ser;a #ra/eC n Es un mar*ador de ,osi*i-n Hue indi*a Hue se ,ueden es,e*i)i*ar /arias *ondi*iones D 'Erminos de b@sHuedaC

87

4bservaciones
C6N.A4N5 no se reconoce como palabra clave si el nivel de compatibilidad es menor de &*. /ara obtener m+s in!ormaci#nF consulte s,$db*m,'le/el. )a tabla devuelta por la !unci#n C6N.A4N5.AB"E tiene una columna llamada PEK que contiene valores de claves de te=to. %odas las tablas con te=tos indi3ados tienen una columna cuyos valores se 0aranti3an que son nicos y los valores devueltos en la columna PEK son los valores de claves de te=tos de las !ilas que satis!acen los criterios de selecci#n especi!icados en la condici#n de b squeda. )a propiedad .able%ull'e='PeDColumnF obtenida mediante la !unci#n 6B8EC.&R6&ER.KF proporciona la identidad de esta columna de clave nica. /ara obtener las !ilas de la tabla ori0inal que deseeF especi!ique una combinaci#n con las !ilas de C6N.A4N5.AB"E. )a !orma tIpica de la cl+usula %R6( de una instrucci#n 5E"EC. que utilice C6N.A4N5.AB"E esG
5E"EC. sele*'$lis' %R6( 'able A5 %.$.B" 4NNER 864N C6N.A4N5.AB"E<'able, *olumn, *on'ains$sear*0$*ondi'ion> A5 PEK$.B" 6N %.$.B"CuniHue$\eD$*olumn N PEK$.B"CSPEKT

)a tabla que produce C6N.A4N5.AB"E incluye una columna llamada RANP. )a columna RANP es un valor 4entre * y 1***7 que para cada !ila indica lo bien que cada una de ellas satis!ace los criterios de selecci#n. ,ste valor de distancia se suele utili3ar en las instrucciones 5E"EC. de una de estas manerasG ,n la cl+usula 6R+ER BKF para devolver las !ilas de mayor valor al principio. ,n la lista de selecci#nF para ver el valor de distancia asi0nado a cada !ila. ,n la cl+usula WHEREF para !iltrar las !ilas con valores de distancia baJos.

C6N.A4N5.AB"E no se reconoce como palabra clave si el nivel de compatibilidad es menor de &*. /ara obtener m+s in!ormaci#nF consulte s,$db*m,'le/el.

+&emplos
A. Devolver valores de distancia mediante C4<%A)<S%A *+ ,ste eJemplo busca todos los nombres de productos que conten0an las palabras ;breads;F ;fish; o ;beers;F y los distintos pesos asi0nados a cada palabra. /or cada !ila devuelta que cumpla los criterios de la b squedaF se muestra la precisi#n relativa 4valor de distancia7 de la coincidencia. Adem+sF las !ilas de mayor valor de distancia se devuelven primero.
35E Nor'0Wind G6 5E"EC. %.$.B"CCa'e#orDName, %.$.B"C+es*ri,'ion, PEK$.B"CRANP %R6( Ca'e#ories A5 %.$.B" 4NNER 864N C6N.A4N5.AB"E<Ca'e#ories, +es*ri,'ion,

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Q45AB63. <breads Wei#0' <C >, )is0 Wei#0' <C4>, beers Wei#0' <C2> >Q > A5 PEK$.B" 6N %.$.B"CCa'e#orD4+ N PEK$.B"CSPEKT 6R+ER BK PEK$.B"CRANP +E5C G6

88

. Devolver valores de distancia mayores que uno especi"icado mediante C4<%A)<S%A *+ ,ste eJemplo devuelve la descripci#n y el nombre de la cate0orIa de todas las cate0orIas de alimentos en las que la columna %escription conten0a las palabras ;sMeet; y ;sa1ory; cerca de la palabra ;sauces; o de la palabra ;candies;. %odas las !ilas cuya cate0orIa sea ;Seafood; no se devuelven. S#lo se devuelven las !ilas cuyo 0rado de coincidencia sea i0ual o superior a 2.
35E Nor'0Wind G6 5E"EC. %.$.B"C+es*ri,'ion, %.$.B"CCa'e#orDName, PEK$.B"CRANP %R6( Ca'e#ories A5 %.$.B" 4NNER 864N C6N.A4N5.AB"E <Ca'e#ories, +es*ri,'ion, Q<RsWee' and sa/orDR NEAR sau*es> 6R <RsWee' and sa/orDR NEAR *andies>Q > A5 PEK$.B" 6N %.$.B"CCa'e#orD4+ N PEK$.B"CSPEKT WHERE PEK$.B"CRANP O 2 AN+ %.$.B"CCa'e#orDName <O Q5ea)oodQ 6R+ER BK PEK$.B"CRANP +E5C

C. #tili'ar C4<%A)<S con LtMrminoSimpleN ,ste eJemplo busca todos los productos cuyo precio sea Q1,/88 que conten0an la palabra ;bottles;.
35E Nor'0Wind G6 5E"EC. &rodu*'Name %R6( &rodu*'s WHERE 3ni'&ri*e N 15C00 AN+ C6N.A4N5<Vuan'i'D&er3ni', Qbo''lesQ> G6

D. #tili'ar C4<%A)<S y una "rase en LtMrminoSimpleN ,ste eJemplo devuelve todos los productos que conten0an la !rase ;sas0uatch ale; o ;steeleye stout;.
35E Nor'0Wind G6 5E"EC. &rodu*'Name %R6( &rodu*'s WHERE C6N.A4N5<&rodu*'Name, Q R5asHua'*0 aleR 6R Rs'eeleDe s'ou'R Q> G6

+. #tili'ar C4<%A)<S con LtMrmino0re"i&oN ,ste eJemplo devuelve todos los nombres de productos que ten0an al menos una palabra que empiece por el pre!iJo ;choc; en la columna 3roduct-ame.
35E Nor'0Wind G6

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 5E"EC. &rodu*'Name %R6( &rodu*'s WHERE C6N.A4N5<&rodu*'Name, Q R*0o*?R Q> G6

89

2. #tili'ar C4<%A)<S y 46 con LtMrmino0re"i&oN ,ste eJemplo devuelve todas las descripciones de cate0orIas que conten0an las cadenas ;sea; o ;bread;.
35E Nor'0Wind 5E"EC. Ca'e#orDName %R6( Ca'e#ories WHERE C6N.A4N5<+es*ri,'ion, QRsea?R 6R Rbread?RQ> G6

G. #tili'ar C4<%A)<S con LtMrmino0ro9imidadN ,ste eJemplo devuelve todos los nombres de los productos que ten0an la palabra ;=oysenberry; cerca de la palabra ;spread;.
35E Nor'0Wind G6 5E"EC. &rodu*'Name %R6( &rodu*'s WHERE C6N.A4N5<&rodu*'Name, Qs,read NEAR BoDsenberrDQ> G6

G. #tili'ar C4<%A)<S con LtMrminoGeneraci$nN ,ste eJemplo busca todos los productos que ten0an palabras derivadas de ;dry;G ;dried;F ;drying;F etc.
35E Nor'0Wind G6 5E"EC. &rodu*'Name %R6( &rodu*'s WHERE C6N.A4N5<&rodu*'Name, Q %6R(56% <4N%"EC.46NA", drD> Q> G6

). #tili'ar C4<%A)<S con LtMrmino0esoN ,ste eJemplo busca todos los nombres de productos que conten0an las palabras ;spread;F ;sauces; o ;relishes;F y los distintos pesos asi0nados a cada palabra.
35E Nor'0Wind G6 5E"EC. Ca'e#orDName, +es*ri,'ion %R6( Ca'e#ories WHERE C6N.A4N5<+es*ri,'ion, Q45AB63. <s,read Wei#0' <C >, sau*es Wei#0' <C4>, relis0es Wei#0' <C2> >Q > G6

,.1../. 26++%+J%%A *+
Devuelve una tabla de ceroF una o varias !ilas cuyas columnas contienen datos de tipo car+cter cuyos valores coinciden con el si0ni!icadoF no literalmenteF con el te=to especi!icado en cadenaCe4to. Se puede :acer re!erencia a %REE.EJ..AB"E en las cl+usula %R6( de las instrucciones 5E"EC. como a otro nombre de tabla normal.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

90

)as consultas que utili3an %REE.EJ..AB"E especi!ican consultas de te=to que devuelven el valor de coincidencia 4RANP7 de cada !ila.

Sinta9is
%REE.EJ..AB"E <'abla, c*olumna b ?d, Q*adena.e='oQ>

Ar1umentos
'abla Es el nombre de la 'abla Hue se 0a mar*ado ,ara b@sHuedas de 'e='oC 'abla ,uede ser el nombre de un ob2e'o de una base de da'os de una sola ,ar'e o el nombre de un ob2e'o de una base de da'os *on /arias ,ar'esC Es el nombre de la *olumna de 'abla en la Hue se /a a bus*arC "as *olumnas *uDos da'os sean del 'i,o de *adena de *ara*'eres son *olumnas /:lidas ,ara bus*ar 'e='oC Es,e*i)i*a Hue 'odas las *olumnas Hue 0aDan sido re#is'radas ,ara la b@sHueda de 'e='o se 'ienen Hue u'ili1ar ,ara bus*ar la cadenaCe4to dadaC Es el 'e='o Hue se /a a bus*ar en la *olumna es,e*i)i*adaC No se ,ueden u'ili1ar /ariablesC

*olumna

*adena.e='o

4bservaciones
%REE.EJ..AB"E utili3a las mismas condiciones de b squeda que el predicado %REE.EJ.. Al i0ual que en C6N.A4N5.AB"EF la tabla devuelta tiene columnas llamadas PEK y RANPF a las que se :ace re!erencia en la consulta para obtener las !ilas apropiadas y utili3ar los valores de distancia. %REE.EJ..AB"E no se reconoce como palabra clave si el nivel de compatibilidad es menor que &*. /ara obtener m+s in!ormaci#nF consulte s,$db*m,'le/el.

+&emplos
,n este eJemplo se devuelve el nombre y la descripci#n de todas las cate0orIas relacionadas con RsMeetSF RcandySF RbreadSF RdryS y RmeatS.
35E Nor'0Wind 5E"EC. %.$.B"CCa'e#orDName, %.$.B"C+es*ri,'ion, PEK$.B"CRANP %R6( Ca'e#ories A5 %.$.B" 4NNER 864N %REE.EJ..AB"E<Ca'e#ories, +es*ri,'ion, QsWee'es' *andD bread and drD mea'Q> A5 PEK$.B" 6N %.$.B"CCa'e#orD4+ N PEK$.B"CSPEKT G6

,.1..5. #tili'ar el predicado C4<%A)<S


/uede usar el predicado C6N.A4N5 para buscar una determinada !rase en una base de datos. /or supuestoF dic:a consulta puede escribirse con el predicado "4PE. Sin embar0oF al0unas !ormas de C6N.A4N5 proporcionan mayor variedad de consultas de te=to que la que se puede obtener con "4PE.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

91

Adem+sF al contrario que cuando se utili3a el predicado "4PEF una b squeda con C6N.A4N5 no distin0ue entre may sculas y min sculas.
!ota. )as consultas de b squeda de te=to se comportan de !orma que no distin0uen entre may sculas y min sculas en aquellos idiomas 4mayoritariamente los latinos7 en los que tiene sentido distin0uir entre may sculas y min sculas. Sin embar0oF en JaponKsF :ay muc:as orto0ra!Ias !onKticas en las que el concepto de normali3aci#n orto0r+!ica implica no distin0uir las may sculas de las min sculas 4por eJemploF las letras 3 - no tienen may sculas y min sculas7. ,ste tipo de normali3aci#n orto0r+!ica no se admite.

Supon0a que desea buscar en la base de datos -orthMind la !rase ;bean curd;. Si usa el predicado C6N.A4N5F Ksta es una consulta bastante !+cil.
35E Nor'0Wind 35E Nor'0Wind G6 5E"EC. +es*ri,'ion %R6( Ca'e#ories WHERE +es*ri,'ion "4PE Q_bean *urd_Q G6

8F con C6N.A4N5G
35E Nor'0Wind G6 5E"EC. +es*ri,'ion %R6( Ca'e#ories WHERE C6N.A4N5<+es*ri,'ion, Q Rbean *urdR Q> G6

,l predicado C6N.A4N5 usa una notaci#n !uncional en la que el primer par+metro es el nombre de la columna que se est+ buscando y el se0undo par+metro es una condici#n de b squeda de te=to. )a condici#n de b squedaF en este caso ;bean curd;F puede ser bastante compleJa y est+ !ormada por uno o m+s elementosF que se describen posteriormente. ,l predicado C6N.A4N5 admite una sinta=is compleJa para buscar en las columnas basadas en caracteresG "na o m+s palabras y !rases especI!icas 4tKrminos simples7. "na palabra est+ compuesta por uno o m+s caracteres sin espacios ni si0nos de puntuaci#n. "na !rase v+lida consta de varias palabras con espacios y con o sin si0nos de puntuaci#n entre ellas. /or eJemploF croissant es una palabra y caf au lait es una !rase. )as palabras y !rases como Kstas se llaman tKrminos simples. 6orma no !le=ionada de una palabra determinada 4tKrmino de 0eneraci#n7. /or eJemploF buscar la !orma no !le=ionada de la palabra ;conducir;. Si :ay varias !ilas en la tabla que incluyen las palabras ;conducir;F ;conduce;F ;condu2o;F ;conduciendo; y ;conducido;F todas estarIan en el conJunto de resultados porque cada una de estas palabras se puede 0enerar de !orma in!le=iva a partir de la palabra ;conducir;. "na palabra o !rase en la que las palabras empie3an con un te=to determinado 4tKrmino pre!iJo7. ,n el caso de una !raseF cada palabra de la !rase se considera un pre!iJo. /or eJemploF el tKrmino ;tranN auto; coincide con ;transmisiEn autom?tica; y ;transductor de automE1il;. /alabras o !rases que usan valores ponderados 4tKrmino ponderado7. /or eJemploF podrIa desear encontrar una palabra que tuviera un peso desi0nado superior a otra palabra. Devuelve resultados de consulta clasi!icados. "na palabra o !rase que estK cerca de otra palabra o !rase 4tKrmino de pro=imidad7. /or eJemploF podrIa desear encontrar las !ilas en las que la palabra ;hielo; aparece cerca de la palabra ;hocTey; o en las que la !rase ;patina2e sobre hielo; se encuentra pr#=ima a la !rase ;hocTey sobre hielo;.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

92

"n predicado C6N.A4N5 puede combinar varios de estos tKrminos si usa AN+ y 6RF por eJemploF podrIa buscar todas las !ilas con ;leche; y ;caf al estilo de Coledo; en la misma columna de base datos :abilitada para te=to . Adem+sF los tKrminos se pueden ne0ar con el uso de AN+ N6.F por eJemploF ;pastel &-% -#C 0ueso de untar;. Cuando use C6N.A4N5F recuerde que SQL-Ser(er rec:a3a las palabras vacIas de los criterios de b squeda. )as palabras irrelevantes son aquellas como ;un;F ;y;F ;es; o ;el;F que aparecen con !recuencia pero queF en realidadF no ayudan en la b squeda de un te=to determinado.

,.1..>. #tili'ar el predicado 26++%+J%


Con un predicado %REE.EJ.F puede escribir cualquier conJunto de palabras o !rasesF e incluso una !rase completa. ,l motor de consultas de te=to e=amina este te=toF identi!ica todas las palabras y !rases de nombres si0ni!icativas y construye internamente una consulta con esos tKrminos. ,n este eJemplo se usa un predicado %REE.EJ. en una columna llamada description. %REE.EJ. <des*ri,'ion, Q R.0e %ul'on Coun'D Grand 8urD said %ridaD an in/es'i#a'ion o) A'lan'aQs re*en' ,rimarD ele*'ion ,rodu*ed no e/iden*e '0a' anD irre#ulari'ies 'oo\ ,la*eCR Q> ,l motor de b squeda identi!ica palabras y !rases nominales tales como las si0uientesG

0alabras7
Fulton/ county/ grand/ 2ury/ Friday/ in1estigation/ &tlanta/ recent/ primary/ election/ produce/ e1idence/ irregularities

2rases7
Fulton county grand 2ury/ primary election/ grand 2ury/ &tlanta5s recent primary election )as palabras y !rases de la cadena %REE.EJ. 4y sus variaciones 0eneradas de !orma in!le=iva7 se combinan internamente en una consultaF ponderada para clasi!icarla adecuadamente yF a continuaci#nF se reali3a la b squeda real.

,.1..?. 2unciones de con&unto de "ilas C4<%A)<S%A *+ y 26++%+J%%A *+


)as !unciones C6N.A4N5.AB"E y %REE.EJ..AB"E se usan para especi!icar las consultas de te=to que devuelve la clasi!icaci#n por porcentaJe de aciertos de cada !ila. ,stas !unciones son muy similares a los predicados de te=to C6N.A4N5 y %REE.EJ.F pero se utili3an de !orma di!erente.

*os predicados de te9to de las "unciones


Aunque tanto los predicados de te=to como las !unciones de conJunto de !ilas de te=to se usan para las consultas de te=to y la instrucci#n 2r -s !t-SQL usada para especi!icar la condici#n de b squeda de te=to es la misma en los predicados y en las !uncionesF :ay importantes di!erencias en la !orma en la que Kstas se usanG C6N.A4N5 y %REE.EJ. devuelven ambos el valor .R3E o %A"5EF con lo que normalmente se especi!ican en la cl+usula WHERE de una instrucci#n S,),C%. C6N.A4N5.AB"E y %REE.EJ..AB"E devuelven ambas una tabla de ceroF una o m+s !ilasF con lo que deben especi!icarse siempre en la cl+usula %R6(. C6N.A4N5 y %REE.EJ. s#lo se pueden usar para especi!icar los criterios de selecci#nF que usa SQL-Ser(er para determinar la pertenencia al conJunto de resultados. C6N.A4N5.AB"E y %REE.EJ..AB"E se usan tambiKn para especi!icar los criterios de selecci#n. )a tabla devuelta tiene una columna llamada PEK que contiene valores de claves de te=to. Cada tabla de te=to re0istrada tiene una columna cuyos valores se 0aranti3an como nicos.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

93

)os valores devueltos en la columna PEK de C6N.A4N5.AB"E o %REE.EJ..AB"E son los valores nicosF procedentes de la tabla de te=to re0istradaF de las !ilas que coinciden con los criterios de selecci#n en la condici#n de b squeda de te=to. Adem+sF la tabla que producen C6N.A4N5.AB"E y %REE.EJ..AB"E tiene una columna denominada RANPF que contiene valores de * a 1***. ,stos valores se utili3an para ordenar las !ilas devueltas de acuerdo al nivel de coincidencia con los criterios de selecci#n. )as consultas que usan las !unciones C6N.A4N5.AB"E y %REE.EJ..AB"E son m+s compleJas que las que usan los predicados C6N.A4N5 y %REE.EJ. porque las !ilas que cumplen los criterios y que son devueltas por las !unciones deben ser combinadas e=plIcitamente con las !ilas de la tabla ori0inal de SQL-Ser(er. ,ste eJemplo devuelve la descripci#n y el nombre de cate0orIa de todas las cate0orIas de alimentos en las que la columna %escription conten0a las palabras ;sMeet and sa1ory; cerca de la palabra ;sauces; o de la palabra ;candies;. %odas las !ilas cuyo nombre de cate0orIa sea ;Seafood; no se devuelven. S#lo se devuelven las !ilas cuyo valor de distancia sea i0ual o superior a 2.
35E Nor'0Wind G6 5E"EC. %.$.B"C+es*ri,'ion, %.$.B"CCa'e#orDName, PEK$.B"CRANP %R6( Ca'e#ories A5 %.$.B" 4NNER 864N C6N.A4N5.AB"E <Ca'e#ories, +es*ri,'ion, Q<RsWee' and sa/orDR NEAR sau*es> 6R <RsWee' and sa/orDR NEAR *andies>Q> A5 PEK$.B" 6N %.$.B"CCa'e#orD4+ N PEK$.B"CSPEKT WHERE PEK$.B"CRANP O 2 AN+ %.$.B"CCa'e#orDName <O Q5ea)oodQ 6R+ER BK PEK$.B"CRANP +E5C

,ste eJemplo devuelve la descripci#n y el nombre de cate0orIa de las 1* cate0orIas superiores de alimentos donde la columna %escription conten0a las palabras ;sMeet and sa1ory; cerca de la palabra ;sauces; o de la palabra ;candies;.
5E"EC. %.$.B"C+es*ri,'ion, %.$.B"CCa'e#orDName, PEK$.B"CRANP %R6( Ca'e#ories A5 %.$.B" 4NNER 864N C6N.A4N5.AB"E <Ca'e#ories, +es*ri,'ion, Q<RsWee' and sa/orDR NEAR sau*es> 6R <RsWee' and sa/orDR NEAR *andies>Q, 10> A5 PEK$.B" 6N %.$.B"CCa'e#orD4+ N PEK$.B"CSPEKT

Comparaci$n entre C4<%A)<S%A *+ y C4<%A)<S


)a !unci#n C6N.A4N5.AB"E y el predicado C6N.A4N5 utili3an condiciones de b squeda similares. Sin embar0oF en C6N.A4N5.AB"E se especi!ica la tabla en la que tendr+ lu0ar la b squeda de te=toF la columna 4o todas las columnas7 de la tabla en las que se buscar+ y la condici#n de b squeda. "n cuarto par+metroF opcionalF :ace posible que el usuario indique que se devuelva s#lo el n mero m+s alto especi!icado de coincidencias. /ara obtener m+s in!ormaci#nF consulte la secci#n )imitar los conJuntos de resultados. C6N.A4N5.AB"E devuelve una tabla que incluye una columna denominada RANP. ,sta columna RANP contiene un valor para cada !ila que indica el 0rado de coincidencia de cada !ila con los criterios de selecci#n. ,n esta consulta se especi!ica la utili3aci#n de C6N.A4N5.AB"E para devolver un valor de clasi!icaci#n por cada !ila.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 35E Nor'0Wind G6 5E"EC. PCRANP, Com,anDName, Con'a*'Name, Address %R6( Cus'omers A5 C 4NNER 864N C6N.A4N5.AB"E<Cus'omers,Address, Q45AB63. <Rdes?R, Rue WE4GH.<0C5>, Bou*0ers WE4GH.<0C!>>Q> A5 P 6N CCCus'omer4+ N PCSPEKT

94

Comparaci$n entre 26++%+J%%A *+ y 26++%+J%


,n la consulta si0uiente se amplIa una consulta %REE.EJ..AB"E para que devuelva primero las !ilas con clasi!icaci#n superior y a0re0ue la clasi!icaci#n de cada !ila a la lista de selecci#n. /ara especi!icar la consultaF debe saber que ategory.% es la columna de clave nica de la tabla ategories.
35E Nor'0Wind G6 5E"EC. PEK$.B"CRANP, %.$.B"C+es*ri,'ion %R6( Ca'e#ories A5 %.$.B" 4NNER 864N %REE.EJ..AB"E<Ca'e#ories, +es*ri,'ion, QHoW *an 4 ma\e mD oWn beers and ales]Q> A5 PEK$.B" 6N %.$.B"CCa'e#orD4+ N PEK$.B"CSPEKT 6R+ER BK PEK$.B"CRANP +E5C G6

)a nica di!erencia en l sinta=is de %REE.EJ..AB"E y %REE.EJ. es la inserci#n del nombre de la tabla como el primer par+metro. ,sto es una ampliaci#n de la misma consulta que s#lo devuelve las !ilas con un valor de clasi!icaci#n de 1* o superiorG
35E Nor'0Wind G6 5E"EC. PEK$.B"CRANP, %.$.B"C+es*ri,'ion %R6( Ca'e#ories %.$.B" 4NNER 864N %REE.EJ..AB"E <Ca'e#ories, +es*ri,'ion, QHoW *an 4 ma\e mD oWn beers and ales]Q> A5 PEK$.B" 6N %.$.B"CCa'e#orD4+ N PEK$.B"CSPEKT WHERE PEK$.B"CRANP ON 10 6R+ER BK PEK$.B"CRANP +E5C G6

,.1..1I. )denti"icaci$n del nombre de la columna de la clave !nica


)as consultas que usan !unciones que toman valores de conJuntos de !ilas son complicadas porque es necesario saber el nombre de la columna de clave e=clusiva. Cada tabla :abilitada para te=to tiene la propiedad .able%ull'e='PeDColumn que contiene el n mero de 'D de la columna que :a sido seleccionada para tener !ilas nicas en la tabla. ,n este eJemplo se muestra c#mo se puede obtener el nombre de la columna de clave y usarse en la pro0ramaci#n.
35E Nor'0Wind G6 +EC"ARE e\eD$*olumn sDsname 5E. e\eD$*olumn N Col$Name<6b2e*'$4d<QCa'e#oriesQ>,

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 6b2e*'&ro,er'D<6b2e*'$id<QCa'e#oriesQ>, Q.able%ull'e='PeDColumnQ> > ,rin' e\eD$*olumn EJEC3.E <Q5E"EC. +es*ri,'ion, PEK$.B"CRANP %R6( Ca'e#ories %.$.B" 4NNER 864N %ree'e='.able <Ca'e#ories, +es*ri,'ion, QQHoW *an 4 ma\e mD oWn beers and ales]QQ> A5 PEK$.B" 6N %.$.B"CQ G e\eD$*olumn GQ N PEK$.B"CSPEKT WHERE PEK$.B"CRANP ON 10 6R+ER BK PEK$.B"CRANP +E5C Q> G6

95

/uede evitar la compleJidad de la utili3aci#n de C6N.A4N5.AB"E y %REE.EJ..AB"E si escribe procedimientos almacenados que acepten unos cuantos supuestos acerca de la consulta yF a continuaci#nF creen y eJecuten la consulta adecuada. A continuaci#n se muestra un procedimiento simpli!icado que emite una consulta %REE.EJ..AB"E. )a tabla muestra los par+metros del procedimiento 4todas las entradas7.
Parmetros eaddi'ional$,redi*a'es e)ree'e='$*olumn e)ree'e='$sear*0 e)rom$'able eorder$bD$lis' esele*'$lis' Opcional 6,*ional 54 54 54 6,*ional 54 PEK$.B"CRANP ,uede ser una de las *olumnas es,e*i)i*adasC PEK$.B"CRANP ,uede ser una de las *olumnas es,e*i)i*adasC Condi*i-n de B@sHueda Descripcin 5i 0aD al#@n ,redi*ado adi*ional, Es'e se a#re#a *on AN+ de'r:s del ,redi*ado %REE.EJ.C PEK$.B"CRANP se ,uede usar en e=,resionesC

,l c#di0o del procedimiento es el si0uienteG


CREA.E &R6CE+3RE )ree'e='$ran\$,ro* esele*'$lis' n/ar*0ar<1000>, e)rom$'able n/ar*0ar<517>, e)ree'e='$*olumn sDsname, e)ree'e='$sear*0 n/ar*0ar<1000>, eaddi'ional$,redi*a'es n/ar*0ar<500> N QQ, eorder$bD$lis' n/ar*0ar<500> N QQ A5 BEG4N +EC"ARE e'able$id in'e#er, euniHue$\eD$*ol$name sDsname, eadd$,red$/ar n/ar*0ar<510>, eorder$bD$/ar n/ar*0ar<510> YY Ge' '0e name o) '0e uniHue \eD *olumn )or '0is 'ableC 5E. e'able$id N 6b2e*'$4d<e)rom$'able> 5E. euniHue$\eD$*ol$name N

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares Col$Name< e'able$id, 6b2e*'&ro,er'D<e'able$id, Q.able%ull.e='PeDColumnQ> > YY 4) '0ere is an addi'ional$,redi*a'e, ,u' AN+<> around i'C 4% eaddi'ional$,redi*a'es <O QQ 5E. eadd$,red$/ar N QAN+ <Q G eaddi'ional$,redi*a'es G Q>Q E"5E 5E. eadd$,red$/ar N QQ YY 4nser' 6R+ER BK, i) neededC 4% eorder$bD$lis' <O QQ 5E. eorder$bD$/ar N Q6R+ER BK Q G eorder$bD$/ar E"5E 5E. eorder$bD$/ar N QQ YY E=e*u'e '0e 5E"EC. s'a'emen'C EJEC3.E < Q5E"EC. Q G esele*'$lis' G Q %R6( Q G e)rom$'able G Q A5 %.$.B", %ree'e='.able<Q G e)rom$'able G Q,Q G e)ree'e='$*olumn G Q,QQQ G e)ree'e='$sear*0 G QQQ> A5 PEK$.B" Q G QWHERE %.$.B"CQ G euniHue$\eD$*ol$name G Q N PEK$.B"CSPEKT Q G eadd$,red$/ar GQQ G eorder$bD$/ar > EN+

96

,ste procedimiento se puede usar para emitir la consultaG


35E Nor'0Wind G6 EJEC3.E )ree'e='$ran\$,ro* Q+es*ri,'ion, PEK$.B"CRANPQ, YY 5ele*' lis' QCa'e#oriesQ, YY %rom Q+es*ri,'ionQ, YY Column QHoW *an 4 ma\e mD oWn beers and ales]Q, YY %ree'e=' sear*0 QPEK$.B"CRANP ON 10Q, YY Addi'ional ,redi*a'e QPEK$.B"CRANP +E5CQ YY 6rder bD G6

*imitar los con&untos de resultados


,n muc:as consultas de te=toF el n mero de elementos que coinciden con la condici#n de b squeda es muy 0rande. /ara evitar que las consultas devuelvan demasiadas coincidenciasF utilice el ar0umento opcionalF 'o,$n$bD$ran\F en C6N.A4N5.AB"E y %REE.EJ..AB"E para especi!icar el n mero de coincidenciasF ordenadasF que desea que se devuelvan.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

97

Con esta in!ormaci#nF SQL-Ser(er ordena las coincidencias y devuelve s#lo :asta completar el n mero especi!icado. ,sta opci#n puede aumentar si0ni!icativamente el rendimiento. /or eJemploF una consulta que por lo 0eneral devolverIa 1**.*** !ilas de una tabla de 1 mill#n se procesar+ de !orma m+s r+pida si s#lo se piden las 1** primeras !ilas. Si s#lo se desea que se devuelvan las 3 coincidencias mayores del eJemplo anteriorF mediante C6N.A4N5.AB"EF la consulta tendr+ esta !ormaG
35E Nor'0Wind G6 5E"EC. PCRANP, Com,anDName, Con'a*'Name, Address %R6( Cus'omers A5 C 4NNER 864N C6N.A4N5.AB"E<Cus'omers, Address, Q45AB63. <Rdes?R, Rue WE4GH.<0C5>, Bou*0ers WE4GH.<0C!>>Q, 3> A5 P 6N CCCus'omer4+ N PCSPEKT

,.1..11. uscar palabras o "rases con valores ponderados ;tMrmino ponderado=


/uede buscar palabras o !rases y especi!icar un valor ponderado. ,l pesoF un n mero entre *F* y 1F*F indica el 0rado de importancia de cada palabra o !rase en un conJunto de palabras y !rases. ,l valor *F* es el peso m+s peque.o disponibleF y el valor 1F* es el peso m+s 0rande. /or eJemploF en esta consulta se buscan todas las direcciones de los clientesF con valores ponderadosF en los que cualquier te=to que comience con la cadena MdesM estK cerca de 1ue o Bouc:ers. SQL-Ser(er da una clasi!icaci#n superior a aquellas !ilas que contienen la mayor cantidad de palabras especi!icadas. /or tantoF SQL-Ser(er da una clasi!icaci#n superior a una !ila que contiene des 1ue Bouc:ers que a una !ila que contiene des 1ue.
35E Nor'0Wind G6 5E"EC. Com,anDName, Con'a*'Name, Address %R6( Cus'omers WHERE C6N.A4N5<Address, Q45AB63. <R?des?R, Rue WE4GH.<0C5>, Bou*0ers WE4GH.<0C!> >Q> G6

"n tKrmino ponderado se puede usar en conJunci#n con cualquiera de los otros cuatro tipos de tKrminos.

,.1..12. Combinar predicados de te9to con otros predicados de %ransactDS@*


)os predicados C6N.A4N5 y %REE.EJ. se pueden combinar con el resto de predicados de 2r -s !t-SQLF comoF por eJemploF "4PE y BE.WEENL tambiKn se pueden usar en una subconsulta. ,n este eJemplo se buscan descripciones cuya cate0orIa no sea ;Seafood; y que conten0an la palabra ;sauces; y la palabra ;seasonings;.
35E Nor'0Wind G6 5E"EC. +es*ri,'ion %R6( Ca'e#ories WHERE Ca'e#orDName <O Q5ea)oodQ AN+ C6N.A4N5<+es*ri,'ion, Q sau*es AN+ seasonin#s Q> G6

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

98

,n la si0uiente consulta se usa C6N.A4N5 dentro de una subconsulta. Con la base de datos pubsF la consulta obtiene el valor del tItulo de todos los libros de la tabla titles del publicador que se encuentra pr#=imo al platillo volante de 6oonbeamF #ntario. 4,sta in!ormaci#n acerca del publicador se encuentra en la columna pr7info de la tabla pub7info y s#lo :ay uno de estos publicadores.7
35E ,ubs G6 YY Add some in'eres'in# roWs 'o some 'ablesC 4N5ER. 4N.6 ,ublis0ers AA"3E5 <Q!!70Q, Q&enumbra &ressQ, Q(oonbeamQ, Q6NQ, QCanadaQ> 4N5ER. 4N.6 ,ub$in)o <,ub$id, ,r$in)o> AA"3E5 <Q!!70Q, Q&enumbra ,ress is lo*a'ed in '0e small /illa#e o) (oonbeamC (oonbeam is Well \noWn as '0e )lDin# sau*er *a,i'al o) 6n'arioC Kou Will o)'en )ind one or more )lDin# sau*ers do*\ed *lose 'o '0e 'ouris' in)orma'ion *en're on '0e nor'0 side o) 0i#0WaD 11CQ> 4N5ER. 4N.6 'i'les AA"3E5 <Q%&0001Q, QGames o) '0e WorldQ, Q*ra)'sQ, Q!!70Q, !C 5, 0C00, 20, 213, QA *ra)'s boo\^ A s,or's boo\^ A 0is'orD boo\^ .0e )un and e=*i'emen' o) a World a' ,laD Y beau'i)ullD des*ribed and la/is0lD illus'ra'edQ, Q1!7790!915Q> G6 YY Gi/en '0e )ullY'e=' *a'alo# )or '0ese 'ables is ,ubs$)'$*'l#, YY re,o,ula'e i' so neW roWs are in*luded in '0e )ullY'e=' inde=esC s,$)ull'e='$*a'alo# Q,ubs$)'$*'l#Q, Qs'ar'$)ullQ WA4.%6R +E"AK Q00I00I30Q YY Wai' 30 se*onds )or ,o,ula'ionC G6 YY 4ssue '0e HuerDC 5E"EC. .C'i'le, &C,ub$name %R6( ,ublis0ers &, 'i'les . WHERE &C,ub$id N .C,ub$id AN+ &C,ub$id N <5E"EC. ,ub$id %R6( ,ub$in)o WHERE C6N.A4N5 <,r$in)o, Q moonbeam AN+ on'ario AN+ R)lDin# sau*erR Q>> G6

,.1..13. #tili'ar predicados de te9to para consultar columnas de tipo )MAG+


)os predicados C6N.A4N5 y %REE.EJ. pueden utili3arse para buscar columnas 4(AGE indi3adas. ,n una sola columna 4(AGE es posible almacenar muc:os tipos de documentos. SQL-Ser(er admite ciertos tipos de documento y proporciona !iltros para los mismos. ,sta versi#n proporciona !iltros para documentos de MS-O..*!eF arc:ivos de te=to y arc:ivos C%M). Cuando una columna 4(AGE participa en un Indice de te=toF el servicio de te=to comprueba las e=tensiones de los documentos de la columna 4(AGE y aplica el !iltro correspondienteF para interpretar los datos binarios y e=traer la in!ormaci#n de te=to necesaria para la indi3aci#n y la consulta. AsIF cuando con!i0ure la indi3aci#n de te=to sobre una columna 4(AGE de una tablaF deber+ crear una columna separada para que conten0a la in!ormaci#n relativa al documento. ,sta columna de tipo debe ser de cualquier tipo de datos basado en caracteres y contendr+ la e=tensi#n del arc:ivoF como por eJemplo +6C para los documentos de MS-4ord. Si el tipo de columna es N3""F el servicio de te=to asumir+ que el documento es un arc:ivo de te=to.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

99

,n el Asistente para indi3aci#n de te=toF si selecciona una columna 4(AGE para la indi3aci#nF deber+ especi!icar tambiKn una Columna de enlace para que conten0a el tipo de documento. ,l procedimiento almacenado s,$)ull'e='$*olumn acepta tambiKn un ar0umento para la columna que contendr+ los tipos de documento. ,l procedimiento almacenado s,$0el,$)ull'e='$*olumns devuelve tambiKn el nombre de columna y el 'd. de columna de la columna de tipo de documento.

"na ve3 indi3adaF podr+ consultar la columna 4(AGE como lo :arIa con cualquier otra columna de la tablaF mediante los predicados C6N.A4N5 y %REE.EJ..

,.1/. MSDAccess7 ases e9ternas


/ara el acceso a bases de datos e=ternas se utili3a la cl+usula 4N. Se puede acceder a bases de datos dB seF 5 r do6 o Btr*e(e. ,sta cl+usula s#lo permite la cone=i#n de una base de datos e=terna a la ve3. "na base de datos e=terna es una base de datos que no sea la activa. Aunque para meJorar los rendimientos es meJor adJuntarlas a la base de datos actual y trabaJar con ellas. /ara especi!icar una base de datos que no pertenece a A!!ess B s*!F se a0re0a un punto y coma 4L7 al nombre y se encierra entre comillas simples. %ambiKn puede utili3ar la palabra reservada DA%ABAS, para especi!icar la base de datos e=terna. /or eJemploF las lIneas si0uientes especi!ican la misma tablaG
%R6( .abla 4N QSdBA5E 4A[ +A.ABA5ENCI U+BA5EU+A.65UAEN.A5[TQ[ %R6( .abla 4N QCI U+BA5EU+A.65UAEN.A5Q QdBA5E 4A[Q

Acceso a una base de datos e9terna de MSDAccess7


5E"EC. 4dClien'e %R6( Clien'es 4N QCIU(45+A.65C(+BQ WHERE 4+Clien'e "i\e QA?Q

4,n donde (45+A.65C(+B es el nombre de una base de datos de MS-A!!ess que contiene la tabla Clientes.7 Acceso a una base de datos e9terna de d AS+ ))) o )E7
5E"EC. 4dClien'e %R6( Clien'es 4N QCIU+BA5EU+A.65UAEN.A5Q QdBA5E 4AQ[ WHERE 4+Clien'e "i\e QA?Q

4/ara recuperar datos de una tabla de dBASE III7 :ay que utili3ar QdBA5E 444G[Q en lu0ar de QdBA5E 4A[Q.7 Acceso a una base de datos de 0arado9 3.9 o ,.97
5E"EC. 4dClien'e %R6( Clien'es 4N QCIU&ARA+6JU+A.65UAEN.A5Q Q&arado= 4C=[Q

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares WHERE 4+Clien'e "i\e QA?Q

100

4/ara recuperar datos de una tabla de 5 r do6 (ers*8- '.6F :ay que sustituir Q&arado= 4C=[Q por Q&arado= 3C=[Q.7 Acceso a una base de datos de trieve7
5E"EC. 4dClien'e %R6( Clien'es 4N QCIUB.R4EAEU+A.65UAEN.A5U%4"EC++%Q QB'rie/e[Q WHERE 4+Clien'e "i\e QA?Q

4CIUB.R4EAEU+A.65UAEN.A5U%4"EC++% es la ruta de acceso y nombre de arc:ivo del arc:ivo de de!inici#n de datos de Btr*e(e.7

,.15. MSDAccess7 0ar(metros


)as consultas con par+metros son aquellas cuyas condiciones de b squeda se de!inen mediante par+metros. Si se eJecutan directamente desde la base de datos donde :an sido de!inidas aparecer+ un mensaJe solicitando el valor de cada uno de los par+metros. Si deseamos eJecutarlas desde una aplicaci#n :ay que asi0nar primero el valor de los par+metros y despuKs eJecutarlas. Su sinta=is es la si0uienteG
&ARA(E.ER5 nombre1 'i,o1, nombre2 'i,o2, CCC , nombreN 'i,oN Consul'a

,n dondeG
nombre 'i,o *onsul'a Es el nombre del ,ar:me'ro Es el 'i,o de da'os del ,ar:me'ro 3na *onsul'a 5V"

Se pueden utili3ar nombres pero no tipos de datos en una cl+usula WHERE o HAA4NG.
&ARA(E.ER5 &re*io(inimo Curren*D, %e*0a4ni*io +a'e.ime[ 5E"EC. 4d&edido, Can'idad %R6( &edidos WHERE &re*io N &re*io(inimo AN+ %e*0a&edido N %e*0a4ni*io

,.1>. MSDAccess7 4mitir permisos


,n entornos de bases de datos con permisos de se0uridad para 0rupos de trabaJo se puede utili3ar la cl+usula W4.H 6WNERACCE55 6&.46N para que el usuario actual adquiera los derec:os de propietario a la :ora de eJecutar la consulta. Su sinta=is esG
ins'ru**i-n sHl W4.H 6WNERACCE55 6&.46N

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares 5E"EC. A,ellido, Nombre, 5alario %R6( Em,leados 6R+ER BK A,ellido W4.H 6WNERACCE55 6&.46N

101

,sta opci#n requiere que estK declarado el acceso al !ic:ero de 0rupo de trabaJo 40eneralmente sDs'emCmda # sDs'em CmdW7 de la base de datos actual.

,.1?. MSDAccess7 Cl(usula 064C+D#6+


,sta cl+usula es poco usual y se utili3a para crear una consulta a la misma ve3 que se eJecutaF opcionalmente de!ine los par+metros de la misma. Su sinta=is es la si0uienteG
&R6CE+3RE NombreConsul'a &ar:me'ro1 'i,o1, CCCC , &ar:me'roN 'i,on Consul'a5V"

,n dondeG
NombreConsul'a &ar:me'ro 'i,o Consul'a5V" Es el nombre *on se #uardar: la *onsul'a en la base de da'osC Es el nombre de ,ar:me'ro o de los ,ar:me'ros de di*0a *onsul'aC Es el 'i,o de da'os del ,ar:me'ro Es la *onsul'a Hue se desea #rabar D e2e*u'arC

&R6CE+3RE "is'aCa'e#orias[ 5E"EC. +45.4NC.R6W NombreCa'e#oria, 4dCa'e#oria %R6( Ca'e#orias 6R+ER BK NombreCa'e#oria

4Asi0na el nombre )ista]de]cate0orIas a la consulta y la eJecuta.7


&R6CE+3RE Resumen %e*0a4ni*io +A.E.4(E, %e*0a%inal +A.E.4(E[ 5E"EC. +45.4NC.R6W %e*0aEn/io, 4d&edido, 4m,or'e&edido, %orma'<%e*0aEn/io, RDDDDR> A5 AFo %R6( &edidos WHERE %e*0aEn/io Be'Ween %e*0a4ni*io And %e*0a%inal

4Asi0na el nombre 1esumen a la consulta e incluye dos par+metros.7

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

102

,.2I. 4ptimi'ar Sentencias


)ntroducci$n
,l len0uaJe S;) es no procedimentalF es decirF en las sentencias se indica que queremos conse0uir y no como lo tiene que :acer el interprete para conse0uirlo. ,sto es pura teorIaF pues en la pr+ctica a todos los 0estores de S;) :ay que especi!icar sus propios truquitos para optimi3ar el rendimiento. /or tantoF muc:as veces no basta con especi!icar una sentencia S;) correctaF sino que adem+sF :ay que indicarle como tiene que :acerlo si queremos que el tiempo de respuesta sea el mInimo. ,n este apartado veremos como meJorar el tiempo de respuesta de nuestro interprete ante unas determinadas situacionesG

Dise-o de las tablas


5ormali3a las tablasF al menos :asta la tercera !orma normalF para ase0urar que no :ay duplicidad de datos y se aprovec:a al m+=imo el almacenamiento en las tablas. Si :ay que desnormali3ar al0una tabla piensa en la ocupaci#n y en el rendimiento antes de proceder. )os primeros campos de cada tabla deben ser aquellos campos requeridos y dentro de los requeridos primero se de!inen los de lon0itud !iJa y despuKs los de lon0itud variable. AJusta al m+=imo el tama.o de los campos para no desperdiciar espacio. ,s muy :abitual deJar un campo de te=to para observaciones en las tablas. Si este campo se va a utili3ar con poca !recuencia o si se :a de!inido con 0ran tama.oF por si acasoF es meJor crear una nueva tabla que conten0a la clave primaria de la primera y el campo para observaciones.

Gesti$n y elecci$n de los Kndices


)os Indices son campos ele0idos arbitrariamente por el constructor de la base de datos que permiten la b squeda a partir de dic:o campo a una velocidad notablemente superior. Sin embar0oF esta ventaJa se ve contrarrestada por el :ec:o de ocupar muc:a m+s memoria 4el doble m+s o menos7 y de requerir para su inserci#n y actuali3aci#n un tiempo de proceso superior. ,videntementeF no podemos inde=ar todos los campos de una tabla e=tensa ya que doblamos el tama.o de la base de datos. '0ualmenteF tampoco sirve de muc:o el inde=ar todos los campos en una tabla peque.a ya que las selecciones pueden e!ectuarse r+pidamente de todos modos. "n caso en el que los Indices pueden resultar muy tiles es cuando reali3amos peticiones simult+neas sobre varias tablas. ,n este casoF el proceso de selecci#n puede acelerarse sensiblemente si inde=amos los campos que sirven de ne=o entre las dos tablas. )os Indices pueden resultar contraproducentes si los introducimos sobre campos triviales a partir de los cuales no se reali3a nin0 n tipo de petici#n ya queF adem+s del problema de memoria ya mencionadoF estamos ralenti3ando otras tareas de la base de datos como son la edici#nF inserci#n y borrado. ,s por ello que vale la pena pens+rselo dos veces antes de inde=ar un campo que no sirve de criterio para b squedas o que es usado con muy poca !recuencia por ra3ones de mantenimiento.

Campos a Seleccionar
,n la medida de lo posible :ay que evitar que las sentencias SQL estKn embebidas dentro del c#di0o de la aplicaci#n. ,s muc:o m+s e!ica3 usar vistas o procedimientos almacenados por que el 0estor los 0uarda compilados. Si se trata de una sentencia embebida el 0estor debe compilarla antes de eJecutarla. Seleccionar e=clusivamente aquellos que se necesiten

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

103

5o utili3ar nunca 5E"EC. ? por que el 0estor debe leer primero la estructura de la tabla antes de eJecutar la sentencia Si utili3as varias tablas en la consulta especi!ica siempre a que tabla pertenece cada campoF le a:orras al 0estor el tiempo de locali3ar a que tabla pertenece el campo. ,n lu0ar de 5E"EC. Nombre, %a*'ura %R6( Clien'es, %a*'ura*ion WHERE 4dClien'e N 4dClien'e%a*'uradoF usaG 5E"EC. Clien'esCNombre, %a*'ura*ionC%a*'ura WHERE Clien'esC4dClien'e N %a*'ura*ionC4dClien'e%a*'urado.

Campos de 2iltro
Se procurar+ ele0ir en la cl+usula WHERE aquellos campos que !ormen parte de la clave del !ic:ero por el cual interro0amos. Adem+s se especi!icar+n en el mismo orden en el que estKn de!inidos en la clave. 'nterro0ar siempre por campos que sean clave. Si deseamos interro0ar por campos pertenecientes a Indices compuestos es meJor utili3ar todos los campos de todos los Indices. Supon0amos que tenemos un Indice !ormado por el campo -#6="$ y el campo &3$LL.%# y otro Indice !ormado por el campo $%&%. )a sentencia WHERE N6(BRENQ8uanQ AN+ A&E""4+6 "i\e Q_Q AN+ E+A+ N 20 serIa m+s optima que WHERE N6(BRE N Q8uanQ AN+ E+A+ N 20 por que el 0estorF en este se0undo casoF no puede usar el primer Indice y ambas sentencias son equivalentes por que la condici#n A&E""4+6 "i\e Q_Q devolverIa todos los re0istros.

4rden de las %ablas


Cuando se utili3an varias tablas dentro de la consulta :ay que tener cuidado con el orden empleado en la clausula %R6(. Si deseamos saber cuantos alumnos se matricularon en el a.o 1(($ y escribimosG %R6( Alumnos, (a'ri*ulas WHERE AlumnoC4dAlumno N (a'ri*ulasC4dAlumno AN+ (a'ri*ulasCAFo N 1!!6 el 0estor recorrer+ todos los alumnos para buscar sus matriculas y devolver las correspondientes. Si escribimos %R6( (a'ri*ulas, Alumnos WHERE (a'ri*ulasCAFo N 1!!6 AN+ (a'ri*ulasC4dAlumno N AlumnosC4dAlumnosF el 0estor !iltra las matrIculas y despuKs selecciona los alumnosF de esta !orma tiene que recorrer menos re0istros.

*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares

104

.. A0O<D)C+S
..1. *as 12 re1las de Codd que determinan la "idelidad de un sistema relacional al modelo relacional
,n la dKcada de los 9* comen3aron a aparecer numerosos SGBD que se anunciaban como MrelacionalesM. Sin embar0o estos sistemas carecIan de muc:as caracterIsticas que se consideran importantes en un sistema relacionalF perdiendo muc:as ventaJas del modelo relacional. Como eJemplo e=tremo de esto Msistemas relacionalesM eran simplemente sistemas que utili3aban tablas para almacenar la in!ormaci#nF no disponiendo de elementos como claves primariasF etc. ,n 1(9- Codd public# 12 re0las que un verdadero sistema relacional deberIa de cumplir. ,n la pr+ctica al0unas de ellas son di!Iciles de reali3ar. "n sistema podr+ considerarse Mm+s relacionalM cuanto m+s si0a estas re0las.

6e1la I
/ara que un sistema se denomine sistema de 0esti#n de bases de datos relacionalesF este sistema debe usar 4e=clusivamente7 sus capacidades relacionales para 0estionar la base de datos.

6e1la 17 6e1la de la in"ormaci$n


%oda la in!ormaci#n en una base de datos relacional se representa e=plIcitamente en el nivel l#0ico e=actamente de una maneraG con valores en tablas. /or tanto los metadatos 4diccionarioF cat+lo0o7 se representan e=actamente i0ual que los datos de usuario. E puede usarse el mismo len0uaJe 4eJ. S;)7 para acceder a los datos y a los metadatos 4re0la -7 "n valor posible es el valor nuloF con sus dos interpretacionesG @alor desconocido 4eJ. direcci#n desconocida7 @alor no aplicable 4eJ. empleado soltero no tiene esposa7.

6e1la 27 6e1la del acceso 1aranti'ado


/ara todos y cada uno de los datos 4valores at#micos7 de una BDR se 0aranti3a que son accesibles a nivel l#0ico utili3ando una combinaci#n de nombre de tablaF valor de clave primaria y nombre de columna.

Cualquier dato almacenado en una BD1 tiene que poder ser direccionado unIvocamente. /ara ello :ay que indicar en quK tabla est+F cu+l es la columna y cu+l es la !ila 4mediante la clave primaria7. /or tanto se necesita el concepto de clave primariaF que no es soportado en muc:as implementaciones. ,n estos casosF para lo0rar un e!ecto similar se puede :acer lo si0uienteG

Cacer que los atributos clave primaria no puedan ser nulos 458% 5"))7. Crear un Indice nico sobre la clave primaria. 5o eliminar nunca el Indice.

A0O<D)C+S SQL y bases de datos relacionales Claudio Casares

105

6e1la 37 %ratamiento sistem(tico de valores nulos


)os valores nulos 4que son distintos de la cadena vacIaF blancosF *F ...7 se soportan en los SGBD totalmente relacionales para representar in!ormaci#n desconocida o no aplicable de manera sistem+ticaF independientemente del tipo de datos.

Se reconoce la necesidad de la e=istencia de valores nulosF para un tratamiento sistem+tico de los mismos. Cay problemas para soportar los valores nulos en las operaciones relacionalesF especialmente en las operaciones l#0icas. o Lgica trivaluada. ,s una posible soluci#n. ,=isten tres 4no dos7 valores de verdadG 0erdaderoF 1also y "esconocido 4null7. Se crean tablas de verdad para las operaciones l#0icasG ? null K null N null Y /erdadero K null N null Y )also K null N )also Y /erdadero 6 null N /erdadero ? etc. "n inconveniente es que de cara al usuario el maneJo de los len0uaJes relacionales se complica pues es m+s di!Icil de entender.
id 1 2 3 4 5 6 7 ! a null null null )alse )alse )alse 'rue 'rue 'rue b null )alse 'rue null )alse 'rue null )alse 'rue a an$ b null )alse null )alse )alse )alse null )alse 'rue a or b null null 'rue null )alse 'rue 'rue 'rue 'rue a 8or b null null null null )alse 'rue null 'rue )alse not a null null null 'rue 'rue 'rue )alse )alse )alse not b null 'rue )alse null 'rue )alse null 'rue )alse

6e1la ,7 Cat(lo1o din(mico en lKnea basado en el modelo relacional


)a descripci#n de la base de datos se representa a nivel l#0ico de la misma manera que los datos normalesF de modo que los usuarios autori3ados pueden aplicar el mismo len0uaJe relacional a su consultaF i0ual que lo aplican a los datos normales.

,s una consecuencia de la re0la 1 que se destaca por su importancia. )os metadatos se almacenan usando el modelo relacionalF con todas las consecuencias.

6e1la .7 6e1la del sublen1ua&e de datos completo


"n sistema relacional debe soportar varios len0uaJes y varios modos de uso de terminal 4eJG rellenar !ormulariosF etc.7. Sin embar0oF debe e=istir al menos un len0uaJe cuyas sentencias sean e=presablesF mediante una sinta=is bien de!inidaF como cadenas de caracteres y que sea completoF soportandoG

De!inici#n de datos De!inici#n de vistas Manipulaci#n de datos 4interactiva y por pro0rama7

A0O<D)C+S SQL y bases de datos relacionales Claudio Casares

106

)imitantes de inte0ridad )imitantes de transacci#n 4iniciarF reali3arF des:acer7 4 Be#inF Commi'F Rollba*\7. Adem+s de poder tener inter!aces m+s ami0ables para :acer consultasF etc. siempre debe de :aber una manera de :acerlo todo de manera te=tualF que es tanto como decir que pueda ser incorporada en un pro0rama tradicional. "n len0uaJe que cumple esto en 0ran medida es SQL.

6e1la /7 6e1la de actuali'aci$n de vistas


%odas las vistas que son te#ricamente actuali3ables se pueden actuali3ar por el sistema.

,l problema es determinar cu+les son las vistas te#ricamente actuali3ablesF ya que no est+ muy claro. Cada sistema puede :acer unas suposiciones particulares sobre las vistas que son actuali3ables.

6e1la 57 )nserci$n8 actuali'aci$n y borrado de alto nivel


)a capacidad de maneJar una relaci#n base o derivada como un solo operando se aplica no s#lo a la recuperaci#n de los datos 4consultas7F si no tambiKn a la inserci#nF actuali3aci#n y borrado de datos.

,sto esF el len0uaJe de maneJo de datos tambiKn debe ser de alto nivel 4de conJuntos7. Al0unas bases de datos inicialmente s#lo podIan modi!icar las tuplas de la base de datos de una en una 4un re0istro de cada ve37.

6e1la >7 )ndependencia "Ksica de datos


)os pro0ramas de aplicaci#n y actividades del terminal permanecen inalterados a nivel l#0ico cu+ndo quiera que se realicen cambios en las representaciones de almacenamiento o mKtodos de acceso. ,l modelo relacional es un modelo l#0ico de datosF y oculta las caracterIsticas de su representaci#n !Isica.

6e1la ?7 )ndependencia l$1ica de datos


)os pro0ramas de aplicaci#n y actividades del terminal permanecen inalterados a nivel l#0ico cu+ndo quiera que se realicen cambios a las tablas base que preserven la in!ormaci#n. Cuando se modi!ica el esquema l#0ico preservando in!ormaci#n 4no valdrIa p. eJ. eliminar un atributo7 no es necesario modi!icar nada en niveles superiores. ,Jemplos de cambios que preservan la in!ormaci#nG o o A.adir un atributo a una tabla base. Sustituir dos tablas base por la uni#n de las mismas. "sando vistas de la uni#n puedo recrear las tablas anteriores...

6e1la 1I7 )ndependencia de inte1ridad


)os limitantes de inte0ridad especI!icos para una determinada base de datos relacional deben poder ser de!inidos en el sublen0uaJe de datos relacionalF y almacenables en el cat+lo0oF no en los pro0ramas de aplicaci#n. ,l obJetivo de las bases de datos no es s#lo almacenar los datosF si no tambiKn sus relaciones y evitar que estas 4limitantes7 se codi!iquen en los pro0ramas. /or tanto en una BDR se deben poder de!inir limitantes de inte0ridad.

A0O<D)C+S SQL y bases de datos relacionales Claudio Casares

107

Cada ve3 se van ampliando m+s los tipos de limitantes de inte0ridad que se pueden utili3ar en los SGBDRF aunque :asta :ace poco eran muy escasos. Como parte de los limitantes in:erentes al modelo relacional 4!orman parte de su de!inici#n7 est+nG o o "na BDR tiene inte0ridad de entidad. ,s decirF toda tabla debe tener una clave primaria. "na BDR tiene inte0ridad re!erencial. ,s decirF toda clave e=terna no nula debe e=istir en la relaci#n donde es primaria.

6e1la 117 )ndependencia de distribuci$n


"na BDR tiene independencia de distribuci#n. )as mismas #rdenes y pro0ramas se eJecutan i0ual en una BD centrali3ada que en una distribuida. )as BDR son !+cilmente distribuiblesG Se parten las tablas en !ra0mentos que se distribuyen. Cuando se necesitan las tablas completas se recombinan usando operaciones relacionales con los !ra0mentos. Sin embar0o se complica m+s la 0esti#n interna de la inte0ridadF etc. %ransparencia de locali3aci#n. ,l usuario tiene la impresi#n de que trabaJa con una BD local. 4aspecto de la re0la de independencia !Isica7 %ransparencia de !ra0mentaci#n. ,l usuario no se da cuenta de que la relaci#n con que trabaJa est+ !ra0mentada. 4aspecto de la re0la de independencia l#0ica de datos7. %ransparencia de replicaci#n. ,l usuario no se da cuenta de que pueden e=istir copias 4rKplicas7 de una misma relaci#n en di!erentes lu0ares.

,sta re0la es responsable de tres tipos de transparencia de distribucinG

6e1la 127 6e1la de la no subversi$n


Si un sistema relacional tiene un len0uaJe de baJo nivel 4un re0istro de cada ve37F ese baJo nivel no puede ser usado para saltarse 4subvertir7 las re0las de inte0ridad y los limitantes e=presados en los len0uaJes relacionales de m+s alto nivel 4una relaci#n 4conJunto de re0istros7 de cada ve37. Al0unos problemas no se pueden solucionar directamente con el len0uaJe de alto nivel. 5ormalmente se usa SQL inmerso en un len0uaJe an!itri#n para solucionar estos problemas. Se utili3a el concepto de cursor para tratar individualmente las tuplas de una relaci#n. ,n cualquier caso no debe ser posible saltarse los limitantes de inte0ridad impuestos al tratar las tuplas a ese nivel.

S-ar putea să vă placă și