Documente Academic
Documente Profesional
Documente Cultură
Lenguaje
SQL
Claudio Casares
personal.lobocom.es/claudio/
ndice de contenido
1. Generalidades..........................................................................................................................................5
1.1. Arquitecturas..................................................................................................................................................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.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
-.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.....................................................................................................................................-*
-.-.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-
-.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*-
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
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.
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
costosos en el sentido que consumen recursos del sistema. /ara aumentar el rendimiento se aconseJa limitar los cursores y seleccionar los no despla3ables.
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 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.
!"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.
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
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.
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.
11
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.
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.
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.
15
%ra'abilidad
%omando como punto de partida la versi#n actual se puede remontar su dise.o :asta las especi!icaciones iniciales
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.
17
)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.
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.
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
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
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.
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.
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.
,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.
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 % (
)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.
23
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
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.
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.
%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.
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.
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
26
"na ve3 conse0uida la tercera !orma normalF se puede estudiar la cuarta !orma normal.
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
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.
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.
/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.
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.
)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.
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
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.
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.,.>. 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
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.
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.
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.
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
36
,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.
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
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
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..
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.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
*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
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.
,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.
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
,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
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
,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>
"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
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+.
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
,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.
/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,
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
*en1ua&e S@* SQL y bases de datos relacionales Claudio Casares +0120 3C (ar'a Rebolledo
48
,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
*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
;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
50
,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
*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
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
*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>[
*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.
,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
,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
,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 !!!
,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
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
*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
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
,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
,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
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
*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
2 bD'es 4 bD'es 1 bD'e ,or *ar:*'er 5e#@n se ne*esi'e 1 bD'e ,or *ar:*'er
#I8GL)
(79"L)
*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
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 >
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
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 >
*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.
,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
,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 >);
,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
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
,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
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
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
"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
)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
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
+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.
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.
!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.
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>
+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..
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.
)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..
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.
,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.
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.
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
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
<'Ermino&esoO
<'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.
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
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;.
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.
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.
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
*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
)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
*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
*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
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
"n tKrmino ponderado se puede usar en conJunci#n con cualquiera de los otros cuatro tipos de tKrminos.
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
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..
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
,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
*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.
,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
102
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
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.
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.
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.
105
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
,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.
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.
,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.
,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.
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.