Вы находитесь на странице: 1из 33

Select SQL Aplicado A Visual FOX PRO 6.

0
Indice
1. Introduccin
2. structura de las ta!las usadas en los e"e#plos
$. Select % SQL en &isual FOX PRO 6.0
'. (o#ponentes del SQL
). (riterios de seleccin
6. Inter&alos de &alores
*. l operador li+e
,. A-rupa#iento de re-istros
.. /i!lio-ra01a
1. Introduccin
La documentacin acerca del uso de los comandos SQL en Visual Fox
Pro es limitada. Tomando esto como referencia he aqu un primer
material de trabajo que espero sira de inicio a los estudiantes !
pro"ramadores que trabajan con este manejador de bases de datos
relacinales.
Se ha tomado como base biblio"r#fica la $!uda %T&L del &S'(
Librar! ! se ha enriquecido las explicaciones con "r#ficas de los
resultados de las consultas que se exponen como ejemplos.
)s importante destacar que trabajo presenta ejemplos del uso del
comando S)L)*T + SQL en Visual Fox Pro ,.- lo m#s sencillas
posibles. buscando orientar a los !a conocedores pero tambi/n a!udar
a aquellos que se est#n iniciando en el mundo de la pro"ramacin.
Sin duda lue"o del estudio de los ejemplos aqu citados se les
ocurrir#n unos cada e0 m#s complejos ! istosos. espero que los
ha"an lle"ar a este seridor as como tambi/n su"erencias del acerca
del trabajo a tra/s del correo electrnico para aprender tambi/n !o de
ustedes.
*omo recomendacin final sera interesante que crearan las tablas
que se utili0an en los ejemplos ! fueran trabajando en forma paralela
en la medida que an le!endo el material. considero que es la mejor
manera de aprender.
$ todos mis saludos ! &anos a la 1bra2.
2. structura de las ta!las usadas en los e"e#plos
$. Select % SQL en &isual FOX PRO 6.0
Visual FoxPro admite comandos de Len"uaje de consultas
estructurado SQL. Los comandos SQL de Visual FoxPro utili0an la
tecnolo"a 3ushmore para optimi0ar el rendimiento ! puede utili0arse
un slo comando SQL para sustituir a arios comandos Visual FoxPro.
Visual FoxPro admite los si"uientes comandos SQL4
S)L)*T 5 SQL4 )specifica los criterios en los que se basa una
consulta ! ejecuta la consulta. Visual FoxPro interpreta la consulta !
recupera los datos especificados de la tabla o tablas. )l comando
S)L)*T se constru!e dentro de Visual FoxPro como cualquier otro
comando de Visual FoxPro. Puede crear una consulta con el comando
S)L)*T
)n la entana *omandos.
)n un pro"rama Visual FoxPro 6como cualquier otro comando de
Visual FoxPro7.
)n el 'ise8ador de consultas.
$LT)3 T$9L) + SQ4 &odifica una tabla existente. Puede modificar el
nombre. el tipo. la precisin. la escala. la admisin de un alor nulo !
las re"las de inte"ridad referencial para cada campo de la tabla.
*3)$T) *:3S13 + SQL4 *rea una tabla temporal. *ada campo de
la tabla temporal se define con un nombre. tipo. precisin. escala.
soporte de alor nulo ! re"las de inte"ridad referencial. Las
definiciones pueden obtenerse del propio comando o de una matri0.
*3)$T) T$9L) + SQL4 *rea una tabla. *ada campo de la tabla
nuea se define con un nombre. tipo. precisin. escala. aceptacin de
alores nulos ! re"las de inte"ridad referencial. )stas definiciones
pueden obtenerse del propio comando o de una matri0.
')L)T) + SQL4 &arca para su eliminacin los re"istros de una tabla
mediante la sintaxis de SQL.
;(S)3T + SQL4 $nexa un re"istro al final de una tabla existente. )l
nueo re"istro inclu!e los datos mostrados en el comando ;(S)3T o
incluidos en la matri0 especificada.
:P'$T) + SQL4 $ctuali0a los re"istros de una tabla. Los re"istros se
pueden actuali0ar se"<n los resultados de una instruccin S)L)*T +
SQL
)l propsito de este material es brindar al estudiante ejemplos que le
permitan utili0ar S)L)*T + SQL en el dise8o de consultas usando
para ello una o m#s tablas dise8adas en Visual Fox Pro.
'. (o#ponentes del SQL
)l len"uaje SQL est# compuesto por comandos. cl#usulas. operadores
! funciones de a"re"ado. )stos elementos se combinan en las
instrucciones para crear. actuali0ar ! manipular las bases de datos.
*omandos
)xisten dos tipos de comandos SQL4
los 'LL que permiten crear ! definir nueas bases de datos.
campos e ndices.
los '&L que permiten "enerar consultas para ordenar. filtrar !
extraer datos de la base de datos.

*omandos 'LL
*omando 'escripcin
*3)$T) :tili0ado para crear nueas tablas. campos e ndices
'31P )mpleado para eliminar tablas e ndices
$LT)3
:tili0ado para modificar las tablas a"re"ando campos o
cambiando la definicin de los campos.

*omandos '&L
*omando 'escripcin
S)L)*T
:tili0ado para consultar re"istros de la base de datos que
satisfa"an un criterio determinado
;(S)3T
:tili0ado para car"ar lotes de datos en la base de datos
en una <nica operacin.
:P'$T)
:tili0ado para modificar los alores de los campos !
re"istros especificados
')L)T)
:tili0ado para eliminar re"istros de una tabla de una base
de datos
*l#usulas
Las cl#usulas son condiciones de modificacin utili0adas para definir
los datos que desea seleccionar o manipular.

*l#usula 'escripcin
F31&
:tili0ada para especificar la tabla de la cual se an a
seleccionar los re"istros
=%)3)
:tili0ada para especificar las condiciones que deben reunir
los re"istros que se an a seleccionar
>31:P
9?
:tili0ada para separar los re"istros seleccionados en
"rupos especficos
%$V;(>
:tili0ada para expresar la condicin que debe satisfacer
cada "rupo
13')3
9?
:tili0ada para ordenar los re"istros seleccionados de
acuerdo con un orden especfico
1peradores L"icos

1perador :so
$('
)s el @!@ l"ico. )al<a dos condiciones ! deuele un
alor de erdad slo si ambas son ciertas.
13
)s el @o@ l"ico. )al<a dos condiciones ! deuele un
alor de erdadero si al"una de las dos es cierta.
(1T
(e"acin l"ica. 'euele el alor contrario de la
expresin.
1peradores de *omparacin

1perador :so
A &enor que
B &a!or que
AB 'istinto de
AC &enor ;"ual que
BC &a!or ;"ual que
C ;"ual que
9)T=))( :tili0ado para especificar un interalo de alores.
L;D) :tili0ado en la comparacin de un modelo
;n
:tili0ado para especificar re"istros de una base de
datos
*1(S:LT$S 9ES;*$S
La sintaxis b#sica de una consulta de seleccin es la si"uiente4
S)L)*T *ampos F31& Tabla
)n donde campos es la lista de campos que se deseen recuperar !
tabla es el ori"en de los mismos. por ejemplo4
S)L)*T (ombre. Telefono F31& *lientes
)sta consulta deuele una isuali0acin de la tabla *lientes con el
campo nombre ! tel/fono. )sta isuali0acin en VFP es un broFse
pero no es necesario a"re"ar esta orden. SQL lo inoca
autom#ticamente. Vea el orden de los campos en el broFse.
1rdenar Los 3e"istros
$dicionalmente se puede especificar el orden en que se desean
recuperar los re"istros de las tablas mediante la cl#usula 13')3 9?
Lista de *ampos. )n donde Lista de campos representa los campos a
ordenar.
)jemplo4
S)L)*T *odGPostal. (ombre. Telefono F31& *lientes 13')3 9?
(ombre
)sta consulta deuele los campos *odi"oPostal. (ombre. Telefono
de la tabla *lientes ordenados por el campo (ombre.
Se pueden ordenar los re"istros por m#s de un campo. como por
ejemplo4
S)L)*T *odi"oPostal. (ombre. Telefono F31& *lientes 13')3 9?
*odGPostal. (ombre
;ncluso se puede especificar el orden de los re"istros4 ascendente
mediante la cl#usula 6$S* 5se toma este alor por defecto7
descendente 6')S*7
S)L)*T *odi"oPostal. (ombre. Telefono F31& *lientes 13')3 9?
*odi"oPostal. nombre $S*
*onsultas *on Predicado
)l predicado se inclu!e entre la cl#usula ! el primer nombre del campo
a recuperar. los posibles predicados son4

Predicado 'escripcin
2 'euele todos los campos de la tabla
T1P
'euele un determinado n<mero de re"istros de la
tabla
';ST;(*T
1mite los re"istros cu!os campos seleccionados
coincidan totalmente
';ST;(*T31=
1mite los re"istros duplicados bas#ndose en la
totalidad del re"istro ! no slo en los campos
seleccionados.
2 6$LL7
Si no se inclu!e nin"uno de los predicados se asume $LL. )l &otor de
base de datos selecciona todos los re"istros que cumplen las
condiciones de la instruccin SQL. (o se coneniente abusar de este
predicado !a que obli"amos al motor de la base de datos a anali0ar la
estructura de la tabla para aeri"uar los campos que contiene. es
mucho m#s r#pido indicar el listado de campos deseados.
S)L)*T H F31& *lientes
T1P
'euele un cierto n<mero de re"istros que entran entre al principio o
al final de un ran"o especificado por una cl#usula 13')3 9?.
Supon"amos que queremos recuperar los nombres de los tres
primeros clientes tomando como referencia un orden $S* para el
campo cedula
S)L)*T T1P I cedula. (ombre F31& clientes 13')3 9? cedula
')S*
)l resultado de la consulta mostrar# en pantalla los tres primeros
re"istros que correspondan al orden. 1bsere en la fi"ura los n<meros
de cedula.
*omo la sentencia 13')3 9? cedula ')S* indica que se deben
ordenar en orden descendente los re"istros. se muestran los tres
primeros contando del <ltimo en adelante.
1bsere el cambio en el resultado de la consulta si 13')3 9? cedula
$S*
S)L)*T T1P I cedula. (ombre F31& clientes 13')3 9? cedula
$S*
)l orden establecido para el campo cedula es $S*. por lo tanto toma
los tres primeros re"istros en forma ascendente.
Si no se inclu!e la cl#usula 13')3 9?. la consulta deoler# un
conjunto arbitrario de Ire"istros de la tabla *lientes .)l predicado T1P
no eli"e entre alores i"uales. Si se inclu!e la palabra clae
P)3*)(T. se redondear# al n<mero entero m#s alto el n<mero de
columnas deuelto en el resultado. Los alores permitidos para nExpr
cuando se inclu!e la palabra clae P)3*)(T son -.-J a KK.KK.
)jemplo4 La tabla *lientes tiene un total de J- re"istros. si se quiere
isuali0ar en pantalla un L-M ordenado por cedula en orden
ascendente la lnea de cdi"o ser#4
S)L)*T T1P L- P)3*)(T cedula. nombre F31& *lientes 13')3
9? cedula $S*
? el resultado de la b<squeda como se puede apreciar son dos
re"istros correspondientes al L- M de J- que ha! en total
)l alor que a a continuacin de T1P debe ser un ;nte"er sin si"no.
';ST;(*T
1mite los re"istros que contienen datos duplicados en los campos
seleccionados. Para que los alores de cada campo listado en la
instruccin S)L)*T se inclu!an en la consulta deben ser <nicos.
Por ejemplo. supon"a que se desea saber los cdi"os de #rea de los
n<meros de tel/fono de los clientes almacenados en la tabla. )s de
supones que con que apare0ca una sola e0 -LNO o -OJ, es suficiente
as existan otros clientes con el mismo cdi"o de #rea.
S)L)*T ';ST;(*T S:9ST36telefono. J. O7 from clientes
)n ista que el cdi"o de #rea ! el n<mero del tel/fono est#n
inte"rados en un atributo atmico. se debe extraer el dato que se
necesita para la consulta usando la Funcin S:9ST367. ! as en la
consulta se podr#n obserar los diferentes cdi"os de #rea que
conforman los telefonos de los clientes.
Vista de la consulta usando ';ST;(*T
*on otras palabras el predicado ';ST;(*T deuele aquellos re"istros
cu!os campos indicados en la cl#usula S)L)*T posean un contenido
diferente. )l resultado de una consulta que utili0a ';ST;(*T no es
actuali0able ! no refleja los cambios subsi"uientes reali0ados por otros
usuarios.
)n el ejemplo anterior tambi/n se puede apreciar como se me0cla de
forma eficiente cdi"o de SQL con el de VFP ! se consi"uen mejores
resultados.
). (riterios de seleccin
Se io la forma de recuperar los re"istros de las tablas. las formas
empleadas deolan todos los re"istros de la mencionada tabla. $ lo
lar"o de este apartado se estudiar#n las posibilidades de filtrar los
re"istros con el fin de recuperar solamente aquellos que cumplan una
o unas condiciones preestablecidas
=%)3)
;ndica a Visual FoxPro que inclu!a <nicamente ciertos re"istros en el
resultado de la consulta. =%)3) es necesario para recuperar datos
de arias tablas. Para las condiciones de filtro se puede utili0ar
cualquiera de los si"uientes operadores4
1perador *omparacin
C ;"ual
CC )xactamente i"ual
L;D) SQL L;D)
AB 'istinto de
B &a!or que
BC &a!or o i"ual que
A &enor que
AC &enor o i"ual que
*uando utili0a el operador C con cadenas. act<a de forma distinta
dependiendo del ajuste de S)T $(S;. *uando S)T $(S; est# 1FF.
Visual FoxPro trata las comparaciones de cadenas en la forma
habitual en Pbase. *uando S)T $(S; est# a 1(. Visual FoxPro si"ue
las normas $(S; para comparaciones de cadenas. Vea S)T $(S; !
S)T )P$*T para obtener informacin adicional sobre la forma en que
Visual FoxPro reali0a las comparaciones de cadenas.
)jemplo J
Supon"a que deseamos conocer todos los clientes &oilnet 6cdi"o
-OJ,7 de la tabla ! adem#s queremos enmascarar el titulo del campo.
Para esto la lnea de cdi"o SQL ser#4
S)L)*T nombre $S *lientesG&oil(et F31& clientes =%)3) substr
6telefono.J.O7 C Q-OJ,Q
S)L)*T nombre C selecciona el campo nombre de la tabla
$S *lientesG&oilnet C crea la mascara para la consulta. Se debe
tomar en cuenta que no pueden existir espacios en blanco en la
cadena de caracteres.
F31& clientes C establece el ori"en de los datos para la consulta.
=%)3) substr 6telefono. J.O7 C Q-OJ,Q CB criterio de filtro para la
consulta.
)jemplo L
Se necesita conocer el nombre ! el tel/fono de los clientes con cr/dito
hasta 9s. J--.---.--
S)L)*T nombre $S *reditoG%astaGJ-----. telefono F31& clientes
=%)3) credito AC J-----
)jemplo I
'ise8ar una consulta SQL de todos los clientes foraneos 6codi"o
postal diferente de RJ-J7.
Para resoler este problema usaremos la cl#usula ;( la cual indica que
el campo debe contener uno de los alores antes de que el re"istro se
inclu!a en los resultados de la consulta. Pero para este caso en
particular la ne"aremos con (1T
S)L)*T (1&93) $S *L;)(T)SGF13$()1S. T)L)F1(1.
*1'GP1ST$L F31& *L;)(T)SS
=%)3) *1'GP1ST$L (1T ;( 6QRJ-JQ7
1bsere el resultado de la consulta. est#n todos los clientes a
excepcin de los que tienen como cdi"o postal RJ-J.
6. Inter&alos de &alores
)l operador 9)T=))(
Para indicar que deseamos recuperar los re"istros se"<n el interalo
de alores de un campo emplearemos el operador 9)T=))( cu!a
sintaxis es4
*ampo T(1TU 9)T=))( alorJ $(' alorL 6la condicin (ot es
opcional7
)n este caso la consulta deolera los re"istros que conten"an en
@campo@ un alor incluido en el interalo alorJ. alorL 6ambos
inclusie7. Si anteponemos la condicin (ot deoler# aquellos alores
no incluidos en el interalo.
)jemplo J
Se necesita conocer los datos de los clientes que tienen una carta de
cr/dito entre dos ! tres millones de 9olares.
La lnea de cdi"o SQL ser#4
S)L)*T (1&93) $S *3)';T1G)(T3)GL-----G?GI------.
T)L)F1(1. *1'GP1ST$L.S *3)';T1 F31& *L;)(T)S =%)3)
*3)';T1 9)T=))( L------ $(' I------
*. l operador li+e
Se utili0a para comparar una expresin de cadena con un modelo en
una expresin SQL. Su sintaxis es4
)xpresin L;D) modelo
)n donde expresin es una cadena modelo o campo contra el que se
compara expresin. Se puede utili0ar el operador L;D) para encontrar
alores en los campos que coincidan con el modelo especificado. Por
modelo puede especificar un alor completo 6$na &ara7. o se pueden
utili0ar caracteres comodn para encontrar un ran"o de alores 6L;D)
V$nMW7.
)l operador L;D) se puede utili0ar en una expresin para comparar un
alor de un campo con una expresin de cadena. Por ejemplo. si
introduce L;D) V*MW en una consulta SQL. la consulta deuele todos
los alores de campo que comiencen por la letra *. )n una consulta
con par#metros. puede hacer que el usuario escriba el modelo que se
a a utili0ar.
Puede utili0ar el si"no de porcentaje 6M7 ! subra!ado 6 G 7 como parte
de la expresin. )l si"no de porcentaje representa a cualquier
secuencia de caracteres desconocidos en la cadena. )l subra!ado
representa un solo car#cter desconocido en la cadena.
)jemplo
Listar por pantalla todos los clientes cu!os nombres comiencen con la
letra V;W
La lnea SQL ser#4
S)L)*T (1&93) $S
*L;)(T)SG*:?1SG(1&93)SG)&P;)X$(GP13G; F31&
*L;)(T)SS =%)3) :PP)3 6(1&93)7 L;D) Q;MQ
1bsere el resultado de la consulta. no importa que si"a a la letra V;W en
el campo nombre. SQL lo muestra en pantalla.
,. A-rupa#iento de re-istros
>31:P 9? ColumnaGrupo T. ColumnaGrupo...U
$"rupa las filas de la consulta bas#ndose en los alores de una o m#s
columnas. ColumnaGrupo puede ser el nombre de un campo normal
de una tabla. o un campo que inclu!a una funcin de campo SQL. o
una expresin num/rica indicando la posicin de la columna en la
tabla resultado 6la columna m#s a la i0quierda tiene el n<mero J7.
Su sintaxis es4
S)L)*T campos F31& tabla =%)3) criterio >31:P 9? campos del
"rupo %$V;(> condicin
Los alores (ull en los campos >31:P 9? se a"rupan ! no se
omiten. (o obstante. los alores (ull no se eal<an en nin"una de las
funciones SQL a"re"adas.
Se utili0a la cl#usula =%)3) para excluir aquellas filas que no desea
a"rupar. ! la cl#usula %$V;(> para filtrar los re"istros una e0
a"rupados.
$ menos que conten"a un dato &emo u 1bjeto 1L) . un campo de la
lista de campos >31:P 9? puede referirse a cualquier campo de las
tablas que aparecen en la cl#usula F31&. incluso si el campo no esta
incluido en la instruccin S)L)*T.
Todos los campos de la lista de campos de S)L)*T deben o bien
incluirse en la cl#usula >31:P 9?.
%$V;(> es similar a =%)3). determina qu/ re"istros se seleccionan.
:na e0 que los re"istros se han a"rupado utili0ando >31:P 9?.
%$V;(> determina cuales de ellos se an a mostrar.
Si tenemos una tabla llamada clientes con los si"uientes re"istros4
Se nos plantea la si"uiente interro"ante Y*u#les re"istros cumplen
con la condicin de poseer *di"o Postal RJ-J ! adem#s son clientes
&oilnetZ
$"rupamos los clientes con *odGPostal RJ-J ! lue"o con %$V;(>
seleccionamos los clientes &oilnet 6-OJ,7
S)L)*T cedula. nombre. codGpostal F31& clientes =%)3)
codGpostal C QRJ-JQS
>31:P 9? cedula. nombre. codGpostal %$V;(> S:9ST3
6T)L)F1(1.J.O7 C Q-OJ,Q
$V>
*alcula la media aritm/tica de un conjunto de alores contenidos en
un campo especificado de una consulta. Su sintaxis es la si"uiente
$V> 6expr7
)n donde expr representa el campo que contiene los datos num/ricos
para los que se desea calcular la media o una expresin que reali0a
un c#lculo utili0ando los datos de dicho campo. La media calculada por
$V> es la media aritm/tica 6la suma de los alores diidido por el
n<mero de alores7. La funcin $V> no inclu!e nin"<n campo (ull en
el c#lculo.
)jemplo
:sando la tabla *L;)(T)S se desea conocer el promedio de cr/dito
de los clientes de la ciudad de &/rida 6codGpostal C RJ-J7
S)L)*T $V> 6*3)';T17 $S *L;)(T)SG&)3;'$ F31& *L;)(T)SS
=%)3) *1'GP1ST$L ;( 6QRJ-JQ7
)l resultado de la consulta ser#4
*1:(T
*alcula el n<mero de re"istros deueltos por una consulta. Su sintaxis
es la si"uiente
*1:(T 6expr7
)n donde expr contiene el nombre del campo que desea contar. Los
operandos de expr pueden incluir el nombre de un campo de una
tabla. una constante o una funcin. $unque expr puede reali0ar un
c#lculo sobre un campo. *1:(T simplemente cuenta el n<mero de
re"istros sin tener en cuenta qu/ alores se almacenan en los
re"istros. La funcin *1:(T no cuenta los re"istros que tienen
campos (:LL.
S)L)*T *1:(T 6campo7 $S nombreGm#scara F31& tabla
)jemplo
Se desea determinar Y*u#ntos *lientes tienen cr/dito entre 9s.
J--.---.-- ! 9s. I--.---.--Z
S)L)*T *1:(T 6*3)';T17 $S
*L;)(T)SG)(T3)GJ-----G!GI----- F31& *L;)(T)SS
=%)3) *3)';T1 9)T=))( J----- $(' I-----
*omo puede obserar SQL proporciona el n<mero de clientes que
cumplen con la condicin especificada en =%)3).
&ax ! &in
'euelen el mnimo o el m#ximo de un conjunto de alores
contenidos en un campo especifico una consulta. Su sintaxis es4
&in 6expr7
&ax 6expr7
)n donde expr es el campo sobre el que se desea reali0ar el c#lculo.
Expr puede incluir el nombre de un campo de una tabla o una
constante.
)jemplo
Se desea conocer el monto en 9s. 'e la ma!or carta de cr/dito de un
cliente for#neo cdi"o postal RJ-L
S)L)*T &$P 6*3)';T17 $S
*L;)(T)G*1(G&$?13G*3[';T1GRJ-L F31& *L;)(T)SS
=%)3) *1'GP1ST$L ;( 6QRJ-LQ7
S)L)*T &;( 6*3)';T17 $S
*L;)(T)G*1(G&)(13G*3[';T1GRJ-L F31& *L;)(T)SS
=%)3) *1'GP1ST$L ;( 6QRJ-LQ7
)l cdi"o SQL anterior muestra el uso de &;( para ubicar el monto de
la menor carta de cr/dito de la 0ona RJ-L.
S:&
'euele la suma del conjunto de alores contenido en un campo
especfico de una consulta. Su sintaxis es4
S:& 6expr7
)n donde expr representa el nombre del campo que contiene los datos
que desean sumarse o una expresin que reali0a un c#lculo utili0ando
los datos de dichos campos. Los operandos de expr pueden incluir el
nombre de un campo de una tabla o una constante.
)jemplo
Se desea conocer el monto total de las carteras de cr/dito de los
clientes cdi"o de #rea RJ-L
S)L)*T S:& 6*3)';T17 $S T1T$LG*3[';T1GRJ-L F31&
*L;)(T)S =%)3) *1'GP1ST$L ;( 6QRJ-LQ7
)ste ejemplo suma los resultados de las consultas anteriores con &$P
? &;(.
Subconsultas
:na subconsulta es una instruccin S)L)*T anidada dentro de una
instruccin S)L)*T. S)L)*T...;(T1. ;(S)3T...;(T1. ')L)T). o
:P'$T) o dentro de otra subconsulta.
Puede utili0ar tres formas de sintaxis para crear una subconsulta4
*omparacin T$(? \ $LL \ S1&)U 6instruccin SQL7
)xpresin T(1TU ;( 6instruccin SQL7
T(1TU )P;STS 6instruccin SQL7
)n donde4
*omparacin4 )s una expresin ! un operador de comparacin que
compara la expresin con el resultado de la subconsulta.
)xpresin4 )s una expresin por la que se busca el conjunto resultante
de la subconsulta.
;nstruccin SQL4 )s una instruccin S)L)*T. que si"ue el mismo
formato ! re"las que cualquier otra instruccin S)L)*T. 'ebe ir entre
par/ntesis.
Se puede utili0ar una subconsulta en lu"ar de una expresin en la lista
de campos de una instruccin S)L)*T o en una cl#usula =%)3) o
%$V;(>. )n una subconsulta. se utili0a una instruccin S)L)*T para
proporcionar un conjunto de uno o m#s alores especificados para
ealuar en la expresin de la cl#usula =%)3) o %$V;(>.
Se puede utili0ar el predicado $(?. $LL o S1&). los cuales son
sinnimos. para recuperar re"istros de la consulta principal. que
satisfa"an la comparacin con cualquier otro re"istro recuperado en la
subconsulta.
*uando la condicin de filtro inclu!e $(? o S1&). el campo debe
cumplir la condicin de comparacin en al menos uno de los alores
"enerados por la subconsulta.
*uando la condicin de filtro inclu!e $LL. el campo debe cumplir la
condicin de comparacin para todos los alores "enerados por la
subconsulta antes de que se inclu!a el re"istro en el resultado de la
consulta.
)jemplo
:sando una subconsulta muestre una lista de clientes cu!o tel/fono
sea &oilnet 6cdi"o de #rea -OJ,7
S)L)*T nombre. credito. T)L)F1(1 F31& clientes =%)3)
S:9ST3 6T)L)F1(1. J. O7S
;( 6S)L)*T T)L)F1(1 F31& *L;)(T)S =%)3) S:9ST3
6T)L)F1(1. J. O7 C Q-OJ,Q7
)jemplo
Supon"a que se desea conocer los datos personales de los clientes
con cartas de cr/dito por arriba de 9s. L.R--.---.--
S)L)*T nombre. credito. T)L)F1(1 F31& clientes =%)3) credito
C $LL S
6S)L)*T *3)';T1 F31& *L;)(T)S =%)3) *3)';T1 B LR-----7
)jemplo
)ncontrar los clientes con carteras de cr/dito entre 9s. L.I--.---.-- ?
9s. L.R--.---
S)L)*T nombre. credito. T)L)F1(1 F31& clientes =%)3) credito
C $(?S
6S)L)*T *3)';T1 F31& *L;)(T)S =%)3) *3)';T1 9)T=))(
LI----- $(' LR-----7
HHHH =%)3) credito C $(? 6subconsulta SQL7 indica que se inclu!a en
la consulta a cualquier re"istro que cumpla aunque sea una parte de la
condicin de la subconsulta.
)jemplo
Liste a todos los clientes que ten"an residencia en la ciudad de
&/rida.
S)L)*T (1&93). *3)';T1. T)L)F1(1. *;:'$' F31&
*L;)(T)S =%)3) *;:'$' C $LLS 6S)L)*T *;:'$' F31&
*L;)(T)S =%)3) :PP)3 6*;:'$'7 C Q&)3;'$Q7
1bsere el efecto que se produce en la consulta cuando se cambia el
operador C antes de $LL
S)L)*T (1&93). *3)';T1. T)L)F1(1. *;:'$' F31&
*L;)(T)S =%)3) *;:'$' B $LLS 6S)L)*T *;:'$' F31&
*L;)(T)S =%)3) :PP)3 6*;:'$'7 C Q&)3;'$Q7
S)L)*T (1&93). *3)';T1. T)L)F1(1. *;:'$' F31&
*L;)(T)S =%)3) *;:'$' A $LLS 6S)L)*T *;:'$' F31&
*L;)(T)S =%)3) :PP)3 6*;:'$'7 C Q&)3;'$Q7
Se puede er claramente que el resultado de la consulta ara
sustancialmente cuando se cambia el operador C antes de $LL. $l
utili0ar B se muestran en la consulta todos aquellos re"istros que
cumplen con la condicin de comen0ar con una letra ma!or a V&W. ? al
utili0ar A se a"re"an a la consulta slo aquellos cu!a letra inicial en el
campo ciudad est# por debajo de V&W.
)jemplo
&ostrar en pantalla los clientes con cartas de cr/dito menores a 9s.
L--.---.--
S)L)*T (1&93). *3)';T1. T)L)F1(1 F31& *L;)(T)S
=%)3) *3)';T1 A $LLS
6S)L)*T *3)';T1 F31& *L;)(T)S =%)3) *3)';T1 C L-----7
*on la condicin del =%)3) de la consulta principal se establece que
se deben mostrar todos aquellos re"istros menores a la condicin
establecida en la subconsulta 6credito C L-----7
*onsultas 'e :nin ;nternas
Las inculaciones entre tablas se reali0an mediante la cl#usula ;(()3
que combina re"istros de dos tablas siempre que ha!a concordancia
de alores en un campo com<n. Su sintaxis es4
S)L)*T campos F31& tbJ ;(()3 ]1;( tbL 1( tbJ.campoJ
1P)3$'13 tbL.campoL
)n donde4
tbJ. tbL4 Son los nombres de las tablas desde las que se combinan los
re"istros.
campoJ. campoL4 Son los nombres de los campos que se combinan.
Si no son num/ricos. los campos deben ser del mismo tipo de datos !
contener el mismo tipo de datos. pero no tienen que tener el mismo
nombre.
1P)3$'134 )s cualquier operador de comparacin relacional4 C. A.
B. AC. BC. o AB.
Se puede utili0ar una operacin ;(()3 ]1;( en cualquier cl#usula
F31&. )sto crea una combinacin por equialencia. conocida tambi/n
como unin interna. Las combinaciones de equialencia son las m#s
comunesS /stas combinan los re"istros de dos tablas siempre que
ha!a concordancia de alores en un campo com<n a ambas tablas. Se
puede utili0ar ;(()3 ]1;( con las tablas *lientes ! Pedidos 6er
ilustracin m#s abajo7 para seleccionar todos los pedidos de los
clientes o los pedidos de un cliente en particular.
&#s formalmente ;(()3 ]1;( especfica que el resultado de la
consulta conten"a slo filas para una tabla con la que coincidan una o
arias filas en otra tabla.
)jemplo
&ostrar una consulta para determinar la fecha ! el monto de los
pedidos de un cliente P identificado por su n<mero de cedula.
S)L)*T fecha. monto from P)';'1S ;(()3 ]1;( clientes S
1( clientes.cedula C L $(' pedidos.cedula C L
Supon"a que complementamos esta consulta a8adiendo los campos
nombre ! tel/fono de la tabla clientes. el resultado por pantalla sera4
La lnea de cdi"o SQL ser#4
S)L)*T clientes.nombre. clientes.telefono. fecha. monto F31&
P)';'1S ;(()3 ]1;( clientesS
1( clientes.cedula C L $(' pedidos.cedula C L
1bsere la sintaxis con que se escriben los campos de la tabla que no
est# actia 6clientes7. Se antecede el nombre del campo con el
identificador de la tabla ! un punto.
)xisten rdenes a"re"adas que cambiaran el resultado de la consulta
dependiendo como las use. )stas son4
L)FT T1:T)3U ]1;(4 especifica que el resultado de la consulta
conten"a todas las filas de la tabla a la i0quierda de la palabra clae
]1;( ! slo las filas que concuerden procedentes de la tabla a la
derecha de la palabra clae ]1;(. La palabra clae 1:T)3 es
opcionalS se puede incluir para resaltar que se ha creado una
combinacin externa.
3;>%T T1:T)3U ]1;( especifica que el resultado de la consulta
conten"a todas las filas desde la tabla hasta la derecha de la palabra
clae ]1;( ! slo las filas que concuerden desde la tabla hasta la
i0quierda de la palabra clae ]1;(. La palabra clae 1:T)3 es
opcionalS puede incluirse para resaltar la creacin de una combinacin
externa.
F:LL T1:T)3U ]1;(4 especifica que el resultado de la consulta
conten"a todas las filas. concuerden o no. de ambas tablas. La
palabra clae 1:T)3 es opcionalS se puede incluir para resaltar que
se ha creado una combinacin externa.
)jemplo4
1bsere como cambia el resultado de la consulta anterior a"re"ando
las rdenes L)FT. 3;>%T. F:LL.
L)FT
S)L)*T clientes.nombre. clientes.telefono. fecha. monto F31&
P)';'1S L)FT ]1;( clientesS
1( clientes.cedula C L $(' pedidos.cedula C L
)n este caso la condicin del 1( es especfica el campo cedula en
ambas tablas debe ser i"ual a LS pero L)FT indica a SQL que in"rese
los campos a la i0quierda de la palabra ]1;( los cuales se muestran
como .(:LL.. en ista que no cumplen con la condicin cedula C L.
3;>%T
S)L)*T clientes.nombre. clientes.telefono. fecha. monto F31&
P)';'1S 3;>%T ]1;(S clientes 1( clientes.cedula C L $('
pedidos.cedula C L
)l resultado ser# 6er si"uiente p#"ina7
Los campos a la derecha de ]1;( se mostrar#n como .(:LL. en ista
que no cumplen con la condicin cedula C L.
F:LL
S)L)*T clientes.nombre. clientes.telefono. fecha. monto F31&
P)';'1S F:LL ]1;( clientesS 1( clientes.cedula C L $('
pedidos.cedula C L
)n este caso se muestran los campos de ambas tablas coincidan o no
con la condicin establecida.
*onsultas 'e :nin )xternas
Se utili0a la operacin :(;1( para crear una consulta de unin.
combinando los resultados de dos o m#s consultas o tablas
independientes. Su sintaxis es4
S)L)*T campos separados por comas F31& nombre tabla =%)3)
condicin :(;1(S S)L)*T campos separados por comas F31&
nombre tabla =%)3) condicin
Los campos de ambos S)L)*T deben estar en i"ual n<mero en
ambas instrucciones ! deben ser del mismo tipo.
)jemplo4
Supon"a que tenemos una tabla V)(')'13)S junto con la !a
conocida tabla *L;)(T)S con la que hemos trabajado anteriormente.
Se le solicita que presente una ista por pantalla de todos los
endedores ! clientes que se encuentran "eo"r#ficamente ubicados
en la 0ona RJ-J.
La lnea SQL ser#4
S)L)*T *)':L$. (1&93). T)L)F1(1 $S
*L;)(T)SG?GV)(')'13)S F31& *L;)(T)S =%)3)
*1'GP1ST$L C QRJ-JQS :(;1( S)L)*T *)':L$. (1&93).
T)L)F1(1 F31& V)(')'13)S =%)3) X1($ C QRJ-JQ
1bsere que el <nico endedor que cumple con la condicin aparece
en la consulta en el <ltimo lu"ar.
)jemplo
Supon"a ahora que desea er a todos los endedores ! clientes en
una sola ista la lnea de comando SQL ser# m#s sencilla como se
puede apreciar4
S)L)*T *)':L$. (1&93). T)L)F1(1 $S
*L;)(T)SG?GV)(')'13)S F31& *L;)(T)S :(;1(S S)L)*T
*)':L$. (1&93). T)L)F1(1 F31& V)(')'13)S
*omo podr# obserar 6en la si"uiente p#"ina7 la ista de la consulta
inclu!e a todos los re"istros de la tabla clientes ! a los dos <nicos
endedores re"istrados.
Vista de la consulta de todos los clientes ! endedores usando
:(;1(.
.. /i!lio-ra01a
&S'( L;93$3?
JKKR + L--- &icrosoft *orporation



Trabajo eniado por4
*arlos 3oberto ;0quierdo >on0#le0
carlosi0quierdo^latinmail.com
T.S.:. )n ;nform#tica
(ota al lector4 es posible que esta p#"ina no conten"a todos los
componentes del trabajo ori"inal 6pies de p#"ina. aan0adas formulas
matem#ticas. esquemas o tablas complejas. etc.7. 3ecuerde que para
er el trabajo en su ersin ori"inal completa. puede descar"arlo en
formato DOC desde el men< superior.

Вам также может понравиться