0% encontró este documento útil (0 votos)
36 vistas

Tutorial de SQL

Este documento proporciona una introducción al lenguaje de consultas estructuradas SQL. Explica los componentes básicos de SQL como comandos, cláusulas, operadores y funciones de agregado. Luego describe varios tipos de consultas como consultas de selección, agrupamiento, actualización y más. El documento contiene 15 secciones que cubren temas como creación de tablas, consultas con parámetros, acceso a bases de datos externas y resolución de problemas comunes.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
36 vistas

Tutorial de SQL

Este documento proporciona una introducción al lenguaje de consultas estructuradas SQL. Explica los componentes básicos de SQL como comandos, cláusulas, operadores y funciones de agregado. Luego describe varios tipos de consultas como consultas de selección, agrupamiento, actualización y más. El documento contiene 15 secciones que cubren temas como creación de tablas, consultas con parámetros, acceso a bases de datos externas y resolución de problemas comunes.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 34

Tut orial de SQL por Claudio Casares

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

3. Crit erios de Selección


3 . 1 Operadores Lógicos
3 . 2 I nt ervalos de Valores
3 . 3 El Operrador Like
3 . 4 El Operador I n
3 . 5 La cláusula W HERE

4. Agrupam iento de Registros y Funciones Agregadas


4 . 1 El cláusula GROUP BY
4 . 2 AVG ( Media Arit m ét ica)
4 . 3 Count ( Cont ar Regist ros)
4 . 4 M a x y Min ( Valores Máxim os y Mínim os)
4 . 5 St D e v y St DevP ( Desviación Est ándar)
4 . 6 Sum ( Sum ar Valores)
4 . 7 Va r y VarP ( Varianza)

5. Consult as de Act ualización


5 . 1 Consult as de Elim inación
5 . 2 Consult as de Dat os Añadidos
5 . 3 Consult as de Act ualización

6. Tipos de Datos

7. SubConsult as

8. Consult as de Referencias Cruzadas

9. Consultas de Unión I nternas

10. Consultas de Unión Externas

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
1 1 . Est ruct uras de las Tablas
1 1 .1 Creación de Tablas
1 1 .2 La cláusula CONSTRAI NT
1 1 .3 Creación de I ndices
1 1 .4 Elim inar y Añadir Cam pos e I ndices

12. Consultas con Parám etros

13. Acceso a Bases de Dat os Ext ernas

14. Om it ir los Perm isos de Ej ecución

15. La Clá usula Procedure

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

El lenguaj e de consult a est ruct urado ( SQL) es un lenguaj e de base de dat os


norm alizado, ut ilizado por el m ot or de base de dat os de Microsoft Jet . SQL se ut iliza
para crear obj et os QueryDef, com o el argum ent o de origen del m ét odo
OpenRecordSet y com o la propiedad RecordSource del cont rol de dat os. Tam bién se
puede ut ilizar con el m ét odo Execut e para crear y m anipular direct am ent e las bases
de dat os Jet y crear consult as SQL de paso a t ravés para m anipular bases de dat os
rem ot as client e - servidor.

1.1. Com ponent es del SQL

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
El lenguaj e SQL est á com puest o por com andos, cláusulas, operadores y funciones
de agregado. Est os elem ent os se com binan en las inst rucciones para crear,
act ualizar y m anipular las bases de dat os.

1.2 Com andos

Exist en dos t ipos de com andos SQL:

• 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.

Com andos DLL


Com ando Descripción
CREATE Ut ilizado para crear nuevas t ablas, cam pos e índices
DROP Em pleado para elim inar t ablas e índices
Ut ilizado para m odificar las t ablas agregando cam pos o cam biando la
ALTER
definición de los cam pos.

Com andos DML

Com ando Descripción


Ut ilizado para consult ar regist ros de la base de dat os que sat isfagan un
SELECT
crit erio det erm inado
Ut ilizado para cargar lot es de dat os en la base de dat os en una única
I NSERT
operación.
Ut ilizado para m odificar los valores de los cam pos y regist ros
UPDATE
especificados
DELETE Ut ilizado para elim inar regist ros de una t abla de una 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

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
HAVI NG Ut ilizada para expresar la condición que debe sat isfacer cada grupo
ORDER Ut ilizada para ordenar los regist ros seleccionados de acuerdo con un
BY orden específico
1.4 Operadores Lógicos

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

1.6 Funciones de Agregado

Las funciones de agregado se usan dent ro de una cláusula SELECT en grupos de


regist ros para devolver un único valor que se aplica a un grupo de regist ros.

Función Descripción

Ut ilizada para calcular el prom edio de los valores de un cam po


AVG
det erm inado
COUNT Ut ilizada para devolver el núm ero de regist ros de la selección
Ut ilizada para devolver la sum a de t odos los valores de un cam po
SUM
det erm inado
MAX Ut ilizada para devolver el valor m ás alt o de un cam po especificado
MI N Ut ilizada para devolver el valor m ás baj o de un cam po especificado
2 . Consult a s de Selección

Las consult as de selección se ut ilizan para indicar al m ot or de dat os que devuelva


inform ación de las bases de dat os, est a inform ación es devuelt a en form a de
conj unt o de regist ros que se pueden alm acenar en un obj et o recordset . Est e
conj unt o de regist ros es m odificable.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
2.1 Consult as básicas

La sint axis básica de una consult a de selección es la siguient e:

SELECT Cam pos FROM Tabla;

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:

SELECT Nom bre, Telefono FROM Client es;

Est a consult a devuelve un recordset con el cam po nom bre y t eléfono de la t abla
client es.

2.2 Ordenar los regist ros

Adicionalm ent e se puede especificar el orden en que se desean recuperar los


regist ros de las t ablas m ediant e la claúsula ORDER BY List a de Cam pos. En donde
List a de cam pos represent a los cam pos a ordenar. Ej em plo:

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:

SELECT CodigoPost al, Nom bre, Telefono FROM Client es ORDER BY


CodigoPost al, Nom bre;

I ncluso se puede especificar el orden de los regist ros: ascendent e m ediant e la


claúsula (ASC - se t om a est e valor por defect o) ó descendent e ( DESC)

SELECT CodigoPost al, Nom bre, Telefono FROM Client es ORDER BY


CodigoPost al DESC , Nom bre ASC;

2.3 Consult as con Predicado

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

Si no se incluye ninguno de los predicados se asum e ALL. El Mot or de base de


dat os selecciona t odos los regist ros que cum plen las condiciones de la inst rucción

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
SQL. No se convenient e abusar de est e predicado ya que obligam os al m ot or de la
base de dat os a analizar la est ruct ura de la t abla para averiguar los cam pos que
cont iene, es m ucho m ás rápido indicar el list ado de cam pos deseados.

SELECT ALL FROM Em pleados;


SELECT * FROM Em pleados;

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:

SELECT TOP 25 Nom bre, Apellido FROM Est udiant es


ORDER BY Not a DESC;

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:

SELECT TOP 10 PERCENT Nom bre, Apellido FROM Est udiant es


ORDER BY Not a DESC;

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:

SELECT DI STI NCT Apellido FROM Em pleados;

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.

SELECT DI STI NCTROW Apellido FROM Em pleados;

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Si la t abla em pleados cont iene dos regist ros: Ant onio López y Mart a López el
ej em plo del predicado DI STI NCT devuleve un único regist ro con el valor López en el
cam po Apellido ya que busca no duplicados en dicho cam po. Est e últ im o ej em plo
devuelve dos regist ros con el valor López en el apellido ya que se buscan no
duplicados en el regist ro com plet o.

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:

SELECT DI STI NCTROW Apellido AS Em pleado FROM Em pleados;

2.5 Recuperar I nform ación de una base de Dat os Ext erna

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:

SELECT DI STI NCTROW Apellido AS Em pleado FROM Em pleados


I N 'c: \ dat abases\ gest ion.m db';

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

3.1 Operadores Lógicos

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:

< expresión1> operador < expresión2>

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
En donde expresión1 y expresión2 son las condiciones a evaluar, el result ado de la
operación varía en función del operador lógico. La t abla adj unt a m uest ra los
diferent es posibles result ados:

<expresión1> Operador <expresión2> Resultado


Verdad AND Falso Falso

Verdad AND Verdad Verdad


Falso AND Verdad Falso
Falso AND Falso Falso
Verdad OR Falso Verdad
Verdad OR Verdad Verdad
Falso OR Verdad Verdad
Falso OR Falso Falso
Verdad XOR Verdad Falso
Verdad XOR Falso Verdad
Falso XOR Verdad Verdad
Falso XOR Falso Falso
Verdad Eqv Verdad Verdad
Verdad Eqv Falso Falso
Falso Eqv Verdad Falso
Falso Eqv Falso Verdad
Verdad Imp Verdad Verdad
Verdad Imp Falso Falso
Verdad Imp Null Null
Falso Imp Verdad Verdad
Falso Imp Falso Verdad
Falso Imp Null Verdad
Null Imp Verdad Verdad

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Null Imp Falso Null
Null Imp Null Null
Si a cualquiera de las ant eriores condiciones le ant eponem os el operador NOT el
result ado de la operación será el cont rario al devuelt o sin el operador NOT.

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') ;

3.2 I nt ervalos de Valores

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:

cam po [ Not ] Between valor1 And valor2 ( la condición Not es opcional)

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.

SELECT * FROM Pedidos WHERE CodPost al Between 28000 And 28999;


( Devuelve los pedidos realizados en la provincia de Madrid)

SELECT I I f(CodPost al Bet ween 28000 And 28999, 'Provincial', 'Nacional')


FROM Editores;
( Devuelve el valor 'Provincial' si el código post al se encuent ra en el int ervalo,
'Nacional' en caso cont rario)

3.3 El Operador Like

Se ut iliza para com parar una expresión de cadena con un m odelo en una expresión
SQL. Su sint axis es:

expresión Like m odelo

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.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
El ej em plo siguient e devuelve los dat os que com ienzan con la let ra P seguido de
cualquier let ra ent re A y F y de t res dígit os:

Like 'P[ A- F] # # # '

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.

Like '[ A- D] * '

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.

Tipo de coincidencia Modelo Planteado Coincide No coincide


Varios caracteres 'a*a' 'aa', 'aBa', 'aBBBa' 'aBC'
Carácter especial 'a[*]a' 'a*a' 'aaa'
Varios caracteres 'ab*' 'abcdefg', 'abc' 'cab', 'aab'
Un solo carácter 'a?a' 'aaa', 'a3a', 'aBa' 'aBBBa'
Un solo dígito 'a#a' 'a0a', 'a1a', 'a2a' 'aaa', 'a10a'
Rango de caracteres '[a-z]' 'f', 'p', 'j' '2', '&'
Fuera de un rango '[!a-z]' '9', '&', '%' 'b', 'a'
Distinto de un dígito '[!0-9]' 'A', 'a', '&', '~' '0', '1', '9'
Combinada 'a[!b-m]#' 'An9', 'az0', 'a99' 'abc', 'aj0'
3.4 El Operador I n

Est e operador devuelve aquellos regist ros cuyo cam po indicado coincide con alguno
de los en una list a. Su sint axis es:

expresión [ Not ] I n( valor1, valor2, . . .)

SELECT * FROM Pedidos WHERE Provincia I n ( 'Madrid', 'Barcelona', 'Sevilla') ;


3.5 La cláusula WHERE

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, Salario FROM Em pleados WHERE Salario > 21000;

SELECT I d_Product o, Exist encias FROM Product os


WHERE Exist encias < = Nuevo_Pedido;

SELECT * FROM Pedidos WHERE Fecha_Envio = # 5/ 10/ 94# ;

SELECT Apellidos, Nom bre FROM Em pleados WHERE Apellidos = 'King';

SELECT Apellidos, Nom bre FROM Em pleados WHERE Apellidos Like 'S* ';

SELECT Apellidos, Salario FROM Em pleados WHERE Salario Between 200 And
300;

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
SELECT Apellidos, Salario FROM Em pl WHERE Apellidos Between ' Lon' And 'Tol';

SELECT I d_Pedido, Fecha_Pedido FROM Pedidos WHERE Fecha_Pedido


Bet ween # 1- 1- 94# And # 30- 6- 94# ;

SELECT Apellidos, Nom bre, Ciudad FROM Em pleados WHERE Ciudad


I n ( 'Sevilla', 'Los Angeles', 'Barcelona') ;

4. Agrupam ient o de Regist ros


4. 1 GROUP BY

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.

SELECT I d_Fam ilia, Sum(Stock) FROM Productos GROUP BY I d_Fam ilia;

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

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
núm ero total de registros, incluyendo aquellos que contienen cam pos null. Count(* ) es considerablem ente m ás
rápida que Count(Cam po). No se debe poner el asterisco entre dobles com illas ('* ').

SELECT Count (* ) AS Tot al FROM Pedidos;

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 ( &) .

SELECT Count (FechaEnvío & Transporte) AS Tot al FROM Pedidos;

4. 4 Max, Min

Devuelven el m ínim o o el m áxim o de un conjunto de valores contenidos en un cam po especifico de una


consulta. Su sintaxis es:

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).

SELECT Min( Gastos) AS ElMin FROM Pedidos WHERE Pais = 'España';


SELECT Max( Gastos) AS ElMax FROM Pedidos WHERE Pais = 'España';

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).

SELECT StDev (Gastos) AS Desviacion FROM Pedidos WHERE Pais = 'España';


SELECT StDevP(Gastos) AS Desviacion FROM Pedidos WHERE Pais= 'España';

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).

SELECT Sum( PrecioUnidad * Cantidad) AS Tot al FROM DetallePedido;

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)

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Si la consulta contiene m enos de dos registros, Var y VarP devuelven Null (esto indica que la varianza no puede
calcularse) . Puede utilizar Var y VarP en una expresión de consulta o en una I nstrucción SQL.

SELECT Var(Gastos) AS Varianza FROM Pedidos WHERE Pais = 'España';


SELECT VarP(Gastos) AS Varianza FROM Pedidos WHERE Pais = 'España';

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 Tabla.* FROM Tabla WHERE criterio

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.

DELETE * FROM Em pleados WHERE Cargo = 'Vendedor';

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.

5.2.1 Para insertar un único Registro:

En este caso la sintaxis es la siguiente:

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 ( # ) .

5.2.2 Para insertar Registros de ot ra Tabla:

En este caso la sintaxis es:

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:

I NSERT I NTO Tabla SELECT TablaOrigen.* FROM TablaOrigen

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) .

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
En este tipo de consulta hay que tener especial atención con los cam pos contadores o autonum éricos puesto
que al insertar un valor en un cam po de este tipo se escribe el valor que contenga su cam po hom ólogo en la
tabla origen, no increm entandose com o le corresponde.

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.

La tabla destino u origen puede especificar una tabla o una consulta.

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.

I NSERT I NTO Clientes SELECT Clientes_Viej os.* FROM Clientes_Nuevos;


I NSERT I NTO Em pleados (Nom bre, Apellido, Cargo)
VALUES ( 'Luis', 'Sánchez', 'Becario') ;

I NSERT I NTO Em pleados SELECT Vendedores.* FROM Vendedores


WHERE Fecha_Contratacion < Now( ) - 30;

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 Pedidos SET Pedido = Pedidos * 1.1, Transporte = Transporte * 1.03


WHERE PaisEnvío = 'ES';

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.

UPDATE Em pleados SET Grado = 5 WHERE Grado = 2;


UPDATE Productos SET Precio = Precio * 1.1 WHERE Proveedor = 8 AND Fam ilia = 3;

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.

UPDATE Em pleados SET Salario = Salario * 1.1

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
6 . Tipos de D a t os
Los tipos de datos SQL se clasifican en 13 tipos de datos prim arios y de varios sinónim os válidos reconocidos
por dichos tipos de datos.

Tipos de datos prim arios:

Tipo de Datos Longitud Descripción


Para consultas sobre tabla adjunta de productos de bases de
BINARY 1 byte
datos que definen un tipo de datos Binario.
BIT 1 byte Valores Si/No ó True/False
BYTE 1 byte Un valor entero entre 0 y 255.
COUNTER 4 bytes Un número incrementado automáticamente (de tipo Long)
Un entero escalable entre 922.337.203.685.477,5808 y
CURRENCY 8 bytes
922.337.203.685.477,5807.
DATETIME 8 bytes Un valor de fecha u hora entre los años 100 y 9999.
Un valor en punto flotante de precisión simple con un
rango de -3.402823*10 38 a -1.401298*10-45 para valores
SINGLE 4 bytes
negativos, 1.401298*10-45 a 3.402823*10 38 para valores
positivos, y 0.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Un valor en punto flotante de doble precisión con un rango
de -1.79769313486232*10308 a -4.94065645841247*10-324
DOUBLE 8 bytes
para valores negativos, 4.94065645841247*10-324 a
1.79769313486232*10 308 para valores positivos, y 0.
SHORT 2 bytes Un entero corto entre -32,768 y 32,767.
LONG 4 bytes Un entero largo entre -2,147,483,648 y 2,147,483,647.
1 byte por
LONGTEXT De cero a un máximo de 1.2 gigabytes.
carácter
Según se
LONGBINARY De cero 1 gigabyte. Utilizado para objetos OLE.
necesite
1 byte por
TEXT De cero a 255 caracteres.
caracter

La siguiente tabla recoge los sinonim os de los tipos de datos definidos:

Tipo de Dato Sinónimos


BINARY VARBINARY
BOOLEAN
LOGICAL
BIT
LOGICAL1
YESNO
BYTE INTEGER1
COUNTER AUTOINCREMENT
CURRENCY MONEY
DATE
DATETIME TIME
TIMESTAMP
FLOAT4
SINGLE IEEESINGLE
REAL
FLOAT
FLOAT8
DOUBLE IEEEDOUBLE
NUMBER
NUMERIC
INTEGER2
SHORT
SMALLINT

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
INT
LONG INTEGER
INTEGER4
GENERAL
LONGBINARY
OLEOBJECT
LONGCHAR
LONGTEXT MEMO
NOTE
ALPHANUMERIC
CHAR
TEXT CHARACTER
STRING
VARCHAR
VARIANT (No Admitido) VALUE

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.

Puede utilizar tres form as de sintaxis para crear una subconsulta:

com paración [ ANY | ALL | SOME] ( instrucción sql)


expresión [ NOT] I N (instrucción sql)
[ NOT] EXI STS (instrucción sql)

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 expresión por la que se busca el conjunto resultante de la subconsult a.

inst rucción sql

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.:

SELECT * FROM Productos WHERE PrecioUnidad > ANY


( SELECT PrecioUnidad FROM DetallePedido WHERE Descuento > = 0 .25);

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
El predicado ALL se utiliza para recuperar únicam ente aquellos registros de la consulta principal que satisfacen
la com paración con todos los registros recuperados en la subconsulta. Si se cam bia ANY por ALL en el ej em plo
anterior, la consulta devolverá únicam ente aquellos productos cuyo precio unitario sea m ayor que el de todos
los productos vendidos con un descuento igual o m ayor al 25 por ciento. Esto es m ucho m ás restrictivo.

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.:

SELECT * FROM Productos WHERE I DProducto I N


( SELECT I DProducto FROM DetallePedido WHERE Descuento > = 0.25) ;

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: :

SELECT Apellido, Nom bre, Titulo, Salario FROM Em pleados AS T1


WHERE Salario > = (SELECT Avg(Salario) FROM Em pleados
WHERE T1.Titulo = Em pleados.Titulo) ORDER BY Titulo;

En el ejem plo anterior , la palabra reservada AS es opcional.

SELECT Apellidos, Nom bre, Cargo, Salario FROM Em pleados


WHERE Cargo LIKE "Agente Ven* " AND Salario > ALL ( SELECT Salario FROM
Em pleados WHERE ( Cargo LIKE "* Jefe* ") OR (Cargo LIKE "* Director* ") ) ;

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.

SELECT DI STI NCTROW Nom breProducto, Precio_Unidad FROM Productos


WHERE (Precio_Unidad = (SELECT Precio_Unidad FROM Productos WHERE
Nom bre_Producto = "Alm íbar anisado");

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.

SELECT DI STI NCTROW Nom bre_Contacto, Nom bre_Com pañia, Cargo_Contacto,


Telefono FROM Clientes WHERE ( I D_Cliente I N (SELECT DI STI NCTROW
I D_Cliente FROM Pedidos WHERE Fecha_Pedido > = # 04/ 1/ 93# < # 07/ 1/ 93# );

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.

SELECT Nom bre, Apellidos FROM Em pleados AS E WHERE EXI STS


( SELECT * FROM Pedidos AS O WHERE O.I D_Em pleado = E.I D_Em pleado) ;

Selecciona el nom bre de todos los em pleados que han reservado al m enos un pedido.

SELECT DI STI NCTROW Pedidos.I d_Producto, Pedidos.Cantidad,


( SELECT DI STI NCTROW Productos.Nom bre FROM Productos WHERE
Productos.I d_Producto = Pedidos.I d_Producto) AS ElProducto FROM
Pedidos WHERE Pedidos.Cantidad > 150 ORDER BY Pedidos.I d_Producto;

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.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
8 . Con su lt a s de Re fe r e n cia s Cr u za da s
Una consulta de referencias cruzadas es aquella que nos perm ite visualizar los datos en filas y en colum nas,
estilo tabla, por ej em plo:

Producto / Año 1996 1997

Pantalones 1.250 3.000

Camisas 8.560 1.253

Zapatos 4.369 2.563

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.

La sintaxis para este tipo de consulta es la siguiente:

TRANSFORM función agregada instrucción select PI VOT cam po pivot


[ I N ( valor1[ , valor2[ , ...] ] ) ]

En donde:

función agregada

Es una función SQL agregada que opera sobre los datos seleccionados.

inst rucción select

Es una instrucción SELECT.

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.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
TRANSFORM es opcional pero si se incluye es la prim era instrucción de una cadena SQL. Precede a la
instrucción SELECT que especifica los cam pos utilizados com o encabezados de fila y una cláusula GROUP BY
que especifica el agrupam iento de las filas. Opcionalm ente puede incluir otras cláusulas com o por ejem plo
WHERE, que especifica una selección adicional o un criterio de ordenació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

TRANSFORM Sum( Cant idad) AS Ventas SELECT Producto, Cantidad FROM


Pedidos WHERE Fecha Between # 01-01-98# And # 12-31-98# GROUP BY Producto
ORDER BY Producto PI VOT DatePart ("m", Fecha) ;

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.

Estructura y datos de las tablas:

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

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
1 12/12/1997 8
2 15/12/1997 520
3 17/10/1997 1250
Para resolver la consulta planteam os la siguiente consulta:

TRANSFORM Sum( Pedidos.Cantidad) AS Resultado SELECT Nom bre AS Producto,


Pedidos.I d AS Código, Sum( Pedidos.Cantidad) AS TOTAL, Avg(Pedidos.Cant idad)
AS Media FROM Pedidos I NNER JOI N Artículos ON Pedidos.I d = Artículos.I d
GROUP BY Pedidos.I d, Artículos.Nom bre PI VOT Ye a r( Fecha) ;

y obtenem os el siguiente resultado:

Producto Código TOTAL Media 1996 1997


Zapatatos 1 348 87 300 48
Pantalones 2 955 238,75 375 580
Blusas 3 1940 485 620 1320
Com entarios a la consulta:

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.

Otras posibilidades de fecha de la cláusula pivot son las siguientes:

1. Para agrupam iento por Trim estres


PI VOT "Tri " & DatePart( "q",[ Fecha] ) ;

2. Para agrupam iento por m eses (sin tener en cuenta el año)


PI VOT Form at([ Fecha] ,"m m m ") I n ("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov",
"Dic") ;

3. Para agrupar por días


PI VOT Form at( [ Fecha] ,"Short Date") ;

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
9 . Consult as de Unión I nt ernas
Las vinculaciones entre tablas se realiza m ediante la cláusula I NNER que com bina registros de dos tablas
siem pre que haya concordancia de valores en un cam po com ún. Su sintaxis es:

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.

cam po1 , cam po2

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:

SELECT Nom bre_Categoría, Nom breProducto


FROM Categorias I NNER JOI N Productos
ON Categorias.I DCategoria = Productos.I DCategoria;

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:

SELECT cam pos


FROM tabla1 I NNER JOI N tabla2
ON tb1.cam po1 com p tb2.cam po1 AND
ON tb1.cam po2 com p tb2.cam po2) OR
ON tb1.cam po3 com p tb2.cam po3) ] ;

Tam bién puede anidar instrucciones JOI N utilizando la siguiente sintaxis:

SELECT cam pos


FROM tb1 I NNER JOI N
(tb2 I NNER JOI N [ ( ] tb3
[ I NNER JOI N [ ( ]tablax [ I NNER JOI N ...)]
ON tb3.cam po3 com p t bx.cam pox) ]
ON tb2.cam po2 com p t b3.cam po3)
ON tb1.cam po1 com p t b2.cam po2;

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

SELECT DI STI NCTROW Sum( [ Precio unidad] * [ Cantidad] ) AS [ Ventas] ,


[ Nom bre] & " " & [ Apellidos] AS [ Nom bre com pleto] FROM [ Detalles de pedidos] ,
Pedidos, Em pleados, Pedidos I NNER JOI N [ Detalles de pedidos] ON Pedidos.
[ I D de pedido] = [ Detalles de pedidos] .[ I D de pedido] , Em pleados I NNER JOI N

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Pedidos ON Em pleados.[ I D de em pleado] = Pedidos.[ I D de em pleado] GROUP BY
[ Nom bre] & " " & [ Apellidos] ;

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.

1 0 . Consult as de Unión Ext ernas


Se utiliza la operación UNI ON para crear una consulta de unión, com binando los resultados de dos o m ás
consultas o tablas independientes. Su sintaxis es:

[ TABLE] consulta1 UNI ON [ ALL] [ TABLE]


consulta2 [ UNI ON [ ALL] [ TABLE] consultan [ ... ] ]

En donde:

consult a1 , consult a2 , consult an

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Son instrucciones SELECT, el nom bre de una consulta alm acenada o el nom bre de una tabla alm acenada
precedido por la palabra clave TABLE.

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:

TABLE [ Nuevas Cuentas] UNI ON ALL SELECT * FROM Clientes


WHERE [ Cantidad pedidos] > 1000;

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.

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"

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

TABLE [ Lista de clientes] UNI ON TABLE [ Lista de proveedores]

Recupera los nom bres y códigos de todos los proveedores y clientes

1 1 . Est r uct ur a s de la s Ta bla s


11.1 Creación de Tablas Nuevas

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:

CREATE TABLE tabla (cam po1 tipo (tam año) índice1 ,


cam po2 t ipo (t am año) índice2 , ...,
índice m ulticam po , ... )

En donde:

Parte Descripción
tabla Es el nombre de la tabla que se va a crear.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
campo1 Es el nombre del campo o de los campos que se van a crear en la nueva
campo2 tabla. La nueva tabla debe contener, al menos, un campo.
tipo Es el tipo de datos de campo en la nueva tabla. (Ver Tipos de Datos)
tamaño Es el tamaño del campo sólo se aplica para campos de tipo texto.
índice1 Es una cláusula CONSTRAINT que define el tipo de indice a crear. Esta
índice2 cláusula en opcional.
Es una cláusula CONSTRAINT que define el tipo de indice
índice
multicampos a crear. Un índice multi campo es aquel que está indexado
multicampos
por el contenido de varios campos. Esta cláusula en opcional.

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.

CREATE TABLE Em pleados (Nom bre TEXT ( 10) , Apellidos TEXT,


Fecha_Nacim iento DATETI ME) CONSTRAINT I ndiceGeneral UNI QUE
([ Nom bre] , [ Apellidos] , [Fecha_Nacim iento] ) ;

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.

CREATE TABLE Em pleados (I D I NTEGER CONSTRAI NT I ndicePrim ario PRI MARY,


Nom bre TEXT, Apellidos TEXT, Fecha_Nacim iento DATETI ME) ;

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.

11.2 La cláusula CONSTRAI NT

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.

Para los índices de cam pos únicos:

CONSTRAI NT nom bre { PRI MARY KEY | UNI QUE | REFERENCES t abla ext erna
[ ( cam po externo1, cam po externo2) ] }

Para los índices de cam pos m últiples:

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

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
referenciados en refN
campos Es el nombre del campo o de los campos de la tabla externa especificados
externos por ref1, ref2, ..., refN
Si se desea crear un índice para un cam po cuando se esta utilizando las instrucciones ALTER TABLE o CREATE
TABLE la cláusula CONTRAI NT debe aparecer inm ediatam ente después de la especificación del cam po
indexeado.

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 .

11.3 Creación de Í ndices

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:

CREATE [ UNI QUE ] I NDEX índice


ON tabla (cam po [ ASC| DESC] [ , cam po [ ASC| DESC] , ...] )
[ WI TH { PRI MARY | DI SALLOW NULL | I GNORE NULL } ]

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.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Asigna al índice la categoría de clave principal, en cada tabla sólo puede
PRIMARY existir un único indice que sea "Clave Principal". Si un índice es clave
principal implica que que no puede contener valores nulos ni duplicados.
Se puede utilizar CREATE I NDEX para crear un pseudo índice sobre una tabla adjunta en una fuente de datos
ODBC tal com o SQL Server que no tenga todavía un índice. No necesita perm iso o tener acceso a un servidor
rem oto para crear un pseudo índice, adem ás la base de datos rem ota no es consciente y no es afectada por el
pseudo índice. Se utiliza la m ism a sintaxis para las tabla adjunta que para las originales. Esto es especialm ente
útil para crear un índice en una tabla que sería de sólo lectura debido a la falta de un índice.

CREATE I NDEX MiI ndice ON Em pleados (Prefij o, Telefono) ;

Crea un índice llam ado MiI ndice en la tabla em pleados con los cam pos Prefij o y Telefono.

CREATE UNI QUE I NDEX MiI ndice ON Em pleados (I D) WI TH DI SALLOW NULL;

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.

11.4 Modificar el Diseño de una Tabla

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.

ALTER TABLE Em pleados ADD COLUMN Salario CURRENCY;

Agrega un cam po Salario de tipo Moneda a la tabla Em pleados.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
ALTER TABLE Em pleados DROP COLUMN Salario;

Elim ina el cam po Salario de la tabla Em pleados.

ALTER TABLE Pedidos ADD CONSTRAINT RelacionPedidos FOREI GN KEY


( I D_Em pleado) REFERENCES Em pleados (I D_Em pleado);

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.

ALTER TABLE Pedidos DROP CONSTRAINT RelacionPedidos;

Elim ina el índide de la tabla Pedidos.

1 2 Consult as con Parám et ros


Las consultas con parám etros son aquellas cuyas condiciones de búsqueda se definen m ediante parám etros. Si
se ejecutan directam ente desde la base de datos donde han sido definidas aparecerá un m ensaje solicitando el
valor de cada uno de los parám etros. Si deseam os ejecutarlas desde una aplicación hay que asignar prim ero el
valor de los parám etros y después ej ecutarlas. Su sintaxis es la siguiente:

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.

PARAMETERS Precio_Minim o Currency, Fecha_I nicio DateTime ;


SELECT I DPedido, Cantidad FROM Pedidos WHERE Precio > Precio_Minim o
AND FechaPedido > = Fecha_I nicio;

El ejem plo siguiente m uestra com o utilizar los parám etros en el program a de Visual Basic:

Public Sub GeneraConsulta( )

Dim SQL As String


Dim Qd As QueryDef
Dim Rs As Recordset

SQL = "PARAMETERS Precio_Minim o Currency, Fecha_I nicio DateTim e; "


SQL = SQL & "SELECT I DPedido, Cantidad FROM Pedidos WHERE Precio > "
SQL = SQL & "Precio_Minim o AND FechaPedido > = Fecha_I nicio; "

Set Qd = BaseDatos.CreateQueryDef( MiConsulta, SQL)

Qd.Param eters!Precio_Minim o = 2
Qd.Param eters!FechaI nicio = # 31/ 12/ 95#

Set Rs = Qd.OpenRecordset ( )

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
End Sub

Ejem plo:

PARAMETERS [ Escriba los Apellidos: ] Text ; SELECT * FROM Em pleados


WHERE [ Escriba los Apellidos: ] = [ Apellidos] ;

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:

FROM Tabla I N '[ dBASE I V; DATABASE= C: \ DBASE\ DATOS\ VENTAS; ] ';


FROM Tabla I N 'C: \ DBASE\ DATOS\ VENTAS' 'dBASE I V; '

Acceso a una base de dat os ext erna de Microsoft Access:

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.

Acceso a una base de dat os ext erna de dBASE I I I o I V:

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; '.

Acceso a una base de dat os de Paradox 3 .x o 4 .x :

SELECT I DCliente FROM Clientes IN 'C: \ PARADOX\ DATOS\ VENTAS'


'Paradox 4.x; ' WHERE I DCliente Like 'A* ';

Para recuperar datos de una tabla de Paradox versión 3.x, hay que sustituir 'Paradox 4.x; ' por
'Paradox 3.x; '.

Acceso a una base de dat os de Bt r ie ve :

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.

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
1 4 . Om it ir los Perm isos de Ej ecución
En entornos de bases de datos con perm isos de seguridad para grupos de trabajo se puede utilizar la cláusula
WI TH OWNERACCESS OPTI ON para que el usuario actual adquiera los derechos de propietario a la hora de
ej ecutar la consulta. Su sintaxis es:

instrucción sql WI TH OWNERACCESS OPTI ON

SELECT Apellido, Nombre, Salario FROM Em pleados ORDER BY Apellido


WI TH OWNERACCESS OPTI ON;

Esta opción requiere que esté declarado

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.

PROCEDURE Lista_Categorias; SELECT DI STI NCTROW Nom bre_Categoria,


I D_Categoría FROM Categorias ORDER BY Nom bre_Categoria;

Asigna el nom bre Lista_de_categorías a la consulta y la ejecuta.

PROCEDURE Resum en Fecha_I nicio DateTim e, Fecha_Final DateTim e; SELECT


DI STI NCTROW Fecha_Envio, I D_Pedido, I m porte_Pedido, Form at (Fecha_Envio, "yyyy")
AS Año FROM Pedidos WHERE Fecha_Envio Between Fecha_I nicio And Fecha_Final;

Asigna el nom bre Resum en a la consulta e incluye dos parám etros.

1 6 AN EXOS

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
16.1 Resolución de Problem as

16.1.1 Buscar I nform ación duplicada en un cam po de una tabla.

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:

SELECT DI STI NCTROW Lista de Cam pos a Visualizar FROM Tabla


WHERE Cam poDeBusqueda I n (SELECT Cam poDeBusqueda FROM Tabla As psudónimo
GROUP BY Cam poDeBusqueda HAVI NG Count(* )> 1 ) ORDER BY Cam poDeBusqueda;

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:

SELECT DI STI NCTROW Em pleados.Nom bre, Em pleados.I dEm pleado


FROM Em pleados WHERE Em pleados.Nom bre I n ( SELECT Nom bre FROM
Em pleados As Tm p GROUP BY Nom bre HAVI NG Count(* )> 1)
ORDER BY Em pleados.Nom bre;

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,

SELECT DI STI NCTROW Productos.I dProducto, Productos.Nom bre FROM Productos


LEFT JOI N Pedidos ON Productos.I dProducto = Pedidos.I dProduct WHERE
( Pedidos.I dProducto Is Null) AND ( Pedidos.Fecha Between # 01-01-98# And
# 01-30-98# );

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.

16.2 Utlizar SQL desde Visual Basic

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:

Dim SQL as String


Dim RS as recordset

SQL = "SELECT * FROM Em pleados; "


Set RS=MiBaseDatos.OpenRecordSet ( SQL)

Si la consula de selección se encuentra alm acenada en una consulta de la base de datos:

Set RS=MiBaseDatos.OpenRecordset ( "MiConsulta")

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:

Dim SQL as string

SQL = "DELETE * FROM Em pleados WHERE Categoria = 'Ordenanza'; "


MiBaseDatos.Execute SQL

16.3 Funciones de Visual Basic utilizables en una I nstrucción SQL

Función Sintaxis Descripción


Now Variable= Now Devuelve la fecha y la hora actual del sistema
Date Variable=Date Devuelve la fecha actual del sistema
Time Variable=Time Devuelve la hora actual del sistema

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Devuelve los cuatro dígitos correspondientes al
Year Variable=Year(Fecha)
año de Fecha
Month Variable=Month(Fecha) Devuelve el número del mes del parámetro fecha.
Devuelve el número del día del mes del parámetro
Day Variable=Day(Fecha)
fecha.
Devuelve un número entero que representa el día
Weekday Variable=Weekday(Fecha)
de la semana del parámetro fecha.
Devuelve un número entre 0 y 23 que representa
Hour Variable=Hour(Hora)
la hora del parámetro Hora.
Devuelve un número entre 0 y 59 que representa
Minute Variable=Minute(Hora)
los minutos del parámetro hora.
Devuelve un número entre 0 y 59 que representa
Second Variable=Second(Hora)
los segundos del parámetro hora.
DatePart

Esta función devuelve una parte señalada de una fecha concreta. Su sintaxis es:

DatePart( Parte, Fecha, Com ienzoSem ana, Com ienzoAño)

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

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
7 Sábado

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.

16.4 Evaluar valores antes de ejecutar la Consuta.

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.

SELECT * Total FROM Em pleados WHERE Apellido =


iff(TX_Apellido.Text < > '', TX_Apellido.Text, * ) ;

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.

SELECT Fecha, Producto, Cantidad, ( iif( CodigoPostal> = 28000 And


CodigoPostal < = 28999,'Madrid','Nacional') ) AS Destino FROM Pedidos;

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.

16.5 Un Pequeño Manual de Estilo

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:

1. Las cláusulas siem pre las escribo con Mayúsculas.

2. Los operadores lógicos de sentencias siem pre con Mayúsculas.

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] ;

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug
Mis m as sinceros agradecim ient os a Cla u dio Ca sa r e s por est e excelent e t ut or ial

Descargado de ASP-ADO Tutoriales de la Cueva


http://usuarios.tripod.es/smaug

ASP-ADO Tutoriales de la Cueva


Pedro Rufo
http.//usuarios.tripod.es/smaug

También podría gustarte