Select SQL Aplicado A Visual FOX PRO 6.0
Resumen: Estructura de las tablas usadas en los ejemplos. Select –SQL en visual FOX PRO 6.0. Componentes del SQL. Criterios de selección. Intervalos de valores. El operador like. Agrupamiento de registros.
Publicación enviada por Carlos Roberto Izquierdo González
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
1. Introducción
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.
4. Componentes del SQL
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 índices |
| DROP |
Empleado
para eliminar tablas e índices |
| ALTER |
Utilizado
para modificar las tablas agregando campos o cambiando la definición de
los campos. |
| Comandos DML |
| Comando |
Descripción |
| SELECT |
Utilizado
para consultar registros de la base de datos que satisfagan un criterio
determinado |
| INSERT |
Utilizado
para cargar lotes de datos en la base de datos en una única operación. |
| UPDATE |
Utilizado
para modificar los valores de los campos y registros especificados |
| DELETE |
Utilizado
para eliminar registros de una tabla de una base de datos |
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 van a seleccionar los registros |
| WHERE |
Utilizada
para especificar las condiciones que deben reunir los registros que se
van a seleccionar |
| GROUP BY |
Utilizada
para separar los registros seleccionados en grupos específicos |
| HAVING |
Utilizada
para expresar la condición que debe satisfacer cada grupo |
| ORDER BY |
Utilizada
para ordenar los registros seleccionados de acuerdo con un orden
específico |
Operadores Lógicos
| Operador |
Uso |
| AND |
Es el "y"
lógico. Evalúa dos condiciones y devuelve un valor de verdad sólo si
ambas son ciertas. |
| OR |
Es el "o"
lógico. Evalúa dos condiciones y devuelve un valor de verdadero si
alguna de las dos es cierta. |
| NOT |
Negación
lógica. Devuelve el valor contrario de la expresión. |
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 valores. |
| LIKE |
Utilizado en
la comparación de un modelo |
| In |
Utilizado
para especificar registros de una base de datos
|
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 de la tabla |
| DISTINCT |
Omite los
registros cuyos campos seleccionados coincidan totalmente |
| DISTINCTROW |
Omite los
registros duplicados basándose en la totalidad del registro y no sólo en
los campos seleccionados. |
* (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.
5. Criterios de selección
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.
6. Intervalos de valores
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

7. El operador like
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.
8. Agrupamiento de registros
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.
9. Bibliografía
MSDN LIBRARY
1995 – 2000 Microsoft Corporation
Trabajo enviado por:
Carlos Roberto Izquierdo González
carlosizquierdo@latinmail.com
T.S.U. En Informática
Compartir 
Publicación enviada por Carlos Roberto Izquierdo González
Contactar mailto:carlosizquierdo@latinmail.com
Código ISPN de la Publicación EpZVVluuupVVyLLFgm
Publicado Saturday 31 de January de 2004
Ultimas Publicaciones en ilustrados.com
ilustrados.com nace con el fin difundir el conocimiento publicando trabajos de investigación, monografias, tesis, presentaciones powerpoint y afines. Publicar trabajos en ilustrados.com ha alcanzado prestigio y reconocimiento internacional siendo cada vez más el número de académicos, empresas, investigadores, científicos que consultan las publicaciones de nuestro portal.
|