Anda di halaman 1dari 21

Introduccin al Lenguaje Estructurado de Consultas (SQL)

Esta pgina es un tutorial de Structured Query Language ("Lenguaje Estructurado de consultas"),(tambin conocido como SQL) y es un esfuerzo pionero en la ord ide eb como primer tutorial comprensible de SQL e!istente en "nternet# SQL permite a los usuarios el acceso a un sistema de manejo de bases de datos relacional, como son $racle, Sybase, "nformi!, %icrosoft SQL Ser&er, 'ccess, y otras, permitiendo &er a los usuarios los datos (ue los usuarios (uieren &er# SQL asimismo permite a los usuarios definir los datos en una base de datos, y manipular estos datos# Esta pgina describir como usar SQL, y dar ejemplos# El SQL usado en este documento es "')S"", o estndar SQL, y no SQL caracter*stico de un sistema de manejo de bases de datos espec*fico, el cual ser &isto en la secci+n "SQL no estndar"#

CAPTULO 1. Introduccin
Bases de la sentencia SELECT En una BD relacional, los datos son almacenados en tablas. Un e em!lo de tabla !uede contener el D"I, el nombre # la Direccin$ Tabla%direcciones%em!leados A!ellidos "ombre Direccin ,arc-a Antonio C. /a#or ' L!e5 6uan Pl. A#untamiento

D"I '()*++() 123'(*)4

Ciudad 0alencia Alicante

Pro&incia 0alencia Alicante

A7ora, &amos a &er 8ue 7abr-a 8ue 7acer !ara &er las direcciones de todos los em!leados. Utili5a la sentencia 9ELECT de la si:uiente manera$ SELECT Nombre, Apellidos, Direccin, Ciudad, Provincia FROM Tabla direcciones empleados! Los si:uiente es el resultado de tu consulta de la BD$ "ombre A!ellidos Direccin Ciudad Pro&incia
--------------------------------------------------------------------

Antonio ,arc-a C. /a#or' 0alencia 0alencia 6uan L!e5 Pl. A#untamiento Alicante Alicante La e;!licacin de lo 8ue acabas de 7acer es la si:uiente, 7as !re:untado !or todos los datos de la Tabla%direcciones%em!leados, # es!ec-<icamente, 7as !re:untado !or las columnas llamadas "ombre, A!ellidos, Direccin, Ciudad # Pro&incia. Date cuenta 8ue los nombre de las columnas # los nombres de las tablas no tienen es!acios...=stos deben ser escritos con una !alabra> # 8ue la sentencia acaba con un !unto # coma ?>@. La <orma :eneral !ara una sentencia 9ELECT, recu!erando las <ilas de una tabla es$ SELECT NombreColumna, NombreColumna, """ FROM NombreTabla! Para co:er todas las columnas de una tabla sin escribir todos los nombres de columna, usa$ SELECT # FROM NombreTabla! Cada administrador de BDAs ?DB/9, BData /ana:ement 9#stemB@ # ti!o de so<tCare de BDAs tienen di<erentes m=todos !ara identi<icarse en la base de datos e introducir comandos 9DL.
1

Seleccin Condicional Para un ma#or estudio de la sentencia 9ELECT, ec7a un &ista5o a una nue&a tabla de e em!lo$ Tabla%estadistica%em!leados 9alario Bene<icios Car:o +2444 12444 Encar:ado 32444 12444 Encar:ado 34444 12444 Encar:ado 34444 1'244 Encar:ado 24444 1'444 T=cnico 12444 14444 T=cnico 14444 14444 T=cnico ('444 +244 A!rendi5 '*444 +244 A!rendi5

Cod%em!leado 141 142 12' '12 '11 (44 ((2 144 111

Operadores Relacionales Ea# seis o!eradores relacionales en 9DL, # des!u=s de introducirlos, &eremos como usarlos$ F G HF G GF F I:ual "o i:ual ?&er manual !ara mIs in<ormacin@ /enor 8ue /a#or 8ue /enor o i:ual a /a#or o i:ual 8ue

La clIusula WHERE es usada !ara es!eci<icar 8ue slo ciertas <ilas de la tabla sean mostradas, basIndose en el criterio descrito en esta clIusula JEEKE. Es mIs <Icil de entender &iendo un !ar de e em!los$ 9i 8uieres &er el Cod%em!leado de a8uellos 8ue ten:an un salario !or encima de 24.444, usa la si:uiente e;!resin$ SELECT Cod empleado FROM Tabla es$adis$ica empleados %&ERE Salario ' ())))! Obser&a 8ue el si:no F ?ma#or o i:ual 8ue@ 7a sido usado, #a 8ue 8ueremos &er listados untos a8uellos 8ue :anen mIs de 24.444 o i:ual a 24.444. Esto muestra$ Cod%em!leado LLLLLLLLLLLLLLL 414 142 12' '12 '11
'

La descri!cin JEEKE 9alario F 24.444, es conocida como condicin. Lo mismo !uede ser utili5ado !ara las columnas de ti!o te;to$ SELECT Cod empleado FROM Tabla es$adis$ica empleados %&ERE Car*o ' +Encar*ado+! Esto muestra el cdi:o de todos los encar:ados. ,eneralmente, con las columnas de te;to, usa i:ual o no i:ual a, # com!rueba 8ue el te;to 8ue a!arece en la condicin estI dentro de comillas sim!les. Ms Condiciones Complejas: Condiciones Compuestas El o!erador A"D unta dos o mIs condiciones, # muestra slo las <ilas 8ue satis<acen TODA9 las condiciones listadas. Por e em!lo$ SELECT Cod empleado FROM Tabla es$adis$ica empleados %&ERE Salario ,)))) AND Car*o ' -T.cnico/ El o!erador OK unta dos o mIs condiciones, # de&uel&e una <ila si AL,U"A de las condiciones listadas en &erdadera. Para &er todos a8uellos 8ue :anan menos de 14.444 o tienen menos de 14.444 en bene<icios listados untos, usa la si:uiente consulta$ SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE SALAR0O 2 ,)))) OR 1ENEF0C0OS 2 3))))! A"D M OK !ueden ser combinadas, !or e em!lo$ SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O ' +Encar*ado+ AND SALAR0O 5)))) OR 1ENEF0C0OS 36)))! Primero, 9DL encuentra las <ilas donde el salario es ma#or de 34.444 # la columna del car:o es i:ual a Encar:ado, una &e5 tomada esta nue&a lista de <ilas, 9DL buscarI si 7a# otras <ilas 8ue satis<a:an la condicin A"D !re&ia o la condicin 8ue la columna de los Bene<icios sea ma#or de 1'.444. Consecuentemente, 9DL solo muestra esta se:unda nue&a lista de <ilas, recordando 8ue nadie con bene<icios sobre 1'.444 serI e;cluido #a 8ue el o!erador OK inclu#e una <ila si el resultado de al:una de las !artes es 0EKDADEKO. Date cuenta 8ue la o!eracin A"D se 7a 7ec7o !rimero. Para :enerali5ar este !roceso, 9DL reali5a las o!eraciones A"D !ara determinar las <ilas donde las o!eraciones A"D se mantienen 0EKDADEKO ?recordar$ todas las condiciones son &erdaderas@, entonces estos resultados son usados !ara com!arar con las condiciones OK, # solo muestra a8uellas <ilas donde las condiciones unidas !or el o!erador OK se mantienen ciertas !ara al:una de las !artes de la condicin. Para reali5ar OK antes de A"D, !.e., si 8uisieras &er una lista de em!leados :anando un :ran salario ?24.444@ o con un :ran bene<icio ?14.444@, # slo 8uieres 8ue lo mire !ara los em!leados con el car:o de Encar:ado, usa !ar=ntesis$ SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O ' +Encar*ado+ AND 7SALAR0O ()))) OR 1ENEF0C0O 3))))8!

! " BETWEE! Un m=todo <Icil de usar condiciones com!uestas es usando I" o BETJEE". Por e em!lo si tN 8uieres listar todos los encar:ados # T=cnico$ SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O 0N 7+Encar*ado+, +T.cnico+8! O !ara listar a8uellos 8ue :anen mIs o (4.444, !ero menos o i:ual 8ue 24.444, usa$ SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE SALAR0O 1ET%EEN 9)))) AND ())))! Para listar todos los 8ue no estIn en este ran:o, intenta$ SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE SALAR0O NOT 1ET%EEN 9)))) AND ())))! De <orma similar, "OT I" lista todas las <ilas e;clu#endo a8uellas de la lista I". #sando L $E Obser&a la Tabla%estadistica%em!leados, # di 8ue 8uieres &er todas las !ersonas en las cuales su a!ellido comience !or BlB$, intenta$ SELECT 0D EMPLEADO %&ERE APELL0DOS L0:E +L;+! FROM TA1LA ESTAD0ST0CA EMPLEADOS El tanto !or ciento ?O@ es usado !ara re!resentar un !osible carIcter ?sir&e como comod-n@, #a sea nNmero, letra o !untuacin, o !ara seleccionar todos los caracteres 8ue !uedan a!arecer des!u=s de BLB. Para encontrar las !ersonas con el a!ellidos terminado en BLB, usa POLQ, o si 8uieres la PLQ en medio de la !alabra POLOQ. El POQ !uede ser usado en lu:ar de cual8uier carIcter en la misma !osicin relati&a a los caracteres dados. "OT LIRE muestra <ilas 8ue no cum!len la descri!cin dada. Otras !osibilidades de uso de LIRE, o cual8uiera de las condiciones anteriores son !osibles, aun8ue de!ende de 8u= DB/9 est=s usando> lo mIs usual es consultar el manual, o tu administrador de sistema sobre la !osibilidades del sistema, o slo !ara estar se:uro de 8ue lo 8ue estIs intentando 7acer es !osible # correcto. Sste ti!o de !eculiaridades serIn discutidas mIs adelante. Esta seccin slo !retende dar una idea de las !osibilidades de consultas 8ue !ueden ser escritas en 9DL.

CAPTULO '. Uniones


#niones En esta seccin, slo estudiaremos las uniones de unin, e interseccin, 8ue en :eneral son las mIs usadas. Un buen diseTo de una BD su:iere 8ue cada lista de tabla de datos sea considerada como una sim!le entidad, # 8ue la in<ormacin detallada !uede ser obtenida, en una BD relacional, usando tablas adicionales # uniones. Primero considera los si:uientes e em!los de tablas$

ID%Pro!ietario 41 4' 12 '1 24

Pro!ietarios%Anti:Uedades A!ellidoPro!ietario "ombrePro!ietario 6ones Bill 9mit7 Bob LaCson Patricia AVins 6ane WoCler 9am

Pedidos ID%Pro!ietario ProductoPedido 4' Table 4' Armario '1 9illa 12 Es!e o Anti:Uedades ID%com!rador Producto 24 Cama 12 Table 4' 9illa 24 Es!e o 41 Armario '1 Cabinet '1 Co<ee Table 24 Ca7air 12 6eCelr# Bo; '1 Potter# 4' Librer-a 41 Plant 9tand

ID%&endedor 41 4' 12 '1 24 41 4' 12 41 4' '1 24

Cla%es Primero, &amos a estudiar el conce!to de cla&es. Una cla%e primaria es una columna o con unto de columnas 8ue identi<ican un-&ocamente el resto de datos en cual8uiera <ila. Por e em!lo, en la tabla Pro!ietarios%Anti:Uedades, la columna ID%Pro!ietario identi<ica un-&ocamente esa <ila. Esto si:ni<ica dos cosas$ dos <ilas no !ueden tener el mismo ID%Pro!ietario #, aun8ue dos !ro!ietarios tu&ieran el mismo nombre # a!ellidos, la columna ID%Pro!ietario &eri<ica 8ue no serIn con<undidos, !or8ue la columna ID%Pro!ietario !odrI ser usada !or el Administrador de la Base de Datos ?DB/9@ !ara di<erenciarlos, aun8ue los nombres sean los mismos. Una cla%e ajena es una columna en una tabla 8ue es cla&e !rimaria en otra tabla, lo 8ue si:ni<ica 8ue cada dato en una columna con una cla&e a ena debe de corres!onder con datos, en otra tabla, cu#a columna es cla&e !rimaria. En el len:ua e DB/9 esta corres!ondencia es conocida como
2

inte:ridad re<erencial. Por e em!lo, en la tabla Anti:Uedades, tanto el ID%com!rador como el ID%&endedor son cla&es a enas de la cla&e !rimaria de la tabla Pro!ietarios%Anti:Uedades ?ID%Pro!ietario> !or su!uesto, se tiene 8ue tener un !ro!ietario anti:uo antes de !oder com!rar o &ender cual8uier !roducto@, !or lo tanto, en ambas tablas, las columnas ID son usadas !ara identi<icar los !ro!ietarios o com!radores # &endedores, # !or lo tanto ID%Pro!ietario es la cla&e !rimaria de la tabla Pro!ietarios%Anti:Uedades. En otras !alabras, todos estos datos BIDB son usados !ara re<erirse a los !ro!ietarios, com!radores, o &endedores de anti:Uedades, sin necesidad de usar sus nombres reales. Creando una #nin El !ro!sito de estas cla&es es el !oder re<erirse a datos de di<erentes tablas, sin tener 8ue re!etir los datos en cada una de ellas, este es el !oder de las bases de datos relacionales. Por e em!lo, se !ueden encontrar los nombres de los 8ue 7an com!rado una silla sin tener 8ue listar el nombre com!leto de el com!rador en la tabla Anti:Uedades...!uedes conse:uir el nombre relacionando a8uellos 8ue com!raron una silla con los nombres en la tabla de Pro!ietarios%Anti:Uedades usando el ID%Pro!ietario, el cual relaciona los datos en las dos tablas. Para encontrar los nombres de a8uellos 8ue com!raron una silla, usa la si:uiente consulta$ SELECT APELL0DOPROP0ETAR0O, NOM1REPROP0ETAR0O FROM PROP0ETAR0OS ANT04<EDADES, ANT04<EDADES %&ERE 0D COMPRADOR ' 0D PROP0ETAR0O AND PROD=CTO ' +Silla+! Date cuenta de lo si:uiente sobre la consulta... las tablas in&olucradas en la relacin son listadas en la clIusula WKO/ de la sentencia. En la clIusula JEEKE, !rimero obser&a 8ue el PKODUCTOFQ9illaQ restrin:e el listado a a8uellos 8ue 7an com!rado una silla. 9e:undo, obser&a como las columnas ID son relacionadas de una tabla a otra !or el uso de la clIusula ID%CO/PKADOKFID%PKOPIETAKIO. 9lo cuando los ID coinciden # el ob eto com!rado es una silla ?!or el A"D@, los nombres de la tabla Pro!ietarios%Anti:Uedades serIn listados. Debido a 8ue la condicin de unin usada es el si:no i:ual, esta unin se denomina interseccin. El resultado de esta consulta son dos nombres$ 9mit7, Bob M WoCler, 9am. Para e&itar ambi:Uedades se !uede !oner el nombre de la tabla antes del de la columna, al:o como$ SELECT PROP0ETAR0OS ANT04<EDADES"APELL0DOPROP0ETAR0O, PROP0ETAR0OS ANT04<EDADES"NOM1REPROP0ETAR0O FROM PROP0ETAR0OS ANT04<EDADES, ANT04<EDADES %&ERE ANT04<EDADES"0D COMPRADOR ' PROP0ETAR0OS ANT04<EDADES"0D PROP0ETAR0O AND ANT04<EDADES"PROD=CTO ' +Silla+! 9in embar:o, como los nombres de las columnas en cada tabla son di<erentes, esto no es necesario. & ST !CT ' Eliminando &uplicados Consideremos 8ue 8uieres &er los ID # los nombres de toda a8uellas !ersona 8ue 7a#a &endido una anti:Uedad. Ob&iamente, 8uieres una lista donde cada &endedor sea listado una &e5, # no 8uieres saber cuIntos art-culos a &endido una !ersona, solamente el nombre de las !ersonas 8ue 7an &endido al:una anti:Uedad ?!ara contar, &er la seccin !r;ima Wunciones A:re:adas@. Esto
3

si:ni<ica 8ue necesitaras decir en 9DL 8ue 8uieres eliminar las <ilas de &endedores du!licadas, # slo listar cada !ersona una &e5. Para 7acer esto, uso la !alabra cla&e & ST !CT. Primero, necesitaremos una interseccin !ara la tabla de Pro!ietarios%Anti:Uedades !ara conse:uir los datos detallados de las !ersonas, a!ellidos # nombre. 9in embar:o, recuerda 8ue la columna ID%&endedor de la tabla Anti:Uedades es una cla&e a ena !ara la tabla Pro!ietarios%Anti:Uedades, # !or tanto, un &endedor !odr-a ser listado mIs de una &e5, !or cada !roducto de la tabla Anti:Uedades, listando el ID # sus datos, como 8ueremos eliminar mNlti!les coincidencias del ID%&endedor en nuestra lista, usaremos DI9TI"CT en la columna donde las re!eticiones !ueden ocurrir. Para com!licarlo un !oco mIs, ademIs 8ueremos la lista ordenada al<ab=ticamente !or el A!ellido, des!u=s !or el "ombre, # !or Nltimo !or su ID%Pro!ietario. Para ello, usaremos la clausula OR&ER B(. SELECT D0ST0NCT 0D >ENDEDOR, APELL0DOPROP0ETAR0O, NOM1REPROP0ETAR0O FROM ANT04<EDADES, PROP0ETAR0OS ANT04<EDADES %&ERE 0D >ENDEDOR ' 0D PROP0ETAR0O ORDER 1? APELL0DOPROP0ETAR0O, NOM1REPROP0ETAR0O, 0D PROP0ETAR0O! En este e em!lo, obtendremos un listado de todos los !ro!ietarios, en orden al<ab=tico !or el A!ellido. Para <uturas re<erencias ?# si al:uien !re:unta@, este ti!o de uniones son consideradas en la cate:or-a de uniones interiores. )lias " n*Su+consultas En esta seccin, 7ablaremos sobre los Alias, In # el uso de las subconsultas, # como =stas !ueden ser usadas en un e em!lo con tres tablas. Primero, obser&a esta consulta 8ue im!rime el a!ellido de a8uellos !ro!ietarios 8ue 7an <ormulado un !edido # en 8u= consiste =ste, solamente listando a8uellos cu#os !edidos !ueden ser atendidos ?esto es, 7a# un &endedor 8ue !osee el !roducto !edido@ SELECT O%N"APELL0DOPROP0ETAR0O Apellido, ORD"PROD=CTOPED0DO Produc$o Pedido FROM PED0DOS ORD, PROP0ETAR0OS ANT04<EDADES O%N %&ERE ORD"0D PROP0ETAR0O ' O%N"0D PROP0ETAR0O AND ORD"PROD=CTOPED0DO 0N 7SELECT PROD=CTO FROM ANT04<EDADES8! Esto de&uel&e$ A!ellidos Producto Pedido LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 9mit7 Table 9mit7 Armario AVins 9illa LaCson Es!e o Ea# al:unas cosas a tener en cuenta sobre esta consulta$ 1. Primero, el BA!ellidoB # el BProducto PedidoB en las l-neas 9elect de&uel&e los t-tulos en la salida. '. El OJ" M OKD son alias> =stos son dos nue&os nombres !ara las dos tablas listadas en la clIusula WKO/ 8ue son usado como !re<- os !ara toda las notaciones con !unto de los
+

nombres de las columnas en la consulta ?&er arriba@. Esto elimina ambi:Uedades, es!ecialmente en la clIusula de interseccin JEEKE donde ambas tablas tienen la columna ID%Pro!ietario, # la notacin con !unto dice al 9DL 8ue estamos re<iri=ndonos de dos di<erentes ID%Pro!ietario de dos tablas di<erentes. (. Obser&a 8ue la tabla de Pedidos estI utili5ada !rimero en la clIusula WKO/> esto ase:ura 8ue el listado 7ec7o basIndose en esta tabla, # la tabla Anti8uesOCners, es solamente usado !ara la in<ormacin com!lementaria ?a!ellidos@. 1. /Is im!ortante, el A"D en la clIusula JEEKE <uer5a en la subconsulta el ser in&ocada ?BFA"XB or BF9O/EB, son dos e8ui&alente usos de I"@. Du= si:ni<ica esto, la subconsulta se reali5a, de&ol&iendo todos los !roductos 8ue !ertenecen a al:uien de la tabla de Anti:Uedades, como si no 7ubiera la clIusula JEEKE. As- !ues, !ara 8ue una <ila de la tabla de Pedidos sea listada, el ProductoPedido debe de ser de&uelto en la lista de !roductos con !ro!ietario de la tabla de Anti:Uedades, =sta lista un !roducto slo si el !edido !uede ser cum!lido !or otro !ro!ietario. Puedes !ensar 8ue este es el camino$ la subconsulta de&uel&e un con unto de !roductos los cuales son com!arados con los de la tabla Pedidos> la condicin In es &erdadera slo si el !roducto deseado estI en el con unto de&uelto de la tabla Anti:Uedades. AdemIs, date cuenta 8ue este caso, en el 8ue 7a# una anti:Uedad dis!onible !ara cada demanda, ob&iamente no serI siem!re el caso. AdemIs, obser&a 8ue cuando I", BFA"XB, o BF9O/EB es usada, estas !alabras cla&es se re<ieren a cual8uier !osible <ila seleccionada, no a columnas seleccionadas...esto es, no !uedes !oner mNlti!les columnas en una.

C),-T#LO ./ Miscelneo de Sentencias S0L


1unciones )2re2adas 0amos a &er cinco im!ortantes <unciones a:re:adas$ S#M, )34, M)5 , M ! # CO#!T. 9on llamadas <unciones a:re:adas !or8ue resumen el resultado de una consulta. De&uel&e el total de todas las <ila, satis<aciendo todas las condiciones de una columna dada, cuando la columna dada es num=rica. A0, ?@ De&uel&e la media de una columna dada. /AY ?@ De&uel&e el ma#or &alor de una columna dada. /I" ?@ De&uel&e el menor &alor en una columna dada. COU"T?Z@ De&uel&e el nNmero de <ilas 8ue satis<acen las condiciones. 9U/ ?@ 0iendo las tablas del !rinci!io del documento, &eamos tres e em!los$ SELECT S=M7SALAR0O8, A>47SALAR0O8 FROM TA1LA ESTAD0ST0CA EMPLEADOS! Esta consulta muestra el total de todos los salarios de la tabla, # la media salarial de todas las entradas en la tabla. SELECT M0N71ENEF0C0OS8 FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O ' +Encar*ado+! Esta consulta de&uel&e el menor &alor de la columna de bene<icios, de los em!leados 8ue son /ana:ers, la cual es 1'.244.
*

SELECT CO=NT7#8 FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O ' +T.cnico+! Esta consulta nos dice cuantos em!leados tienen la cate:or-a de T=cnico ?(@. 3istas En 9DL, tN !uedes ?com!rueba tu DBA@ tener acceso a crear &istas !or ti mismo. Lo 8ue una &ista 7ace es !ermitirte asi:nar resultados de una consulta a una tabla nue&a # !ersonal, 8ue !uedes usar en otras consultas, !udiendo utili5ar el nombre dado a la tabla de tu &ista en la clIusula WKO/. Cuando accedes a una &ista, la consulta 8ue estI de<inida en la sentencia 8ue crea tu lista estI relacionada ?:eneralmente@, # los resultados de esta consulta son como cual8uier otra tabla en la consulta 8ue escribiste in&ocando tu &ista. Por e em!lo, !ara crear una &ista$ CREATE >0E% ANT>0E% AS SELECT PROD=CTOPED0DO FROM PED0DOS! A7ora, escribe una consulta usando esta &ista como tabla, donde la tabla es un listado de todos los Productos Pedidos de la tabla Pedidos$ SELECT 0D >ENDEDOR FROM ANT04<EDADES, ANT>0E% %&ERE PROD=CTOPED0DO ' PROD=CTO! Esta consulta muestra todos los ID%&endedor de la tabla de Anti:Uedades donde el !roducto, en esta tabla, a!arece en la &ista Ant&ieC, la cual no es mIs 8ue todos los Productos Desired de la tabla Pedidos. El listado es :enerado #endo uno !or uno !or los Productos Anti:Uos 7asta donde 7a# una coincidencia con la &ista Ant&ieC. Las &istas !ueden ser usadas !ara restrin:ir el acceso a las bases de datos, as- como !ara sim!li<icar una consulta com!le a. Creando nue%as ta+las Toda tabla de una base de datos debe de ser creada al:una &e5... &eamos como 7emos creado la tabla de Pedidos$ CREATE TA1LE PED0DOS 70D PROP0ETAR0O 0NTE4ER NOT N=LL, PROD=CTOPED0DO C&AR7,)8 NOT N=LL8! Esta sentencia de&uel&e el nombre de la tabla e in<orma a la DB/9 sobre cada columna en la tabla. Obser&a 8ue esta sentencia usa ti!os de datos :en=ricos, # 8ue los ti!os de datos !ueden ser di<erentes de!endiendo del DB/9 8ue estes usando. Al:unos ti!os de datos :en=ricos son$ L C6ar789 L Una columna de caracteres, donde ; es el nNmero mI;imo de caracteres !ermitido en la columna. L nte2er [ Una columna de nNmeros enteros, !ositi&os o ne:ati&os. L &ecimal78: '9 [ Una columna de nNmeros decimales, donde ; es el nNmero mI;imo de d-:itos del nNmero decimal en la columna e # el nNmero mI;imo de d-:itos des!u=s del !unto decimal. E em!lo$ ?1,'@$ )).)). L &ate L Una columna <ec7a tiene un <ormato es!ecial en cada DB/9. L Lo2ical [ Una columna 8ue slo !uede tomar dos &alores$ TKUE o WAL9E ?&erdadero o <also@. Otra nota, "OT "ULL si:ni<ica 8ue la columna debe tener un &alor en cada <ila. 9i "ULL es usado, la columna !odr-a tener un &alor &ac-o en una de sus <ilas.

Modi;icando Ta+las 0amos a aTadir una columna a la tabla Anti:Uedades !ara !ermitir introducir el !recio de un !roducto dado$ ALTER TA1LE ANT04<EDADES ADD 7PREC0O DEC0MAL7@,68 N=LL8! Los datos !ara esta nue&a columna !ueden ser actuali5ados o insertados como se muestra a continuacin. )<adiendo &atos Para insertar <ilas en una tabla, 7a5 lo si:uiente$ 0NSERT 0NTO ANT04<EDADES >AL=ES 763, )3, +O$$oman+, 6))"))8! Esto inserta los datos en la tabla, como una nue&a <ila, columna !or columna, en el orden !reL de<inido. 0eamos como modi<icar el orden # de ar el Precio en blanco$ 0NSERT 0NTO ANT04<EDADES 70D COMPRADOR, 0D >ENDEDOR, PROD=CTO8 >AL=ES 7)3, 63, +O$$oman+8! Borrando datos 0amos a borrar esta nue&a <ila de la base de datos$ DELETE FROM ANT04<EDADES %&ERE PROD=CTO ' +O$$oman+! Pero si 7a# otra <ila 8ue contiene POttomanQ, esta <ila tambi=n serI borrada. Para di<erenciar la <ila de otra, lo 8ue 7aremos serI aTadir datos$ DELETE FROM ANT04<EDADES %&ERE PROD=CTO ' +O$$oman+ AND 0D COMPRADOR ' )3 AND 0D >ENDEDOR ' 63! )ctuali=ando &atos 0amos a actuali5ar el Precio en una <ila 8ue toda&-a no tiene el !recio$ =PDATE ANT04<EDADES SET PREC0O ' ())")) %&ERE PROD=CTO ' +Silla+! Esto !one el !recio de todas las sillas a 244.44, como en el caso anterior, aTadiendo mIs condicionantes en la clIusula JEEKE, !odemos es!eci<icar mIs a8uellas <ilas 8ue 8ueremos modi<icar.

C),-T#LO >/ Miscelneo de Tpicos


-ndices Los -ndices !ermiten a DB/9 acceder a los datos mIs rI!idamente ?esto no ocurre en todos los sistemas@. El sistema crea esta estructura de datos interna ?el -ndice@ con la cual se es !osible seleccionar <ilas, cuando la seleccin se basa en columnas inde;adas, esto se 7ace mIs rI!idamente. Este -ndice le dice a la DB/9 donde esta cierta <ila dando el &alor de una columna inde;ada, como un libro, cu#o -ndice te dice en 8ue !I:inas a!arece una cierta !alabra. 0amos a crear un -ndice !or el ID%Pro!ietario en la tabla Pro!ietarios%Anti:Uedades$ CREATE 0NDEA O0D 0DA ON PROP0ETAR0OS ANT04<EDADES 70D PROP0ETAR0O8!
14

A7ora en los nombres$ CREATE 0NDEA NAME 0DA ON PROP0ETAR0OS ANT04<EDADES 7APELL0DOPROP0ETAR0O, NOM1REPROP0ETAR0O8! Para borrar un -ndice, utili5a la sentencia DKOP$ DROP 0NDEA O0D 0DA! As- mismo, tambi=n !uedes BborrarB una tabla ?DKOP TABLE nombretabla@. En el se:undo e em!lo, el -ndice se mantiene en las dos columnas, a:re:ado unto. Al:unos DB/9 no <uer5an la e;istencia de cla&es !rimarias> en otras !alabras, la unicidad de una columna no es <or5ada automIticamente. Lo 8ue si:ni<ica 8ue, !or e em!lo, si intento insertar otra <ila dentro de la tabla Pro!ietarios%Anti:Uedades con el ID%Pro!ietario de 4', al:unos sistemas lo !ermitirIn 7acer, incluso, si esta columna es la Nnica de la tabla ?cada <ila se su!one 8ue es di<erente@. Una <orma de e&itar esto es crear un Nnico -ndice en la columna 8ue 8ueramos 8ue sea la cla&e !rimaria !ara <or5ar al sistema a !ro7ibir los du!licados. CREATE =N0B=E 0NDEA O0D 0DA ON PROP0ETAR0OS ANT04<EDADES 70D PROP0ETAR0O8! 4RO#, B( " H)3 !4 Un uso es!ecial de ,KOUP BX es asociar una <uncin a:re:ada ?es!ecialmente COU"T@ con :ru!os de <ilas. Primero, ima:ina 8ue la tabla Anti:Uedades tiene la columna Precio, # 8ue cada <ila tiene un &alor !ara esta columna. Dueremos &er el !recio del !roducto mIs caro com!rado !or cada com!rador. Tenemos 8ue decirle a 9DL 8ue a:ru!e cada ti!o de com!ra, # nos di:a la com!ra 8ue ten:a el mI;imo !recio$ SELECT 0D COMPRADOR, MAA7PREC0O8 FROM ANT04<EDADES 4RO=P 1? 0D COMPRADOR! A7ora, 8ueremos decir 8ue slo 8ueremos &er el !recio mI;imo de la com!ra si =ste es sobre \1444, as- 8ue usamos la clIusula EA0I",$ SELECT 0D COMPRADOR, MAA7PREC0O8 FROM ANT04<EDADES 4RO=P 1? 0D COMPRADOR &A>0N4 PREC0O 3)))! Ms su+consultas Otro uso comNn de las subconsultas in&olucra el uso de o!eradores !ara !ermitir a una condicin JEEKE incluir la salida de un 9elect de una subconsulta. Primero, lista los com!radores 8ue com!raron un !roducto caro ?el !recio del !roducto es \144 ma#or 8ue la media de !recio de todos los !roductos@$ SELECT 0D COMPRADOR FROM ANT04<EDADES %&ERE PREC0O 7SELECT A>47PREC0O8 C 3)) FROM ANT04<EDADES8! La subconsulta calcula la media del Precio mIs \144, # usando esta <i:ura, los ID%Pro!ietario son im!resos !or cada !roducto 8ue cuesta mIs. 9e !uede usar DI9TI"CT ID%PKOPIETAKIO, !ara eliminar du!licados.
11

Lista los a!ellidos de a8uellos de la tabla Anti8ueOCner, 9]LO si 7an com!rado un !roducto$ SELECT APELL0DOPROP0ETAR0O FROM PROP0ETAR0OS ANT04<EDADES %&ERE 0D PROP0ETAR0O 0N 7SELECT D0ST0NCT 0D COMPRADOR FROM ANT04<EDADES8! La subconsulta de&uel&e la lista de com!radores, # el a!ellido es im!reso !ara un Anti8ue OCner si # slo si el ID%Pro!ietario a!arece en la lista de la subconsulta ?tambi=n llamada lista de candidatos@. "ota$ en al:unas DB/9, el i:ual !uede ser usado de la misma <orma 8ue I", aun8ue, !or !re&isin, I" es una me or eleccin. Para un e em!lo de actuali5acin, nosotros sabemos 8ue el 7ombre 8ue com!r la librer-a tiene el "ombre e8ui&ocado en la base de datos, =ste deber-a ser 6o7n$ =PDATE PROP0ETAR0OS ANT04<EDADES SET NOM1REPROP0ETAR0O ' +DoEn+ %&ERE 0D PROP0ETAR0O ' 7SELECT 0D COMPRADOR FROM ANT04<EDADES %&ERE PROD=CTO ' +LibrerFa+8! Primero, la subconsulta encuentra el ID%com!rador de la !ersona?s@ 8ue com!r la librer-a, des!u=s la consulta de salida actuali5a el a!ellido. Kecuerda esta re:la sobre las subconsultas$ cuando tienes una subconsulta como !arte de una condicin JEEKE, la clIusula 9elec en la subconsulta tiene 8ue tener columnas 8ue concuerden en nNmero # ti!o con a8uellas 8ue <ormen !arte de la condicin JEEKE de la subconsulta. En otras !alabras, si tienes BJEEKE Column"ame F ?9ELECT...@>B, 9elect debe de tener slo una columna en ella, !ara coincidir con la salida en la clIusula J7ere, # estas deberIn de coincidir en ti!o. E5 STS " )LL EYI9T9 usa una subconsulta como condicin, donde la condicin es &erdadera si la subconsulta de&uel&e al:una <ila, # <alsa si la subconsulta no de&uel&e nin:una <ila> esta es una caracter-stica no intuiti&a con slo al:unos usos. 9in embar:o, si un em!leado 8uiere &er la lista de OCners slo si 7a# sillas dis!onibles, intenta$ SELECT NOM1REPROP0ETAR0O, APELL0DOPROP0ETAR0O FROM PROP0ETAR0OS ANT04<EDADES %&ERE EA0STS 7SELECT # FROM ANT04<EDADES %&ERE PROD=CTO ' +Silla+8! 9i 7a# al:una silla en la columna Anti:Uedades, la subconsulta de&ol&erI una o &arias <ilas, 7aciendo la clIusula EYI9T9 &erdadera, 7aciendo 8ue 9DL liste los Anti8ue OCners. 9i no 7a 7abido sillas, nin:una <ila serI de&uelta !or la subconsulta. ALL es otra construccin !oco usual, como las consultas ALL !ueden ser usadas con di<erentes # sim!les m=todos, &eamos un e em!lo de consulta$ SELECT 0D COMPRADOR, PROD=CTO FROM ANT04<EDADES %&ERE PREC0O ' ALL
1'

7SELECT PREC0O FROM ANT04<EDADES8! Esto de&ol&erI el !recio de !roducto mIs alto ?o mIs de un !roducto si 7a# un em!ate@, # su com!rador. La subconsulta de&uel&e una lista de todos los !recios de la tabla Anti:Uedades, # la consulta de salida &a <ila !or <ila de la tabla Anti:Uedades # si el !recio es ma#or o i:ual a todos ?o ALL@ !recios en la lista, es listado, dando el !recio del !roducto mIs caro. La ra5n de BFB es 8ue el ma#or !recio en la lista !uede ser i:ual al de la lista, #a 8ue este !roducto estI en la lista de !recios. #! O! " #niones de salida Ea# ocasiones donde !uedes 8uerer &er los resultados de mNlti!les consultas a la &e5 combinando sus salidas> usa U"IO". Por e em!lo, si 8ueremos &er todos los ID%CO/PKADOK de la tabla de Anti:Uedades unto con los ID%PKOPIETAKIO de la tabla de PEDIDO9, usaremos$ SELECT 0D COMPRADOR FROM ANT04<EDADES =N0ON SELECT 0D PROP0ETAR0O FROM PED0DOS! 9DL re8uiere 8ue la lista de 9elect ?de columnas@ coincida, columna !or columna, en el ti!o de datos. En este caso ID%com!rador # ID%Pro!ietario son del mismo ti!o ?inte:er@. AdemIs, 9DL elimina automIticamente los du!licados cuando se usa U"IO" ?como si ellos <uera dos Bcon untosB@> en las consultas sim!les, tienes 8ue usar DI9TI"CT. La unin de salida es usada cuando una consulta de unin estI BunidaB con <ilas no incluidas en la unin, # son es!ecialmente Ntiles si las B<la:sB son incluidas. Primero obser&a la consulta$ SELECT 0D PROP0ETAR0O, +is in bo$E Pedidos G An$i*Hedades+ FROM PED0DOS, ANT04<EDADES %&ERE 0D PROP0ETAR0O ' 0D COMPRADOR =N0ON SELECT 0D COMPRADOR, +is in An$i*Hedades onlI+ FROM ANT04<EDADES %&ERE 0D COMPRADOR NOT 0N 7SELECT 0D PROP0ETAR0O FROM PED0DOS8! Esta consulta 7ace una unin !ara listar todos los !ro!ietarios 8ue estIn en ambas tablas, # !one una l-nea eti8ueta des!u=s de ID re!itiendo la cita. La U"IO" une esta lista con al si:uiente lista. La se:unda lista es :enerada !rimero listando a8uellos ID 8ue no estIn en la tabla Pedidos, :enerando una lista de ID e;cluidos de la consulta de unin. Entonces, cada <ila en la tabla Anti:Uedades es escaneada, # si el ID%com!rador no estI en esta lista de e;clusin, es listado con su cita eti8ueta. Debe 7aber un modo mIs sencillo de 7acer esta lista, !ero es di<-cil :enerar la in<ormati&a cita de te;to. Este conce!to es mu# Ntil en situaciones donde la cla&e !rimaria estI relacionada con una cla&e a ena, !ero el &alor de la cla&e a ena !ara al:unas cla&es !rimarias es "ULL. Por e em!lo, en una tabla, la cla&e !rimaria es &endedor, # en otra tabla es clientes, con el nombre de los &endedores en la misma <ila. 9in embar:o, si un &endedor no tiene clientes, el nombre de esta !ersona no a!arecerI en la tabla de clientes. La unin de salida es usada si el listado de todos los &endedores
1(

&a 7a ser im!reso, unto con sus clientes, aun8ue el &endedor no est= en la tabla de clientes, !ero estI en la tabla de &endedores. En otro caso, el &endedor serI listado con cada cliente.

C),-T#LO ?/ S0L Em+e+ido


S0L em+e+ido Un <eo e em!lo ?no escribas un !ro:rama como este, esto es slo con !ro!sitos educati&os@ .Z L Para &erlo, a8u- tienes un !ro:rama e em!lo 8ue usa 9DL embebido. 9DL embebido !ermite a los !ro:ramadores conectar con una base de datos e incluir cdi:o 9DL en su !ro:rama, # !oder usar, mani!ular # !rocesar datos de la base de datos. L Este e em!lo de !ro:rama en C ?usando 9DL embebido@ im!rimirI un in<orme. L Este !ro:rama deberI ser !recom!ilado !ara las sentencias 9DL, antes de la com!ilacin normal. L Las !artes EYEC 9DL son las mismas ?estIndar@, !ero el cdi:o C restante deberI ser cambiado, inclu#endo la declaracin de &ariables si estIs usando un len:ua e di<erente. L9DL embebido cambia de sistema a sistema, as- 8ue, una &e5 mIs, com!rueba la documentacin, es!ecialmente la declaracin de &ariables # !rocedimientos, en donde las consideraciones del DB/9 # el sistema o!erati&o son cruciales. Z. .Z ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ. .Z E9TE PKO,KA/A "O E9 CO/PILABLE O E6ECUTABLE Z. .Z 9U PKOPO9ITO E9 9]LO DE 9E0IK DE E6E/PLO Z. .ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ. ^include Gstdio.7_ .Z Esta seccin declara las &ariables locales, estas deberIn ser las &ariables 8ue tu !ro:rama use, !ero tambi=n las &ariables 9DL !odrIn ser utili5adas !ara tomar o dar &alores Z. EYEC 9DL BE,I" DECLAKE 9ECTIO"> int ID%com!rador> c7ar "ombre`144a, A!ellidos`144a, Producto`144a> EYEC 9DL E"D DECLAKE 9ECTIO"> .Z Esto inclu#e la &ariable 9DLCA , a8u- !uede 7aber al:Nn error si se com!ilase. Z. EYEC 9DL I"CLUDE 9DLCA> main?@ b .Z Este es un !osible camino !ara conectarse con la base de datos Z. EYEC 9DL CO""ECT UserID.PassCord> .Z Este cdi:o in<orma si estIs conectado a la base de datos o si 7a 7abido al:Nn error durante la cone;inZ. i<?s8lca.s8lcode@ b !rint<?Printer, BError conectando al ser&idor de la base de datos.cnB@> e;it?@> d !rint<?BConectado al ser&idor de la base de datos.cnB@> .Z Esto declara un BCursorB. Sste es usado cuando una consulta de&uel&e mIs de una <ila, # una o!eracin &a a ser reali5ada en cada <ila resultante de la consulta. Con cada <ila establecida !or
11

esta consulta, lo usare en el in<orme. Des!u=s BWetc7B serI usado !ara sacar cada <ila, una a una, !ero !ara la consulta 8ue estI actualmente e ecutada, se usarI el estamento BO!enB. El BDeclareB sim!lemente establece la consulta.Z. EYEC 9DL DECLAKE ProductoCursor CUK9OK WOK 9ELECT PKODUCTO, ID%CO/PKADOK WKO/ A"TI,eEDADE9 OKDEK BX PKODUCTO> EYEC 9DL OPE" ProductoCursor> .Z fLL Podr-as desear !oner un blo8ue de c7e8ueo de errores a8u-. LLf Z. .Z Wetc7 !one los &alores de la Bsi:uienteB <ila de la consulta en las &ariables locales, res!ecti&amente. 9in embar:o, un B!rimin: <etc7B ?t=cnica de !ro:ramacin@ debe ser 7ec7a antes. Cuando el cursor estI <uera de los datos, un cdi:o 9DL debe de ser :enerado !ara !ermitirnos salir del bucle. Para sim!li<icar, el bucle serI de ado cuando ocurra cual8uier cdi:o 9DL, incluso si es un cdi:o de error. De otra manera, un cdi:o de c7e8ueo es!ec-<ico deber-a de ser !re!aradoZ. EYEC 9DL WETCE ProductoCursor I"TO $Producto, $ID%com!rador> C7ile?Hs8lca.s8lcode@ b .Z Con cada <ila, ademIs 7acemos un !ar de cosas. Primero, aumentamos el !recio \2 ?7onorarios !or tramitaciones@ # e;traemos el nombre del com!rador !ara !onerlo en el in<orme. Para 7acer esto, usaremos U!date # 9elect, antes de im!rimir la l-nea en la !antalla. La actuacli5acin, sin embar:o, asume 8ue un com!rador dado slo 7a com!rado uno de todos los !roductos dados, o sino, el !recio serI incrementado demasiadas &eces. Por otra !arte, una BWilaIDB !odr-a 7aber sido utili5ada ?&er documentacin@. AdemIs obser&a los dos !untos antes de los nombres de las &ariables locales cuando son usada dentro de sentencias de 9DL.Z. EYEC 9DL UPDATE A"TI,eEDADE9 9ET PKECIO F PKECIO f 2 JEEKE PKODUCTO F $Producto A"D ID%CO/PKADOK F $ID%com!rador> EYEC 9DL 9ELECT "O/BKEPKOPIETAKIO, APELLIDOPKOPIETAKIO I"TO $"ombre, $A!ellidos WKO/ PKOPIETAKIO9%A"TI,eEDADE9 JEEKE ID%CO/PKADOK F $ID%com!rador> !rint<?BO'2s O'2s O'2sB, "ombre, A!ellidos, Producto@> .Z Weo in<ormeL slo !ara !ro!ositos de e em!loH. 0eamos la si:uiente <ila Z. EYEC 9DL WETCE ProductoCursor I"TO $Producto, $ID%com!rador> d .Z Cierra el cursor, entre:a los cambios ?&er deba o@, # sale del !ro:rama Z. EYEC 9DL CLO9E ProductoCursor> EYEC 9DL CO//IT KELEA9E> e;it?@> d

12

C),-T#LO @/ Cuestiones Comunes " Tpicos )%an=ados


Por qu no puede preguntar simplemente por las tres primeras filas de la ta la A Por8ue en las bases de datos relacionales, las <ilas son insertadas en un orden !articular, esto es, el sistema las inserta en un orden arbitrario> as-, 8ue slo !uedes !edir <ilas usando un &Ilida construccin 9DL, como OKDEK BX, etc. Qu es eso de !!L " !#L$ DDL ?Data De<inition Lan:ua:e@ se re<iere a ?en 9DL@ a la sentencia de creacin de tabla... D/L ?Data /ani!ulation Lan:ua:e@ se re<iere a las sentencia 9elect, U!date, Insert # Delete. %o son las ta las de las ases de datos como fic&eros$ Bueno, el DB/9 almacena los datos en <ic7eros declarados !or los administrados del sistema antes de 8ue nue&as tablas sean creadas ?en :randes sistemas@, !ero el sistema almacena los datos en un <ormato es!ecial, # !uede diseminar los datos de una tabla sobre muc7os arc7i&os. En el mundo de la base de datos, un con unto de arc7i&os creados !or la base de datos es llamado Btables!aceB. En :eneral, en !e8ueTos sistemas, todos lo relacionado con una base de datos ?de<iniciones # todos los datos de la tabla@ son :uardados en un arc7i&o. Sn las ta las de datos como &ojas diseminadas$ "o, !or dos ra5ones. Primeras, las 7o as diseminadas !ueden tener datos en una celda, !ero una celda es mIs 8ue una sim!le interseccin de <ilaLcolumna. De!endiendo del so<tCare de diseminacin de 7o as, una celda !uede contener <ormulas # <ormatos, los cuales no !ueden ser tenidos !or una tabla de una base de datos. 9e:undo, las celdas diseminadas son usualmente de!endientes de datos en otras celdas. En las bases de datos, las celdas son inde!endientes, e;ce!to 8ue las columnas est=n l:icamente relacionadas ?!or suerte, una <ila de columnas, describe, en con unto, una entidad@, #, cada <ila en una tabla es inde!endiente del resto de <ilas. Cmo puedo importar un arc&i'o te(to de datos dentro de una ase de datos$ Bueno, no !uedes 7acerlo directamente... debes usar una utilidad, como BOracleQs 9DLZLoaderB, o escribir un !ro:rama !ara car:ar los datos en la base de datos. Un !ro:rama !ara 7acerlo sim!lemente ir-a de re:istro en re:istro de un arc7i&o te;to, di&idi=ndolo en columnas, # 7aciendo un Insert dentro de la base de datos. Qu es un esquema$ Un es8uema es un con unto l:ico de tablas, como la base de datos Anti:Uedades arriba... usualmente, se !iensa en =l sim!lemente como Bla base de datosB, !ero una base de datos !uede contener mIs de un es8uema. Por e em!lo, un es8uema estrella estI com!uesto de tablas, donde una :ran # central tabla tiene toda la in<ormacin im!ortante, con la 8ue se accede, &-a cla&es a enas, a tablas dimensionales, las cuales tienen in<ormacin de detalle, # !ueden ser usadas en una unin !ara crear in<ormes detallados. )a" alg*n filtro en general que puede usar para &acer mis consultas SQL " ases de datos mejores " m+s r+pidas (optimi,adas)$ Puedes intentar, si !uedes, e&itar e;!resiones en 9elects, tales como 9ELECT Columna A f Columna B, etc. La consulta o!timi5ada de la base de datos, la !orcin de la DB/9 8ue determina el me or camino !ara conse:uir los datos deseados <uera de la base de datos, tiene e;!resiones de tal <orma 8ue !uede re8uerir mIs tiem!o recu!erar los datos 8ue si las columnas <ueran seleccionadas de <orma normal, # las e;!resiones se mane aran pro2ramticamente/ 9i estas usando una unin, trata de tener las columnas unidas !or -ndices ?desde ambas tablas@. Cuando ten:as dudas, -ndice.
13

A no ser 8ue ten:as mNlti!les cuentas o consultas com!le as, usa COU"T?Z@ ?el nNmero de <ilas :eneradas !or la consulta@ me or 8ue COU"T?"ombre%Columna@. Qu es normali,acin$ "ormali5acin es una t=cnica de diseTo de bases de datos 8ue su:iere un cierto criterio en la construccin del diseTo de una tabla ?decidir 8ue columnas tendrI cada tabla, # creando la estructura de cla&es@, donde la idea es eliminar la redundancia de los datos noL cla&es entre tablas. "ormali5acin se re<iere usualmente a condiciones de <orma, # slo introducir= las tres !rimeras, aun8ue es usual el uso de otras mIs a&an5adas, como la cuarta, 8uinta, Bo#ceLCodd...@ La ,rimera 1orma !ormal se re<iere a mo&er los datos en di<erentes tablas donde los datos de cada tabla son de ti!o similar, dando a cada tabla una cla&e !rimaria. Poner los datos en la Se2unda 1orma !ormal se re<iere a remo&er a otras tablas datos 8ue slo de!enden de !arte de la cla&e. Por e em!lo, si 7ubiera de ado los nombres de anti:uos !ro!ietarios en la tabla de !roductos, esta no estarI en la 9e:unda Worma "ormal, !or8ue los datos serIn redundantes> el nombre serI re!etido !ara cada !roducto del 8ue se sea !ro!ietario> teniendo en cuenta 8ue los nombres estIn almacenados en su !ro!ia tabla. Los nombre en si mismos no tienen nada 8ue 7acer con los !roductos, slo las identidades de los com!radores # &endedores. La Tercera 1orma !ormal in&olucra des7acerse de todo a8uello de las tablas 8ue no de!enda solamente de la cla&e !rimaria. 9olo inclu#e in<ormacin 8ue es de!endiente de la cla&e, # mue&e a otras tablas 8ue son inde!endientes de la cla&e !rimaria, # crea cla&es !rimarias !ara las nue&as tablas. Ea# al:una redundancia en cada <orma, # si los datos estIn en la (W", tambi=n lo estarIn en la 1W" # en la 'W", # si lo estIn en la 'W", tambi=n lo estarIn en la 1W". En t=rminos de diseTo de datos, almacenar los datos, de tal manera, 8ue cual8uier columna noLcla&e !rimaria est= en de!endencia slo de la entera cla&e !rimaria. 9i obser&as el e em!lo de base de datos, &erIs 8ue la Nnica <orma de na&e:ar a tra&=s de la base de datos es utili5ando uniones usando columnas cla&e. Otros dos im!ortantes !untos en una base de datos es usar buenos, consistentes, l:icos, # enteros nombres !ara las tablas # las columnas, # usar nombres com!letos en la base de datos tambi=n. En el Nltimo !unto, mi base de datos es <alta de nombres, as- 8ue uso cdi:os num=ricos !ara la identi<icacin. Es, usualmente, me or, si es !osible, tener cla&es 8ue, !or si misma, sea e;!li8uen, !or e em!lo, a cla&e me or !uede ser las !rimeras cuatro letras del a!ellido # la !rimera inicial del !ro!ietario, como 6O"EB !or Bill 6ones ?o !ara e&itar redundancias, aTadir un nNmero, 6O"EB1, 6O"EB'...@. Cu+l es la diferencia entre una simple consulta de fila " una m*ltiple consulta de filas " por qu es importante conocer la diferencia$ Primero, !ara cubrir lo ob&io, una consulta de una slo <ila es una consulta 8ue slo de&uel&e una <ila como resultado, # una consulta de mNlti!les <ilas es una consulta 8ue de&uel&e mIs de una <ila como resultado. 9i una consulta de&uel&a una <ila o mIs esto de!ende enteramente del diseTo ?o es8uema@ de las tablas de la base de datos. Como escritor de consultas, debes conocer el es8uema, estar se:uro de incluir todas las condiciones, # estructurar tu sentencia 9DL a!ro!iadamente, de <orma 8ue consi:as el resultado deseado ?aun8ue sea una o mNlti!les <ilas@. Por e em!lo, si 8uieres estar se:uro 8ue una consulta de la tabla Pro!ietarios%Anti:Uedades de&uel&e slo una <ila, considera una condicin de i:ualdad de la columna de la cla&e !rimaria, ID%Pro!ietario. Tres ra5ones &ienen inmediatamente a la mente de !or 8u= esto es im!ortante. Primero, tener mNlti!les <ilas cuando tN slo es!erabas una, o &ice&ersa, !uede si:ni<icar 8ue la consulta es errnea, 8ue la base de datos estI incom!leta, o
1+

sim!lemente, 7as a!rendido al:o nue&o sobre tus datos. 9e:undo, se estIs usando una sentencia U!date o Delete, debes de estar se:uro 8ue la sentencia 8ue estIs escribiendo &a a 7acer la o!eracin en la <ila ?o <ilas@ 8ue tN 8uieres... o sino, estarIs borrando o actuali5ando mIs <ilas de las 8ue 8uer-as. Tercero, cual8uier consulta escrita en 9DL embebido debe necesitar ser construida !ara com!letar el !ro:rama l:ico re8uerido. 9i su consulta, !or otra !arte, de&uel&e mNlti!les <ilas, deberIs usar la sentencia Wetc7, # mu# !robablemente, al:Nn ti!o de estructura de bucle !ara el !rocesamiento iterati&o de las <ilas de&ueltas !or la consulta. Qu &a" de las relaciones$ Otra cuestin de diseTo... el t=rmino BrelacionesB usualmente se re<iere a las relaciones entre cla&es a enas # !rimarias entre tablas. Este conce!to es im!ortante !or8ue cuando las tablas de una base de datos relacional es diseTada, estas relaciones debe de ser de<inidas !or8ue determinan 8ue columnas son o no cla&es !rimarias o cla&es a enas. Debes de 7aber oido al:o sobre el Dia:rama de EntidadLKelacin, 8ue es una &ista :rI<ica de las tablas en el es8uema de una base de datos, con l-neas conectando columnas relacionadas entre tablas. /ira el dia:rama en el <inal de esta seccin o al:unos de los sitios deba o relacionados con =ste t!ico, #a 8ue 7a# di<erentes maneras de dibu ar dia:ramas de ELK. Pero !rimero, &eamos cada ti!o de relacin ... Una relacin #no-a-#no si:ni<ica 8ue tu tienes una columna cla&e !rimaria 8ue estI relacionada con una columna cla&e a ena, # 8ue !ara cada &alor de la cla&e !rimaria, 7a# un &alor de cla&e a ena. Por e em!lo, en el !rimer e em!lo, la Em!lo#eeAddressTable, nosotros aTadimos una columna ID%E/PLEADO. Entonces, la Em!lo#eeAddressTable estI relacionada con la Tabla%estadistica%em!leados ?se:undo e em!lo de tabla@ !or medio de este ID%E/PLEADO. Es!ec-<icamente, cada em!leado en la Em!lo#eeAddressTable tiene estad-sticas ?una <ila de datos@ en la Tabla%estadistica%em!leados. Incluso, !iensa 8ue este es un e em!lo e<ectuado, es una relacin de B1L1B. AdemIs, tener en cuenta, el BtieneB en <uerte... cuando se e;!resa una relacin, es im!ortante describir la relacin con un &erbo. Las otras dos ti!os de relaciones !ueden o no !uede usar cla&es !rimarias l:icas # cla&es a enas necesariamente... esto es estrictamente una llamada del sistema. La !rimera de =stas es la relacin UnoLaL/uc7os ?B1L/B@. Esto si:ni<ica 8ue !ara cada &alor de la columna en una tabla, 7a# uno o mIs &alores relaciones en otra tabla. EabrI 8ue aTadir de <orma necesaria cla&es en el diseTo o, !osiblemente, al:Nn ti!o de columna identi<icador deberI ser usado !ara establecer la relacin. Un e em!lo !odr-a ser 8ue !ara todos ID%Pro!ietario en la tabla Pro!ietarios%Anti:Uedades, 7ubierIn uno o mIs ?cero tambi=n !ude ser@ !roductos com!rados en la tabla Anti:Uedades ?&erbo$ com!rar@. Winalmente, la relacin de Muc6os-a-Muc6os ?B/L/B@ :eneralmente no in&olucra cla&es, # usualmente in&olucra columnas identi<icati&as. La inusual ocurrencia de un B/L /B si:ni<ica 8ue una columna en una tabla estI relacionada con otra columna en otra tabla, # !ara cada &alor de uno de estas dos columnas, 7a# uno o mIs &alores relacionados en la corres!ondiente columna en la otra tabla ?# &ice&ersa@, o mIs comNnmente !osible, dos tablas tienen una relacin B1L/B !ara cada una ?dos relaciones, una 1L/ !ara cada camino@. Un ?malo@ e em!lo o =sta mIs comNn situacin !odr-a ser si tu&ieras una base de datos 8ue asi:nara traba o, donde una tabla tu&iera una <ila !or cada em!leado # traba o asi:nado, # otra tabla tu&iera una <ila !or traba o !or cada uno de los traba adores asi:nados. A8u-, !odr-as tener mNlti!les <ilas !or cada em!leado en la !rimera tabla, o !ro cada traba o asi:nado, # mNlti!les <ilas !or cada traba o en la se:unda tabla, una !or em!leado asi:nado al !ro#ecto. Estas tablas tienen un /L/$ cada em!leado en la !rimera
1*

tabla !uede tener tantos traba os asi:nados de la se:unda tabla como traba os 7a#a en ella, # cada traba o !uede tener tanto em!leados como em!leados 7a#a en la !rimera tabla. Esto es la !unta del iceber: en este t!ico... mira los linVs aba o !ara mIs in<ormacin # mira en dia:rama de deba o !ara un e em!lo sim!li<icado de un dia:rama de ELK. 7tt!$..C(.one.net.g 7o<<man.erdia:rm.:i<7tt!$..C(.one.net.g 7o<<man.erdia:rm.:i< Qu &a" de algunas construcciones no est+ndar importantes de SQL (pregunta e(tremadamente com*n)$ Bueno, &eamos la si:uiente seccin...

C),-T#LO B/ S0L no estndar


!TERSECT # /I"U9 son como la sentencia U"IO", e;ce!to 8ue I"TEK9ECT !roduce <ilas 8ue a!areces en ambas consultas, # /I"U9 !roduce <ilas 8ue resultan de la !rimera consulta, !ero no de la se:unda. ,eneracin de construcciones de in<orme$ la clIusula COM,#TE es !uesta al <inal de una consulta !ara !oner el resultado en una <uncin a:re:ada al <inal del listado, como CO/PUTE 9U/?PKECIO@> Otra o!cin es usar el brea, l:ico$ de<inir un brea, !ara di&idir un resultado de una consulta dentro de :ru!os basados en una columna, como BRE)$ O" ID%CO/PKADOK. Entonces, !ara !roducir un resultado des!u=s de listar un :ru!o, usa CO/PUTE 9U/ OW PKECIO O" ID%CO/PKADOK. 9i, !or e em!lo, usas las tres clIusulas untas ?BKEAR !rimero, CO/PUTE des!u=s del BKEAR, # CO/PUTE sobre todo@, obtendrIs un in<orme 8ue a:ru!e los !roductos !or su ID%com!rador, listando la suma de Precios des!u=s de cada :ru!o de !roductos de un ID%com!rador, #, des!u=s 8ue todos los :ru!os sean listados, la suma de todos los Precios listados, todos con cabeceras # l-neas :enerados !or 9DL. AdemIs, al:unos DB/9 !ermiten usar mIs <unciones en listas 9elect, e;ce!to 8ue estas <unciones ?al:unas <unciones de carIcter !ermite resultados de mNlti!les <ilas@ &a#an a ser usadas con un &alor indi&idual ?no :ru!os@, en consultas de sim!les <ilas. Las <unciones deben ser usadas slo con ti!os de datos a!ro!iados. A8u- 7a# al:unas <unciones /atemIticas$ 1unciones numCricas: 0alor absoluto. Con&ierte nNmero ne:ati&os en !ositi&os, o de a slo nNmeros !ositi&os. CE L759 Y es un &alor decimal 8ue serI redondeado 7acia arriba. 1LOOR759 Y es un &alor decimal 8ue serI redondeado 7acia aba o. 4RE)TEST75:(9 De&uel&e el mIs :rande de los dos &alores. LE)ST75:(9 De&uel&e el mIs !e8ueTo de los dos &alores. MO&75:(9 De&uel&e el resto de Y.X. ,OWER75:(9 De&uel&e Y ele&ado a X Kedondea Y a X lu:ares decimales. 9i se omite X, Y se redondea al RO#!&75:(9 entero mIs !r;imo. S 4!759 De&uel&e menos si YG4, sino un mIs. S0RT759 De&uel&e la ra-5 cuadrada de Y. )BS759
1)

1unciones de Caracteres LE1T7Dstrin2:59 De&uel&e los Y caracteres mIs a la i58uierda de la cadena. R 4HT7Dstrin2:59 De&uel&e los Y caracteres mIs a la derec7a de la cadena. #,,ER7Dstrin29 Con&ierte la cadena a ma#Nsculas. LOWER7Dstrin29 Con&ierte la cadena a minNsculas. ! TC),7Dstrin29 Con&ierte el !rimer carIcter de la cadena a ma#Nscula. LE!4TH7Dstrin29 De&uel&e el nNmero de caracteres de cadena. Dstrin2EEDstrin2 Concatena dos cadenas de te;to. Kellena la cadena !or la i58uierda con el Z ?o el carIcter 8ue 7a#a L,)&7Dstrin2:5:FGF9 entre las comillas@, !ara 7acer la cadena Y caracteres mIs lar:a. Kellena la cadena !or la derec7a con el Z ?o con el carIcter 8ue 7a#a R,)&7Dstrin2:5:FGF9 entre las comillas@, !ara 7acer la cadena Y caracteres mIs lar:a. S#BSTR7Dstrin2:5:(9 E;trae X letras de la cadena comen5ando en la !osicin Y. Cual8uier "ull de la Gcolumn serI sustituido !or lo 8ue 7a#a en !3L7Dcolumn:D%alue9 G&alue. 9i el &alor de la columna no el "ULL, "0L no tiene e<ecto

C),-T#LO H/ Resumen de Sinta8is " LinIs importantes Resumen de Sinta8is/ 9lo !ara usuarios a&an5ados. A8u- estIn las <ormas :enerales de las sentencias 8ue 7emos &isto en este tutorial, ademIs de al:una in<ormacin e;tra. KECUEKDA 8ue todas estas sentencias !ueden o no !ueden estar dis!onibles en tu sistema, as- 8ue com!rueba la documentacin del mismo. ALTER TA1LE 2TA1LE NAME ADDJDROPJMOD0F? 7COL=MN SPEC0F0CAT0ONKSL"""ver Crea$e Table8! Te !ermite aTadir, borrar o modi<icar una columna o columnas de la tabla, o cambiar la es!eci<icacin ?ti!o de datos, etc@ de una columna e;istente> esta sentencia tambi=n es usada !ara las es!eci<icaciones <-sicas de la tabla ?como estI almacenada, etc.@, !ero estas de<iniciones estas es!eci<icadas en el DB/9, as- 8ue l=ete la documentacin. Tambi=n, estas es!eci<icaciones <-sicas son usadas con la sentencia Create Table, cuando una tabla es creada !or !rimera &e5. AdemIs, solo una o!cin !uede ser reali5ada !or la sentencia Alter Table en una sim!le sentencia$ add, dro! o modi<icar. CO//IT> Eace cambios 7ec7os !or al:Nn sistema !ermanente de base de datos ?desde el Nltimo CO//IT> conocido !or transaccin@ CREATE K=N0B=EL 0NDEA 20NDEA NAME ON 2TA1LE NAME 72COL=MN L0ST8! LLU"IDUE es o!cional> entre corc7etes. CREATE TA1LE 2TA1LE NAME 72COL=MN NAME 2DATA T?PE K72S0ME8L 2COL=MN CONSTRA0NT, ...otras columnas> ?tambi=n &alido con ALTEK TABLE@
'4

LLdonde 9IhE slo se utili5a en determinados ti!os, # CO"9TKAI" inclu#e las si:uientes !osibilidades ?<or5ado automItico !or la DB/9> causas de <allos # :eneracin de errores@$ 1. !#LL o !OT !#LL ?&er arriba@ '. #! 0#E <uer5a 8ue dos <ilas no !uedan tener el mismo &alor !ara esa columna. (. ,R M)R( $E( le dice a la base de datos 8ue la columna es la columna cla&e !rimaria ?slo usado si la cla&e !rimaria es slo un columna, sino, la sentencia PKI/AKX REX ?columna, columna,...@ a!arece des!u=s de la de<inicin de la Nltima columna@ 1. CHEC$ !ermite 8ue se com!rueba una condicin cuando un dato es esa columna es actuali5ado o insertado> !or e em!lo, C&EC:7PREC0O )8, 7ace 8ue el sistema com!ruebe 8ue el !recio de la columna es ma#or de cero antes de ace!tar el &alor... al:unas &eces im!lementado como sentencia CO!STR) !T. 2. &E1)#LT inserta el &alor !or de<ecto en la base de datos si una <ila es insertada sin insertar nin:Nn dato en la columna> !or e em!lo$ 1ENEF0C0OS 0NTE4ER DEFA=LT'3))))! 3.1ORE 4! $E( 7ace lo mismo 8ue la cla&e !rimaria, !ero es se:uida !or$ REFERENCES 2TA1LE NAME 72COL=MN NAME8, 8ue 7acen re<erencia a la cla&e !rimaria relacionada. CREATE >0E% 2TA1LE NAME AS 2B=ER?! DELETE FROM 2TA1LE NAME %&ERE 2COND0T0ON! 0NSERT 0NTO 2TA1LE NAME K72COL=MN L0ST8L >AL=ES 72>AL=E L0ST8! ROLLB)C$J --des7ace los cambios en la base de datos 8ue 7allas 7ec7o desde el Nltimo Commit... cuidadoH Al:unos so<tCare usan automIticamente CommitQs en sistemas 8ue usan construcciones de transaccin, as- 8ue el comando KollBacV !odr-a no ir. SELECT KD0ST0NCTJALLL 2L0STA DE COL=MNAS, F=NCT0ONES, CONSTANTES, ETC" FROM 2L0STA DE TA1LAS OR >0STAS K%&ERE 2COND0C0ON7S8L K4RO=P 1? 24RO=P0N4 COL=MN7S8L K&A>0N4 2COND0T0ONL KORDER 1? 2ORDER0N4 COL=MN7S8 KASCJDESCLL! LLdonde A9CiDE9C !ermite ordenas en orden A9Cendente o DE9Cendente =PDATE 2TA1LE NAME SET 2COL=MN NAME ' 2>AL=E K%&ERE 2COND0T0ONL! L si no se com!leta la clIusula J7ere, todas las <ilas serIn actuali5adas de acuerdo con la sentencia 9ET.

'1

Anda mungkin juga menyukai