SQL es el lenguaje de consulta universal para bases de datos.
Los mandatos de SQL se dividen en tres grandes grupos diferenciados, los cuales sern tratados por separado y que nicamente se presentan aqu a modo introductorio. DDL!"ata "efinition Language#, es el encargado de la definicin de $ases de "atos, tablas, vistas e ndices entre otros. Son comandos propios de este lenguaje% &'()*( *)$L( &'()*( I+"(, &'()*( -I(. &'()*( S/+0+/1 DML!"ata 1anipulation Language#, cuya misin es la manipulacin de datos. ) trav2s de 2l podemos seleccionar, insertar, eliminar y actuali3ar datos. (s la parte que ms frecuentemente utili3aremos, y que con ella se construyen las consultas. Son comandos propios de este lenguaje% S(L(&* 45")*( I+S('* I+S('* I+*0 "(L(*( 6'01 DCL !"ata &ontrol Laguage#, encargado de la seguridad de la base de datos, en todo lo referente al control de accesos y privilegios entre los usuarios. Son comandos propios de este lenguaje% 7')+* '(-08(
&omponentes del lenguaje SQL. *ipos de datos. SQL admite una variada gama de tipos de datos para el tratamiento de la informacin contenida en las tablas, los tipos de datos pueden ser nmericos !con o sin decimales#, alfanum2ricos, de fec9a o booleanos!si o no#.Segn el gestor de base de datos que estemos utili3ando los tipos de datos varian, pero se reducen basicamente a los e:puestos anteriormente, aunque en la actualidad casi todos los gestores de bases de datos soportan un nuevo tipo, el $L0$ !$inary Large 0bject#, que es un tipo de datos especial destinado a almacenar arc9ivos, imgenes ... "ependiendo de cada gestor de bases de datos el nombre que se da a cada uno de estos tipos puede variar. $sicamente tenemos los siguientes tipos de datos. Nmericos Alfanmericos Fecha Lgico BLOB Integer c9ar!n# "ate $it Image +umeric!n.m# varc9ar!n,m# "ate*ime *e:t "ecimal!n,m# 6loat 1as detalladamente tenemos% Tipos e a!os nmericos Tipo Defincin B"!es Integer -alores enteros con signo. ; +umeric!n,m# +meros reales de 9asta <= digitos !con decimales#, donde n representa el total de dgitos admitidos !normalmente denominado precisin# y m el nmero de posiciones decimales !escala#. >?<@ "ecimal!n,m# Igual que el tipo numeric. >?<@ 6loat +mero de coma flotante, este tipo de datos se suele utili3ar para los valores en notacin cientifica. ;?= Tipos e a!os alfanmericos Tipo Defincin B"!es c9ar!n# )lmacena de < a A>> caracteres alfanmericos. (ste valor viene dado por n, y es el tamaBo utili3ado en disco para almacenar dato. (s decir si defino un campo como c9ar!A>>#, el tamaBo real del campo ser de A>>, aunque el valor solo contenga <CC. C?A>> varc9ar!n# Igual que el tipo c9ar, con la salvedad que varc9ar almacena nicamente los bytes que contenga el valor del campo. C?A>> +ota%(l tamaBo del campo varia en funcin de cada base de datos, siendo A>> el valor standart. (n realidad el tamaBo viene delimitado por el tamaBo de las pginas de datos, para SQL Server el lmite esta en =CCC bytes !=CCC caracteres#, siempre y cuando tengamos definido el tamaBo de la pgina de datos a =8
Tipos e a!os fecha Tipo Defincin B"!es "ate )lmacena fec9as, con da, mes y aBo. = "atetime )lmacena fec9as con fec9a y 9ora ; +ota%La aparicin de los tipos de datos de fec9a supuso una atentica revolucin el mundo de la bases de datos, en realidad, la base de datos almacena internamente nmeros enteros, de 9ay que el tamaBo sea de ; bytes y = bytes !A enteros#, pero aporta la validacin del dato introducido. Tipos e a!os lgicos *ipo "efinicin $ytes $it *ipo bit. )lmacena un C no cero, segn las bases de datos ser < ?<. Se aplica la lgica booleana, C es falso y no cero verdadero. < bit Tipos e a!os BLOB *ipo "efinicin $ytes Image )lmacena imgenes en formato binario, 9asta un m:imo de A 7b de tamaBo. C?A7b *e:t )lmacena te:to en formato binario, 9asta un m:imo de A 7b de tamaBo. C?A7b
0peradores Los operadores se pueden definir como combinaciones de caracteres que se utili3an tanto para reali3ar asignaciones como comparaciones entre datos. Los operadores se dividen en aritm2ticos, relacionales, lgicos, y concatenacin . Operaores SQL Ari!m#!icos $ Suma % 'esta & 5roducto ' "ivisin && ( (:ponenciacin )elacionales * 1enor que *+ 1enor o igual que , 1ayor que ,+ 1ayor o igual que *, -+ "istinto -* +o menor que -, +o mayor que Lgicos AND Los operadores lgicos permiten comparar e:presiones lgicas devolviendo siempre un valor verdadero o falso.Los operadores lgicos se evaluan de i3quierda a derec9a. O) NOT Conca!enacin $ Se emplea para unir datos de tipo alfanmerico.
5alabras &lave Las palabras clave son identificadores con un significado especial para SQL, por lo que no pueden ser utili3adas para otro proposito distinto al que 9an sido pensadas. SQL dispone de muy pocas rdenes, pero de multiples plabras clave, lo que le convierten en un lenguaje sencillo pero tremendamente potente para llevar a cabo su funcin.
6unciones )gregadas Las funciones agregadas proporcionan a SQL utilidades de clculo sobre los datos de las tablas. (stas funciones se incorporan en las consultas S.L.CT y retornan un nico valor al operar sobre un grupo de registros. Las funciones agregadas son. 6unciones )gregadas MA/01 "evuelve el valor m:imo. M2N01 "evuelve el valor mnimo. S3M01 "evuelve el valor de la suma de los valores del campo. CO3NT01 "evuelve el nmero de filas que cumplen la condicin A4501 "evuelve el promedia de los valores del campo 5redicados Los predicados son condiciones que se indican en clasula 67.). de una consulta SQL. La siguiente tabla ilustra los predicados de SQL. 5redicados SQL B.T6..N888AND &omprueba que al valor esta dentro de un intervalo L29. &ompara un campo con una cadena alfanum2rica. LI8( admite el uso de caracteres comodines ALL SeBala a todos los elementos de la seleccin de la consulta AN: Indica que la condicin se cumplir si la comparacin es cierta para al menos un elemento del conjunto. ./2STS "evuelve un valor verdadero si el resultado de una subconsulta devuelve resultados. 2N &omprueba si un campo se encuentra dentro de un determinado rango. (l rango puede ser una sentencia S(L(&*. +o se preocupe si no entiende el significado de alguno de los terminos que 9emos presentado aqu, pronto veremos ejemplos que nos aclararn las cosas, de momento nos vale con saber que e:isten.
Lenguaje de "efinicin de datos !I# *ablas (l lenguaje de definicin de datos !""L, "ata "efinition Language# es el encargado de permitir la descripcion de los objetos que forman una base de datos. (l lenguaje de definicin de datos le va a permitir llevar a cabo las siguientes acciones% &reacin de tablas, ndices y vistas. 1odificacin de las estructura de tablas, ndices y vistas. Supresin de tablas, ndices y vistas. 5ero antes de continuar vamos a comentar la nomenclatura que emplearemos, si tiene algn conocimiento de programacin le resultar familiar.
+omenclatura La sinta:is empleada para la sentencias en las diferentes pginas esta basada en la notacin ($+6. -amos a ver el significado de algunos simbolos. Smbolo Significado E F (ncierran parmetros de una orden que el usuario debe sustituir al escribir dic9a orden por los valores que queramos dar a los parmetros. G H Indica que su contenido es opcional. I J Indica que su contenido puede repetirse una o mas veces. K Separa e:presiones. Indica que pueden emplearse una u otra e:presin pero no ms de una a la ve3. )dems las palabras clave aparecen en mayscula negrita y los argumentos en minscula cursiva. La sinta:is de una sentencia tendr un aspecto como este%
C).AT. TABL. Enombre_tablaF ! Enombre_campoF Etipo_datos(tamao)F, I Enombre_campoF Etipo_datos(tamao)FJ # L
&reacin de tablas (n el modelo relacional la informacin de una base de datos se almacena en tablas. 5ara saber ms sobre las tablas y como se almacena la informacin el ellas vea la introduccin a bases de datos. La creacin de la base de datos debe comen3ar por con la creacin de una o ms tablas. 5ara ello utili3aremos la sentencia C).AT. TABL.8 La sinta:is de la sentencia es la siguiente%
C).AT. TABL. Enombre_tablaF ! Enombre_campoF Etipo_datos(tamao)F Gnull K no! nullH Gdefault Evalor_por_defectoFH I ,Enombre_campoF Etipo_datos(tamao)F Gnull K no! nullH Gdefault Evalor_por_defectoFHJ G , cons!rain! EnombreF primar" ;e" !Enombre_campoFG ,...n H#H G , cons!rain! EnombreF foreign ;e" !Enombre_campoFG ,...n H# references EtablaMreferenciadaF ! Enombre_campoF G ,...n H # H # L (jemplo% -amos a simular una base de datos para un negocio de alquiler de coc9es, por lo que vamos a empe3ar creando una tabla para almacenar los coc9es que tenemos.
C).AT. TABL. t&oc9es ! matricula c9ar!=# no! null, marca varc9ar!A>># null, modelo varc9ar!A>># null, color varc9ar!A>># null, numeroMNilometros numeric!<;,A# null efaul! C, cons!rain! 58M&oc9es primar" ;e" !matricula# # L (n este ejemplo creamos una tabla llamada t&oc9es con cinco campos !matricula, marca, modelo, color, numeroMNilometros#. +otese que se 9an omitido las tildes y los espacios a proposito. +unca cree campos que contengan caracteres especificos de un idioma !tildes, eBes, ...# ni espacios. Las claves primarias y e:ternas !o foraneas# se pueden implementar directamente a trav2s de la instruccin C).AT. TABL., o bien se pueden agregar a trav2s de sentencias ALT.) TABL.. &ada gestor de bases de datos implementa distintas opciones para la instruccin C).AT. TABL., pudiendo especificarse gran cantidad de parmetros y pudiendo variar el nombre que damos a los tipos de datos, pero la sinta:is standart es la que 9emos mostrado aqu. Si queremos conocer ms acerca de las opciones de C).AT. TABL. lo mejor es recurrir a la documentacin de nuestro gestor de base de datos.
1odificacin de tablas (n ocasiones puede ser necesario modificar la estructura de una tabla, comnmente para aBadir un campo o reestriccin. 5ara ello disponemos de la instrucccin ALT.) TABL.. ALT.) TABL. nos va a permitir% )Badir campos a la estructura incial de una tabla. )Badir reestriciones y referencias. 5ara aBadir un campo a una tabla e:istente%
ALT.) TABL. t&oc9es ADD numMpla3as in!eger null efaul! >L (n este ejemplo aBadimos el campo numMpla3as a la tabla t&oc9es que 9abiamos creado en el apartado anterior. 5ara aBadir una clave primaria vamos a crear una tabla de cliente y le aBadiremos la clave primaria ejecutando una sentencia alter table%
C).AT. TABL. t&lientes ! codigo integer not null, nombre varc9ar!A>># not null, apellidos varc9ar!A>># null, nif varc9ar!<C# null, telefono varc9ar!O# null, movil varc9ar!O# null #L ALT.) TABL. t&lientes ADD CONST)A2NT 58Mt&lientes primar" ;e" !codigo#L &reamos la tabla clientes y le aBadimos una reestriccin primary Ney a la que damos el nombre 58Mt&lientes en el campo codigo. Solo podemos modificar una nica tabla a la ve3 con )L*(' *)$L(, para modificar ms de una tabla debemos ejecutar una sentencia )L*(' *)$L( por tabla. 5ara aBadir una clave e:terna !o foranea# necesitamos una tercera tabla en nuestra estructura. 5or un lado tenemos la tabla t&oc9es y la tabla t&lientes, a9ora vamos a crear la tabla t)lquileres que ser la encargada de PdecirnosP que clientes 9an alquilado un coc9e.
C).AT. TABL. t)lquileres ! codigo integer not null, codigoMcliente integer not null, matricula c9ar!=# not null, f:Malquiler datetime not null, f:Mdevolucion datetime null #L
ALT.) TABL. t)lquileres ADD CONST)A2NT 58Mt)lquileres primar" ;e" !codigo#, CONST)A2NT 68M&lientes foreign ;e" !codigoMcliente# references t&lientes !&odigo#, CONST)A2NT 68M&oc9es foreign ;e" !matricula# references t&oc9es !matricula#L $ien, en este cdigo creamos la tabla t)lquileres, y luego mediante una sentencia )L*(' *)$L( aBadimos una clave primaria llamada 58Mt)lquileres en el campo codigo, una clave e:terna llamada 68M&lientes referenciada al codigo de la tabla t&lientes, y por ltimo otra clave e:terna llamada 68M&oc9es referenciada al campo matricula de la tabla t&oc9es. +ota%&uando creamos una clave e:terna el campo referenciado y el que sirve de referencia deben ser del mismo tipo de datos. Si somos observadores nos daremos cuenta que los campos que sirven de referencia a las claves foraneas son las claves primarias de sus tablas. Slo podemos crear claves e:ternas que referencien claves primarias. )l igual que ocurria con la sentencia C).AT. TABL. cada gestor de bases de datos implementa sus mejoras, siendo la mejor forma de conocerlas recurrir a la documentacin del gestor de bases de datos. (n principio, para borrar columnas de una tabla debemos% <. &rear una tabla con la nueva estructura. A. *ransferir los datos Q. $orrar la tabla original. y digo en principio, porque como ya 9emos comentado segn el gestor de bases de datos con el que trabajemos podremos reali3ar esta tarea a trav2s de una sentencia ALT.) TABL.. arriba
(liminacin de tablas. 5odemos eliminar una tabla de una base de datos mediante la instruccion D)O< TABL..
D)O< TABL. Enombre_tablaFL La instruccin D)O< TABL. elimina de forma permanente la tabla y los datos en ella contenida. Si intentamos eliminar una tabla que tenga registros relacionados a trav2s de una clave e:terna la instruccin D)O< TABL. fallar por integridad referencial. &uando eliminamos una tabla eliminamos tambi2n sus ndices.
Lenguaje de definicin de datos !II# "efinicin de Rndices 4n ndice es una estructura de datos que permite acceder a diferentes filas de una misma tabla a trav2s de un campo !o campos clave#. 4n ndice permite un acceso muc9o ms rpido a los datos. GarribaH
Introduccin a los ndices. 5ara entender lo que es un ndice debemos saber primero como se almacena la informacin internamente en las tablas de una base de datos. &ada tabla se divide en pginas de datos, imaginemos un libro, podriamos escribirlo en Puna sola 9oja enormeP al estilo pergamino egipcio, o bien en pginas a las que podemos acceder rpidamente a traves de un ndice. (st idea es la que se aplica en el mundo de las bases de datos, la informacin esta guardada en una tabla !el libro# que tiene muc9as 9ojas de datos !las pginas del libro#, con un ndice en el que podemos buscar la informacin que nos interesa. Si queremos buscar la palabra 3apato en un diccionario , Squ2 9acemosT Leemos todo el diccionario 9asta encontrar la palabra, con lo que nos 9abremos leido el diccionario enterito !Useguro que aprenderiamos un montnV# $uscamos en el ndice en que pgina est la letra 3, y es en esa pgina donde buscamos. +i que decir tiene que la opcin dos es la correcta, y es de este modo como se utili3a un ndice en las bases de datos, se define el nidice a trav2s de un campo !o campos# y es a partir de este punto desde donde de busca.
Los ndices se actuali3an automticamente cuando reali3amos operaciones de escritura en la base de datos. (ste es un aspecto muy importante de cara al rendimiento de las operaciones de escritura, ya que adems de escribir los datos en la tabla se escribiran tambi2n en el indice. 4n nmero elevado de ndices 9ar ms lentas estas operaciones. Sin embargo, salvo casos e:cepcionales, el beneficio que aportan los indices compensa !de largo# esta penali3acin. arriba
&reacin de ndices La creacin de ndices, como ya 9emos visto, permite acelerar las consultas que se reali3an en la base de datos. Las sentencias de SQL para manipular ndices son%
C).AT. 2ND./L
D)O< 2ND./L
La sinta:is para la creacin de indices es la siguiente%
C).AT. G3N2Q3.H 2ND./ EnombreMindiceF ON EnombreMtablaF! EnombreMcampoF GASC K D.SCH I,EnombreMcampoF GASC K D.SCHJ# #L La plabra clave 3N2Q3. especifica que que no pueden e:istir claves duplicadas en el ndice. ASC K D.SC especifican el criterio de ordenacin elegido, ascendente o descendente, por defecto es ascendente. (jemplo% (n el apartado dedicado a la definicin de tablas creamos la tabla t&lientes, este ejmplo crea un ndice nico en el campo +I6. (sto nos permitir buscar muc9o mas rpido por el campo +I6 y nos asegurar que no tengamos dos +I6 iguales.
C).AT. 3N2Q3. 2ND./ 4I,M&LI(+*(SM+I6 ON t&LI(+*(S !+I6#L Las claves primarias son =nices8 Los nombres de los ndices deben ser nicos. 5ara eliminar un ndice debemos emplear la sentencia D)O< 2ND./8
D)O< 2ND./ EnombreMtablaF.EnombreMindiceFL (jemplo%5ara eliminar el ndice creado anteriormente.
D)O< 2ND./ t&LI(+*(S.4I,M&LI(+*(SM+I6L
Lenguaje de definicin de datos !III# -istas (n el modelo de datos relacional la forma de guardar la informacin no es la mejor para ver los datos 4na vista es una consulta, que refleja el contenido de una o ms tablas, desde la que se puede acceder a los datos como si fuera una tabla. "os son las principales ra3ones por las que podemos crear vistas. Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la informacin que 9ay en una tabla, pero no a toda la tabla. &omodidad, como 9emos dic9o el modelo relacional no es el ms comodo para visuali3ar los datos, lo que nos puede llevar a tener que escribir complejas sentencias SQL, tener una vista nos simplifica esta tarea. Las vistas no tienen una copia fsica de los datos, son consultas a los datos que 9ay en las tablas, por lo que si actuali3amos los datos de una vista, estamos actuali3ando realmente la tabla, y si actuali3amos la tabla estos cambios sern visibles desde la vista. +ota% +o siempre podremos actuali3ar los datos de una vista, depender de la complejidad de la misma !depender de si el cojunto de resultados tiene acceso a la clave principal de la tabla o no#, y del gestor de base de datos. +o todos los gestores de bases de datos permiten actuali3ar vistas, 0')&L(, por ejemplo, no lo permite, mientrar que SQL Server si. arriba
&reacin de vistas. 5ara crear una vista debemos utili3ar la sentencia C).AT. 42.6, debiendo proporcionar un nombre a la vista y una sentencia SQL S.L.CT vlida.
C).AT. 42.6 EnombreMvistaF AS !EsentenciaMselectF#L (jemplo%&rear una vista sobre nuestra tabla alquileres, en la que se nos muestre el nombre y apellidos del cliente en lugar de su cdigo.
C).AT. 42.6 vAl>uileres AS ! S.L.CT nombre, apellidos, matricula F)OM t)lquileres, t&lientes 67.). ! t)lquileres.codigoMcliente W t&lientes.codigo # # Si queremos, modificar la definicin de nuestra vista podemos utili3ar la sentencia ALT.) 42.6, de forma muy parecida a como lo 9aciamos con las tablas. (n este caso queremos aBadir los campos f:Malquiler y f:Mdevolucion a la vista.
ALT.) 42.6 v)lquileres AS ! S.L.CT nombre, apellidos, matricula, f:Malquiler, f:Mdevolucion F)OM t)lquileres, t&lientes 67.). ! t)lquileres.codigoMcliente W t&lientes.codigo # # 5or ltimo podemos eliminar la vista a trav2s de la sentencia D)O< 42.6. 5ara eliminar la vista que 9emos creado anteriormente se uitli3ara%
D)O< 42.6 v)lquileresL 4na vista se consulta como si fuese una tabla. arriba
Sinnimos 4n sinnimo es un nombre alternativo que identifica un tabla en la base de datos. &on un sinnimo se pretende normalmente simplicar el nombre original de la tabla, aunque tambien se suelen utili3ar para evitar tener que escribir el nombre del propietario de la tabla. No !oas las ?ases e a!os sopor!an los sinnimos8 5ara crear un sinnimo 9ay uque utili3ar la sentencia C).AT. S:NON:M especificando el nombre que deseamos utili3ar como sinnimo y la tabla para la que estamos creando el sinnimo.
C).AT. S:NON:M EnombreMsinonimoF FO) EnombreMtablaFL (jemplo% (l siguente ejemplo crea el sinnimo &oc9es para la tabla t&oc9es.
C).AT. S:NON:M &oc9es FO) t&oc9esL 5ara eliminar el sinnimo creado debemos emplear la sentencia D)O< S:NON:M.
D)O< S:NON:M &oc9esL
Lenguaje de manipulacin de datos !I# &onsulta de datos. (l proceso ms importate que podemos llevar a cabo en una base de datos es la consulta de los datos. "e nada servira una base de datos si no puedieramos consultarla. (s adems la operacin que efectuaremos con mayor frecuencia. 5ara consultar la informacin SQL pone a nuestra disposicin la sentencia S.L.CT. GarribaH
La sentencia S(L(&* La sentencia S.L.CT nos permite consultar los datos almacenados en una tabla de la base de datos. (l formato de la sentencia select es%
S.L.CT GALL @ D2ST2NCT H Enombre_campoF GI,Enombre_campoFJH F)OM Enombre_tablaFKEnombre_vistaF GI,Enombre_tablaFKEnombre_vistaFJH G67.). EcondicionF GI ANDKO) EcondicionFJHH G5)O3< B: Enombre_campoF GI,Enombre_campo FJHH G7A42N5 EcondicionFGI ANDKO) EcondicionFJHH GO)D.) B: Enombre_campoFKEindiceMcampoF GASC K D.SCH GI,Enombre_campoFKEindiceMcampoF GASC K D.SC HJHH
-eamos por partes que quiere decir cada una de las partes que conforman la sentecia. Significado S.L.CT 5alabra clave que indica que la sentencia de SQL que queremos ejecutar es de seleccin. ALL Indica que queremos seleccionar todos los valores.(s el valor por defecto y no suele especificarse casi nunca. D2ST2NCT Indica que queremos seleccionar slo los valores distintos. F)OM Indica la tabla !o tablas# desde la que queremos recuperar los datos. (n el caso de que e:ista ms de una tabla se denomina a la consulta Pconsulta combinadaP o PjoinP. (n las consultas combinadas es necesario aplicar una condicin de combinacin a trav2s de una clusula 67.).. 67.). (specifica una condicin que debe cumplirse para que los datos sean devueltos por la consulta. )dmite los operadores lgicos AND y O). 5)O3< B: (specifica la agrupacin que se da a los datos. Se usa siempre en combinacin con funciones agregadas. 7A42N5 (specifica una condicin que debe cumplirse para los datos(specifica una condicin que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de 67.). pero aplicado al conjunto de resultados devueltos por la consulta. "ebe aplicarse siempre junto a 5)O3< B: y la condicion debe estar referida a los campos contenidos en ella. O)D.) B: 5resenta el resultado ordenado por las columnas indicadas. (l orden puede e:presarse con ASC !orden ascendente# y D.SC !orden descendente#. (l valor predeterminado es ASC8 5ara formular una consulta a la tabla t&oc9es !creada en el captulo de tablas# y recuperar los campos matricula, marca, modelo, color, numeroMNilometros, numMpla3as debemos ejecutar la siguiente consulta. Los datos seran devueltos ordenados por marca y por modelo en orden ascendente, de menor a mayor.
S.L.CT matricula, marca, modelo, color, numeroMNilometros, numMpla3as F)OM t&oc9es O)D.) B: marca,modeloL La palabra clave F)OM indica que los datos sern recuperados de la tabla t&oc9es. 5odriamos 9aber especificado mas de una tabla, pero esto se ver en el apartado de consultas combinadas. *ambien podramos 9aber simplicado la consulta a trav2s del uso del comodin de campos, el asterisco PXP.
S.L.CT X F)OM t&oc9es O)D.) B: marca,modeloL (l uso del asterisco indica que queremos que la consulta devuelva todos los campos que e:isten en la tabla. GarribaH
La clusula .D('( La clusula 67.). es la instruccin que nos permite filtrar el resultado de una sentencia S.L.CT. Dabitualmente no deseamos obtener toda la informacin e:istente en la tabla, sino que queremos obtener slo la informacin que nos resulte util es ese momento. La clusula 67.). filtra los datos antes de ser devueltos por la consulta. (n nuestro ejemplo, si queremos consultar un coc9e en concreto debemos agregar una clusula 67.).. (sta clusula especifica una o varias condiciones que deben cumplirse para que la sentencia S.L.CT devuelva los datos. 5or ejemplo, para que la consulta devuelva slo los datos del coc9e con maricula 1?<>A>?Y) debemos ejecutar la siguiente sentencia%
S.L.CT matricula, marca, modelo, color, numeroMNilometros, numMpla3as F)OM t&oc9es 67.). matricula W Z1?<>A>?Y)ZL &uando en una clusula [9ere queremos incluir un tipo te:to, debemos incluir el valor entre comillas simples. )dems, podemos utili3ar tantas condiciones como queramos, utili3ando los operadores lgicos AND y O) . (l siguiente ejemplo muestra una consulta que devolver los coc9es cuyas matriculas sean 1?<>A>?Y) o bien 1?A>\\?)).
S.L.CT matricula, marca, modelo, color, numeroMNilometros, numMpla3as F)OM t&oc9es 67.). matricula W Z1?<>A>?Y)Z O) matricula W Z1?A>\\?))Z L )dems una condicin 67.). puede ser negada a trav2s del operador lgico NOT8 La siguiente consulta devolver todos los datos de la tabla t&o9es menos el que tenga matricula 1?<>A>?Y).
S.L.CT matricula, marca, modelo, color, numeroMNilometros, numMpla3as F)OM t&oc9es 67.). NOT matricula W Z1?<>A>?Y)Z L 5odemos tambien obtener las diferentes marcas y modelos de coc9es ejecutando la consulta.
S.L.CT D2ST2NCT marca, modelo F)OM t&oc9esA La ver los valores distintos. (n el caso anterior se devolveran lpalabra clave D2ST2NCT indica que slo queremos os valores distintos del par formado por los campos marca y modelo. GarribaH
La clusula 0'"(' $/ &omo ya 9emos visto en los ejemplos anteriores podemos especificar el orden en el que sern devueltos los datos a trav2s de la clusula O)D.) B:.
S.L.CT matricula, marca, modelo, color, numeroMNilometros, numMpla3as F)OM t&oc9es O)D.) B: marca ASC,modelo D.SCL &omo podemos ver en el ejemplo podemos especificar la ordenacin ascendente o descendente a trav2s de las palabras clave ASC y D.SC. La ordenacin depende del tipo de datos que este definido en la columna, de forma que un campo nmerico ser ordenado como tal, y un alfanmerico se ordenar de la ) a la Y, aunque su contenido sea nmerico. "e esta forma el valor <CC se devuelve antes que el <<. *ambi2n podemos especificar el en la clusula O)D.) B: el ndice nmerico del campo dentro del la sentencia S.L.CT para la ordenacin, el siguiente ejemplo ordenara los datos por el campo marca, ya que aparece en segundo lugar dentro de la lista de campos que componen la S.L.CT8
Insertar datos. Dasta a9ora 9emos visto como se almacenan los datos en una base de datos y como consultar esos datos almacenados, pero no 9emos visto como almacenar dic9os datos. 5ara almacenar datos en una base de datos debemos insertar filas en las tablas. 5ara ellos SQL pone a nuestra disposicin la sentencia 2NS.)T. GarribaH
Insercin de filas (l proceso de insercin de filas consiste en aBadir a una tabla una o ms filas y en cada fila todos o parte de sus campos. 5odemos distinguir dos formas de insertar filas% Insercin individual de filas. Insercin multiple de filas. La sinta:is de la sentencia 2NS.)T es diferente segn cual sea nuestro proposito. Slo podremos omitir un campo al efectuar una insercin cuando este ac[epte valores nulos. GarribaH
Insercin individual de filas 5ara reali3ar la inserccin individual de filas SQL posee la instruccin 2NS.)T 2NTO.La inserccin individual de filas es la que ms comunmente utili3aremos. Su sinta:is es la siguiente%
2NS.)T 2NTO Enombre_tablaF G!Ecampo1FG,Ecampo2F,...H#H values !Evalor1F,Evalor2F,...#L &omo se puede observar la sentencia tiene dos partes claramente diferenciadas, por un lado la propia 2NS.)T 2NTO seguida de la lista de campos en los que queremos insertar los datos, y por otro la lista de valores que queremos insertar en los campos. La mejor forma de ver esto es a trav2s de un ejemplo.
2NS.)T 2NTO t&oc9es !matricula, marca , modelo , color , numeroMNilometros# values !Z1<<<<&)Z, Z'(+)4L*Z, Z1(7)+( *'<CCZ, Z+(7'0 "I)1)+*(Z, @=CCC#L +ota%Demos utili3ado el color rojo para los datos de tipo te:to, entrecomillados con la comilla simple, y el a3ul para los numericos. &on esta sentencia 2NS.)T creamos un registro en la tabla t&oc9es con los valores especificados, es decir, la matricula tendr el valor 1?<<<<?&), la marca ser '(+)4L* y as sucesivamente. SQue ocurrira si ya e:istiera un coc9e con la matricula 1?<<<<?&)T Se producir un error, porque 9emos definido la clave primaria en el campo matricula, y como 9emos visto la clave primaria debe ser nica. Si omitimos algn par P campo?valor P en la sentencia 2NS.)T, pueden ocurrir varias cosas% Que se produ3ca un error , si el campo no acepta valores nulos. Que se grave el registro y se deje nulo el campo, cuando el campo acepte valores nulos. Que se grave el registro y se tome el valor por defecto, cuando el campo tenga definido un valor por defecto. Que 9acer en cada cada momento depender del programa. 5or ejemplo, la siguiente sentencia crear un registro en la tabla t&oc9es con el campo numeroMNilometros cero, ya que este es su valor por defecto.
Insercin multiple de filas La sentencia 2NS.)T permite tambien insertar varios registros en una tabla. 5are ello se utili3a una combinacin de la sentencia 2NS.)T junto a una sentencia S.L.CT. (l resultado es que se insertan todos los registros devueltos por la consulta.
2NS.)T 2NTO Enombre_tablaF G!Ecampo1FG,Ecampo2F,...H#H S.L.CT G!Ecampo1FG,Ecampo2F,...H#H F)OM Enombre_tabla_origenFL 5ara poder utili3ar la insercin multiple de filas se deben cumplir las siguientes normas% La lista de campos de las sentencias insert y select deben coincidir en nmero y tipo de datos. +inguna de las filas devueltas por la consulta debe infringir las reglas de integridad de la tabla en la que vayamos a reali3ar la insercin. 5ongamos un ejemplo, vamos a crear una tabla con las diferentes marcas que tenemos en la base de datos. La sentencia SQL para crear la tabla es la siguiente%
C).AT. TABL. t1arcas ! codigo integer not null ien!i!"!<,<#, marca varc9ar!A>>#, cons!rain! 58M1arcas primar" ;e" !codigo# #L +ota% Demos incluido la funcin identity para el campo codigo, esta funcin es propia de SQL Server e indica que el cdigo se genera automticamente cada ve3 que se inserta un registro con un valor autonum2rico. 5raticamente todos los gestores de bases de datos dan la opcin del campo autonumerico o incremental, si bien el modo varias. 5ara SQL Server utili3aremos la funcion identity, para 0')&L( las secuencias ... 4na ve3 que tenemos creada la tabla de marcas vamos a insetar otro par de registros en la tabla de coc9es, para ello utili3amos una sentencia inser! in!o para una nica fila.
2NS.)T 2NTO t&oc9es !matricula, marca , modelo , color# values !Z1<QQA6/Z, Z60'"Z, Z6I(S*)Z, Z7'IS 5L)*)Z#L )9ora tenemos tres marcas diferentes en la tabla t&oc9es, y queremos insertarlas en la tabla de marcas, para ello podemos reali3ar tres inserciones individuales, pero Sque pasaria si no supieramos de antemano el nmero de marcasTSy si fueran unas cincuenta marcasT. +os podriamos pasar el da entero escribiendo sentencias inser! in!o. )fortunadamente podemos reali3ar una insercin multiple del siguiente modo%
2NS.)T 2NTO t1arcas !marca# S.L.CT D2ST2NCT marca F)OM t&oc9esL &omo resultado obtenemos un registro en la tabla t1arcas por cada marca de la tabla t&oc9es. (l campo codigo se 9a generado automticamente ya que est definido como identidad. &0"I70 1)'&) < 60'" A '(+)4L* Q S()* "emonos cuenta de que el orden de generacin no 9a sido el mismo que el de insercin, sino que se 9a aplicado el orden en el que 9an sido devueltos los datos por la sentencia S(L(&*. )9ora deberiamos cambiar los datos de la tabla t&oc9es, para guardar el cdigo de la marca en lugar de su descripcin, pero para ello necesitamos saber como modificar un dato grabado ... (s momento de pasar al siguiente punto, la actuali3acin de datos.
$orrado de datos. La sentencia "(L(*(. 5ara borrar datos de una tabla, debemos utili3ar la sentencia D.L.T.. La sinta:is de la sentencia D.L.T. es la siguiente%
D.L.T. F)OM Enombre_tablaF
G 67.). EcondicionFHL (l siguiente ejemplo ilustra el uso de la sentencia D.L.T.. (s buena idea especificar en la sentencia 67.). los campos que forman la clave primaria de la tabla para evitar borrar datos que no queramos eliminar.
D.L.T. F)OM t&oc9es
67.). marca W ZS()*ZL La sinta:is de "(L(*( varia en )ccess, siendo necesario el uso del comodn X. "(L(*( X 6'01 Et&oc9esF &uando trabajemos con la sentencia D.L.T. debemos tener en cuenta las siguientes consideraciones% Solo podemos borrar datos de una nica tabla. &uando borramos datos de una vista, los estamos borrando tambi2n de la tabla. Las vistas son solo una forma de ver los datos, no una copia. Si intentamos borrar un registro de una tabla referenciada por una FO).2N5 9.: como tabla maestra, si la tabla dependiente tiene registros relacionados la sentencia D.L.T. fallar. La sentencia *'4+&)*( 5ara reali3ar un borrado completo de tabla debemos considerar la posibilidad de utili3ar la sentencia T)3NCAT., muc9o ms rpida que D.L.T.. La sinta:is de la sentencia T)3NCAT. es la siguiente%
T)3NCAT. TABL. Enombre_tablaFL (l siguiente ejemplo muestra el uso de la sentencia T)3NCAT..
T)3NCAT. TABL. t&oc9esL &uando trabajemos con la sentencia T)3NCAT. debemos tener en cuenta las siguientes consideraciones. La sentencia T)3NCAT. no es transaccional. +o se puede des9acer. La sentencia T)3NCAT. no admite clausula 67.).. $orra toda la tabla. +o todos los gestores de bases de datos admiten la sentencia T)3NCAT..
)ctuali3acin de datos. La sentencia 45")*(. 5ara la actuali3acin de datos SQL dispone de la sentencia 3<DAT.8 La sentencia 3<DAT. permite la actuali3acin de uno o varios registros de una nica tabla. La sinta:is de la sentencia 3<DAT. es la siguiente
3<DAT. Enombre_tablaF S.T Ecampo1F W Evalor1F IG,Ecampo2F W Evalor2F,...,EcampoNF W EvalorNFHJ G 67.). EcondicionFHL Las siguientes sentencias actuali3an los datos de la tabla t&oc9es con los valores de la tabla t1arca obtenidos anteriormente en la pgina dedicada a la insercin de datos.
3<DAT. t&oc9es S.T marca W Z<Z 67.). marca W Z60'"ZL
3<DAT. t&oc9es S.T marca W ZAZ 67.). marca W Z'(+)4L*ZL
3<DAT. t&oc9es S.T marca W ZQZ 67.). marca W ZS()*ZL +otese que los valores para el campo marca aparecen entrecomillados, ya que es un campo de tipo varchar. Los valores con los que actualicemos los datos deben ser del tipo del campo. 4n aspecto a tener en cuenta es que los campos que forman la primar" ;e" de una tabla slo se podrn modificar si los registros no estn referenciados en ninguna otra tabla. (n nuestro caso slo podremos modificar la matrcula de un coc9e si no tiene registros asociados en la tabla t)lquileres. (sto puede causar poblemas, ya que podramos 9abernos equivocado al dar de alta el coc9e en la tabla t&oc9es y detectar el error despues de alquilar el coc9e. (n tal caso tendramos dar de alta un nuevo coc9e con la matrcula correcta, actuali3ar los registros de la tabla alquileres y por ltimo borrar el registro erroneo de la tabla t&oc9es. (ste proceso puede ser bastante complicado en el caso de que e:istiran ms relaciones con la tabla. Se podra considerar que la clave primaria de la tabla esta mal definida y que la matrcula no debe ser el elemento que identifique el coc9e. 4na alternativa seria crear un cdigo autonum2rico para la tabla t&oc9es que reali3ar las veces de clave primaria y crear un ndice nico para la matrcula, este diseBo tambien tiene sus PpegasP, por lo que debemos decidir que modelo utili3ar, y seleccionar las claves primarias con sumo cuidado. GarribaH
4so de subconsultas con 45")*( (l uso de subconsultas es una t2cnica avan3ada de consulta que veremos con detalle ms adelante, pero que tratamos aqu de forma introductoria. Dasta a9ora 9emos actuali3ado los datos con valores que conocemos de antemano, Spero qu2 ocurre cuando esos datos deben tomarse de otra tabla de la base de datosT.5odramos diseBar un programa que recorriera toda la tabla y buscar el valor adecuado para cada registro y lo actuali3ase. Sin duda es una solucin, y en ocasiones cas la nica, pero es una solucin cara y compleja que adems e:ige que cono3camos algn otro lenguaje de programacin. 5ara estos casos podemos utili3ar subconsultas con la sentencia 3<DAT.. La sinta:is es la siguiente%
3<DAT. EnombreMtablaF S.T Ecampo<F W Evalor<F K Esubconsulta<F IG,EcampoAF W EvalorAF K EsubconsultaAF ,... , Ecampo+F W Evalor+F K Esubconsulta+FHJ G 67.). EcondicionFHL &omo puede verse la sinta:is es practicamente igual a la sinta:is del la sentencia 3<DAT., con la salvedad de que podemos utili3ar subconsultas en lugar de valores al asignar los campos. "e forma generica podemos decir que las subconsultas son consultas S.L.CT incluidas dentro de otra sentencia SQL. Las siguientes sentencias 3<DAT. son equivalentes%
3!iliBano sen!encias 3<DAT. normalesC 3<DAT. t&oc9es S.T marca W Z<Z 67.). marca W Z60'"ZL 3<DAT. t&oc9es S.T marca W ZAZ 67.). marca W Z'(+)4L*ZL 3<DAT. t&oc9es S.T marca W ZQZ 67.). marca W ZS()*ZL 4tili3ando sentencias 45")*( combinadas con subconsultas% 3<DAT. t&oc9es S.T marca W !S.L.CT &0"I70 F)OM t1arcas 67.). t1arcas.1arca W t&oc9es.1arca # 67.). marca 2N !Z60'"Z,Z'(+)4L*Z,ZS()*Z#L 5or cada registro de la tabla t&oc9es se ejecutar la subconsulta, actuali3ando el campo marca a el valor del cdigo de la marca en la tabla t1arcas. (l uso de subconsultas para actuali3ar datos tiene algunas limitaciones% La subconsulta slo puede devover un nico campo. La subconsulta slo puede devolver un slo registro. (l tipo de datos devuelto por la subconsulta debe ser del mismo tipo que el campo al que estamos asignando el valor. +o todos los sistemas de bases de datos permiten usar subconsultas para actuali3ar datos !)ccess# aunque si una buena parte de ellos !0')&L(, SQL Server, Sybase ...# 5ero en nuestro ejemplo el campo codigo de la tabla t1arcas es num2rico y el campo marca de la tabla t&oc9es es te:to. S5or qu2 funcionaT 1uy facil, el motor de la base de datos es capa3 de convertir el valor num2rico a un valor te:to de forma automtica, si bien esta es una e:cepcin. )9ora que ya tenemos modificado el valor de la marca de los registros, es conveniente modificar su tipo de datos y crear una foreign Ney contra la tabla t1arcas. 5ara ello ejecutaremos las siguientes sentencias.
ALT.) TABL. t&oc9es al!er column marca in! no! nullA La opcion alter column es propia de SQL Server. 5ara modificar el tipo de datos de una tabla debemos consultar la ayuda del gestor de bases de datos. ALT.) TABL. t&oc9es a cons!rain! 68M&oc9esM1arcas foreign ;e" !marca# references t1arcas !codigo#L
&onsultas combinadas. ]0I+S &onsultas combinadas. Dabitualmente cuando necesitamos recuperar la informacin de una base de datos nos encontramos con que dic9a informacin se encuentra repartida en varias tablas, referenciadas a trav2s de varios cdigos. "e este modo si tuvieramos una tabla de ventas con un campo cliente, dic9o campo contendra el cdigo del cliente de la tabla de cliente. Sin embargo est forma de almacenar la informacin no resulta muy util a la 9ora de consultar los datos. SQL nos proporciona una forma facil de mostrar la informacin repartida en varias tablas, las consul!as com?inaas o DO2NS8 Las consultas combinadas pueden ser de tres tipos% &ombinacin interna &ombinacin e:terna 4niones GarribaH
&ombinacin interna. La combinacin interna nos permite mostrar los datos de dos o ms tablas a trav2s de una condicin 67.).8 Si recordamos los ejemplos de los capitulos anteriores tenemos una tabla de coc9es, en la que tenemos referenciada la marca a trav2s del cdigo de marca. 5ara reali3ar la consulta combinada entre estas dos tablas debemos escribir una consulta S.L.CT en cuya clasula F)OM escribiremos el nombre de las dos tablas, separados por comas, y una condicin 67.). que obligue a que el cdigo de marca de la tabla de coc9es sea igual al cdigo de la tabla de marcas. Lo ms sencillo es ver un ejemplo directamente%
S(L(&* t&oc9es.matricula, t1arcas.marca, t&oc9es.modelo, t&oc9es.color, t&oc9es.numeroMNilometros, t&oc9es.numMpla3as 6'01 t&oc9es, t1arcas .D('( t&oc9es.marca W t1arcas.codigo La misma consulta de forma PvisualP ...
"emonos cuenta que 9emos antepuesto el nombre de cada tabla a el nombre del campo, esto no es obligatorio si los nombres de campos no se repiten en las tablas, pero es acondajable para evitar conflictos de nombres entre campos. 5or ejemplo, si para referirnos al campo marca no anteponemos el nombre del campo la base de datos no sabe si queremos el campo marca de la tabla t&oc9es, que contiene el cdigo de la marca, o el campo marca de la tabla t1arcas, que contiene el nombre de la marca. 0tra opcin es utili3ar la clusula 2NN.) DO2N. Su sinta:is es identica a la de una consulta S.L.CT 9abitual, con la particularidad de que 2n la clusula F)OM slo aparece una tabla o vista, aBadiendose el resto de tablas a trav2s de clusulas 2NN.) DO2N .
S.L.CT GALL @ D2ST2NCT H Enombre_campoF GI,Enombre_campoFJH F)OM Enombre_tablaF GI2NN.) DO2N Enombre_tablaF ON <condicion_combinacion>}] G67.). EcondicionF GI ANDKO) EcondicionFJHH G5)O3< B: Enombre_campoF GI,Enombre_campo FJHH G7A42N5 EcondicionFGI ANDKO) EcondicionFJHH GO)D.) B: Enombre_campoFKEindiceMcampoF GASC K D.SCH GI,Enombre_campoFKEindiceMcampoF GASC K D.SC HJHH (l ejemplo anterior escrito utili3ando la clausula 2NN.) DO2N quedaria de la siguiente manera%
S(L(&* t&oc9es.matricula, t1arcas.marca, t&oc9es.modelo, t&oc9es.color, t&oc9es.numeroMNilometros, t&oc9es.numMpla3as 6'01 t&oc9es I++(' ]0I+ t1arcas 0+ t&oc9es.marca W t1arcas.codigo La clusula 2NN.) DO2N permite separar completamente las condiciones de combinacin con otros criterios, cuando tenemos consultas que combinan nueve o die3 tablas esto realmente se agradece. Sin embargo muc9os programadores no son amigos de la clusula 2NN.) DO2N, la ra3n es que uno de los principales gestores de bases de datos, O)ACL., no la soportaba. Si nuestro porgrama debia trabajar sobre bases de datos O)ACL. no podiamos utili3ar 2NN.) DO2N. A par!ir e la version O)ACL. Ei oracle sopor!a la clFusula 2NN.) DO2N. GarribaH
&ombinacin (:terna La combinacin interna es e:cluyente. (sto quiere decir que si un registro no cumple la condicin de combinacin no se incluye en los resultados. "e este modo en el ejemplo anterior si un coc9e no tiene grabada la marca no se devuelve en mi consulta. Segn la naturale3a de nuestra consulta esto puede ser una ventaja , pero en otros casos significa un serio problema. 5ara modificar este comportamiento SQL pone a nuestra disposicin la combinacin e:terna. La combinacin e:terna no es e:cluyente. La sinta:is es muy parecida a la combinacin interna,
S.L.CT GALL @ D2ST2NCT H Enombre_campoF GI,Enombre_campoFJH F)OM Enombre_tablaF GIL.FT@)257T O3T.) DO2N Enombre_tablaF ON <condicion_combinacion>}] G67.). EcondicionF GI ANDKO) EcondicionFJHH G5)O3< B: Enombre_campoF GI,Enombre_campo FJHH G7A42N5 EcondicionFGI ANDKO) EcondicionFJHH GO)D.) B: Enombre_campoFKEindiceMcampoF GASC K D.SCH GI,Enombre_campoFKEindiceMcampoF GASC K D.SC HJHH La combinacin e:terna puede ser diestra o siniestra, L.FT O3T.) DO2N o )257T O3T.) DO2N8 &on L.FT O3T.) DO2N obtenemos todos los registros de en la tabla que situemos a la i3quierda de la clausula DO2NG mientras que con )257T O3T.) DO2N obtenmos el efecto contrario. &omo mejor se ve la combinacin e:terna es con un ejemplo.
S(L(&* t&oc9es.matricula, t1arcas.marca, t&oc9es.modelo, t&oc9es.color, t&oc9es.numeroMNilometros, t&oc9es.numMpla3as 6'01 t&oc9es L.FT O3T.) DO2N t1arcas 0+ t&oc9es.marca W t1arcas.codigo (sta consulta devolver todos los registros de la tabla t&oc9es, independientemente de que tengan marca o no. (n el caso de que el coc9e no tenga marca se devolver el valor null para los campos de la tabla t1arcas. -isualmente !la consulta devuelve los datos en a3ul# ...
(l mismo ejemplo con 'I7D* 04*(' ]0I+.
S(L(&* t&oc9es.matricula, t1arcas.marca, t&oc9es.modelo, t&oc9es.color, t&oc9es.numeroMNilometros, t&oc9es.numMpla3as 6'01 t&oc9es )257T O3T.) DO2N t1arcas 0+ t&oc9es.marca W t1arcas.codigo (sta consulta devolver los registros de la tabla t&oc9es que tengan marca relacionada y todos los registros de la tabla t1arcas, tengan algn registro en t&oc9es o no. -isualmente !la consulta devuelve los datos en a3ul# ...
GarribaH
4nion La clusula 3N2ON permite unir dos o ms conjuntos de resultados en uno detras del otro como si se tratase de una nica tabla. "e este modo podemos obtener los registros de mas de una tabla PunidosP. La sinta:is corresponde a la de varias S.L.CT unidas a trav2s de 3N2ON, como se muestra a continuacin%
S.L.CT GALL @ D2ST2NCT H Enombre_campoF GI,Enombre_campoFJH F)OM Enombre_tablaF GIL.FT@)257T O3T.) DO2N Enombre_tablaF ON <condicion_combinacion>}] G67.). EcondicionF GI ANDKO) EcondicionFJHH G5)O3< B: Enombre_campoF GI,Enombre_campo FJHH G7A42N5 EcondicionFGI ANDKO) EcondicionFJHH I 3N2ON HALL @ D2ST2NCT I S.L.CT GALL @ D2ST2NCT H Enombre_campoF GI,Enombre_campoFJH F)OM Enombre_tablaF GIL.FT@)257T O3T.) DO2N Enombre_tablaF ON <condicion_combinacion>}] G67.). EcondicionF GI ANDKO) EcondicionFJHH G5)O3< B: Enombre_campoF GI,Enombre_campo FJHH G7A42N5 EcondicionFGI ANDKO) EcondicionFJHH J GO)D.) B: Enombre_campoFKEindiceMcampoF GASC K D.SCH GI,Enombre_campoFKEindiceMcampoF GASC K D.SC HJHH 5ara utili3ar la clausula 3N2ON debemos cumplir una serie de normas. Las consultas a unir deben tener el mismo nmero campos, y adems los campos deben ser del mismo tipo. Slo puede 9aber una nica clausula O)D.) B: al final de la sentencia S.L.CT. (l siguiente ejemplo muestra el uso de 3N2ON
S(L(&* t&oc9es.matricula, t1arcas.marca, t&oc9es.modelo, t&oc9es.color, t&oc9es.numeroMNilometros, t&oc9es.numMpla3as 6'01 t&oc9es 2NN.) DO2N t1arcas 0+ t&oc9es.marca W t1arcas.codigo 4+I0+ S(L(&* t1otos.matricula, t1arcas.marca, t1otos.modelo, t1otos.color, t1otos.numeroMNilometros, C 6'01 t1otos 2NN.) DO2N t1arcas 0+ t1otos.marca W t1arcas.codigoL 5uede observarse el uso de la constante cero en la segunda lista de seleccin para 9acer coincidir el nmero y tipo de campos que devuelve la consulta 4+I0+.
&onsultas agregadas La clusula 7'045 $/ La clausula 5)O3< B: combina los registros con valores id2nticos en un nico registro. 5ara cada registro se puede crear un valor agregado si se incluye una funcin SQL agregada, como por ejemplo Sum o &ount, en la instruccin S.L.CT. Su sinta:is es%
S.L.CT GALL @ D2ST2NCT H Enombre_campoF GI,Enombre_campoFJH GI,<funcion_agregado>JH F)OM Enombre_tablaFKEnombre_vistaF GI,Enombre_tablaFKEnombre_vistaFJH G67.). EcondicionF GI ANDKO) EcondicionFJHH G5)O3< B: Enombre_campoF GI,Enombre_campo FJHH G7A42N5 EcondicionFGI ANDKO) EcondicionFJHH GO)D.) B: Enombre_campoFKEindiceMcampoF GASC K D.SCH GI,Enombre_campoFKEindiceMcampoF GASC K D.SC HJHH 5)O3< B: es opcional. Si se utili3a 5)O3< B: pero no e:iste una funcin SQL agregada en la instruccin S.L.CT se obtiene el mismo resultado que con una consulta S.L.CT D2ST2NCT. Los valores +ull en los campos 5)O3< B: se agrupan y no se omiten. +o obstante, los valores +ull no se evalan en ninguna de las funciones SQL agregadas. *odos los campos de la lista de campos de S.L.CT deben incluirse en la clusula 5)O3< B: o como argumentos de una funcin SQL agregada.
S.L.CT marca, modelo, S3M!numeroMNilometros# F)OM t&oc9es 5)O3< B: marca, modelo La clusula D)-I+7 4na ve3 que 5)O3< B: 9a combinado los registros, 7A42N5 muestra cualquier registro agrupado por la clusula 5)O3< B: que satisfaga las condiciones de la clusula 7A42N5. Se utili3a la clusula 67.). para e:cluir aquellas filas que no desea agrupar, y la clusula 7A42N5 para filtrar los registros una ve3 agrupados. 7A42N5 es similar a 67.)., determina qu2 registros se seleccionan. 4na ve3 que los registros se 9an agrupado utili3ando 5)O3< B:, 7A42N5 determina cuales de ellos se van a mostrar. 7A42N5 permite el uso de funciones agregadas.
S.L.CT marca, modelo, S3M!numeroMNilometros# F)OM t&oc9es 67.). marca EF Z$1.Z 5)O3< B: marca, modelo 7A42N5 S3M!numeroMNilometros#F<CCCCC (n el ejemplo anterior, no se cuentan los datos para todas las marcas menos P$1.P, una ve3 que se 9an contado, se evalua 7A42N5, y el conjunto de resultados devuelve solo aquellos modelos con ms de <CC.CCC Nm.
)-7 &alcula la media aritm2tica de un conjunto de valores contenidos en un campo especificado de una consulta. Su sinta:is es la siguiente
A45!<expr>#
(n donde e:pr representa el campo que contiene los datos num2ricos para los que se desea calcular la media o una e:presin que reali3a un clculo utili3ando los datos de dic9o campo. La media calculada por )vg es la media aritm2tica !la suma de los valores dividido por el nmero de valores#. La funcin )vg no incluye ningn campo +ull en el clculo.
&ount &alcula el nmero de registros devueltos por una consulta. Su sinta:is es la siguiente%
CO3NT!<expr># (n donde expr contiene el nombre del campo que desea contar. Los operandos de e:pr pueden incluir el nombre de un campo de una tabla, una constante o una funcin !la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL#. 5uede contar cualquier tipo de datos incluso te:to. )unque e:pr puede reali3ar un clculo sobre un campo, &ount simplemente cuenta el nmero de registros sin tener en cuenta qu2 valores se almacenan en los registros. La funcin &ount no cuenta los registros que tienen campos null a menos que e:pr sea el carcter comodn asterisco !X#. Si utili3a un asterisco, &ount calcula el nmero total de registros, incluyendo aquellos que contienen campos null. &ount!X# es considerablemente ms rpida que &ount!&o#. +o se debe poner el asterisco entre dobles comillas !ZXZ#.
"evuelven el mnimo o el m:imo de un conjunto de valores contenidos en un campo especifico de una consulta. Su sinta:is es%
M2N!<expr># MA/!<expr># (n donde e:pr es el campo sobre el que se desea reali3ar el clculo. (:pr pueden incluir el nombre de un campo de una tabla, una constante o una funcin !la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL#.
"evuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sinta:is es%
S3M!<expr># (n donde expr respresenta el nombre del campo que contiene los datos que desean sumarse o una e:presin que reali3a un clculo utili3ando los datos de dic9os campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una funcin !la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL#.