You are on page 1of 32

Introduccin a SQL

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.

5alabras &lave
)LL )+" )+/ )S&
)-7 $(7I+ $/ &D)'
&D(&8 &L0S( &04+* &011I*
&'()*( &4'S0' "(&I1)L "(&L)'(
"(L(*( "(S& "IS*I+&* "(6)4L*
(,IS*S 6(*&D 6L0)* 60'
6'01 7')+* 7'045 D)-I+7
I+ I+"(, I+S('* I+*(7('
I+*0 LI8( 1), 1I+
+0* +41('I& 0+ 05(+
0' 0'"(' '(-08( '0LL$)&8
S(L(&* S(* S41 *)$L(
4+I0+ 4+IQ4( 45")*( 4S('
-)L4(S -I(. .D('( .I*D

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. Enombre_tablaF
ADD EnombreMcampoF Etipo_datos(tamao)F
Gnull Kno! nullH Gefaul! EvalorMporMdefectoFH
I
, Enombre_campoF Etipo_datos(tamao)F
Gnull Kno! nullH Gefaul! EvalorMporMdefectoFHJ L
(jemplo%

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

S.L.CT matricula,
marca,
modelo,
color,
numeroMNilometros,
numMpla3as
F)OM t&oc9es
O)D.) B: AL


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.

2NS.)T 2NTO t&oc9es
!matricula,
marca ,
modelo ,
color#
values
!Z1<<<<&)Z,
Z'(+)4L*Z,
Z1(7)+( *'<CCZ,
Z+(7'0 "I)1)+*(Z#L
GarribaH

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
!Z1AAQQ6DZ,
ZS()*Z,
ZL(0+ 6'Z,
Z'0]0Z#L

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.

S.L.CT marca, modelo, A45!numeroMNilometros#
F)OM t&oc9es

5)O3< B: marca, modelo


&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!&ampo#. +o se
debe poner el asterisco entre dobles comillas !ZXZ#.

S.L.CT CO3NT!X# F)OM t&oc9esL
S.L.CT marca, CO3NT!modelo#
F)OM t&oc9es
5)O3< B: marcaL
S.L.CT marca, CO3NT!D2ST2NCT modelo#
F)OM t&oc9es
5)O3< B: marcaL

1a:, 1in

"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#.

S.L.CT marca, modelo, M2N!numeroMNilometros#
, MA/!numeroMNilometros#
F)OM t&oc9es
5)O3< B: marca, modelo

Sum

"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#.

S.L.CT marca, modelo, S3M!numeroMNilometros#
F)OM t&oc9es
5)O3< B: marca, modelo

You might also like