Indice
1.
Introducción
2. Estructura de las tablas usadas en los
ejemplos
3. Select – SQL en visual FOX PRO
6.0
4. Componentes del
SQL
5. Criterios de
selección
6. Intervalos de
valores
7. El operador like
8. Agrupamiento de
registros
9. Bibliografía
La documentación acerca del uso de los
comandos SQL
en Visual Fox Pro
es limitada. Tomando esto como referencia he aquí un
primer material de trabajo que espero sirva de inicio a los
estudiantes y programadores que trabajan con este manejador de
bases de datos
relaciónales.
Se ha tomado como base bibliográfica la Ayuda
HTML del MSDN
Library y se ha enriquecido las explicaciones con gráficas de los resultados de las consultas
que se exponen como ejemplos.
Es importante destacar que trabajo presenta ejemplos del
uso del comando SELECT – SQL en Visual Fox Pro 6.0 lo
más sencillas posibles, buscando orientar a los ya
conocedores pero también ayudar a aquellos que se
están iniciando en el mundo de la programación.
Sin duda luego del estudio de los ejemplos aquí citados se
les ocurrirán unos cada vez más complejos y
vistosos, espero que los hagan llegar a este servidor
así como también sugerencias del acerca del trabajo
a través del correo
electrónico para aprender también yo de
ustedes.
Como recomendación final sería interesante que
crearan las tablas que se utilizan en los ejemplos y fueran
trabajando en forma paralela en la medida que van leyendo el
material, considero que es la mejor manera de aprender.
A todos mis saludos y Manos a la Obra….
2. Estructura de
las tablas usadas en los ejemplos
3. Select – SQL en
visual FOX PRO 6.0
Visual FoxPro admite
comandos de Lenguaje de
consultas estructurado SQL. Los comandos SQL de Visual FoxPro
utilizan la tecnología Rushmore
para optimizar el rendimiento y puede utilizarse un sólo
comando SQL para sustituir a varios comandos Visual
FoxPro.
Visual FoxPro admite los siguientes comandos SQL:
SELECT – SQL: Especifica los criterios en los que se basa una
consulta y ejecuta la consulta. Visual FoxPro interpreta la
consulta y recupera los datos
especificados de la tabla o tablas. El comando SELECT se
construye dentro de Visual FoxPro como cualquier otro comando de
Visual FoxPro. Puede crear una consulta con el comando
SELECT
- En la ventana Comandos.
- En un programa Visual
FoxPro (como cualquier otro comando de Visual
FoxPro). - En el Diseñador de consultas.
ALTER TABLE – SQ: Modifica una tabla existente.
Puede modificar el nombre, el tipo, la precisión, la
escala, la
admisión de un valor nulo y
las reglas de integridad referencial para cada campo de la
tabla.
CREATE CURSOR – SQL: Crea una tabla temporal. Cada campo de
la tabla temporal se define con un nombre, tipo,
precisión, escala, soporte de valor nulo y reglas de
integridad referencial. Las definiciones pueden obtenerse del
propio comando o de una matriz.
CREATE TABLE – SQL: Crea una tabla. Cada campo de la tabla
nueva se define con un nombre, tipo, precisión, escala,
aceptación de valores nulos
y reglas de integridad referencial. Estas definiciones pueden
obtenerse del propio comando o de una matriz.
DELETE – SQL: Marca para su
eliminación los registros de una
tabla mediante la sintaxis de SQL.
INSERT – SQL: Anexa un registro al final
de una tabla existente. El nuevo registro incluye los datos
mostrados en el comando INSERT o incluidos en la matriz
especificada.
UPDATE – SQL: Actualiza los registros de una tabla. Los
registros se pueden actualizar según los resultados de una
instrucción SELECT – SQL
El propósito de este material es brindar al estudiante
ejemplos que le permitan utilizar SELECT – SQL en el
diseño
de consultas usando para ello una o más tablas
diseñadas en Visual Fox Pro.
El lenguaje SQL está compuesto por comandos,
cláusulas, operadores y funciones de
agregado. Estos elementos se combinan en las instrucciones para
crear, actualizar y manipular las bases de datos.
Comandos
Existen dos tipos de comandos SQL:
- los DLL que permiten crear y definir nuevas bases de
datos, campos e índices. - los DML que permiten generar consultas para ordenar,
filtrar y extraer datos de la base de
datos.
Comandos DLL | |
Comando | Descripción |
CREATE | Utilizado para crear nuevas tablas, campos e |
DROP | Empleado para eliminar tablas e |
ALTER | Utilizado para modificar las tablas agregando |
Comandos DML | |
Comando | Descripción |
SELECT | Utilizado para consultar registros de la base de |
INSERT | Utilizado para cargar lotes de datos en la base de |
UPDATE | Utilizado para modificar los |
DELETE | Utilizado para eliminar registros de una tabla de |
Cláusulas
Las cláusulas son condiciones de modificación
utilizadas para definir los datos que desea seleccionar o
manipular.
Cláusula | Descripción |
FROM | Utilizada para especificar la tabla de la cual se |
WHERE | Utilizada para especificar las condiciones que |
GROUP BY | Utilizada para separar los registros seleccionados |
HAVING | Utilizada para expresar la condición que |
ORDER BY | Utilizada para ordenar los registros seleccionados |
Operadores Lógicos
Operador | Uso |
AND | Es el "y" lógico. Evalúa dos |
OR | Es el "o" lógico. Evalúa dos |
NOT | Negación lógica. Devuelve el valor contrario |
Operadores de Comparación
Operador | Uso |
< | Menor que |
> | Mayor que |
<> | Distinto de |
<= | Menor ó Igual que |
>= | Mayor ó Igual que |
= | Igual que |
BETWEEN | Utilizado para especificar un intervalo de |
LIKE | Utilizado en la comparación de un |
In | Utilizado para especificar registros de una base |
CONSULTAS BÁSICAS
La sintaxis básica de una consulta de selección
es la siguiente:
SELECT Campos FROM Tabla
En donde campos es la lista de campos que se deseen recuperar y
tabla es el origen de los mismos, por ejemplo:
SELECT Nombre, Telefono FROM Clientes
Esta consulta devuelve una visualización de la
tabla Clientes con el campo nombre y teléfono. Esta visualización en VFP
es un browse pero no es necesario agregar esta orden, SQL lo
invoca automáticamente. Vea el orden de los campos en el
browse.
Ordenar Los Registros
Adicionalmente se puede especificar el orden en que se desean
recuperar los registros de las tablas mediante la cláusula
ORDER BY Lista de Campos. En donde Lista de campos representa los
campos a ordenar.
Ejemplo:
SELECT Cod_Postal, Nombre, Telefono FROM Clientes ORDER BY
Nombre
Esta consulta devuelve los campos CodigoPostal, Nombre,
Telefono de la tabla Clientes ordenados por el campo Nombre.
Se pueden ordenar los registros por más de un campo, como
por ejemplo:
SELECT CodigoPostal, Nombre, Telefono FROM Clientes
ORDER BY Cod_Postal, Nombre
Incluso se puede especificar el orden de los registros:
ascendente mediante la cláusula (ASC -se toma este valor
por defecto) ó descendente (DESC)
SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY
CodigoPostal, nombre ASC
Consultas Con Predicado
El predicado se incluye entre la cláusula y el primer
nombre del campo a recuperar, los posibles predicados son:
Predicado | Descripción |
* | Devuelve todos los campos de la tabla |
TOP | Devuelve un determinado número de registros |
DISTINCT | Omite los registros cuyos campos seleccionados |
DISTINCTROW | Omite los registros duplicados basándose en |
* (ALL)
Si no se incluye ninguno de los predicados se asume ALL.
El Motor de base de
datos selecciona todos los registros que cumplen las
condiciones de la instrucción SQL. No se conveniente
abusar de este predicado ya que obligamos al motor de la base de
datos a analizar la estructura de la tabla para averiguar los
campos que contiene, es mucho más rápido indicar el
listado de campos deseados.
SELECT * FROM Clientes
TOP
Devuelve un cierto número de registros que entran entre al
principio o al final de un rango especificado por una
cláusula ORDER BY. Supongamos que queremos recuperar los
nombres de los tres primeros clientes tomando como referencia un
orden ASC para el campo cedula
SELECT TOP 3 cedula, Nombre FROM clientes ORDER BY
cedula DESC
El resultado de la consulta mostrará en pantalla los tres
primeros registros que correspondan al orden. Observe en la
figura los números de cedula.
Como la sentencia ORDER BY cedula DESC indica que se
deben ordenar en orden descendente los registros, se muestran los
tres primeros contando del último en adelante.
Observe el cambio en el
resultado de la consulta si ORDER BY cedula ASC
SELECT TOP 3 cedula, Nombre FROM clientes ORDER BY cedula
ASC
El orden establecido para el campo cedula es ASC, por lo
tanto toma los tres primeros registros en forma ascendente.
Si no se incluye la cláusula ORDER BY, la consulta
devolverá un conjunto arbitrario de 3registros de la tabla
Clientes .El predicado TOP no elige entre valores iguales. Si se
incluye la palabra clave PERCENT, se redondeará al
número entero más alto el número de columnas
devuelto en el resultado. Los valores permitidos para
nExpr cuando se incluye la palabra clave PERCENT son 0.01
a 99.99.
Ejemplo: La tabla Clientes tiene un total de 10
registros, si se quiere visualizar en pantalla un 20% ordenado
por cedula en orden ascendente la línea de código
será:
SELECT TOP 20 PERCENT cedula, nombre FROM Clientes ORDER BY
cedula ASC
Y el resultado de la búsqueda como se puede apreciar son
dos registros correspondientes al 20 % de 10 que hay en
total
El valor que va a continuación de TOP debe ser un
Integer sin signo.
DISTINCT
Omite los registros que contienen datos duplicados en los campos
seleccionados. Para que los valores de cada campo listado en la
instrucción SELECT se incluyan en la consulta deben ser
únicos.
Por ejemplo, suponga que se desea saber los códigos de
área de los números de teléfono de los
clientes almacenados en la tabla. Es de supones que con que
aparezca una sola vez 0274 o 0416 es suficiente así
existan otros clientes con el mismo código de
área.
SELECT DISTINCT SUBSTR(telefono, 1, 4) from clientes
En vista que el código de área y el número
del teléfono están integrados en un atributo
atómico, se debe extraer el dato que se necesita para la
consulta usando la Función
SUBSTR(), y así en la consulta se podrán observar
los diferentes códigos de área que conforman los
telefonos de los clientes.
Vista de la consulta usando DISTINCT
Con otras palabras el predicado DISTINCT devuelve
aquellos registros cuyos campos indicados en la cláusula
SELECT posean un contenido diferente. El resultado de una
consulta que utiliza DISTINCT no es actualizable y no refleja los
cambios subsiguientes realizados por otros usuarios.
En el ejemplo anterior también se puede apreciar
como se mezcla de forma eficiente código de SQL con el de
VFP y se consiguen mejores resultados.
Se vio la forma de recuperar los registros de las
tablas, las formas empleadas devolvían todos los registros
de la mencionada tabla. A lo largo de este apartado se
estudiarán las posibilidades de filtrar los registros con
el fin de recuperar solamente aquellos que cumplan una o unas
condiciones preestablecidas
WHERE
Indica a Visual FoxPro que incluya únicamente ciertos
registros en el resultado de la consulta. WHERE es necesario para
recuperar datos de varias tablas. Para las condiciones de filtro
se puede utilizar cualquiera de los siguientes
operadores:
Operador | Comparación |
= | Igual |
== | Exactamente igual |
LIKE | SQL LIKE |
<> | Distinto de |
> | Mayor que |
>= | Mayor o igual que |
< | Menor que |
<= | Menor o igual que |
Cuando utiliza el operador = con cadenas, actúa
de forma distinta dependiendo del ajuste de SET ANSI. Cuando SET
ANSI está OFF, Visual FoxPro trata las comparaciones de
cadenas en la forma habitual en Xbase. Cuando SET ANSI
está a ON, Visual FoxPro sigue las normas ANSI para
comparaciones de cadenas. Vea SET ANSI y SET EXACT para obtener
información adicional sobre la forma en que
Visual FoxPro realiza las comparaciones de cadenas.
Ejemplo 1
Suponga que deseamos conocer todos los clientes Movilnet
(código 0416) de la tabla y además queremos
enmascarar el titulo del campo. Para esto la línea de
código SQL será:
SELECT nombre AS Clientes_MovilNet FROM clientes WHERE substr
(telefono,1,4) = '0416'
SELECT nombre = selecciona el campo nombre de la tabla
AS Clientes_Movilnet = crea la mascara para la consulta. Se debe
tomar en cuenta que no pueden existir espacios en blanco en la
cadena de caracteres.
FROM clientes = establece el origen de los datos para la
consulta.
WHERE substr (telefono, 1,4) = '0416' => criterio de filtro
para la consulta.
Ejemplo 2
Se necesita conocer el nombre y el teléfono de los
clientes con crédito
hasta Bs. 100.000,00
SELECT nombre AS Credito_Hasta_100000, telefono FROM clientes
WHERE credito <= 100000
Ejemplo 3
Diseñar una consulta SQL de todos los clientes foraneos
(codigo postal
diferente de 5101).
Para resolver este problema usaremos la cláusula IN la
cual indica que el campo debe contener uno de los valores antes
de que el registro se incluya en los resultados de la consulta.
Pero para este caso en particular la negaremos con NOT
SELECT NOMBRE AS CLIENTES_FORANEOS, TELEFONO, COD_POSTAL
FROM CLIENTES;
WHERE COD_POSTAL NOT IN ('5101')
Observe el resultado de la consulta, están todos
los clientes a excepción de los que tienen como
código postal 5101.
El operador BETWEEN
Para indicar que deseamos recuperar los registros según el
intervalo de valores de un campo emplearemos el operador BETWEEN
cuya sintaxis es:
Campo [NOT] BETWEEN valor1 AND valor2 (la condición Not es
opcional)
En este caso la consulta devolvería los registros que
contengan en "campo" un valor incluido en el intervalo valor1,
valor2 (ambos inclusive). Si anteponemos la condición Not
devolverá aquellos valores no incluidos en el
intervalo.
Ejemplo 1
Se necesita conocer los datos de los clientes que tienen una
carta de
crédito entre dos y tres millones de Bolívares.
La línea de código SQL será:
SELECT NOMBRE AS CREDITO_ENTRE_200000_Y_3000000, TELEFONO,
COD_POSTAL,; CREDITO FROM CLIENTES WHERE CREDITO BETWEEN 2000000
AND 3000000
Se utiliza para comparar una expresión de cadena
con un modelo en una
expresión SQL. Su sintaxis es:
Expresión LIKE modelo
En donde expresión es una cadena modelo o campo contra el
que se compara expresión. Se puede utilizar el operador
LIKE para encontrar valores en los campos que coincidan con el
modelo especificado. Por modelo puede especificar un valor
completo (Ana María), o se pueden utilizar caracteres
comodín para encontrar un rango de valores (LIKE
‘An%’).
El operador LIKE se puede utilizar en una expresión para
comparar un valor de un campo con una expresión de cadena.
Por ejemplo, si introduce LIKE ‘C%’ en una consulta
SQL, la consulta devuelve todos los valores de campo que
comiencen por la letra C. En una consulta con parámetros,
puede hacer que el usuario escriba el modelo que se va a
utilizar.
Puede utilizar el signo de porcentaje (%) y subrayado
( _ ) como parte de la expresión. El signo de
porcentaje representa a cualquier secuencia de caracteres
desconocidos en la cadena. El subrayado representa un solo
carácter desconocido en la
cadena.
Ejemplo
Listar por pantalla todos los clientes cuyos nombres comiencen
con la letra ‘I’
La línea SQL será:
SELECT NOMBRE AS CLIENTES_CUYOS_NOMBRES_EMPIEZAN_POR_I FROM
CLIENTES; WHERE UPPER (NOMBRE) LIKE
'I%'
Observe el resultado de la consulta, no importa que siga
a la letra ‘I’ en el campo nombre, SQL lo muestra en
pantalla.
GROUP BY ColumnaGrupo [,
ColumnaGrupo…]
Agrupa las filas de la consulta basándose en los valores
de una o más columnas. ColumnaGrupo puede ser el
nombre de un campo normal de una tabla, o un campo que incluya
una función de campo SQL, o una expresión
numérica indicando la posición de la columna en la
tabla resultado (la columna más a la izquierda tiene el
número 1).
Su sintaxis es:
SELECT campos FROM tabla WHERE criterio GROUP BY campos del
grupo HAVING
condición
Los valores Null en los campos GROUP BY se agrupan y no
se omiten. 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 HAVING para filtrar
los registros una vez agrupados.
A menos que contenga un dato Memo u Objeto OLE , un campo de la
lista de campos GROUP BY puede referirse a cualquier campo de las
tablas que aparecen en la cláusula FROM, incluso si el
campo no esta incluido en la instrucción SELECT.
Todos los campos de la lista de campos de SELECT deben o bien
incluirse en la cláusula GROUP BY.
HAVING es similar a WHERE, determina qué registros se
seleccionan. Una vez que los registros se han agrupado utilizando
GROUP BY, HAVING determina cuales de ellos se van a mostrar.
Si tenemos una tabla llamada clientes con los siguientes
registros:
Se nos plantea la siguiente interrogante
¿Cuáles registros cumplen con la condición
de poseer Código Postal 5101 y además son clientes
Movilnet?
Agrupamos los clientes con Cod_Postal 5101 y luego con HAVING
seleccionamos los clientes Movilnet (0416)
SELECT cedula, nombre, cod_postal FROM clientes WHERE cod_postal
= '5101';
GROUP BY cedula, nombre, cod_postal HAVING SUBSTR (TELEFONO,1,4)
= '0416'
AVG
Calcula la media aritmética de un conjunto de valores
contenidos en un campo especificado de una consulta. Su sintaxis
es la siguiente
AVG (expr)
En donde expr representa el campo que contiene los
datos numéricos para los que se desea calcular la media o
una expresión que realiza un cálculo
utilizando los datos de dicho campo. La media calculada por AVG
es la media aritmética (la suma de los valores dividido
por el número de valores). La función AVG no
incluye ningún campo Null en el cálculo.
Ejemplo
Usando la tabla CLIENTES se desea conocer el promedio de
crédito de los clientes de la ciudad de Mérida
(cod_postal = 5101)
SELECT AVG (CREDITO) AS CLIENTES_MERIDA FROM CLIENTES;
WHERE COD_POSTAL IN ('5101')
El resultado de la consulta será:
COUNT
Calcula el número de registros devueltos por una consulta.
Su sintaxis es la siguiente
COUNT (expr)
En donde expr contiene el nombre del campo que desea contar. Los
operandos de expr pueden incluir el nombre de un campo de una
tabla, una constante o una función. Aunque expr puede
realizar un cálculo sobre un campo, COUNT simplemente
cuenta el número de registros sin tener en cuenta
qué valores se almacenan en los registros. La
función COUNT no cuenta los registros que tienen campos
NULL.
SELECT COUNT (campo) AS nombre_máscara FROM tabla
Ejemplo
Se desea determinar ¿Cuántos Clientes tienen
crédito entre Bs. 100.000,00 y Bs. 300.000,00?
SELECT COUNT (CREDITO) AS CLIENTES_ENTRE_100000_y_300000 FROM
CLIENTES;
WHERE CREDITO BETWEEN 100000 AND 300000
Como puede observar SQL proporciona el número de
clientes que cumplen con la condición especificada en
WHERE.
Max y Min
Devuelven el mínimo o el máximo de un conjunto de
valores contenidos en un campo especifico una consulta. Su
sintaxis es:
Min (expr)
Max (expr)
En donde expr es el campo sobre el que se desea realizar
el cálculo. Expr puede incluir el nombre de un
campo de una tabla o una constante.
Ejemplo
Se desea conocer el monto en Bs. De la mayor carta de
crédito de un cliente
foráneo código postal 5102
SELECT MAX (CREDITO) AS CLIENTE_CON_MAYOR_CRÉDITO_5102
FROM CLIENTES;
WHERE COD_POSTAL IN ('5102')
SELECT MIN (CREDITO) AS
CLIENTE_CON_MENOR_CRÉDITO_5102 FROM CLIENTES;
WHERE COD_POSTAL IN ('5102')
El código SQL anterior muestra el uso de MIN para
ubicar el monto de la menor carta de crédito de la zona
5102.
SUM
Devuelve la suma del conjunto de valores contenido en un campo
específico de una consulta. Su sintaxis es:
SUM (expr)
En donde expr representa el nombre del campo que contiene los
datos que desean sumarse o una expresión que realiza un
cálculo utilizando los datos de dichos campos. Los
operandos de expr pueden incluir el nombre de un campo de
una tabla o una constante.
Ejemplo
Se desea conocer el monto total de las carteras de crédito
de los clientes código de área 5102
SELECT SUM (CREDITO) AS TOTAL_CRÉDITO_5102 FROM
CLIENTES WHERE COD_POSTAL IN ('5102')
Este ejemplo suma los resultados de las consultas anteriores con
MAX Y MIN.
Subconsultas
Una subconsulta es una instrucción SELECT anidada dentro
de una instrucción SELECT, SELECT…INTO, INSERT…INTO,
DELETE, o UPDATE o dentro de otra subconsulta.
Puede utilizar tres formas de sintaxis para crear una
subconsulta:
Comparación [ANY | ALL | SOME] (instrucción
SQL)
Expresión [NOT] IN (instrucción SQL)
[NOT] EXISTS (instrucción SQL)
En donde:
Comparación: Es una expresión y un operador de
comparación que compara la expresión con el
resultado de la subconsulta.
Expresión: Es una expresión por la que se busca el
conjunto resultante de la subconsulta.
Instrucción SQL: Es una instrucción SELECT, que
sigue el mismo formato 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 campos de una instrucción
SELECT o en una cláusula WHERE o HAVING. 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 HAVING.
Se puede utilizar el predicado ANY, ALL o SOME, los cuales son
sinónimos, para recuperar registros de la consulta
principal, que satisfagan la comparación con cualquier
otro registro recuperado en la subconsulta.
Cuando la condición de filtro incluye ANY o SOME, el campo
debe cumplir la condición de comparación en al
menos uno de los valores generados por la subconsulta.
Cuando la condición de filtro incluye ALL, el campo debe
cumplir la condición de comparación para todos los
valores generados por la subconsulta antes de que se incluya el
registro en el resultado de la consulta.
Ejemplo
Usando una subconsulta muestre una lista de clientes cuyo
teléfono sea Movilnet (código de área
0416)
SELECT nombre, credito, TELEFONO FROM clientes WHERE SUBSTR
(TELEFONO, 1, 4);
IN (SELECT TELEFONO FROM CLIENTES WHERE SUBSTR (TELEFONO, 1, 4) =
'0416')
Ejemplo
Suponga que se desea conocer los datos personales de los clientes
con cartas de
crédito por arriba de Bs. 2.500.000,00
SELECT nombre, credito, TELEFONO FROM clientes WHERE credito =
ALL ;
(SELECT CREDITO FROM CLIENTES WHERE CREDITO >
2500000)
Ejemplo
Encontrar los clientes con carteras de crédito entre Bs.
2.300.000,00 Y Bs. 2.500.000
SELECT nombre, credito, TELEFONO FROM clientes WHERE credito =
ANY;
(SELECT CREDITO FROM CLIENTES WHERE CREDITO BETWEEN 2300000 AND
2500000)
**** WHERE credito = ANY (subconsulta SQL) indica que se incluya
en la consulta a cualquier registro que cumpla aunque sea una
parte de la condición de la subconsulta.
Ejemplo
Liste a todos los clientes que tengan residencia en la ciudad de
Mérida.
SELECT NOMBRE, CREDITO, TELEFONO, CIUDAD FROM CLIENTES WHERE
CIUDAD = ALL; (SELECT CIUDAD FROM CLIENTES WHERE UPPER (CIUDAD) =
'MERIDA')
Observe el efecto que se produce en la consulta cuando
se cambia el operador = antes de ALL
SELECT NOMBRE, CREDITO, TELEFONO, CIUDAD FROM CLIENTES
WHERE CIUDAD > ALL; (SELECT CIUDAD FROM CLIENTES WHERE UPPER
(CIUDAD) = 'MERIDA')
SELECT NOMBRE, CREDITO, TELEFONO, CIUDAD FROM CLIENTES
WHERE CIUDAD < ALL; (SELECT CIUDAD FROM CLIENTES WHERE UPPER
(CIUDAD) = 'MERIDA')
Se puede ver claramente que el resultado de la consulta
varía sustancialmente cuando se cambia el operador = antes
de ALL. Al utilizar > se muestran en la consulta todos
aquellos registros que cumplen con la condición de
comenzar con una letra mayor a ‘M’. Y al utilizar
< se agregan a la consulta sólo aquellos cuya letra
inicial en el campo ciudad está por debajo de
‘M’.
Ejemplo
Mostrar en pantalla los clientes con cartas de crédito
menores a Bs. 200.000,00
SELECT NOMBRE, CREDITO, TELEFONO FROM CLIENTES WHERE CREDITO <
ALL;
(SELECT CREDITO FROM CLIENTES WHERE CREDITO = 200000)
Con la condición del WHERE de la consulta principal se
establece que se deben mostrar todos aquellos registros menores a
la condición establecida en la subconsulta (credito =
200000)
Consultas De Unión Internas
Las vinculaciones entre tablas se realizan mediante la
cláusula INNER que combina registros de dos tablas siempre
que haya concordancia de valores en un campo común. Su
sintaxis es:
SELECT campos FROM tb1 INNER JOIN tb2 ON tb1.campo1 OPERADOR
tb2.campo2
En donde:
tb1, tb2: Son los nombres de las tablas desde las que se combinan
los registros.
campo1, campo2: Son los nombres de los campos que se combinan. Si
no son numéricos, los campos deben ser del mismo tipo de
datos y contener el mismo tipo de datos, pero no tienen que tener
el mismo nombre.
OPERADOR: Es cualquier operador de comparación relacional:
=, <, >, <=, >=, o <>.
Se puede utilizar una operación INNER JOIN en cualquier
cláusula FROM. Esto crea una combinación por
equivalencia, conocida también como unión interna.
Las combinaciones de equivalencia son las más comunes;
éstas combinan los registros de dos tablas siempre que
haya concordancia de valores en un campo común a ambas
tablas. Se puede utilizar INNER JOIN con las tablas Clientes y
Pedidos (ver ilustración más abajo) para
seleccionar todos los pedidos de los clientes o los pedidos de un
cliente en particular.
Más formalmente INNER JOIN específica que el
resultado de la consulta contenga sólo filas para una
tabla con la que coincidan una o varias filas en otra
tabla.
Ejemplo
Mostrar una consulta para determinar la fecha y el monto
de los pedidos de un cliente X identificado por su número
de cedula.
SELECT fecha, monto from PEDIDOS INNER JOIN clientes
;
ON clientes.cedula = 2 AND pedidos.cedula = 2
Suponga que complementamos esta consulta
añadiendo los campos nombre y teléfono de la tabla
clientes, el resultado por pantalla sería:
La línea de código SQL
será:
SELECT clientes.nombre, clientes.telefono, fecha, monto
FROM PEDIDOS INNER JOIN clientes;
ON clientes.cedula = 2 AND pedidos.cedula = 2
Observe la sintaxis con que se escriben los campos de la
tabla que no está activa (clientes). Se antecede el nombre
del campo con el identificador de la tabla y un punto.
Existen órdenes agregadas que cambiaran el
resultado de la consulta dependiendo como las use. Estas
son:
LEFT [OUTER] JOIN: especifica que el resultado de la
consulta contenga todas las filas de la tabla a la izquierda de
la palabra clave JOIN y sólo las filas que concuerden
procedentes de la tabla a la derecha de la palabra clave JOIN. La
palabra clave OUTER es opcional; se puede incluir para resaltar
que se ha creado una combinación externa.
RIGHT [OUTER] JOIN especifica que el resultado de la
consulta contenga todas las filas desde la tabla hasta la derecha
de la palabra clave JOIN y sólo las filas que concuerden
desde la tabla hasta la izquierda de la palabra clave JOIN. La
palabra clave OUTER es opcional; puede incluirse para resaltar la
creación de una combinación externa.
FULL [OUTER] JOIN: especifica que el resultado de la consulta
contenga todas las filas, concuerden o no, de ambas tablas. La
palabra clave OUTER es opcional; se puede incluir para resaltar
que se ha creado una combinación externa.
Ejemplo:
Observe como cambia el resultado de la consulta anterior
agregando las órdenes LEFT, RIGHT, FULL.
LEFT
SELECT clientes.nombre, clientes.telefono, fecha, monto FROM
PEDIDOS LEFT JOIN clientes;
ON clientes.cedula = 2 AND pedidos.cedula = 2
En este caso la condición del ON es
específica el campo cedula en ambas tablas debe ser igual
a 2; pero LEFT indica a SQL que ingrese los campos a la izquierda
de la palabra JOIN los cuales se muestran como .NULL., en vista
que no cumplen con la condición cedula = 2.
RIGHT
SELECT clientes.nombre, clientes.telefono, fecha, monto FROM
PEDIDOS RIGHT JOIN; clientes ON clientes.cedula = 2 AND
pedidos.cedula = 2
El resultado será (ver siguiente página)
Los campos a la derecha de JOIN se mostrarán como
.NULL. en vista que no cumplen con la condición cedula =
2.
FULL
SELECT clientes.nombre, clientes.telefono, fecha, monto
FROM PEDIDOS FULL JOIN clientes; ON clientes.cedula = 2 AND
pedidos.cedula = 2
En este caso se muestran los campos de ambas tablas coincidan o
no con la condición establecida.
Consultas De Unión Externas
Se utiliza la operación UNION para crear una consulta de
unión, combinando los resultados de dos o más
consultas o tablas independientes. Su sintaxis es:
SELECT campos separados por comas FROM nombre tabla WHERE
condición UNION; SELECT campos separados por comas FROM
nombre tabla WHERE condición
Los campos de ambos SELECT deben estar en igual número en
ambas instrucciones y deben ser del mismo tipo.
Ejemplo:
Suponga que tenemos una tabla VENDEDORES junto con la ya conocida
tabla CLIENTES con la que hemos trabajado
anteriormente.
Se le solicita que presente una vista por pantalla de
todos los vendedores y clientes que se encuentran
geográficamente ubicados en la zona 5101.
La línea SQL será:
SELECT CEDULA, NOMBRE, TELEFONO AS CLIENTES_Y_VENDEDORES FROM
CLIENTES WHERE COD_POSTAL = '5101'; UNION SELECT CEDULA, NOMBRE,
TELEFONO FROM VENDEDORES WHERE ZONA = '5101'
Observe que el único vendedor que cumple con la
condición aparece en la consulta en el último
lugar.
Ejemplo
Suponga ahora que desea ver a todos los vendedores y clientes en
una sola vista la línea de comando SQL será
más sencilla como se puede apreciar:
SELECT CEDULA, NOMBRE, TELEFONO AS CLIENTES_Y_VENDEDORES FROM
CLIENTES UNION; SELECT CEDULA, NOMBRE, TELEFONO FROM
VENDEDORES
Como podrá observar (en la siguiente página) la
vista de la consulta incluye a todos los registros de la tabla
clientes y a los dos únicos vendedores
registrados.
Vista de la consulta de todos los clientes y vendedores
usando UNION.
MSDN LIBRARY
1995 – 2000 Microsoft
Corporation
Autor:
Carlos Roberto Izquierdo González
T.S.U. En Informática