Tutorial de SQL
Tutorial de SQL
INDICE
1. I ntroducción
1 . 1 Com ponentes del SQL
1 . 2 Com andos
1 . 3 Cláusulas
1 . 4 Operadores Lógicos
1 . 5 Operadores de Com paración
1 . 6 Funciones de Agregado
2. Consult as de Selección
2 . 1 Consultas Básicas
2 . 2 Ordenar los Registros
2 . 3 Consultas con Predicado
2 . 4 Alias
2 . 5 Bases de Dat os Ext ernas
6. Tipos de Datos
7. SubConsult as
1 6 . Anexos
1 6 .1 Resolución de Problem as
1 6 .1 .1 I nform ación Duplicada
1 6 .1 .2 Registros no Relacionados
1 6 .2 Ut ilizar SQL desde Visual Basic
1 6 .3 Funciones ut ilizables
1 6 .4 La función iif
1 6 .5 M anual de Est ilo
1 .- I N TRODUCCI ON
• los DLL que perm it en crear y definir nuevas bases de dat os, cam pos e
índices.
• los DML que perm it en generar consult as para ordenar, filt rar y ext raer dat os
de la base de dat os.
1.3 Cláusulas
Las cláusulas son condiciones de m odificación ut ilizadas para definir los dat os que
desea seleccionar o m anipular.
Cláusula Descripción
Ut ilizada para especificar la t abla de la cual se van a seleccionar los
FROM
regist ros
Ut ilizada para especificar las condiciones que deben reunir los regist ros
WHERE
que se van a seleccionar
GROUP
Ut ilizada para separar los regist ros seleccionados en grupos específicos
BY
Operador Uso
Es el "y" lógico. Evalua dos condiciones y devuelve un valor de verdad
AND
sólo si am bas son ciert as.
Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de verdar si
OR
alguna de las dos es ciert a.
NOT Negación lógica. Devuelve el valor cont rario de la expresión.
1.5 Operadores de Com paración
Operador Uso
< Menor que
> Mayor que
<> Dist int o de
<= Menor ó I gual que
>= Mayor ó I gual que
= I gual que
BETWEEN Ut ilizado para especificar un int ervalo de valores.
LI KE Ut ilizado en la com paración de un m odelo
Ut ilizado para especificar regist ros de una base de dat os
In
Función Descripción
En donde cam pos es la list a de cam pos que se deseen recuperar y t abla es el
origen de los m ism os, por ej em plo:
Est a consult a devuelve un recordset con el cam po nom bre y t eléfono de la t abla
client es.
SELECT CodigoPost al, Nom bre, Telefono FROM Client es ORDER BY Nom bre;
Est a consult a devuelve los cam pos CodigoPost al, Nom bre, Telefono de la t abla
Client es ordenados por el cam po Nom bre.
Se pueden ordenar los regist ros por m as de un cam po, com o por ej em plo:
El predicado se incluye ent re la claúsula y el prim er nom bre del cam po a recuperar,
los posibles predicados son:
Predicado Descripción
ALL Devuelve t odos los cam pos de la t abla
Devuelve un det erm inado núm ero de regist ros de la
TOP
t abla
Om it e los regist ros cuyos cam pos seleccionados
DI STI NCT
coincidan t ot alm ent e
Om it e los regist ros duplicados basandose en la
DI STI NCTROW t ot alidad del regist ro y no sólo en los cam pos
seleccionados.
ALL
TOP
Devuelve un ciert o núm ero de regist ros que ent ran ent re al principio o al final de un
rango especificado por una cláusula ORDER BY. Supongam os que querem os
recuperar los nom bres de los 25 prim eros est udiant es del curso 1994:
Si no se incluye la cláusula ORDER BY, la consult a devolverá un conj unt o arbit rario
de 25 regist ros de la t abla Est udiant es .El predicado TOP no elige ent re valores
iguales. En el ej em plo ant erior, si la not a m edia núm ero 25 y la 26 son iguales, la
consult a devolverá 26 regist ros. Se puede ut ilizar la palabra reservada PERCENT
para devolver un ciert o porcent aj e de regist ros que caen al principio o al final de un
rango especificado por la cláusula ORDER BY. Supongam os que en lugar de los 25
prim eros est udiant es deseam os el 10 por cient o del curso:
El valor que va a cont inuación de TOP debe ser un I nt eger sin signo.TOP no afect a
a la posible act ualización de la consult a.
DI STI NCT
Om it e los regist ros que cont ienen dat os duplicados en los cam pos seleccionados.
Para que los valores de cada cam po list ado en la inst rucción SELECT se incluyan en
la consult a deben ser únicos.
Por ej em plo, varios em pleados list ados en la t abla Em pleados pueden t ener el
m ism o apellido. Si dos regist ros cont ienen López en el cam po Apellido, la siguient e
inst rucción SQL devuelve un único regist ro:
Con ot ras palabras el predicado DI STI NCT devuelve aquellos regist ros cuyos
cam pos indicados en la cláusula SELECT posean un cont enido diferent e. El
result ado de una consult a que ut iliza DI STI NCT no es act ualizable y no reflej a los
cam bios subsiguient es realizados por ot ros usuarios.
DI STI NCTROW
Devuelve los regist ros diferent es de una t abla; a diferencia del predicado ant erior
que sólo se fij aba en el cont enido de los cam pos seleccionados, ést e lo hace en el
cont enido del regist ro com plet o independient em ent e de los cam po indicados en la
cláusula SELECT.
2.4 Alias
En det erm inadas circunst ancias es necesario asignar un nom bre a alguna colum na
det erm inada de un conj unt o devuelt o, ot ras veces por sim ple capricho o por ot ras
circunst ancias. Para resolver t odas ellas t enem os la palabra reservada AS que se
encarga de asignar el nom bre que deseam os a la colum na deseada. Tom ado com o
referencia el ej em plo ant erior podem os hacer que la colum na devuelt a por la
consult a, en lugar de llam arse apellido ( igual que el cam po devuelt o) se llam e
Em pleado. En est e caso procederíam os de la siguient e form a:
Para concluir est e capít ulo se debe hacer referencia a la recuperación de regist ros
de bases de dat os ext erna. Es ocasiones es necesario la recuperación de
inform ación que se encuent ra cont enida en una t abla que no se encuent ra en la
base de dat os que ej ecut ará la consult a o que en ese m om ent o no se encuent ra
abiert a, est a sit uación la podem os salvar con la palabra reservada I N de la
siguient e form a:
En donde c: \ dat abases\ gest ion.m db es la base de dat os que cont iene la t abla
Em pleados.
3 . Cr it e r ios de Se le cción
En el capít ulo ant erior se vio la form a de recuperar los regist ros de las t ablas, las
form as em pleadas devolvían t odos los regist ros de la m encionada t abla. A lo largo
de est e capít ulo se est udiarán las posibilidades de filt rar los regist ros con el fin de
recuperar solam ent e aquellos que cum plan una condiciones preest ablecidas.
Ant es de com enzar el desarrollo de est e capít ulo hay que recalcar t res det alles de
vit al im port ancia. El prim ero de ellos es que cada vez que se desee est ablecer una
condición referida a un cam po de t ext o la condición de búsqueda debe ir encerrada
ent re com illas sim ples; la segunda es que no se posible est ablecer condiciones de
búsqueda en los cam pos m em o y; la t ercera y últ im a hace referencia a las fechas.
Las fechas se deben escribir siem pre en form at o m m - dd- aa en donde m m
represent a el m es, dd el día y aa el año, hay que prest ar at ención a los separadores
- no sirve la separación habit ual de la barra ( / ) , hay que ut ilizar el guión ( - ) y
adem ás la fecha debe ir encerrada ent re alm ohadillas ( # ) . Por ej em plo si deseam os
referirnos al día 3 de Sept iem bre de 1995 deberem os hacerlo de la siguent e form a;
# 09- 03- 95# ó # 9- 3- 95# .
Los operadores lógicos soport ados por SQL son: AND, OR, XOR, Eqv, I m p, I s y Not .
A excepción de los dos últ im os t odos poseen la siguient e sint axis:
El últ im o operador denom inado I s se em plea para com parar dos variables de t ipo
obj et o < Obj et o1> I s < Obj et o2> . est e operador devuelve verdad si los dos obj et os
son iguales
SELECT * FROM Em pleados WHERE Edad > 25 AND Edad < 50;
SELECT * FROM Em pleados WHERE (Edad > 25 AND Edad < 50) OR Sueldo =
100;
SELECT * FROM Em pleados WHERE NOT Est ado = 'Solt ero';
SELECT * FROM Em pleados WHERE (Sueldo > 100 AND Sueldo < 500) OR
( Provincia = 'Madrid' AND Est ado = ' Casado') ;
Para indicar que deseam os recuperar los regist ros según el int ervalo de valores de
un cam po em plearem os el operador Bet ween cuya sint axis es:
En est e caso la consult a devolvería los regist ros que cont engan en "cam po" un
valor incluido en el int ervalo valor1, valor2 ( am bos inclusive) . Si ant eponem os la
condición Not devolverá aquellos valores no incluidos en el int ervalo.
Se ut iliza para com parar una expresión de cadena con un m odelo en una expresión
SQL. Su sint axis es:
En donde expresión es una cadena m odelo o cam po cont ra el que se com para
expresión. Se puede ut ilizar el operador Like para encont rar valores en los cam pos
que coincidan con el m odelo especificado. Por m odelo puede especificar un valor
com plet o ( Ana María) , o se pueden ut ilizar caract eres com odín com o los
reconocidos por el sist em a operat ivo para encont rar un rango de valores ( Like
An* ) .
El operador Like se puede ut ilizar en una expresión para com parar un valor de un
cam po con una expresión de cadena. Por ej em plo, si int roduce Like C* en una
consult a SQL, la consult a devuelve t odos los valores de cam po que com iencen por
la let ra C. En una consult a con parám et ros, puede hacer que el usuario escriba el
m odelo que se va a ut ilizar.
Est e ej em plo devuelve los cam pos cuyo cont enido em piece con una let ra de la A a
la D seguidas de cualquier cadena.
En la t abla siguient e se m uest ra cóm o ut ilizar el operador Like para com probar
expresiones con diferent es m odelos.
Est e operador devuelve aquellos regist ros cuyo cam po indicado coincide con alguno
de los en una list a. Su sint axis es:
La cláusula WHERE puede usarse para det erm inar qué regist ros de las t ablas
enum eradas en la cláusula FROM aparecerán en los result ados de la inst rucción
SELECT. Depués de escribir est a cláusula se deben especificar las condiciones
expuest as en los part ados 3.1 y 3.2. Si no se em plea est a cláusula, la consult a
devolverá t odas las filas de la t abla. WHERE es opcional, pero cuando aparece debe
ir a cont inuación de FROM.
SELECT Apellidos, Nom bre FROM Em pleados WHERE Apellidos Like 'S* ';
SELECT Apellidos, Salario FROM Em pleados WHERE Salario Between 200 And
300;
Com bina los registros con valores idénticos, en la lista de cam pos especificados, en un único registro. Para cada
registro se crea un valor sum ario si se incluye una función SQL agregada, com o por ejem plo Sum o Count, en
la instrucción SELECT. Su sintaxis es:
SELECT cam pos FROM tabla WHERE crit erio GROUP BY cam pos del grupo
GROUP BY es opcional. Los valores de resum en se om iten si no existe una función SQL agregada en la
instrucción SELECT. Los valores Null en los cam pos GROUP BY se agrupan y no se om iten. No obstante, los
valores Null no se evalúan en ninguna de las funciones SQL agregadas.
Se utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y la cláusula HAVI NG para filtrar
los registros una vez agrupados.
A m enos que contenga un dato Mem o u Objeto OLE , un cam po de la lista de cam pos GROUP BY puede referirse
a cualquier cam po de las tablas que aparecen en la cláusula FROM, incluso si el cam po no esta incluido en la
instrucción SELECT, siem pre y cuando la instrucción SELECT incluya al m enos una función SQL agregada.
Todos los cam pos de la lista de cam pos de SELECT deben o bien incluirse en la cláusula GROUP BY o com o
argum entos de una función SQL agregada.
Una vez que GROUP BY ha com binado los registros, HAVI NG m uestra cualquier registro agrupado por la
cláusula GROUP BY que satisfaga las condiciones de la cláusula HAVI NG.
HAVI NG es sim ilar a WHERE, determ ina qué registros se seleccionan. Una vez que los registros se han
agrupado utilizando GROUP BY, HAVI NG determ ina cuales de ellos se van a m ostrar.
SELECT I d_Fam ilia Sum (Stock) FROM Productos GROUP BY I d_Fam ilia
HAVI NG Sum (Stock) > 100 AND Nom breProducto Like BOS* ;
4. 2 AVG
Calcula la m edia aritm ética de un conjunto de valores contenidos en un cam po especificado de una consulta. Su
sintaxis es la siguiente
Avg(expr)
En donde expr representa el cam po que cont iene los datos num éricos para los que se desea calcular la m edia
o una expresión que realiza un cálculo utilizando los datos de dicho cam po. La m edia calculada por Avg es la
m edia aritm ética (la sum a de los valores dividido por el núm ero de valores). La función Avg no incluye ningún
cam po Null en el cálculo.
SELECT Avg(Gastos) AS Prom edio FROM Pedidos WHERE Gastos > 100;
4. 3 Count
Calcula el núm ero de registros devueltos por una consulta. Su sintaxis es la siguiente
Count( expr)
En donde expr contiene el nom bre del cam po que desea contar. Los operandos de expr pueden incluir el
nom bre de un cam po de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el
usuario pero no otras de las funciones agregadas de SQL). Puede contar cualquier tipo de datos incluso texto.
Aunque expr puede realizar un cálculo sobre un cam po, Count sim plem ente cuenta el núm ero de registros sin
tener en cuenta qué valores se alm acenan en los registros. La función Count no cuenta los registros que tienen
cam pos null a m enos que expr sea el carácter com odín asterisco (* ). Si utiliza un asterisco, Count calcula el
Si expr identifica a m últiples cam pos, la función Count cuenta un registro sólo si al m enos uno de los cam pos
no es Null. Si todos los cam pos especificados son Null, no se cuenta el registro. Hay que separar los nom bres
de los cam pos con am persand ( &) .
4. 4 Max, Min
Min(expr)
Max( expr)
En donde expr es el cam po sobre el que se desea realizar el cálculo. Expr pueden incluir el nom bre de un
cam po de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no
otras de las funciones agregadas de SQL).
4. 5 St Dev, StDevP
Devuelve estim aciones de la desviación estándar para la población (el total de los registros de la tabla) o una
m uestra de la población representada (m uestra aleatoria) . Su sintaxis es:
StDev (expr)
St DevP(expr)
En donde expr representa el nom bre del cam po que contiene los datos que desean evaluarse o una expresión
que realiza un cálculo utilizando los datos de dichos cam pos. Los operandos de expr pueden incluir el nom bre
de un cam po de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario
pero no otras de las funciones agregadas de SQL)
StDevP evalúa una población, y StDev evalúa una m uestra de la población. Si la consulta contiene m enos de
dos registros (o ningún registro para StDevP) , estas funciones devuelven un valor Null (el cual indica que la
desviación estándar no puede calcularse).
4. 6 Sum
Devuelve la sum a del conj unto de valores contenido en un cam po especifico de una consulta. Su sintaxis es:
Sum( expr)
En donde expr respresenta el nom bre del cam po que contiene los datos que desean sum arse o una expresión
que realiza un cálculo utilizando los datos de dichos cam pos. Los operandos de expr pueden incluir el nom bre
de un cam po de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario
pero no otras de las funciones agregadas de SQL).
4. 7 Var, VarP
Devuelve una estim ación de la varianza de una población (sobre el total de los registros) o una m uestra de la
población (m uestra aleatoria de registros) sobre los valores de un cam po. Su sintaxis es:
Var( expr)
VarP(expr)
VarP evalúa una población, y Var evalúa una m uestra de la población. Expr el nom bre del cam po que contiene
los datos que desean evaluarse o una expresión que realiza un cálculo utilizando los datos de dichos cam pos.
Los operandos de expr pueden incluir el nom bre de un cam po de una tabla, una constante o una función (la
cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL)
5. Consult a s de Acción
Las consultas de acción son aquellas que no devuelven ningún registro, son las encargadas de acciones com o
añadir y borrar y m odificar registros.
5. 1 DELETE
Crea una consulta de elim inación que elim ina los registros de una o m ás de las tablas listadas en la cláusula
FROM que satisfagan la cláusula WHERE. Esta consulta elim ina los registros com pletos, no es posible elim inar el
contenido de algún cam po en concreto. Su sintaxis es:
DELETE es especialm ente útil cuando se desea elim inar varios registros. En una instrucción DELETE con
m últiples tablas, debe incluir el nom bre de tabla (Tabla.* ). Si especifica m ás de una tabla desde la que elim inar
registros, todas deben ser tablas de m uchos a uno. Si desea elim inar todos los registros de una tabla, elim inar
la propia tabla es m ás eficiente que ej ecutar una consulta de borrado.
Se puede utilizar DELETE para elim inar registros de una única tabla o desde varios lados de una relación uno a
m uchos. Las operaciones de elim inación en cascada en una consulta únicam ente elim inan desde varios lados de
una relación. Por ej em plo, en la relación entre las tablas Clientes y Pedidos, la tabla Pedidos es la parte de
m uchos por lo que las operaciones en cascada solo afectaran a la tabla Pedidos. Una consulta de borrado
elim ina los registros com pletos, no únicam ente los datos en cam pos específicos. Si desea elim inar valores en un
cam po especificado, crear una consulta de actualización que cam bie los valores a Null.
Una vez que se han elim inado los registros utilizando una consulta de borrado, no puede deshacer la operación.
Si desea saber qué registros se elim inarán, prim ero exam ine los resultados de una consulta de selección que
utilice el m ism o criterio y después ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos
en todo m om ento. Si elim ina los registros equivocados podrá recuperarlos desde las copias de seguridad.
5. 2 I NSERT I NTO
Agrega un registro en una tabla. Se la conoce com o una consulta de datos añadidos. Esta consulta puede ser de
dos tipo: I nsertar un único registro ó I nsertar en una tabla los registros contenidos en otra tabla.
I NSERT I NTO Tabla (cam po1, cam po2, .., cam poN)
VALUES (valor1, valor2, ..., valorN)
Esta consulta graba en el cam po1 el valor1, en el cam po2 y valor2 y así sucesivam ente. Hay que prestar
especial atención a acotar entre com illas sim ples ( ') los valores literales ( cadenas de caracteres) y las fechas
indicarlas en form ato m m - dd- aa y entre caracteres de alm ohadillas ( # ) .
I NSERT I NTO Tabla [ I N base_externa] (cam po1, cam po2, ..., cam poN)
SELECT TablaOrigen.cam po1, TablaOrigen.cam po2, ..., TablaOrigen.cam poN
FROM TablaOrigen
En este caso se seleccionarán los cam pos 1,2, ..., n dela tabla origen y se grabarán en los cam pos 1,2,.., n de
la Tabla. La condición SELECT puede incluir la cláusula WHERE para filtrar los registros a copiar. Si Tabla y
TablaOrigen poseen la m ism a estrucutra podem os sim plificar la sintaxis a:
De esta form a los cam pos de TablaOrigen se grabarán en Tabla, para realizar esta operación es necesario que
todos los cam pos de TablaOrigen estén contenidos con igual nom bre en Tabla. Con otras palabras que Tabla
posea todos los cam pos de TablaOrigen ( igual nom bre e igual tipo) .
Se puede utilizar la instrucción I NSERT I NTO para agregar un registro único a una tabla, utilizando la sintaxis
de la consulta de adición de registro único tal y com o se m ostró anteriorm ente. En este caso, su código
específica el nom bre y el valor de cada cam po del registro. Debe especificar cada uno de los cam pos del
registro al que se le va a asignar un valor así com o el valor para dicho cam po. Cuando no se especifica dicho
cam po, se inserta el valor predeterm inado o Null. Los registros se agregan al final de la tabla.
Tam bién se puede utilizar I NSERT I NTO para agregar un conjunto de registros pertenecientes a otra tabla o
consulta utilizando la cláusula SELECT ... FROM com o se m ostró anteriorm ente en la sintaxis de la consulta de
adición de m últiples registros. En este caso la cláusula SELECT especifica los cam pos que se van a agregar en la
tabla destino especificada.
Si la tabla destino contiene una clave principal, hay que segurarse que es única, y con valores no-Null ; si no es
así, no se agregarán los registros. Si se agregan registros a una tabla con un cam po Contador , no se debe
incluir el cam po Contador en la consulta. Se puede em plear la cláusula I N para agregar registros a una tabla en
otra base de datos.
Se pueden averiguar los registros que se agregarán en la consulta ejecutando prim ero una consulta de
selección que utilice el m ism o criterio de selección y ver el resultado. Una consulta de adición copia los registros
de una o m ás tablas en otra. Las tablas que contienen los registros que se van a agregar no se verán afectadas
por la consulta de adición. En lugar de agregar registros existentes en otra tabla, se puede especificar los
valores de cada cam po en un nuevo registro utilizando la cláusula VALUES. Si se om ite la lista de cam pos, la
cláusula VALUES debe incluir un valor para cada cam po de la tabla, de otra form a fallará I NSERT.
5. 3 UPDATE
Crea una consulta de actualización que cam bia los valores de los cam pos de una tabla especificada basándose
en un criterio específico. Su sintaxis es:
UPDATE Tabla SET Cam po1= Valor1, Cam po2= Valor2, ... Cam poN= ValorN
WHERE Criterio;
UPDATE es especialm ente útil cuando se desea cam biar un gran núm ero de registros o cuando éstos se
encuentran en m últiples tablas. Puede cam biar varios cam pos a la vez. El ejem plo siguiente increm enta los
valores Cantidad pedidos en un 10 por ciento y los valores Transporte en un 3 por ciento para aquellos que se
hayan enviado al Reino Unido.:
UPDATE no genera ningún resultado. Para saber qué registros se van a cam biar, hay que exam inar prim ero el
resultado de una consulta de selección que utilice el m ism o criterio y después ejecutar la consulta de
actualización.
Si en una consulta de actualización suprim im os la cláusula WHERE todos los registros de la tabla señalada
serán actualizados.
7 . SubConsult a s
Una subconsulta es una instrucción SELECT anidada dentro de una instrucción SELECT, SELECT...I NTO,
I NSERT...I NTO, DELETE, o UPDATE o dentro de otra subconsult a.
En donde:
com paración
Es una expresión y un operador de com paración que com para la expresión con el resultado de la subconsult a.
expresión
Es una instrucción SELECT, que sigue el m ism o form ato y reglas que cualquier otra instrucción SELECT. Debe ir
entre paréntesis.
Se puede utilizar una subconsulta en lugar de una expresión en la lista de cam pos de una instrucción SELECT o
en una cláusula WHERE o HAVI NG. En una subconsulta, se utiliza una instrucción SELECT para proporcionar un
conjunto de uno o m ás valores especificados para evaluar en la expresión de la cláusula WHERE o HAVI NG.
Se puede utilizar el predicado ANY o SOME, los cuales son sinónim os, para recuperar registros de la consulta
principal, que satisfagan la com paración con cualquier otro registro recuperado en la subconsulta. El ejem plo
siguiente devuelve todos los productos cuyo precio unitario es m ayor que el de cualquier producto vendido con
un descuento igual o m ayor al 25 por ciento.:
El predicado I N se em plea para recuperar únicam ente aquellos registros de la consulta principal para los que
algunos registros de la subconsulta contienen un valor igual. El ejem plo siguiente devuelve todos los productos
vendidos con un descuento igual o m ayor al 25 por ciento.:
I nversam ente se puede utilizar NOT I N para recuperar únicam ente aquellos registros de la consulta principal
para los que no hay ningún registro de la subconsulta que contenga un valor igual.
El predicado EXI STS (con la palabra reservada NOT opcional) se utiliza en com paraciones de verdad/ falso para
determ inar si la subconsulta devuelve algún registro.
Se puede utilizar tam bién alias del nom bre de la tabla en una subconsulta para referirse a tablas listadas en la
cláusula FROM fuera de la subconsulta. El ejem plo siguiente devuelve los nom bres de los em pleados cuyo
salario es igual o m ayor que el salario m edio de todos los em pleados con el m ism o título. A la tabla Em pleados
se le ha dado el alias T1: :
Obtiene una lista con el nom bre, cargo y salario de todos los agentes de ventas cuyo salario es m ayor
que el de todos los jefes y directores.
Obtiene una lista con el nom bre y el precio unitario de todos los productos con el m ism o precio que el
alm íbar anisado.
Obtiene una lista de las com pañías y los contactos de todos los clientes que han realizado un pedido
en el segundo trim estre de 1993.
Selecciona el nom bre de todos los em pleados que han reservado al m enos un pedido.
Recupera el Código del Producto y la Cantidad pedida de la tabla pedidos, extrayendo el nom bre del
producto de la tabla de productos.
Si tenem os una tabla de productos y otra tabla de pedidos, podem os visualizar en total de productos pedidos
por año para un artículo determ inado, tal y com o se visualiza en la tabla anterior.
En donde:
función agregada
Es una función SQL agregada que opera sobre los datos seleccionados.
cam po pivot
Es el cam po o expresión que desea utilizar para crear las cabeceras de la colum na en el resultado de la
consult a.
va lor 1 , va lor 2
Son valores fijos utilizados para crear las cabeceras de la colum na.
Para resum ir datos utilizando una consulta de referencia cruzada, se seleccionan los valores de los cam pos o
expresiones especificadas com o cabeceras de colum nas de tal form a que pueden verse los datos en un form ato
m ás com pacto que con una consulta de selección.
Los valores devueltos en cam po pivot se utilizan com o encabezados de colum na en el resultado de la consulta.
Por ejem plo, al utilizar las cifras de ventas en el m es de la venta com o pivot en una consulta de referencia
cruzada se crearían 12 colum nas. Puede restringir el cam po pivot para crear encabezados a partir de los valores
fij os ( valor1, valor2) listados en la cláusula opcional I N.
Tam bién puede incluir valores fijos, para los que no existen datos, para crear colum nas adicionales.
Ejem plos
Crea una consulta de tabla de referencias cruzadas que m uestra las ventas de productos por m es para
un año específico. Los m eses aparecen de izquierda a derecha com o colum nas y los nom bres de los
productos aparecen de arriba hacia abajo com o filas.
TRANSFORM Sum( Cant idad) AS Ventas SELECT Com pania FROM Pedidos
WHERE Fecha Between # 01-01-98# And # 12- 31- 98# GROUP BY Com pania
ORDER BY Com pania PIVOT "Trim estre " & DatePart("q", Fecha) I n ( 'Trim estre1',
'Trim estre2', 'Trim est re 3', 'Trim est re 4') ;
Crea una consulta de tabla de referencias cruzadas que m uestra las ventas de productos por trim estre
de cada proveedor en el año indicado. Los trim estres aparecen de izquierda a derecha com o colum nas
y los nom bres de los proveedores aparecen de arriba hacia abajo com o filas.
Un caso práctico:
Se trata de resolver el siguiente problem a: tenem os una tabla de productos con dos cam pos, el código y el
nom bre del producto, tenem os otra tabla de pedidos en la que anotam os el código del producto, la fecha del
pedido y la cantidad pedida. Deseam os consultar los totales de producto por año, calculando la m edia anual de
ventas.
1. Art ículos:
ID Nombre
1 Zapatos
2 Pantalones
3 Blusas
2. Pedidos:
Id Fecha Cantidad
1 11/11/1996 250
2 11/11/1996 125
3 11/11/1996 520
1 12/10/1996 50
2 04/05/1996 250
3 05/08/1996 100
1 01/01/1997 40
2 02/08/1997 60
3 05/10/1997 70
La clásula TRANSFORM indica el valor que deseam os visualizar en las colum nas que realm ente pertenecen a la
consulta, en este caso 1996 y 1997, puesto que las dem ás colum nas son opcionales.
SELECT especifica el nom bre de las colum nas opcionales que deseam os visualizar, en este caso Producto,
Código, Total y Media, indicando el nom bre del cam po que deseam os m ostrar en cada colum na o el valor de la
m ism a. Si incluim os una función de cálculo el resultado se hará en base a los datos de la fila actual y no al total
de los datos.
FROM especifica el origen de los datos. La prim era tabla que debe figurar es aquella de donde deseam os
extraer los datos, esta tabla debe contener al m enos tres cam pos, uno para los títulos de la fila, otros para los
títulos de la colum na y otro para calcular el valor de las celdas.
En este caso en concreto se deseaba visualizar el nom bre del producto, com o el tabla de pedidos sólo figuraba
el código del m ism o se añadió una nueva colum na en la cláusula select llam ada Producto que se corresponda
con el cam po Nom bre de la tabla de artículos. Para vincular el código del artículo de la tabla de pedidos con el
nom bre del m ism a de la tabla artículos se insertó la cláusula I NNER JOI N.
La cláusula GROUP BY especifica el agrupam iento de los registros, contrariam ente a los m anuales de instrucción
esta cláusula no es opcional ya que debe figurar siem pre y debem os agrupar los registros por el cam po del cual
extraem os la inform ación. En este caso existen dos cam pos del cual extraem os la inform ación:
pedidos.cantidad y artículos.nom bre, por ellos agrupam os por los cam pos.
Para finalizar la cláusula PI VOT indica el nom bre de las colum nas no opcionales, en este caso 1996 y 1997 y
com o vam os a el dato que aparecerá en las colum nas, en este caso em pleam os el año en que se produjo el
pedido, extrayéndolo del cam po pedidos.fecha.
SELECT cam pos FROM tb1 I NNER JOI N tb2 ON tb1.cam po1 com p tb2.cam po2
En donde:
tb1 , tb2
Son los nom bres de las tablas desde las que se com binan los registros.
Son los nom bres de los cam pos que se com binan. Si no son num éricos, los cam pos deben ser del m ism o tipo
de datos y contener el m ism o tipo de datos, pero no tienen que tener el m ism o nom bre.
com p
Es cualquier operador de com paración relacional : = , < , > , < = , > = , o < > .
Se puede utilizar una operación I NNER JOI N en cualquier cláusula FROM. Esto crea una com binación por
equivalencia, conocida tam bién com o unión interna. Las com binaciones Equi son las m ás com unes; éstas
com binan los registros de dos tablas siem pre que haya concordancia de valores en un cam po com ún a am bas
tablas. Se puede utilizar I NNER JOI N con las tablas Departam entos y Em pleados para seleccionar todos los
em pleados de cada departam ento. Por el contrario, para seleccionar todos los departam entos (incluso si alguno
de ellos no tiene ningún em pleado asignado) se em plea LEFT JOI N o todos los em pleados (incluso si alguno no
está asignado a ningún departam ento), en este caso RI GHT JOI N.
Si se intenta com binar cam pos que contengan datos Mem o u Objeto OLE, se produce un error. Se pueden
com binar dos cam pos num éricos cualesquiera, incluso si son de diferente tipo de datos. Por ejem plo, puede
com binar un cam po Num érico para el que la propiedad Size de su objeto Field está establecida com o Entero, y
un cam po Contador.
El ejem plo siguiente m uestra cóm o podría com binar las tablas Categorías y Productos basándose en el cam po
I DCat egoria:
En el ejem plo anterior, I DCategoria es el cam po com binado, pero no está incluido en la salida de la consulta ya
que no está incluido en la instrucción SELECT. Para incluir el cam po com binado, incluir el nom bre del cam po en
la instrucción SELECT, en este caso, Categorias.I DCategoria.
Tam bién se pueden enlazar varias cláusulas ON en una instrucción JOI N, utilizando la sintaxis siguiente:
Un LEFT JOI N o un RI GHT JOI N puede anidarse dentro de un I NNER JOI N, pero un I NNER JOI N no puede
anidarse dentro de un LEFT JOI N o un RI GHT JOI N.
Ejem plo
Crea dos com binaciones equivalentes: una entre las tablas Detalles de pedidos y Pedidos, y la otra
entre las tablas Pedidos y Em pleados. Esto es necesario ya que la tabla Em pleados no contiene datos
de ventas y la tabla Detalles de pedidos no contiene datos de los em pleados. La consulta produce una
list a de em pleados y sus vent as t ot ales.
Si em pleam os la cláusula I NNER en la consulta se seleccionarán sólo aquellos registros de la tabla de la que
hayam os escrito a la izquierda de I NNER JOI N que contengan al m enos un registro de la tabla que hayam os
escrito a la derecha. Para solucionar esto tenem os dos cláusulas que sustituyen a la palabra clave I NNER, estas
cláusulas son LEFT y RI GHT. LEFT tom a todos los registros de la tabla de la izquierda aunque no tengan ningún
registro en la tabla de la izquierda. RI GHT realiza la m ism a operación pero al contrario, tom a todos los registros
de la tabla de la derecha aunque no tenga ningún registro en la tabla de la izquierda.
En donde:
Puede com binar los resultados de dos o m ás consultas, tablas e instrucciones SELECT, en cualquier orden, en
una única operación UNI ON. El ejem plo siguiente com bina una tabla existente llam ada Nuevas Cuentas y una
inst rucción SELECT:
Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la operación UNI ON, no
obstante puede incluir el predicado ALL para asegurar que se devuelven todos los registros. Esto hace que la
consulta se ejecute m ás rápidam ente. Todas las consultas en una operación UNI ON deben pedir el m ism o
núm ero de cam pos, no obstante los cam pos no tienen porqué tener el m ism o tam año o el m ism o tipo de datos.
Se puede utilizar una cláusula GROUP BY y/ o HAVI NG en cada argum ento consulta para agrupar los datos
devueltos. Puede utilizar una cláusula ORDER BY al final del últim o argum ento consulta para visualizar los datos
devueltos en un orden específico.
Recupera los nom bres y las ciudades de todos proveedores y clientes de Brasil
SELECT [ Nom bre de com pañía] , Ciudad FROM Proveedores WHERE País = 'Brasil'
UNI ON SELECT [ Nom bre de com pañía] , Ciudad FROM Clientes WHERE País =
'Brasil' ORDER BY Ciudad
Recupera los nom bres y las ciudades de todos proveedores y clientes radicados en Brasil, ordenados
por el nom bre de la ciudad
SELECT [ Nom bre de com pañía] , Ciudad FROM Proveedores WHERE País = 'Brasil'
UNI ON SELECT [ Nom bre de com pañía] , Ciudad FROM Clientes WHERE País =
'Brasil' UNI ON SELECT [ Apellidos] , Ciudad FROM Em pleados WHERE Región =
'Am érica del Sur'
Recupera los nom bres y las ciudades de todos los proveedores y clientes de brasil y los apellidos y las
ciudades de todos los em pleados de Am érica del Sur
Si se está utilizando el m otor de datos de Microsoft para acceder a bases de datos access, sólo se puede
em plear esta instrucción para crear bases de datos propias de access. Su sintaxis es:
En donde:
Parte Descripción
tabla Es el nombre de la tabla que se va a crear.
CREATE TABLE Em pleados (Nom bre TEXT (25) , Apellidos TEXT (50));
Crea una nueva tabla llam ada Em pleados con dos cam pos, uno llam ado Nom bre de tipo texto y
longutid 25 y otro llam ado apellidos con longitud 50.
Crea una nueva tabla llam ada Em pleados con un cam po Nom bre de tipo texto y longitud 10, otro con
llam ado Apellidos de tipo texto y longitud predeterm inada (50) y uno m ás llam ado Fecha_Nacim ient o
de t ipo Fecha/ Hora. Tam bién crea un índice único (no perm ite valores repetidos) form ado por los tres
cam pos.
Crea una tabla llam ada Em pleados con un cam po Texto de longitud predeterm inada (50) llam ado
Nom bre y otro igual llam ado Apellidos, crea otro cam po llam ado Fecha_Nacim iento de tipo Fecha/ Hora
y el cam po I D de tipo entero el que establece com o clave principal.
Se utiliza la cláusula CONSTRAI NT en las instrucciones ALTER TABLE y CREATE TABLE para crear o elim inar
índices. Existen dos sintaxis para esta cláusula dependiendo si desea Crear ó Elim inar un índice de un único
cam po o si se trata de un cam po m ultiíndice. Si se utiliza el m otor de datos de Microsoft, sólo podrá utilizar
esta cláusula con las bases de datos propias de dicho m otor.
CONSTRAI NT nom bre { PRI MARY KEY | UNI QUE | REFERENCES t abla ext erna
[ ( cam po externo1, cam po externo2) ] }
CONSTRAI NT nom bre { PRI MARY KEY (prim ario1[ , prim ario2 [ , ...] ] ) |
UNI QUE (único1[ , único2 [ , ...] ] ) |
FOREI GN KEY (ref1[ , ref2 [ , ...] ] ) REFERENCES tabla externa [ (cam po externo1
[ ,cam po externo2 [ , ...] ] ) ] }
Parte Descripción
nombre Es el nombre del índice que se va a crear.
primarioN Es el nombre del campo o de los campos que forman el índice primario.
Es el nombre del campo o de los campos que forman el índice de clave
únicoN
única.
Es el nombre del campo o de los campos que forman el índice externo
refN
(hacen referencia a campos de otra tabla).
tabla externa Es el nombre de la tabla que contiene el campo o los campos
Si se desea crear un índice con m últiples cam pos cuando se está utilizando las instrucciones ALTER TABLE o
CREATE TABLE la cláusula CONSTRAI NT debe aparecer fuera de la cláusula de creación de tabla.
Tipo de
Descripción
Indice
Genera un índece de clave única. Lo que implica que los registros de la
UNIQUE
tabla no pueden contener el mismo valor en los campos indexados.
Genera un índice primario el campo o los campos especificados. Todos los
PRIMARY
campos de la clave principal deben ser únicos y no nulos, cada tabla sólo
KEY
puede contener una única clave principal.
Genera un índice externo (toma como valor del índice campos contenidos
en otras tablas). Si la clave principal de la tabla externa consta de más de
un campo, se debe utilizar una definición de índice de múltiples campos,
listando todos los campos de referencia, el nombre de la tabla externa, y los
FOREIGN
nombres de los campos referenciados en la tabla externa en el mismo orden
KEY
que los campos de referencia listados. Si los campos referenciados son la
clave principal de la tabla externa, no tiene que especificar los campos
referenciados, predeterminado por valor, el motor Jet se comporta como si
la clave principal de la tabla externa fueran los campos referenciados .
Si se utiliza el m otor de datos Jet de Microsoft sólo se pueden crear índices en bases de datos del m ism o m otor.
La sintaxis para crear un índice en ua tabla ya definida en la siguiente:
En donde:
Parte Descripción
índice Es el nombre del índice a crear.
tabla Es el nombre de una tabla existentes en la que se creará el índice.
campo Es el nombre del campo o lista de campos que consituyen el índice.
Indica el orden de los valores de lso campos ASC indica un orden
ASC|DESC
ascendente (valor predeterminado) y DESC un orden descendente.
UNIQUE Indica que el indice no puede contener valores duplicados.
DISALLOW
Prohibe valores nulos en el índice
NULL
IGNORE Excluye del índice los valores nulos incluidos en los campos que lo
NULL componen.
Crea un índice llam ado MiI ndice en la tabla em pleados con los cam pos Prefij o y Telefono.
Crea un índice en la tabla Em pleados utilizando el cam po I D, obligando que que el cam po I D no
contenga valores nulos ni repetidos.
Modifica el diseño de una tabla ya existente, se puden m odificar los cam pos o los índices existentes. Su sintaxis
es:
ALTER TABLE tabla { ADD { COLUMN tipo de cam po[ (tam año)] [ CONSTRAI NT índice]
CONSTRAI NT índice m ulticam po} |
DROP { COLUMN cam po I CONSTRAI NT nom bre del índice} }
En donde:
Parte Descripción
tabla Es el nombre de la tabla que se desea modificar.
campo Es el nombre del campo que se va a añadir o eliminar.
tipo Es el tipo de campo que se va a añadir.
tamaño El el tamaño del campo que se va a añadir (sólo para campos de texto).
Es el nombre del índice del campo (cuando se crean campos) o el
índice
nombre del índice de la tabla que se desea eliminar.
índice Es el nombre del índice del campo multicampo (cuando se crean
multicampo campos) o el nombre del índice de la tabla que se desea eliminar.
Operación Descripción
ADD Se utiliza para añadir un nuevo campo a la tabla, indicando el nombre, el
COLUMN tipo de campo y opcionalmente el tamaño (para campos de tipo texto).
ADD Se utliza para agregar un índice de multicampos o de un único campo.
DROP Se utliza para borrar un campo. Se especifica únicamente el nombre del
COLUMN campo.
Se utiliza para eliminar un índice. Se especifica únicamente el nombre
DROP
del índice a continuación de la palabra reservada CONSTRAINT.
Agrega un indice externo a la tabla Pedidos. El índice externo se basa en el cam po I D_Em pleado y se
refiere al cam po I D_Em pleado de la tabla Em pleados. En este ejem plo no es necesario indicar el
cam po junto al nom bre de la tabla en la cláusula REFERENCES, pues I D_Em pleado es la clave
principal de la tabla Em pleados.
PARAMETERS nom bre1 tipo1, nom bre2 tipo2, ... , nombreN t ipoN Consult a
En donde:
Parte Descripción
nombre Es el nombre del parámetro
tipo Es el tipo de datos del parámetro
consulta Una consulta SQL
Puede utilizar nom bre pero no tipo de datos en una cláusula WHERE o HAVI NG.
El ejem plo siguiente m uestra com o utilizar los parám etros en el program a de Visual Basic:
Qd.Param eters!Precio_Minim o = 2
Qd.Param eters!FechaI nicio = # 31/ 12/ 95#
Set Rs = Qd.OpenRecordset ( )
Ejem plo:
La ejecución desde la base de datos solicita al usuario los apellidos del em pleado y después m uestra
los resultados.
1 3 . Bases de Dat os Ex t e r na s
Para el acceso a bases de datos externas se utiliza la cláusula I N. Se puede acceder a base de datos dBase,
Paradox o Btrieve. Esta cláusula sólo perm ite la conexión de una base de datos externa a la vez. Una base de
datos externa es una base de datos que no sea la activa. Aunque para m ejorar los rendim ientos es m ejor
adjuntarlas a la base de datos actual y trabajar con ellas.
Para especificar una base de datos que no pertenece a Access Basic, se agrega un punto y com a (; ) al nom bre
y se encierra entre com illas sim ples. Tam bién puede utilizar la palabra reservada DATABASE para especificar la
base de datos externa. Por ejem plo, las líneas siguientes especifican la m ism a tabla:
SELECT I DCliente FROM Clientes IN MI SDATOS.MDB WHERE I DCliente Like 'A* ';
En donde MI SDATOS.MDB es el nom bre de una base de datos de Microsoft Access que contiene la
t abla Client es.
SELECT I DCliente FROM Clientes IN 'C: \ DBASE\ DATOS\ VENTAS' 'dBASE I V';
WHERE I DCliente Like 'A* ';
Para recuperar datos de una tabla de dBASE I I I + hay que utilizar 'dBASE I I I + ; ' en lugar de 'dBASE
I V; '.
Para recuperar datos de una tabla de Paradox versión 3.x, hay que sustituir 'Paradox 4.x; ' por
'Paradox 3.x; '.
SELECT I DCliente FROM Clientes IN 'C: \ BTRI EVE\ DATOS\ VENTAS\ FI LE.DDF'
'Bt rieve; ' WHERE I DCliente Like 'A* ';
C: \ BTRI EVE\ DATOS\ VENTAS\ FI LE.DDF es la ruta de acceso y nom bre de archivo del archivo de
definición de datos de Btrieve.
1 5 La Cláusula PROCEDURE
Esta cláusula es poco usual y se utiliza para crear una consulta a la m ism a vez que se ejecuta, opcionalm ente
define los parám etros de la m ism a. Su sintaxis es la siguiente:
PROCEDURE Nom breConsulta Parám etro1 tipo1, .... , Parám etroN t ipon ConsultaSQL
En donde:
Parte Descripción
NombreConsulta Es el nombre con se guardará la consulta en la base de datos.
Parámetro Es el nombre de parámetro o de los parámetros de dicha consulta.
tipo Es el tipo de datos del parámetro
ConsultaSQL Es la consulta que se desea grabar y ejecutar.
1 6 AN EXOS
Para generar este tipo de consultas lo m ás sencillo es utilizar el asistente de consultas de Access, editar la
sentencia SQL de la consulta y pegarla en nuestro código. No obstante este tipo de consulta se consigue de la
siguiente form a:
Un caso práctico, si deseam os localizar aquellos em pleados con igual nom bre y visualizar su código
correspondiente, la consulta sería la siguiente:
16.1.2 Recuperar Registros de una tabla que no contengan registros relacionados en otra.
Este tipo de consulta se em plea en situaciones tales com o saber que productos no se han vendido en un
determ inado periodo de tiem po,
La sintaxis es sencilla, se trata de realizar una unión interna entre dos tablas seleccionadas m ediante un LEFT
JOI N, establecim iendo com o condición que el cam po relacionado de la segunda sea Null.
Existen dos tipos de consultas SQL: las consultas de selección ( nos devuelven datos) y las consultas de acción
(aquellas que no devuelven ningún registro). Am bas pueden ser tratadas en Visual Basic pero de form a
diferent e.
Las consultas de selección se ejecutan recogiendo la inform ación en un recordset previam ente definido
m ediante la instrucción openrecordset( ) , por ej em plo:
Las consultas de acción, al no devolver ningún registro, no las podem os asignar a ningún recordset, en este
caso la form a de ejecutarlas es m ediante los m étodos Execute y ExecuteSQL (para bases de datos ODBC), por
ej em plo:
Esta función devuelve una parte señalada de una fecha concreta. Su sintaxis es:
Parte representa a la porción de fecha que se desea obtener, los posibles valores son:
Valor Descripción
yyyy Año
q Trimestre
m Mes
y Día del año
d Día del mes
w Día de la semana
ww Semana del año
h Hora
m Minutos
s Segundos
Com ienzoSem ana indica el prim er día de la sem ana. Los posibles valores son:
Valor Descripción
0 Utiliza el valor pode efecto del sistema
1 Domingo (Valor predeterminado)
2 Lunes
3 Martes
4 Miércoles
5 Jueves
6 Viernes
Com ienzoAño indica cual es la prim era sem ana del año; los posibles valores son:
Valor Descripción
0 Valor del sistema
1 Comienza el año el 1 de enero (valor predeterminado).
2 Empieza con la semana que tenga al memos cuatro días en el nuevo año.
3 Empieza con la semana que esté contenida completamente en el nuevo año.
Dentro de una sentencia SQL podem os em plear la función iif para indicar las condiciones de búsqueda. La
sintaxis de la función iif es la siguiente:
iif( Expresion,Valor1,Valor2)
En donde Expresión es la sentencia que evaluam os; si Expresión es verdadera entonces se devuelve Valor1, si
Expresión es falsa se devuelve Valor2.
Supongam os que en un form ulario tenem os una casilla de texto llam anda TX_Apellido. Si cuando
ej ecutam os esta consulta la casilla contiene algún valor se devuelven todos los em pleados cuyo
apellido coincida con el texto de la casilla, en caso contrario se devuelven todos los em pleados.
Esta consulta devuelve los cam pos Fecha, Nom bre del Producto y Cantidad de la tabla pedidos,
añadiendo un cam po al final con el valor Madrid si el código posta está dentro del intervalo, en caso
contario devuelve Nacional.
Siem pre es bueno intentar hacer las cosas de igual m odo para que el m antenim iento y la revisión nos sea una
labor lo m ás sencilla posible. En lo que a m i respecta utilizo las siguiente norm as a la hora de elaborar
sent ecias SQL:
3. Las operaciones siem pre la prim era letra con m ayúsculas y el resto en m inúsculas.
4. Los operadores lógicos incluidos en otros operadores la prim era letra con m ayúsculas y el resto con
m inúculas.
Los Nom bres de las Tablas, Cam pos y Consultas, los escribo siem pre la prim era letra con m ayúsculas y el resto
con m inúsculas, en algunos casos utilizo el carácter "_" para definir m ejor el nom bre: Detalles_Pedidos.
Aunque con el m otor Jet se pueden utilizar acentos y espacios en blanco para nom brar los cam pos, las tablas y
las consultas no los utilizo porque cuando se exportar tablas a otros sistem as los acentos y los espacios en
blanco pueden producir errores innecesarios.
Recuerda siem pre que si utilizas espacios en blanco para llam ar tablas o consultas cada vez que hagas
referencias a ellos en una consulta debes incluir sus nom bres entre corchetes.
SELECT [ I D de Pedido] , [ Nom bre del Producto] , Cantidad FROM [ Detalles del Pedido] ;