Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Versin 3.63
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"#
CAP1TULO 7. S+L em'e'ido CAP1TULO 8. Pre-untas S+L comunes & Tpicos A#an%ados
Primera ,orma Normal Se-unda ,orma Normal Tercera ,orma Normal $elacin Uno9a9Uno $elacin Uno9a9)uc:os $elacin )uc:os9a9)uc:os
CAP1TULO ;. S+L no est*ndar CAP1TULO <. $esumen de sinta=is & Lin>s Importantes
$esumen de sinta=is Lin>s importantes
A-radecimientos
CAP1TULO 1. Introduccin
ases de la sentencia SELEC! En una B? relacional@ los datos son almacenados en ta'las. Un eAemplo de ta'la puede contener el ?NI@ el nom're B la ?ireccinC
Ta'laDdireccionesDempleados ?NI "(E<;;(E 278"(<EG Apellidos 3arcFa Lpe% Nom're Antonio Huan ?ireccin C& )aBor " Pl. ABuntamiento Ciudad .alencia Alicante
A:ora@ #amos a #er Iue :a'rFa Iue :acer para #er las direcciones de todos los empleados. Utili%a la sentencia SELECT de la si-uiente maneraC SELECT Nombre, Apellidos, Direccin, Ciudad, Provincia FROM Tabla direcciones empleados! Los si-uiente es el resultado de tu consulta de la B?C Nom're Antonio Apellidos 3arcFa ?ireccin C& )aBor" Ciudad Pro#incia
""""""""""""""""""""""""""""""""""""""""""""""""""""""
.alencia .alencia
Huan
Lpe%
La e=plicacin de lo Iue aca'as de :acer es la si-uiente@ :as pre-untado por todos los datos de la Ta'laDdireccionesDempleados@ B especF/icamente@ :as pre-untado por la columnas llamadas Nom're@ Apellidos@ ?ireccin@ Ciudad B Pro#incia. ?ate cuenta Iue los nom're de las columnas B los nom'res de las ta'las no tienen espacios...Jstos de'en ser escritos con una pala'raK B Iue la sentencia aca'a con un punto B coma LKM. La /orma -eneral para una sentencia SELECT@ recuperando las /ilas de una ta'la esC SELECT NombreColumna, NombreColumna, """ FROM NombreTabla! Para co-er todas las columnas de una ta'la sin escri'ir todos los nom'res de columna@ usaC SELECT # FROM NombreTabla! Cada administrador de B?Ns L?B)S@ O?ata )ana-ement SBstemOM B tipo de so/tPare de B?Ns tienen di/erentes mJtodos para identi/icarse en la 'ase de datos e introducir comandos S+L.
Seleccin Condicional
Para un maBor estudio de la sentencia SELECT@ ec:a un #ista%o a una nue#a ta'la de eAemploC
Ta'laDestadisticaDempleados CodDempleado 1G1 1G7 17" "17 "22 (GG ((7 2GG 221 #$eradores %elacionales Salario ;7GGG 87GGG 8GGGG 8GGGG 7GGGG 27GGG 2GGGG ("GGG "<GGG Bene/icios 17GGG 17GGG 17GGG 1"7GG 1"GGG 1GGGG 1GGGG ;7GG ;7GG Car-o
Encar-ado
Encar-ado
Encar-ado
5aB seis operadores relacionales en S+L@ B despuJs de introducirlos@ #eremos como usarlosC
Q R SQ R RQ Q
I-ual No i-ual L#er manual para m*s in/ormacinM )enor Iue )aBor Iue )enor o i-ual a )aBor o i-ual Iue
La cl*usula &'E%Ees usada para especi/icar Iue slo ciertas /ilas de la ta'la sean mostradas@ 'as*ndose en el criterio descrito en esta cl*usula 5E$E. Es m*s /*cil de entender #iendo un par de eAemplosC Si Iuieres #er el CodDempleado de aIuellos Iue ten-an un salario por encima de 7G.GGG@ usa la si-uiente e=presinC
SELECT Cod empleado FROM Tabla es$adis$ica empleados %&ERE Salario ' ())))! O'ser#a Iue el si-no Q LmaBor o i-ual IueM :a sido usado@ Ba Iue Iueremos #er listados Auntos aIuellos Iue -anen m*s de 7G.GGG o i-ual a 7G.GGG . Esto muestraC CodDempleado 999999999999999 G1G 1G7 17" "17 "22 La descripcin 5E$E Salario Q 7G.GGG@ es conocida como condicin. Lo mismo puede ser utili%ado para la columnas de tipo te=toC SELECT Cod empleado FROM Tabla es$adis$ica empleados %&ERE Car*o ' +Encar*ado+! Esto muestra la cdi-o de todos los encar-ados. 3eneralmente@ con las columnas de te=to@ usa i-ual o no i-ual a@ B comprue'a Iue el te=to Iue aparece en la condicin est* dentro de comillas simples.
El operador AN? Aunta dos o m*s condiciones@ B muestra slo las /ilas Iue satis/acen TO?AS las condiciones listadas. Por eAemploC SELECT Cod empleado FROM Tabla es$adis$ica empleados %&ERE Salario ,)))) AND Car*o ' -T.cnico/ El operador O$ Aunta dos o m*s condiciones@ B de#uel#e una /ila si AL3UNA de las condiciones listadas en #erdadera. Para #er todos aIuellos Iue -anan menos de 2G.GGG o tienen menos de 1G.GGG en 'ene/icios listados Auntos@ usa la si-uiente consultaC
SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE SALAR0O 2 ,)))) OR 1ENEF0C0OS 2 3))))! AN? & O$ pueden ser com'inadas@ por eAemploC SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O ' +Encar*ado+ AND SALAR0O 5)))) OR 1ENEF0C0OS 36)))! Primero@ S+L encuentra las /ilas donde el salario es maBor de 8G.GGG B la columna del car-o es i-ual a Encar-ado@ una #e% tomada esta nue#a lista de /ilas@ S+L 'uscar* si :aB otras /ilas Iue satis/a-an la condicin AN? pre#ia o la condicin Iue la columna de los Bene/icios sea maBor de 1".GGG. Consecuentemente@ S+L solo muestra esta se-unda nue#a lista de /ilas@ recordando Iue nadie con 'ene/icios so're 1".GGG ser* e=cluido Ba Iue el operador O$ incluBe una /ila si el resultado de al-una de las partes es .E$?A?E$O. ?ate cuenta Iue la operacin AN? se :a :ec:o primero. Para -enerali%ar este proceso@ S+L reali%a las operaciones AN? para determinar las /ilas donde las operaciones AN? se mantienen .E$?A?E$O LrecordarC todas las condiciones son #erdaderasM@ entonces estos resultados son usados para comparar con las condiciones O$@ B solo muestra aIuellas /ilas donde las condiciones unidas por el operador O$ se mantienen ciertas para al-una de las partes de la condicin.. Para reali%ar O$ antes de AN?@ p.e.@ si Iuisieras #er una lista de empleados -anando un -ran salario L7G.GGGM o con un -ran 'ene/icio L1G.GGGM@ B slo Iuieres Iue lo mire para los empleados con el car-o de Encar-ado@ usa parJntesisC SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O ' +Encar*ado+ AND 7SALAR0O ()))) OR 1ENEF0C0O 3))))8!
IN , E!&EEN
Un mJtodo /*cil de usar condiciones compuestas es usando IN o BET EEN. Por eAemplo si tu Iuieres listar todos los encar-ados B TJcnicoC SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O 0N 7+Encar*ado+, +T.cnico+8! O para listar aIuellos Iue -anen m*s o (G.GGG@ pero menos o i-ual Iue 7G.GGG@ usaC SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE SALAR0O 1ET%EEN 9)))) AND ())))! Para listar todos los Iue no est*n en este ran-o@ intentaC SELECT 0D EMPLEADO FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE SALAR0O NOT 1ET%EEN 9)))) AND ())))!
?e /orma similar@ NOT IN lista todas las /ilas e=cluBendo aIuellas de la lista IN.
-sando LI.E O'ser#a la Ta'laDestadisticaDempleados@ B di Iue Iuieres #er todas las personas en las cuales su apellido comience por OlOC@ intentaC SELECT 0D EMPLEADO %&ERE APELL0DOS L0:E +L;+! FROM TA1LA ESTAD0ST0CA EMPLEADOS El tanto por ciento LTM es usado para representar un posi'le car*cter Lsir#e como comodFnM@ Ba sea nUmero@ letra o puntuacin@ o para seleccionar todos los caracteres Iue puedan aparecer despuJs de OLO. Para encontrar las personas con el apellidos terminado en OLO@ usa VTLW@ o si Iuieres la VLW en medio de la pala'ra VTLTW. El VTW puede ser usado en lu-ar de cualIuier car*cter en la misma posicin relati#a a los caracteres dados. NOT LI!E muestra /ilas Iue no cumplen la descripcin dada. Otras posi'ilidades de uso de LI!E@ o cualIuiera de las condiciones anteriores son posi'les@ aunIue depende de IuJ ?B)S estJs usandoK lo m*s usual es consultar el manual@ o tu administrador de sistema so're la posi'ilidades del sistema@ o slo para estar se-uro de Iue lo Iue est*s intentando :acer es posi'le B correcto. Xste tipo de peculiaridades ser*n discutidas m*s adelante. Esta seccin slo pretende dar una idea de las posi'ilidades de consultas Iue pueden ser escritas en S+L.
-niones
En esta seccin@ slo estudiaremos las uniones de unin@ B interseccin@ Iue en -eneral son las m*s usadas. Un 'uen dise0o de una B? su-iere Iue cada lista de ta'la de datos sea considerada como una simple entidad@ B Iue la in/ormacin detallada puede ser o'tenida@ en una B? relacional@ usando ta'las adicionales B uniones. Primero considera los si-uientes eAemplos de ta'lasC
PropietariosDAnti-Yedades I?DPropietario G1 G" 17 "1 7G ApellidoPropietario Hones Smit: LaPson A>ins ,oPler Nom'rePropietario Bill Bo' Patricia Hane Sam
Pedidos I?DPropietario G" G" "1 17 ProductoPedido Ta'le Armario Silla EspeAo
Anti-Yedades I?D#endedor G1 G" 17 "1 7G G1 G" 17 G1 G" "1 7G Cla/es Primero@ #amos a estudiar el concepto de cla#es. Una cla/e $ri*aria es una columna o conAunto de columnas Iue identi/ican unF#ocamente el resto de datos en cualIuiera /ila. Por eAemplo@ en la ta'la PropietariosDAnti-Yedades@ la columna I?DPropietario identi/ica unF#ocamente esa /ila. Esto si-ni/ica dos cosasC dos /ilas no pueden tener el mismo I?DPropietario B@ aunIue dos propietarios tu#ieran el mismo nom're B apellidos@ la columna I?DPropietario #eri/ica Iue no ser*n con/undidos@ porIue la columna I?DPropietario podr* ser usada por el Administrador de la Base de ?atos L?B)SM para di/erenciarlos@ aunIue los nom'res sean los mismos. I?Dcomprador 7G 17 G" 7G G1 "1 "1 7G 17 "1 G" G1 Producto Cama Ta'le Silla EspeAo Armario Ca'inet Co/ee Ta'le Ca:air HePelrB Bo= PotterB Li'rerFa Plant Stand
Una cla/e ajena es una columna en una ta'la Iue es cla#e primaria en otra ta'la@ lo Iue si-ni/ica Iue cada dato en una columna con una cla#e aAena de'e de corresponder con datos@ en otra ta'la@ cuBa columna es cla#e primaria. En el len-uaAe ?B)S esta correspondencia es conocida como inte-ridad re/erencial. Por eAemplo@ en la ta'la Anti-Yedades@ tanto el I?Dcomprador como el I?D#endedor son cla#es aAenas de la cla#e primaria de la ta'la PropietariosDAnti-Yedades LI?DPropietarioK por supuesto@ se tiene Iue tener un propietario anti-uo antes de poder comprar o #ender cualIuier productoM@ por lo tanto@ en am'as ta'las@ las columnas I? son usadas para identi/icar los propietarios o compradores B #endedores@ B por lo tanto I?DPropietario es la cla#e primaria de la ta'la PropietariosDAnti-Yedades. En otras pala'ras@ todos estos datos OI?O son usados para re/erirse a los propietarios@ compradores@ o #endedores de anti-Yedades@ sin necesidad de usar sus nom'res reales.
Creando una -nin El propsito de estas cla#es es el poder re/erirse a datos de di/erentes ta'las@ sin tener Iue repetir los datos en cada una de ellas@ este es el poder de las 'ases de datos relacionales. Por eAemplo@ se pueden encontrar los nom'res de los Iue :an comprado una silla sin tener Iue listar el nom're completo de el comprador en la ta'la Anti-Yedades...puedes conse-uir el nom're relacionando aIuellos Iue compraron una silla con los nom'res en la ta'la de PropietariosDAnti-Yedades usando el I?DPropietario@ el cual relaciona los datos en las dos ta'las. Para encontrar los nom'res de aIuellos Iue compraron una silla@ usa la si-uiente consultaC SELECT APELL0DOPROP0ETAR0O, NOM1REPROP0ETAR0O FROM PROP0ETAR0OS ANT04<EDADES, ANT04<EDADES %&ERE 0D COMPRADOR ' 0D PROP0ETAR0O AND PROD=CTO ' +Silla+! ?ate cuenta de lo si-uiente so're la consulta... las ta'las in#olucradas en la relacin son listadas en la cl*usula ,$O) de la sentencia. En la cl*usula 5E$E@ primero o'ser#a Iue el P$O?UCTOQWSillaW restrin-e el listado a aIuellos Iue :an comprado una silla. Se-undo@ o'ser#a como las columnas I? son relacionadas de una ta'la a otra por el uso de la cl*usula I?DCO)P$A?O$QI?DP$OPIETA$IO. Slo cuando los I? coinciden B el o'Aeto comprado es una silla Lpor el AN?M@ los nom'res de la ta'la PropietariosDAnti-Yedades ser*n listados. ?e'ido a Iue la condicin de unin usada es el si-no i-ual@ esta unin se denomina interseccin. El resultado de esta consulta son dos nom'resC Smit:@ Bo' & ,oPler@ Sam. Para e#itar am'i-Yedades se puede poner el nom're de la ta'la antes del de la columna@ al-o comoC 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+! Sin em'ar-o@ como los nom'res de las columnas en cada ta'la son di/erentes@ esto no es necesario.
DIS!INC! 0 Eli*inando Du$licados Consideremos Iue Iuieres #er los I? B los nom'res de toda aIuellas persona Iue :aBa #endido una anti-Yedad. O'#iamente@ Iuieres una lista donde cada #endedor sea listado una #e%@ B no Iuieres sa'er cu*ntos artFculos a #endido una persona@ solamente el nom're de las personas Iue :an #endido al-una anti-Yedad Lpara contar@ #er la seccin pr=ima ,unciones A-re-adasM. Esto si-ni/ica Iue necesitaras decir en S+L Iue Iuieres eliminar las /ilas de #endedores duplicadas@ B slo listar cada persona una #e%. Para :acer esto@ uso la pala'ra cla#e DIS!INC!.
Primero@ necesitaremos una interseccin para la ta'la de PropietariosDAnti-Yedades para conse-uir los datos detallados de las personas@ apellidos B nom're. Sin em'ar-o@ recuerda Iue la columna I?D#endedor de la ta'la Anti-Yedades es una cla#e aAena para la ta'la PropietariosDAnti-Yedades@ B por tanto@ un #endedor podrFa ser listado m*s de una #e%@ por cada producto de la ta'la Anti-Yedades@ listando el I? B sus datos@ como Iueremos eliminar mUltiples coincidencias del I?D#endedor en nuestra lista@ usaremos ?ISTINCT en la columna donde las repeticiones pueden ocurrir. Para complicarlo un poco m*s@ adem*s Iueremos la lista ordenada al/a'Jticamente por el Apellido@ despuJs por el Nom're@ B por Ultimo por su I?DPropietario. Para ello@ usaremos la clausula #%DE% 1. 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 eAemplo@ o'tendremos un listado de todos los propietarios@ en orden al/a'Jtico por el Apellido. Para /uturas re/erencias LB si al-uien pre-untaM@ este tipo de uniones son consideradas en la cate-orFa de uniones interiores.
2lias , In3Su4consultas En esta seccin@ :a'laremos so're los Alias@ In B el uso de las su'consultas@ B como Jstas pueden ser usadas en un eAemplo con tres ta'las. Primero@ o'ser#a esta consulta Iue imprime el apellido de aIuellos propietarios Iue :an /ormulado un pedido B en IuJ consiste Jste@ solamente listando aIuellos cuBos pedidos pueden ser atendidos Lesto es@ :aB un #endedor Iue posee el producto pedidoM 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#eC Apellidos Producto Pedido 99999999999999999999999999999999 Smit: Ta'le Smit: Armario A>ins Silla LaPson EspeAo 5aB al-unas cosas a tener en cuenta so're esta consultaC 1. ". Primero@ el OApellidoO B el OProducto PedidoO en las lFneas Select de#uel#e los tFtulos en la salida. El O N & O$? son aliasK Jstos son dos nue#os nom'res para las dos ta'las listadas en la cl*usula ,$O) Iue son usado como pre/FAos para toda las notaciones con punto de los nom'res de las columnas en la consulta L#er arri'aM. Esto elimina am'i-Yedades@ especialmente en la cl*usula de interseccin 5E$E donde am'as ta'las tienen la columna I?DPropietario@ B la notacin con punto dice al S+L Iue estamos re/iriJndonos de dos di/erentes I?DPropietario de dos ta'las di/erentes.
(. 2.
O'ser#a Iue la ta'la de Pedidos est* utili%ada primero en la cl*usula ,$O)K esto ase-ura Iue el listado :ec:o 'as*ndose en esta ta'la@ B la ta'la AntiIuesOPners@ es solamente usado para la in/ormacin complementaria LapellidosM. )*s importante@ el AN? en la cl*usula 5E$E /uer%a en la su'consulta el ser in#ocada LOQAN4O or OQSO)EO@ son dos eIui#alente usos de INM. +uJ si-ni/ica esto@ la su'consulta se reali%a@ de#ol#iendo todos los productos Iue pertenecen a al-uien de la ta'la de Anti-Yedades@ como si no :u'iera la cl*usula 5E$E. AsF pues@ para Iue una /ila de la ta'la de Pedidos sea listada@ el ProductoPedido de'e de ser de#uelto en la lista de productos con propietario de la ta'la de Anti-Yedades@ Jsta lista un producto slo si el pedido puede ser cumplido por otro propietario. Puedes pensar Iue este es el caminoC la su'consulta de#uel#e un conAunto de productos los cuales son comparados con los de la ta'la PedidosK la condicin In es #erdadera slo si el producto deseado est* en el conAunto de#uelto de la ta'la Anti-Yedades. Adem*s@ date cuenta Iue este caso@ en el Iue :aB una anti-Yedad disponi'le para cada demanda@ o'#iamente no ser* siempre el caso. Adem*s@ o'ser#a Iue cuando IN@ OQAN4O@ o OQSO)EO es usada@ estas pala'ras cla#es se re/ieren a cualIuier posi'le /ila seleccionada@ no a columnas seleccionadas...esto es@ no puedes poner mUltiples columnas en una.
.amos a #er cinco importantes /unciones a-re-adasC S-(@ 2V7@ (28 @ (IN B C#-N!. Son llamadas /unciones a-re-adas porIue 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 numJrica. de#uel#e la media de una columna dada. de#uel#e el maBor #alor de una columna dada. de#uel#e el menor #alor en una columna dada.
COUNTLZM de#uel#e el nUmero de /ilas Iue satis/acen las condiciones. .iendo las ta'las del principio del documento@ #eamos tres eAemplosC SELECT S=M7SALAR0O8, A>47SALAR0O8 FROM TA1LA ESTAD0ST0CA EMPLEADOS! Esta consulta muestra el total de todos los salarios de la ta'la@ B la media salarial de todas las entradas en la ta'la. SELECT M0N71ENEF0C0OS8 FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O ' +Encar*ado+! Esta consulta de#uel#e el menor #alor de la columan de 'ene/icios@ de los empleados Iue son )ana-ers@ la cual es 1".7GG. SELECT CO=NT7#8 FROM TA1LA ESTAD0ST0CA EMPLEADOS %&ERE CAR4O ' +T.cnico+!
Esta consulta nos dice cuantos empleados tienen la cate-orFa de TJcnico L(M.
Vistas
En S+L@ tu puedes Lcomprue'a tu ?BAM tener acceso a crear #istas por ti mismo. Lo Iue una #ista :ace es permitirte asi-nar resultados de una consulta a una ta'la nue#a B personal @ Iue puedes usar en otras consultas@ pudiendo utili%ar el nom're dado a la ta'la de tu #ista en la cl*usula ,$O). Cuando accedes a una #ista@ la consulta Iue est* de/inida en la sentencia Iue crea tu lista est* relacionada L-eneralmenteM@ B los resultados de esta consulta son como cualIuier otra ta'la en la consulta Iue escri'iste in#ocando tu #ista. Por eAemplo@ para crear una #istaC CREATE >0E% ANT>0E% AS SELECT PROD=CTOPED0DO FROM PED0DOS! A:ora@ escri'e una consulta usando esta #ista como ta'la@ donde la ta'la es una listado de todos los Productos Pedidos de la ta'la PedidosC SELECT 0D >ENDEDOR FROM ANT04<EDADES, ANT>0E% %&ERE PROD=CTOPED0DO ' PROD=CTO! Esta consulta muestra todos los I?D#endedor de la ta'la de Anti-Yedades donde el producto@ en esta ta'la@ aparece en la #ista Ant#ieP@ la cual no es m*s Iue todos los Productos ?esired de la ta'la Pedidos. El listado es -enerado Bendo uno por uno por los Productos Anti-Yos :asta donde :aB una coincidencia con la #ista Ant#ieP. Las #istas pueden ser usadas para restrin-ir el acceso a las 'ases de datos@ asF como para simpli/icar una consulta compleAa.
Creando nue/as ta4las Toda ta'la de una 'ase de datos de'e de ser creada al-una #e%... #eamos como :emos creado la ta'la de PedidosC CREATE TA1LE PED0DOS 70D PROP0ETAR0O 0NTE4ER NOT N=LL, PROD=CTOPED0DO C&AR7,)8 NOT N=LL8! Esta sentencia de#uel#e el nom're de la ta'la e in/orma a la ?B)S so're cada columna en la ta'la. O'ser#a Iue esta sentencia usa tipos de datos -enJricos@ B Iue los tipos de datos pueden ser di/erentes dependiendo del ?B)S Iue estes usando. Al-unos tipos de datos -enJricos sonC 9 C9ar(:) 9 Una columna de caracteres@ donde = es el nUmero m*=imo de caracteres permitido en la columna. 9 Integer [ Una columna de nUmeros enteros@ positi#os o ne-ati#os. 9 Deci*al(:; 0) [ Una columna de nUmeros decimales@ donde = es el nUmero m*=imo de di-itos del nUmero decimal en la columna e B el nUmero m*=imo de dF-itos despuJs del punto decimal. EAemploC L2@"MC EE.EE. 9 Date 9 Una columna /ec:a tiene un /ormato especial en cada ?B)S. 9 Logical [ Una columna Iue slo puede tomar dos #aloresC T$UE o ,ALSE L#erdadero o /alsoM. Otra nota@ NOT NULL si-ni/ica Iue la columna de'e tener un #alor en cada /ila. Si NULL es usado@ la columna podrFa tener un #alor #acio en una de sus /ilas.
(odi<icando !a4las .amos a a0adir una columna a la ta'la Anti-Yedades para permitir introducir el precio de un producto dadoC ALTER TA1LE ANT04<EDADES ADD 7PREC0O DEC0MAL7@,68 N=LL8! Los datos para esta nue#a columna pueden ser actuali%ados o insertados como se muestra a continuacin.
2=adiendo Datos
Para insertar /ilas en una ta'la@ :a% lo si-uienteC 0NSERT 0NTO ANT04<EDADES >AL=ES 763, )3, +O$$oman+, 6))"))8! Esto inserta los datos en la ta'la@ como una nue#a /ila@ columna por columna@ en el orden pre9de/inido. .eamos como modi/icar el orden B deAar el Precio en 'lancoC 0NSERT 0NTO ANT04<EDADES 70D COMPRADOR, 0D >ENDEDOR, PROD=CTO8 >AL=ES 7)3, 63, +O$$oman+8!
orrando datos .amos a 'orrar esta nue#a /ila de al 'ase de datosC DELETE FROM ANT04<EDADES %&ERE PROD=CTO ' +O$$oman+! Pero si :aB otra /ila Iue contiene VOttomanW@ esta /ila tam'iJn ser* 'orrada. Para di/erenciar la /ila de otra@ lo Iue :aremos ser* a0adir datosC DELETE FROM ANT04<EDADES %&ERE PROD=CTO ' +O$$oman+ AND 0D COMPRADOR ' )3 AND 0D >ENDEDOR ' 63!
2ctuali>ando Datos .amos a actuali%ar el Precio en una /ila Iue toda#Fa no tiene el precioC =PDATE ANT04<EDADES SET PREC0O ' ())")) %&ERE PROD=CTO ' +Silla+! Esto pone el precio de todas las sillas a 7GG.GG@ como en el caso anterior@ a0adiendo m*s condicionantes en la cl*usula 5E$E@ podemos especi/icar m*s aIuellas /ilas Iue Iueremos modi/icar.
ndices
Los Fndices permiten a ?B)S acceder a los datos m*s r*pidamente Lesto no ocurre en todos los sistemasM. El sistema crea esta estructura de datos interna Lel FndiceM con la cual se es posi'le seleccionar /ilas@ cuando la seleccin se 'asa en columnas inde=adas@ esto se :ace m*s r*pidamente. Este Fndice le dice a la ?B)S donde esta cierta /ila dando el #alor de una columna inde=ada@ como un li'ro@ cuBo Fndice te dice en Iue p*-inas aparece una cierta pala'ra. .amos a crear un Fndice por el I?DPropietario en la ta'la PropietariosDAnti-YedadesC CREATE 0NDEA O0D 0DA ON PROP0ETAR0OS ANT04<EDADES 70D PROP0ETAR0O8! A:ora en los nom'resC CREATE 0NDEA NAME 0DA ON PROP0ETAR0OS ANT04<EDADES 7APELL0DOPROP0ETAR0O, NOM1REPROP0ETAR0O8! Para 'orrar un Fndice@ utili%a la sentencia ?$OPC DROP 0NDEA O0D 0DA! AsF mismo@ tam'iJn puedes O'orrarO una ta'la L?$OP TABLE nom'reta'laM. En el se-undo eAemplo@ el Fndice se mantine en las dos columnas@ a-re-ado Aunto. Al-unos ?B)S no /uer%an la e=istencia de cla#es primariasK en otras pala'ra@ la unicidad de una columna no es /or%ada autom*ticamente. Lo Iue si-ni/ica Iue@ por eAemplo@ si intento insertar otra /ila dentro de la ta'la PropietariosDAnti-Yedades con el I?DPropietario de G"@ al-unos sistemas lo permitir*n :acer@ incluso@ si esta columna es la Unica de la ta'la Lcada /ila se supone Iue es di/erenteM. Una /orma de e#itar esto es crear un Unico Fndice en la columna Iue Iueramos Iue sea la cla#e primaria para /or%ar al sistema a pro:i'ir los duplicados. CREATE =N0B=E 0NDEA O0D 0DA ON PROP0ETAR0OS ANT04<EDADES 70D PROP0ETAR0O8!
7%#-5 1 , '2VIN7
Un uso especial de 3$OUP B4 es asociar una /uncin a-re-ada Lespecialmente COUNTM con -rupos de /ilas. Primero@ ima-ina Iue la ta'la Anti-Yedades tiene la columna Precio@ B Iue cada /ila tiene un #alor para esta columna. +ueremos #er el precio del producto m*s caro comprado por cada comprador. Tenemos Iue decirle a S+L Iue a-rupe cada tipo de compra@ B nos di-a la compra Iue ten-a el m*=imo precioC SELECT 0D COMPRADOR, MAA7PREC0O8 FROM ANT04<EDADES 4RO=P 1? 0D COMPRADOR! A:ora@ Iueremos decir Iue slo Iueremos #er la precio m*=imo de la compra si Jste es so're \1GGG@ asF Iue usamos la cl*usula 5A.IN3C SELECT 0D COMPRADOR, MAA7PREC0O8 FROM ANT04<EDADES 4RO=P 1? 0D COMPRADOR &A>0N4 PREC0O 3)))!
()s su4consultas
Otro uso comUn de las su'consultas in#olucra el uso de operadores para permitir a una condicin 5E$E incluir la salida de un Select de una su'consulta. Primero@ lista los compradores Iue compraron un producto caro Lel precio del producto es \1GG maBor Iue la media de precio de todos los productosMC SELECT 0D COMPRADOR FROM ANT04<EDADES %&ERE PREC0O 7SELECT A>47PREC0O8 C 3)) FROM ANT04<EDADES8! La su'consulta calcula la media del Precio m*s \1GG@ B usando esta /i-ura@ los I?DPropietario son impresos por cada producto Iue cuesta m*s. Se puede usar ?ISTINCT I?DP$OPIETA$IO@ para eliminar duplicados. Lista los apellidos de aIuellos de la ta'la AntiIueOPner@ S]LO si :an comprado un productoC SELECT APELL0DOPROP0ETAR0O FROM PROP0ETAR0OS ANT04<EDADES %&ERE 0D PROP0ETAR0O 0N 7SELECT D0ST0NCT 0D COMPRADOR FROM ANT04<EDADES8! La su'consulta de#uel#e la lista de compradores@ B el apellido es impreso para un AntiIue OPner si B slo si el I?DPropietario aparece en la lista de la su'consulta Ltam'iJn llamada lista de candidatosM. NotaC en al-unas ?B)S@ el i-ual puede ser usado de la misma /orma Iue IN@ aunIue@ por pre#isin@ IN es una meAor eleccin. Para un eAemplo de actuali%acin@ nosotros sa'emos Iue el :om're Iue compr la li'rerFa tiene el Nom're eIui#ocado en la 'ase de datos@ Jste de'erFa ser Ho:nC =PDATE PROP0ETAR0OS ANT04<EDADES SET NOM1REPROP0ETAR0O ' +DoEn+ %&ERE 0D PROP0ETAR0O ' 7SELECT 0D COMPRADOR FROM ANT04<EDADES %&ERE PROD=CTO ' +LibrerFa+8! Primero@ la su'consulta encuentra el I?Dcomprador de la personaLsM Iue compr la li'rerFa@ despuJs la consulta de salida actuali%a el apellido. $ecuerda esta re-la so're las su'consultasC cuando tienes una su'consulta como parte de una condicin 5E$E@ la cl*usula Selec en la su'consulta tiene Iue tener columnas Iue concuerden en nUmero B tipo con aIuellas Iue /ormen parte de la condicin 5E$E de la su'consulta. En otras pala'ras@ si tienes O 5E$E ColumnName Q LSELECT...MKO@ Select de'e de tener slo una columna en ella@ para coincidir con la salida en la cl*usula :ere@ B estas de'er*n de coincidir en tipo
E8IS!S , 2LL
E6ISTS usa una su'consulta como condicin@ donde la condicin es #erdadera si la su'consulta de#uel#e al-una /ila@ B /alsa si la su'consulta no de#uel#e nin-una /ilaK esta es una caracterFstica no intuiti#a con slo al-unos usos. Sin em'ar-o@ si un empleado Iuiere #er la lista de OPners slo si :aB sillas disponi'les@ intentaC
SELECT NOM1REPROP0ETAR0O, APELL0DOPROP0ETAR0O FROM PROP0ETAR0OS ANT04<EDADES %&ERE EA0STS 7SELECT # FROM ANT04<EDADES %&ERE PROD=CTO ' +Silla+8! Si :aB al-una silla en la columna Anti-Yedades@ la su'consulta de#ol#er* una o #arias /ilas@ :aciendo la cl*usula E6ISTS #erdadera@ :aciendo Iue S+L liste los AntiIue OPners. Si no :a :a'ido sillas@ nin-una /ila ser* de#uelta por la su'consulta. ALL es otra construccin poco usual @ como las consultas ALL pueden ser usadas con di/erentes B simples mJtodos@ #eamos un eAemplo de consultaC SELECT 0D COMPRADOR, PROD=CTO FROM ANT04<EDADES %&ERE PREC0O ' ALL 7SELECT PREC0O FROM ANT04<EDADES8! Esto de#ol#er* el precio de producto m*s alto Lo m*s de un producto si :aB un empateM@ B su comprador. La su'consulta de#uel#e una lista de todos los precios de la ta'la Anti-Yedades@ B la consulta de salida #a /ila por /ila de la ta'la Anti-Yedades B si el precio es maBor o i-ual a todos Lo ALLM precios en la lista@ es listado@ dando el precio del producto m*s caro. La ra%n de OQO es Iue el maBor precio en la lista puede ser i-ual al de la lista@ Ba Iue este producto est* en la lista de precios.
-NI#N , -niones de salida 5aB ocasiones donde puedes Iuerer #er los resultados de mUltiples consultas a la #e% com'inando sus salidasK usa UNION. Por eAemplo@ si Iueremos #er todos los I?DCO)P$A?O$ de la ta'la de Anti-Yedades Aunto con los I?DP$OPIETA$IO de la ta'la de PE?I?OS@ usaremosC SELECT 0D COMPRADOR FROM ANT04<EDADES =N0ON SELECT 0D PROP0ETAR0O FROM PED0DOS! S+L reIuiere Iue la lista de Select Lde columnasM coincida@ columna por columna@ en el tipo de datos. En este caso I?Dcomprador B I?DPropietario son del mismo tipo Linte-erM. Adem*s@ S+L elimina autom*ticamente los duplicados cuando se usa UNION Lcomo si ellos /uera dos OconAuntosOMK en las consultas simples@ tienes Iue usar ?ISTINCT. La unin de salida es usada cuando una consulta de unin est* OunidaO con /ilas no incluidas en la unin@ B son especialmente Utiles si las O/la-sO son incluidas. Primero o'ser#a la consultaC 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 :ace una unin para listar todos los propietarios Iue est*n en am'as ta'las@ B pone una lFnea etiIueta despuJs de I? repitiendo la cita. La UNION une esta lista con al si-uiente lista. La se-unda lista es -enerada primero listando aIuellos I? Iue no est*n en la ta'la Pedidos@ -enerando una lista de I? e=cluidos de la consulta de unin. Entonces@ cada /ila en la ta'la Anti-Yedades es escaneada@ B si el I?Dcomprador no est* en esta lista de e=clusin@ es listado con su cita etiIueta. ?e'e :a'er un modo m*s sencillo de :acer esta lista@ pero es di/Fcil -enerar la in/ormati#a cita de te=to. Este concepto es muB Util en situaciones donde la cla#e primaria est* relacionada con una cla#e aAena@ pero el #alor de la cla#e aAena para al-unas cla#es primarias es NULL. Por eAemplo@ en una ta'la@ la cla#e primaria es #endedor@ B en otra ta'la es clientes@ con el nom're de los #endedores en la misma /ila. Sin em'ar-o@ si un #endedor no tiene clientes@ el nom're de esta persona no aparecer* en la ta'la de clientes. La unin de salida es usada si el listado de todos los #endedores #a :a ser impreso@ Aunto con sus clientes@ aunIue el #endedor no estJ en la ta'la de clientes@ pero est* en la ta'la de #endedores. En otro caso@ el #endedor ser* listado con cada cliente.
&Z Este cdi-o in/orma si est*s conectado a la 'ase de datos o si :a :a'ido al-Un error durante la cone=inZ& i/LsIlca.sIlcodeM b print/LPrinter@ OError conectando al ser#idor de la 'ase de datos.cnOMK e=itLMK d print/LOConectado al ser#idor de la 'ase de datos.cnOMK &Z Esto declara un OCursorO. Xste es usado cuando una consulta de#uel#e m*s de una /ila@ B una operacin #a a ser reali%ada en cada /ila resultante de la consulta. Con cada /ila esta'lecida por esta consulta@ lo usare en el in/orme. ?espuJs O,etc:O ser* usado para sacar cada /ila@ una a una@ pero para la consulta Iue est* actualmente eAecutada@ se usar* el estamento OOpenO. El O?eclareO simplemente esta'lece la consulta.Z& E6EC S+L ?ECLA$E ProductoCursor CU$SO$ ,O$ SELECT P$O?UCTO@ I?DCO)P$A?O$ ,$O) ANTI3eE?A?ES O$?E$ B4 P$O?UCTOK E6EC S+L OPEN ProductoCursorK &Z f99 PodrFas desear poner un 'loIue de c:eIueo de errores aIuF. 99f Z& &Z ,etc: pone los #alores de la Osi-uienteO /ila de la consulta en las #aria'les locales@ respecti#amente. Sin em'ar-o@ un Oprimin- /etc:O Ltecnica de pro-ramacinM de'e ser :ec:a antes. Cuando el cursor est* /uera de los datos@ un cdi-o S+L de'e de ser -enerado para permitirnos salir del 'ucle. Para simpli/icar@ el 'ucle ser* deAado cuando ocurra cualIuier cdi-o S+L@ incluso si es una cdi-o de error. ?e otra manera@ un cdi-o de c:eIueo especF/ico de'erFa de ser preparadoZ& E6EC S+L ,ETC5 ProductoCursor INTO CProducto@ CI?DcompradorK P:ileLSsIlca.sIlcodeM b &Z Con cada /ila@ adem*s :acemos un par de cosas. Primero@ aumentamos el precio \7 L:onorarios por tramitacionesM B e=traemos el nom're del comprador para ponerlo en el in/orme. Para :acer esto@ usaremos Update B Select@ antes de imprimir la lFnea en la pantalla. La actuacli%acin@ sin em'ar-o@ asume Iue un comprador dado slo :a comprado uno de todos los productos dados@ o sino@ el precio ser* incrementado demasiadas #eces. Por otra parte@ una O,ilaI?O podrFa :a'er sido utili%ada L#er documentacinM. Adem*s o'ser#a los dos puntos antes de los nom'res de las #aria'les locales cuando son usada dentro de sentencias de S+L.Z& E6EC S+L UP?ATE ANTI3eE?A?ES SET P$ECIO Q P$ECIO f 7 5E$E P$O?UCTO Q CProducto AN? I?DCO)P$A?O$ Q CI?DcompradorK E6EC S+L SELECT NO)B$EP$OPIETA$IO@ APELLI?OP$OPIETA$IO INTO CNom're@ CApellidos ,$O) P$OPIETA$IOSDANTI3eE?A?ES 5E$E I?DCO)P$A?O$ Q CI?DcompradorK print/LOT"7s T"7s T"7sO@ Nom're@ Apellidos@ ProductoMK &Z ,eo in/orme9 slo para propositos de eAemploS. .eamos la si-uiente /ila Z& E6EC S+L ,ETC5 ProductoCursor INTO CProducto@ CI?DcompradorK d &Z Cierra el cursor@ entre-a los cam'ios L#er de'aAoM@ B sale del pro-rama Z&
Qu es normali)aci n? Normali%acin es una tJcnica de dise0o de 'ases de datos Iue su-iere un cierto criterio en la construccin del dise0o de una ta'la Ldecidir Iue columnas tendr* cada ta'la@ B creando la
estructura de cla#esM@ donde la idea es eliminar la redundancia de los datos no9cla#es entre ta'las. Normali%acin se re/iere usualmente a condiciones de /orma@ B slo introducirJ las tres primeras@ aunIue es usual el uso de otras m*s a#an%adas@ como la cuarta@ Iuinta@ BoBce9Codd...M La 5ri*era 6or*a Nor*al se re/iere a mo#er los datos en di/erentes ta'las donde los datos de cada ta'la son de tipo similar@ dando a cada ta'la una cla#e primaria. Poner los datos en la Segunda 6or*a Nor*al se re/iere a remo#er a otras ta'las datos Iue slo dependen de parte de la cla#e. Por eAemplo@ si :u'iera deAado los nom'res de anti-uos propietarios en la ta'la de productos@ esta no estar* en la Se-unda ,orma Normal@ porIue los datos ser*n redundantesK el nom're ser* repetido para cada producto del Iue se sea propietarioK teniendo en cuenta Iue los nom'res est*n almacenados en su propia ta'la. Los nom're en si mismos no tienen nada Iue :acer con los productos@ slo las identidades de los compradores B #endedores. La !ercera 6or*a Nor*al in#olucra des:acerse de todo aIuello de las ta'las Iue no dependa solamente de la cla#e primaria. Solo incluBe in/ormacin Iue es dependiente de la cla#e@ B mue#e a otras ta'las Iue son independientes de la cla#e primaria@ B crea cla#es primarias para las nue#as ta'las.
5aB al-una redundancia en cada /orma@ B si los datos est*n en la (,N @ tam'iJn lo estar*n en la 1,N B en la ",N@ B si lo est*n en la ",N@ tam'iJn lo estar*n en la 1,N. En tJrminos de dise0o de datos@ almacenar los datos@ de tal manera@ Iue cualIuier columna no9cla#e primaria estJ en dependencia slo de la entera cla#e primaria. Si o'ser#as el eAemplo de 'ase de datos@ #er*s Iue la Unica /orma de na#e-ar atra#Js de la 'ase de datos es utili%ando uniones usando columnas cla#e. Otros dos importantes puntos en una 'ase de datos es usar 'uenos@ consistentes@ l-icos@ B enteros nom'res para las ta'las B las columnas@ B usar nom'res completos en la 'ase de datos tam'iJn. En el Ultimo punto@ mi 'ase de datos es /alta de nom'res@ asF Iue uso cdi-os numJricos para la identi/icacin. Es@ usualmente@ meAor@ si es posi'le@ tener cla#es Iue@ por si misma@ sea e=pliIuen@ por eAemplo@ a cla#e meAor puede ser las primeras cuatro letras del apellido B la primera inicial del propietario@ como HONEB por Bill Hones Lo para e#itar redundancias@ a0adir un nUmero@ HONEB1@ HONEB" ...M.
"u'l es la diferencia entre una simple consulta de fila y una m<iple consulta de filas y por qu es importante conocer la diferencia? Primero@ para cu'rir lo o'#io@ una consulta de una slo /ila es una consulta Iue slo de#uel#e una /ila como resultado@ B una consulta de mUltiples /ilas es una consulta Iue de#uel#e m*s de una /ila como resultado. Si una consulta de#uel#a una /ila o m*s esto depende enteramente del dise0o Lo esIuemaM de las ta'las de la 'ase de datos. Como escritor de consultas@ de'es conocer el esIuema@ estar se-uro de incluir todas las condiciones@ B estructurar tu sentencia S+L apropiadamente@ de /orma Iue consi-as el resultado deseado LaunIue sea una o mUltiples /ilasM. Por eAemplo@ si Iuieres estar se-uro Iue una consulta de la ta'la PropietariosDAnti-Yedades de#uel#e slo una /ila@ considera una condicin de i-ualdad de la columna de la cla#e primaria@ I?DPropietario. Tres ra%ones #ienen inmediatamente a la mente de por IuJ esto es importante. Primero@ tener mUltiples /ilas cuando tU slo espera'as una@ o #ice#ersa@ puede si-ni/icar Iue la consulta es errnea@ Iue la 'ase de datos est* incompleta@ o simplemente@ :as aprendido al-o nue#o so're tus datos. Se-undo@ se est*s usando una sentencia Update o ?elete@ de'es de estar se-uro Iue la sentencia Iue est*s escri'iendo #a a :acer la operacin en la /ila Lo /ilasM Iue tU Iuieres... o sino@ estar*s 'orrando o actuali%ando m*s /ilas de las Iue IuerFas. Tercero@ cualIuier consulta escrita en S+L em'e'ido de'e necesitar ser construida para completar el pro-rama l-ico reIuerido. Si su consulta@ por otra parte@ de#uel#e mUltiples /ilas@ de'er*s usar la sentencia ,etc:@ B muB pro'a'lemente@ al-Un tipo de estructura de 'ucle para el procesamiento iterati#o de las /ilas de#ueltas por la consulta. Qu hay de las relaciones? Otra cuestin de dise0o... el tJrmino OrelacionesO usualmente se re/iere a las relaciones entre cla#es aAenas B primarias entre ta'las. Este concepto es importante porIue cuando las ta'las de una 'ase de datos relacional es dise0ada@ estas relaciones de'e de ser de/inidas porIue determinan Iue columnas son o no cla#es primarias o cla#es aAenas. ?e'es de :a'er oido al-o so're el ?ia-rama de Entidad9$elacin@ Iue es una #ista -r*/ica de las ta'las en el esIuema de una 'ase de datos@ con lFneas conectando columnas relacionadas entre ta'las. )ira el dia-rama en el /inal de esta seccin o
al-unos de los sitios de'aAo relacionados con Jste tpico@ Ba Iue :aB di/erentes maneras de di'uAar dia-ramas de E9$. Pero primero@ #eamos cada tipo de relacin ... Una relacin -no"a"-no si-ni/ica Iue tu tienes una columna cla#e primaria Iue est* relacionada con una columna cla#e aAena@ B Iue para cada #alor de la cla#e primaria@ :aB un #alor de cla#e aAena. Por eAemplo@ en el primer eAemplo@ la EmploBeeAddressTa'le@ nosotros a0adimos una columna I?DE)PLEA?O. Entonces@ la EmploBeeAddressTa'le est* relacionada con la Ta'laDestadisticaDempleados Lse-undo eAemplo de ta'laM por medio de este I?DE)PLEA?O. EspecF/icamente@ cada empleado en la EmploBeeAddressTa'le tiene estadFsticas Lun /ila de datosM en la Ta'laDestadisticaDempleados. Incluso@ piensa Iue este es un eAemplo e/ectuado@ es una relacin de O191O. Adem*s@ ten en cuenta@ el OtieneO en /uerte... cuando se e=presa una relacin@ es importante descri'ir la relacin con un #er'o. Las otras dos tipos de relaciones pueden o no puede usar cla#es primarias l-icas B cla#es aAenas necesariamente... esto es estrictamente una llamada del sistema. La primera de Jstas es la relacin Uno9a9)uc:os LO19)OM. Esto si-ni/ica Iue para cada #alor de la columna en una ta'la@ :aB uno o m*s #alores relaciones en otra ta'la. 5a'r* Iue a0adir de /orma necesaria cla#es en el dise0o o@ posi'lemente@ al-Un tipo de columna identi/icador de'er* ser usado para esta'lecer la relacin. Un eAemplo podrFa ser Iue para todos I?DPropietario en la ta'la PropietariosDAnti-Yedades@ :u'ier*n uno o mas Lcero tam'iJn pude serM productos comprados en la ta'la Anti-Yedades L#er'oC comprarM. ,inalmente@ la relacin de (uc9os"a"(uc9os LO)9)OM -eneralmente no in#olucra cla#es@ B usualmente in#olucra columnas identi/icati#as. La inusual ocurrencia de un O)9)O si-ni/ica Iue una columna en una ta'la est* relacionada con otra columna en otra ta'la@ B para cada #alor de uno de estas dos columnas@ :aB uno o m*s #alores relacionados en la correspondiente columna en la otra ta'la LB #ice#ersaM@ o m*s comUnmente posi'le@ dos ta'las tienen una relacin O19)O para cada una Ldos relaciones@ una 19) para cada caminoM. Un LmaloM eAemplo o Jsta m*s comUn situacin podrFa ser si tu#ieras una 'ase de datos Iue asi-nara tra'aAo@ donde una ta'la tu#iera una /ila por cada empleado B tra'aAo asi-nado@ B otra ta'la tu#iera una /ila por tra'aAo por cada uno de los tra'aAadores asi-nados. AIuF@ podrFas tener mUltiples /ilas por cada empleado en la primera ta'la@ o pro cada tra'aAo asi-nado@ B mUltiples /ilas por cada tra'aAo en la se-unda ta'la@ una por empleado asi-nado al proBecto. Estas ta'las tienen un )9)C cada empleado en la primera ta'la puede tener tantos tra'aAos asi-nados de la se-unda ta'la como tra'aAos :aBa en ella@ B cada tra'aAo puede tener tanto empleados como empleados :aBa en la primera ta'la. Esto es la punta del ice'er- en este tpico... mira los lin>s a'aAo para m*s in/ormacin B mira en dia-rama de de'aAo para un eAemplo simpli/icado de un dia-rama de E9$.
Qu hay de algunas construcciones no est'ndar importantes de SQL (pregunta e$tremadamente com&n*? Bueno@ #eamos la si-uiente seccin...
IN!E%SEC! B)INUS son como la sentencia UNION@ e=cepto Iue INTE$SECT produce /ilas Iue apareces en am'as consultas@ B )INUS produce /ilas Iue resultan de la primera consulta@ pero no de la se-unda. 3eneracin de construcciones de in/ormeC la cl*usula C#(5-!E es puesta al /inal de una consulta para poner el resultado en una /uncin a-re-ada al /inal del listado@ como CO)PUTE SU)LP$ECIOMK Otra opcin es usar el brea, l-icoC de/inir un brea, para di#idir un resultado de una consulta dentro de -rupos 'asados en una columna@ como %E2. ON I?DCO)P$A?O$. Entonces@ para producir un resultado despuJs de listar un -rupo@ usa CO)PUTE SU) O, P$ECIO ON I?DCO)P$A?O$. Si@ por eAemplo@ usas las tres cl*usulas Auntas LB$EA! primero@ CO)PUTE despuJs del B$EA!@ B CO)PUTE so're todo M@ o'tendr*s un in/orme Iue a-rupe los productos por su I?Dcomprador@ listando la suma de Precios despuJs de cada -rupo de productos de un I?Dcomprador@ B @ despuJs Iue todos los -rupos sean listados@ la suma de todos los Precios listados@ todos con ca'eceras B lFneas -enerados por S+L. Adem*s@ al-unos ?B)S permiten usar m*s /unciones en listas Select@ e=cepto Iue estas /unciones Lal-unas /unciones de car*cter permite resultados de mUltiples /ilasM #aBan a ser usadas con un #alor indi#idual Lno -ruposM@ en consultas de simples /ilas. Las /unciones de'en ser usada slo con tipos de datos apropiados. AIuF :aB al-unas /unciones )atem*ticasC 6unciones nu*Aricas+
2 S(8) CEIL(8) 6L##%(8) 7%E2!ES!(8;1) LE2S!(8;1) (#D(8;1) 5#&E%(8;1) %#-ND(8;1) SI7N(8) SQ%!(8)
.alor a'soluto. Con#ierte nUmero ne-ati#os en positi#os@ o deAa slo nUmeros positi#os. 6 es un #alor decimal Iue ser* redondeado :acia arri'a. 6 es un #alor decimal Iue ser* redondeado :acia a'aAo. ?e#uel#e el m*s -rande de los dos #alores. ?e#uel#e el m*s peIue0o de los dos #alores. ?e#uel#e el resto de 6&4. ?e#uel#e 6 ele#ado a 4 $edondea 6 a 4 lu-ares decimales. Si se omite 4@ 6 se redondea al entero m*s pr=imo. ?e#uel#e menos si 6RG@ sino un m*s. ?e#uel#e la rai% cuadrada de 6. 6unciones de Caracteres
?e#uel#e los 6 caracteres m*s a la i%Iuierda de la cadena. ?e#uel#e los 6 caracteres m*s a la derec:a de la cadena. Con#ierte la cadena a maBUsculas. Con#ierte la cadena a minUsculas. Con#ierte el primer car*cter de la cadena a maBUscula. ?e#uel#e el nUmero de car*cteres de cadena. Concatena dos cadenas de te=to. $ellena la cadena por la i%Iuierda con el Z Lo el car*cter Iue :aBa entre las comillasM@ para :acer la
cadena 6 caracteres m*s lar-a. %52D(Bstring;8;DED) S- S!%(Bstring;8;1) NVL(Bcolu*n;B/alue) $ellena la cadena por la derec:a con el Z Lo con el car*cter Iue :aBa entre las comillasM@ para :acer la cadena 6 caracteres m*s lar-a. E=trae 4 letras de la cadena comen%ando en la posicin 6. CualIuier Null de la Rcolumn ser* sustituido por lo Iue :aBa en R#alue. Si el #alor de la columna no el NULL@ N.L no tiene e/ecto
AIuF est*n las /ormas -enerales de las sentencias Iue :emos #isto en este tutorial@ adem*s de al-uno in/ormacin e=tra de al-unas. $ECUE$?A Iue todos estas sentencias pueden o no pueden estar disponi'les en tu sistema@ asF Iue comprue'a la documentacin del mismo. ALTER TA1LE 2TA1LE NAME ADDJDROPJMOD0F? 7COL=MN SPEC0F0CAT0ONKSL"""ver Crea$e Table8! Te permite a0adir@ 'orrar o modi/icar una columna o columnas de la ta'la@ o cam'iar la especi/icacin Ltipo de datos@ etcM de una columna e=istenteK esta sentencia tam'iJn es usada para las especi/icaciones /Fsicas de la ta'la Lcomo est* almacenada@ etc.M@ pero estas de/iniciones estas especi/icadas en el ?B)S@ asF Iue lJete la documentacin. Tam'iJn@ estas especi/icaciones /Fsicas son usada con la sentencia Create Ta'le@ cuando una ta'la es creada por primera #e%. Adem*s@ solo una opcin puede ser reali%ada por la sentencia Alter Ta'le en una simple sentenciaC add@ drop o modi/icar. CO))ITK 5ace cam'ios :ec:os por al-Un sistema permanente de 'ase de datos Ldesde el Ultimo CO))ITK conocido por transaccinM
CREATE K=N0B=EL 0NDEA 20NDEA NAME ON 2TA1LE NAME 72COL=MN L0ST8! 99UNI+UE es opcionalK entre corc:etes. CREATE TA1LE 2TA1LE NAME 72COL=MN NAME 2DATA T?PE K72S0ME8L 2COL=MN CONSTRA0NT, ...otras columnasK Ltam'iJn #alido con ALTE$ TABLEM 99donde SIgE slo se utili%a en determinados tipos@ B CONST$AIN incluBe las si-uientes posi'ilidades L/or%ado autom*tico por la ?B)SK causas de /allos B -eneracin de erroresMC 1.N-LL o N#! N-LL L#er arri'aM ".-NIQ-E /uer%a Iue dos /ilas no puedan tener el mismo #alor para esa columna. (.5%I(2%1 .E1 le dice a la 'ase de datos Iue la columna es la columna cla#e primaria Lslo usado si la cla#e primaria es slo un columna@ sino@ la sentencia P$I)A$4 !E4Lcolumna@ columna@...M aparece despuJs de la de/inicin de la Ultima columnaM 2.C'EC. permite Iue se comprue'a una condicin cuando un dato es esa columna es actuali%ado o insertadoK por eAemplo@ C&EC:7PREC0O )8@ :ace Iue el sistema comprue'e Iue el precio de la columna es maBor de cero antes de aceptar el #alor... al-unas #eces implementado como sentencia C#NS!%2IN!. 7.DE62-L! inserta el #alor por de/ecto en la 'ase de datos si una /ila es insertada sin insertar nin-Un dato en la columnaK por eAemploC 1ENEF0C0OS 0NTE4ER DEFA=LT'3))))!
8.6#%EI7N .E1 :ace lo mismo Iue la cla#e primaria@ pero es se-uida porCC REFERENCES 2TA1LE NAME 72COL=MN NAME8, Iue :acen re/erencia a la cla#e primaria 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! %#LL 2C.F ""des:ace los cam'ios en la 'ase de datos Iue :allas :ec:o desde el Ultimo Commit... cuidadoS Al-unos so/tPare usan autom*ticamente CommitWs en sistemas Iue usan construcciones de transaccin@ asF Iue el comando $ollBac> podrFa 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! 99donde ASCh?ESC permite ordenas en orden ASCendente o ?ESCendente =PDATE 2TA1LE NAME SET 2COL=MN NAME ' 2>AL=E K%&ERE 2COND0T0ONL! 9 si no se completa la cl*usula acuerdo con la sentencia SET.
LinGs I*$ortantes Computin- & S+L&?B Lin>sC Netscape 99 Oracle 99 SB'ase 99 In/ormi= 99)icroso/t S+L $e/erence Pa-e 99 As> t:e S+L Pro 99 S+L ProNs $elational ?B Use/ul Sites Pro-rammerNs Source 99 ?B)S Sites 99 inIuirB.com 99 ?B In-redients e' Aut:orin- 99 Computin- ?ictionarB 99 ?B)S La'&Lin>s 99 S+L ,A+ 99 +uerB List $IT ?ata'ase ?esi-n Pa-e 99 ?ata'ase Hump Site 99 Pro-rammin- Tutorials on t:e e' ?B Stu// 99 ?B)S&IS Pa-es 99 Access on t:e e' 99 Online Boo>s 99 A 3ood ?B Course Tutorial Pa-e 99 ?B)S )a-a%ine 99 ?ata'ase )inin)iscellaneousC CNN 99 USA TodaB 99 Pat:/inder 99 g?Net 99 CNet 99 Tec: e' 99 Loo>Smart BuscadoresCC 4a:oo 99 Alta .ista 99 E=cite 99 e'CraPler 99 LBcos 99 In/osee> 99 searc:.com
2gradeci*ientos.
Espero Iue :aBas aprendido al-o m*s de esta introduccin a uno de los len-uaAes m*s importantes B Iue m*s pre#alece en el mundo de la computacin cliente9ser#idor. Escri'F esta p*-ina Pe' para contri'uir con al-o de #alor a la Pe' B a la comunidad de la Pe'. ?e :ec:o@ :e sido in/ormado Iue este documento esta siendo usado en al-unos cole-ios para su uso en clases de 'ases de datos B por in#esti-adores. Adem*s@ Iuiero a-radecer a todo el mundo de los cinco continentes Iue :an contactado conmi-o a-radeciJndome esta p*-ina Pe'.
Espero continuar a0adiendo m*s material a este tutorial@ al-o como tpicos so're dise0o de 'ases de datos B e=tensiones S+L est*ndar@ incluso deseo estar aleAado de material so're Sistemas de Administracin de Bases de datos indi#iduales. Buena suerte en tu S+L B otras a#enturas computacionales. +im %offman Comentarios o su-erenciasi Escri'idme a A:o//manjone.net. Si IuerJis m*s in/ormacin so're mi podJis mirar mi p*-ina e'@ o mi nue#o Al-orit:ms Tutorial.
Tam'iJn podJis ec:ar un #ista%o a mi p*-ina Him 5o//manNs e' Pa-es para m*s in/ormacin so're mi@ o mi nue#o Al-orit:ms Tutorial. Si IuerJis tam'iJn podJis 'aAaros una #ersin modi/icada del tutorialC P?, #ersion o/ t:e tutorial L12">M LcourtesB o/ )att !ellB at PPP.:i-:cro/t.comM. Muchas ,raciasConse-uid el Lector Acro'at de Ado'e para documentos P?, en t:e Ado'e Pe' site. CopBri-:t 1EE891EE<@ Hames 5o//man. Este documento puede ser usado de /orma -ratuita por cualIuier usuario de Internet@ pero no puede ser incluido en otro documento@ pu'licado en cualIuier otra /orma de nin-Un modo. Esta p*-ina se #e meAor con Netscape Na#i-atorK no se #e demasiado 'ien con )icroso/t Internet E=plorer.
CopBri-:t 1EE891EE<@ Hames 5o//man. Traducido porC 3erm*n Lpe% .alencia@ 1;9791EE<K Last updatedC 79191EE<K .ersin ori-inalC :ttpC&&P(.one.net&kA:o//man&sIltut.:tm