alguien que se apiade de mi y me ayude con lo del combo Box
En verdad necesito saber como hacer que me seleccione ciertos registros de la tabla y no todos!! y que me muestre al principio el primer valor mi msn es [email protected] para que me expliquen si?? GRaciassssss
Saludos, puedes usar SELECT SQL, para seleccionar solo lo que necesitas. Te envÃo esta ayuda extraÃda de MSN VS 6.0. Espero que te sirva. Si tienes más duda por favor contáctame.
SELECT SQL
Recupera datos de una o más tablas.
Sintaxis
SELECT [ALL | DISTINCT] [TOP nExpresión [PERCENT]]
[Alias.] Elemento_Selección [AS Nombre_Columna]
[, [Alias.] Elemento_Selección [AS Nombre_Columna] ...]
FROM [FORCE]
[NombreBaseDatos!]Tabla [[AS] Local_Alias]
[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN
NombreBaseDatos!]Tabla [[AS] Local_Alias]
[ON CondiciónCombinación …]
[[INTO Destino]
| [TO FILE NombreArchivo [ADDITIVE] | TO PRINTER [PROMPT]
| TO SCREEN]]
[PREFERENCE NombrePreferencia]
[NOCONSOLE]
[PLAIN]
[NOWAIT]
[WHERE CondiciónCombinación [AND CondiciónCombinación ...]
[AND | OR CondiciónFiltro [AND | OR CondiciónFiltro ...]]]
[GROUP BY ColumnaGrupo [, ColumnaGrupo ...]]
[HAVING CondiciónFiltro]
[UNION [ALL] SELECTCommand]
[ORDER BY Elemento_Orden [ASC | DESC] [, Elemento_Orden [ASC | DESC] ...]]
Argumentos
SELECT
Especifica los campos, constantes y expresiones que se mostrarán en el resultado de la consulta.
ALL
De forma predeterminada, se muestran todas la filas del resultado de la consulta.
DISTINCT
Excluye duplicados de cualquier fila del resultado de la consulta.
Nota Puede utilizar DISTINCT únicamente una vez por cláusula SELECT.
TOP nExpresión [PERCENT]
Especifica que el resultado de la consulta contenga un número determinado de filas o un porcentaje de filas en el resultado de la consulta. Es necesario incluir una cláusula ORDER BY si incluye la cláusula TOP. La cláusula ORDER BY especifica las columnas en las que la cláusula TOP determinará el número de filas que se va a incluir en el resultado de la consulta.
Puede especificar desde 1 a 32,767 filas. Las filas de valores idénticos para las columnas especificadas en la cláusula ORDER BY se incluyen en el resultado de la consulta. A partir de entonces, si especifica 10 para nExpr, el resultado de la consulta podrá obtener más de 10 filas si hay más de 10 filas con valores idénticos para las columnas especificadas en la cláusula ORDER BY.
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.
Alias.
Califica nombres de elementos coincidentes. Cada elemento que especifique con Elemento_Selección genera una columna de los resultados de la consulta. Si dos o más elementos tienen el mismo nombre, incluya el alias de la tabla y un punto antes del nombre del elemento para impedir la duplicación de las columnas.
Elemento_Selección especifica un elemento a incluir en el resultado de la consulta. Un elemento puede ser uno de los siguientes:
El nombre de un campo de una tabla de la cláusula FROM.
Una constante especificando que el mismo valor constante ha de aparecer en cada fila del resultado de la consulta.
Una expresión que puede ser el nombre de una función definida por el usuario (FDU).
AS Nombre_Columna
Especifica el tÃtulo de una columna en el resultado de la consulta. Esta opción resulta muy útil cuando Elemento_Selección es una expresión o contiene una función de campo y desea dar un nombre significativo a la columna. Nombre_Columna puede ser una expresión pero no puede contener caracteres (por ejemplo, espacios) que no estén permitidos para nombres de campos de tablas.
FROM
Enumera las tablas que contienen los datos que ha obtenido la consulta. Si no hay ninguna tabla abierta, Visual FoxPro mostrará el cuadro de diálogo Abrir para permitirle especificar la ubicación del archivo. Una vez abierta, la tabla permanecerá abierta cuando la consulta se haya terminado.
FORCE especifica que las tablas se combinarán en el orden de aparición en la cláusula FROM. Si se omite FORCE, Visual FoxPro intentará optimizar la consulta. Sin embargo, es posible que la consulta se ejecute más rápido si se incluye la palabra clave FORCE para desactivar la optimización de consultas de Visual FoxPro.
NombreBaseDatos!
Especifica el nombre de una base de datos inactiva que contiene la tabla. Es necesario incluir el nombre de la base de datos que contiene la tabla en caso de que no sea la base de datos activa. Incluya el delimitador de signo de exclamación (!) después del nombre de la base de datos y antes del nombre de la tabla.
Alias_Local
Especifica un nombre temporal para la tabla indicada en Tabla. Si especifica un alias local, debe utilizar el alias local en lugar de la tabla a través de todo el SELECT.
INNER JOIN especifica que el resultado de la consulta contenga sólo filas para una tabla con la que coincidan una o varias filas en otra tabla.
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.
ON CondiciónCombinación especifica las condiciones según las cuales se combinan las tablas.
INTO Destino
Determina donde se almacenan los resultados de la consulta. Si incluye una cláusula INTO y una cláusula TO en la misma consulta, la cláusula TO se pasará por alto. Si no incluye la cláusula INTO, los resultados de la consulta se mostrarán en la ventana Examinar. Los resultados de la consulta pueden dirigirse también a la impresora o a un archivo mediante la cláusula TO.
Destino puede ser uno de los siguientes:
ARRAY NombreMatriz, que almacena los resultados de la consulta en una matriz de variable de memoria. Si la consulta selecciona 0 registros, la matriz no se creará.
CURSOR NombreCursor [NOFILTER], que almacena los resultados de la consulta en un cursor. Si especifica el nombre de una tabla abierta, Visual FoxPro generará un mensaje de error. Después de que se ejecute SELECT, el cursor temporal permanecerá abierto y estará activo pero solamente para lectura. Una vez que cierre este cursor temporal, se borrará. Los cursores pueden existir como un archivo temporal en la unidad SORTWORK.
Incluya NOFILTER para crear un cursor que se pueda usar en consultas posteriores. En versiones anteriores de Visual FoxPro, era necesario incluir una expresión o una constante adicional como un filtro para crear un cursor utilizable en consultas posteriores. Por ejemplo, la adición de un Logical verdadero como una expresión de filtro creaba una consulta utilizable en consultas posteriores:
SELECT *, .T. FROM customers INTO CURSOR myquery
Si se incluye NOFILTER es posible que disminuya el rendimiento de la consulta, puesto que se creará una consulta temporal en el disco. Cuando se cierre el cursor se eliminará del disco la consulta temporal.
DBF | TABLE NombreTabla
[DATABASE NombreBaseDatos [NAME NombreLargoTabla]] que almacena el resultado de la consulta en una tabla. Si especifica una tabla que ya esté abierta y SET SAFETY está en OFF, Visual FoxPro sobrescribirá la tabla sin previo aviso. Si no ha especificado ninguna extensión, Visual FoxPro dará una extensión .DBF a la tabla. La tabla permanecerá abierta y activa después de ejecutar SELECT.
Incluya DATABASE NombreBaseDatos para especificar una base de datos a la que se agregará la tabla. Incluya NAME NombreLargoTabla para especificar un nombre largo para la tabla. Los nombres largos pueden contener un máximo de 128 caracteres y pueden utilizarse en lugar de nombres cortos en la base de datos.
TO FILE NombreArchivo
Si incluye una cláusula TO pero no una cláusula INTO, podrá dirigir el resultado de la consulta a un archivo de texto ASCII llamado NombreArchivo, o a la impresora además de al escritorio o la ventana principal de Visual FoxPro.
ADDITIVE anexa los resultados de la consulta al contenido existente del archivo de texto especificado en TO FILE NombreArchivo.
TO PRINTER [PROMPT] dirige los resultados de la consulta a una impresora. Utilice la cláusula PROMPT opcional para que aparezca en pantalla un cuadro de diálogo antes de que empiece la impresión. En este cuadro de diálogo podrá modificar la configuración de la impresora. Los valores de la impresora modificables dependen del controlador de impresora instalado en este momento. Sitúe la palabra clave PROMPT inmediatamente después de TO PRINTER.
TO SCREEN dirige los resultados de la consulta a la ventana principal de Visual FoxPro o a una ventana definida por el usuario que esté activa.
PREFERENCE NombrePreferencia
Si el resultado de una consulta se envÃa a una ventana Examinar, podrá incluir PREFERENCE para guardar los atributos y opciones de la ventana Examinar para utilizarlos después. PREFERENCE guarda los atributos de la ventana Examinar por tiempo indefinido en el archivo de recursos FOXUSER. Las preferencias pueden recuperarse en cualquier momento.
Ejecutando SELECT con un NombrePreferencia de PREFERENCE, la primera vez se crea la preferencia. Ejecutando posteriormente SELECT con el mismo nombre de preferencia, se restaurará la ventana Examinar con el mismo estado de preferencia. Cuando se cierra la ventana Examinar, se actualiza la preferencia.
Si sale de una ventana Examinar presionando CTRL+Q+W, no se guardarán los cambios de la ventana Examinar en el archivo de recurso.
NOCONSOLE
Impide que el resultado de la consulta se envÃe a un archivo, a la impresora o a la ventana principal de Visual FoxPro.
PLAIN
Impide que aparezcan las cabeceras de las columnas al mostrar los resultados de la consulta. PLAIN puede utilizarse tanto si está presente una cláusula TO como si no. Si se incluye una cláusula TO, se pasará por alto PLAIN.
NOWAIT
Continúa la ejecución del programa después de abrir la ventana Examinar y de dirigir a ella los resultados de la consulta. El programa no esperará a que la ventana Examinar se cierre, sino que continuará con la ejecución de la lÃnea de programa inmediatamente siguiente a la instrucción SELECT.
Cuando se incluye TO SCREEN para dirigir los resultados hacia la ventana principal de Visual FoxPro o una ventana definida por el usuario, los resultados se detiene cuando la ventana principal de Visual FoxPro se llena con resultados de la consulta. Presione una tecla para ver el siguiente conjunto de resultados de la consulta. Si se incluye NOWAIT, los resultados de la consulta se desplazarán fuera del escritorio, la ventana principal de Visual FoxPro o una ventana definida por el usuario sin esperar a que se presione una tecla. NOWAIT se pasa por alto si se incluye con la cláusula INTO.
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.
CondiciónCombinación
especifica los campos que vinculan las tablas de la cláusula FROM. Si incluye más de una tabla en una consulta, deberá especificar una condición de combinación para cada tabla después de la primera.
Las condiciones de combinación múltiple deben conectarse mediante el operador AND. Cada condición de combinación tiene la forma siguiente:
NombreCampo1 Comparación NombreCampo2
NombreCampo1 es el nombre de un campo de una tabla, NombreCampo2 es el nombre de un campo de otra tabla y Comparación es uno de los operadores siguientes:
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.
La cláusula WHERE acepta el operador ESCAPE para la CondiciónCombinación, lo que le permite realizar consultas significativas sobre datos que contengan caracteres comodÃn _ y % de SELECT - SQL.
La cláusula ESCAPE le permite especificar que se traten los caracteres comodÃn de SELECT - SQL como si fueran caracteres literales. En la cláusula ESCAPE se especifica un carácter, el cual, cuando se sitúa inmediatamente antes del carácter comodÃn, indica que se tratará al carácter comodÃn como a un carácter literal.
CondiciónFiltro
especifica los criterios que deben cumplir los registros para que se incluyan en el resultado de la consulta. Una consulta puede incluir tantas condiciones de filtro como se deseen, conectadas con el operador AND y OR. También puede utilizar el operador NOT para invertir el valor de una expresión lógica o utilizar EMPTY( ) para comprobar si un campo está vacÃo.
CondiciónFiltro puede presentar una de estas formas:
Ejemplo 1
En el Ejemplo 1 se muestra la CondiciónFiltro en el formulario de NombreCampo1 Comparación NombreCampo2
customer.cust_id = orders.cust_id
Ejemplo 2
En el Ejemplo 2 se muestra CondiciónFiltro en el formulario de NombreCampo Comparación Expresión
payments.amount >= 1000
Ejemplo 3
En el Ejemplo 3 se muestra CondiciónFiltro en el formulario de NombreCampo Comparación ALL (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.
company < ALL ;
(SELECT company FROM customer WHERE country = "Reino Unido")
Ejemplo 4
En el Ejemplo 4 se muestra CondiciónFiltro en el formulario de NombreCampo Comparación ANY | SOME (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.
company < ANY ;
(SELECT company FROM customer WHERE country = "Reino Unido")
Ejemplo 5
En el Ejemplo 5 se muestra CondiciónFiltro en el formulario de NombreCampo [NOT] BETWEEN Inicio_Rango AND Fin_Rango
Este ejemplo comprueba si los valores del campo están dentro de un intervalo de valores especificado.
customer.postalcode BETWEEN 90000 AND 99999
Ejemplo 6
En el Ejemplo 6 se muestra CondiciónFiltro en el formulario de [NOT] EXISTS (Subconsulta)
Este ejemplo comprueba si al menos una lÃnea cumple los criterios de la subconsulta. Cuando la condición de filtro incluye EXISTS, la condición de filtro se evalúa como verdadera (.T.) a no ser que la subconsulta sea un conjunto vacÃo.
EXISTS ;
(SELECT * FROM orders WHERE customer.postalcode = orders.postalcode)
Ejemplo 7
En el Ejemplo 7 se muestra CondiciónFiltro en el formulario de NombreCampo [NOT] IN Conjunto_Configuración
Cuando una condición de filtro incluye IN, el campo debe contener uno de los valores antes de que el registro se incluya en los resultados de la consulta.
customer.postalcode NOT IN ("98052","98072","98034")
Ejemplo 8
En el Ejemplo 8 se muestra CondiciónFiltro en el formulario de NombreCampo [NOT] IN (Subconsulta)
AquÃ, el campo debe contener uno de los valores devueltos por la subconsulta antes de que su registro se incluya en los resultados de la consulta.
customer.cust_id IN ;
(SELECT orders.cust_id FROM orders WHERE orders.city="Seattle")
Ejemplo 9
En el Ejemplo 9 se muestra CondiciónFiltro en el formulario de NombreCampo [NOT] LIKE cExpresión
customer.country NOT LIKE "Reino Unido"
Esta condición de filtro busca cada uno de los campos que coinciden con cExpresión.
Puede utilizar el signo de porcentaje (%) y subrayado ( _ ) como parte de cExpresió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.
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).
HAVING CondiciónFiltro
Especifica una condición de filtro que los grupos deben satisfacer para quedar incluidos en el resultado de la consulta. HAVING debe utilizarse con GROUP BY. Puede incluir tantas condiciones de filtro como se deseen, conectadas con el operador AND u OR. También puede utilizar NOT para invertir el valor de una expresión lógica.
CondiciónFiltro no puede contener una subconsulta.
Una cláusula HAVING sin una cláusula GROUP BY actúa como una cláusula WHERE. Puede utilizar alias locales y funciones de campo en la cláusula HAVING. Utilice una cláusula WHERE para acelerar el rendimiento si su cláusula HAVING no contiene funciones de campo. No olvide que la cláusula HAVING deberÃa de aparecer antes de una cláusula INTO porque, de lo contrario, se producirá un error de sintaxis.
[UNION [ALL] ComandoSELECT]
Combina el resultado final de una SELECT con el resultado final de otra SELECT. De forma predeterminada, UNION comprueba el resultado combinado y elimina las filas duplicadas. Puede utilizar paréntesis para combinar múltiples cláusulas UNION.
Utilice la palabra clave opcional ALL para impedir que UNION elimine filas duplicadas de los resultados combinados.
Las cláusulas UNION siguen las reglas siguientes:
No puede utilizar UNION para combinar subconsultas.
Los resultados de ambos SELECT deben tener el mismo número de columnas.
Cada columna de los resultados de la consulta de un SELECT debe tener el mismo tipo de dato y anchura que su columna correspondiente en el otro SELECT.
Únicamente el SELECT final puede tener una cláusula ORDER BY, que debe referirse a las columnas de los resultados por su número. Si se incluye otra cláusula ORDER BY, afectará al resultado completo.
ORDER BY Elemento_Orden
Ordena el resultado de la consulta basándose en los datos de una o varias columnas. Cada Elemento_Orden debe corresponder a una columna del resultado de la consulta, y puede ser uno de los siguientes:
Un campo de una tabla FROM que también es un elemento de selección en la cláusula principal SELECT (no en una subconsulta).
Una expresión numérica que indica la ubicación de la columna en la tabla resultante. (La columna de la izquierda es la número 1.)
ASC especifica un orden ascendente para los resultados de la consulta, de acuerdo con el elemento o los elementos de orden, y es el valor predeterminado para ORDER BY.
DESC especifica un orden descendente para los resultados de la consulta.
Los resultados de la consulta aparecerán desordenados si no especifica un orden con ORDER BY.
Comentarios
SELECT es un comando SQL que está incorporado en Visual FoxPro como cualquier otro comando de Visual FoxPro. Cuando utiliza SELECT para componer una consulta, Visual FoxPro interpreta la consulta y recupera los datos especificados de las tablas. Puede crear una consulta SELECT:
En la ventana Comandos
En un programa Visual FoxPro (como cualquier otro comando de Visual FoxPro)
El Diseñador de consultas
Cuando ejecuta SET TALK ON y ejecuta SELECT, Visual FoxPro muestra la duración de la consulta y el número de registros del resultado. _TALLY contiene el número de registros del resultado de la consulta.
SELECT no respeta la condición de filtro actual especificada con SET FILTER.
Una subconsulta, a la que se hace referencia en los argumentos siguientes, es un comando SELECT dentro de otro SELECT y debe incluirse entre paréntesis. Puede tener múltiples subconsultas al mismo nivel (no anidadas) en la cláusula WHERE (consulte esta sección de los argumentos). Las subconsultas pueden contener múltiples condiciones de combinación.
Cuando se obtiene el resultado de una consulta, las columnas se denominarán según las siguientes reglas:
Si un elemento seleccionado es un campo con un nombre único, el nombre de la columna de resultado es el nombre del campo.
Si hay más de un elemento seleccionado con el mismo nombre, se anexarán un signo de subrayado y una letra al nombre de la columna. Por ejemplo, si una tabla llamada Cliente tiene un campo llamado CALLE, y una tabla llamada Empleados también tiene un campo llamado CALLE, las columnas de resultado se llamarán Extensión_A y Extensión_B (CALLE _A y CALLE _B). En el caso de un elemento seleccionado con un nombre de 10 caracteres, se truncará el nombre para anexar el sÃmbolo de subrayado y la letra. Por ejemplo, DEPARTMENT se convertirÃa en DEPARTME_A.
Si un elemento seleccionado es una expresión, su columna de resultado se llamará EXP_A. Cualquier otra expresión recibirá el nombre de EXP_B, EXP_C, y asà sucesivamente.
Si un elemento seleccionado contiene una función de campo como, por ejemplo, COUNT( ), la columna de resultado se llamará CNT_A. Si otro elemento seleccionado contiene SUM( ), su columna de resultado se llamará SUM_B.
Funciones definidas por el usuario con SELECT Aunque la utilización de funciones definidas por el usuario en la cláusula SELECT ofrece unas ventajas evidentes, también deberÃa tener en cuenta las siguientes limitaciones:
Es posible que la velocidad de realización de las operaciones con SELECT se vea limitada por la velocidad a la que se ejecutan las funciones definidas por el usuario. Las manipulaciones de un gran volumen que impliquen funciones definidas por el usuario se pueden realizar mejor utilizando funciones API y funciones definidas por el usuario escritas en C o en lenguaje ensamblador.
No se puede prever nada acerca de la entrada/salida de Visual FoxPro (E/S) ni del entorno de la tabla en funciones definidas por el usuario invocadas a partir de SELECT. Generalmente, no se puede saber qué área de trabajo se ha seleccionado, ni el nombre de la tabla actual, ni los nombres de los campos que se están procesando. El valor de dichas variables depende del lugar especÃfico, dentro del proceso de optimización, en el que se invoque la función definida por el usuario.
En funciones definidas por el usuario invocadas desde SELECT, no es seguro cambiar la E/S de Visual FoxPro ni el entorno de la tabla. Por norma general, los resultados son impredecibles.
La única forma segura de pasar valores a funciones definidas por el usuario invocadas desde SELECT es mediante la lista de argumentos pasada a la función cuando es invocada.
Si prueba y descubre una manipulación teóricamente prohibida que funciona correctamente en una versión determinada de FoxPro, eso no significa que también funcione en versiones posteriores.
Salvando dichas limitaciones, las funciones definidas por el usuario son aceptables en la cláusula SELECT. Sin embargo, recuerde que la utilización de SELECT puede ralentizar el rendimiento.
Las siguientes funciones de campo están disponibles para ser utilizadas con un elemento seleccionado que sea un campo o una expresión que implique a un campo:
AVG(Elemento_Selección), que realiza una media de una columna de datos numéricos.
COUNT(Elemento_Selección), que cuenta el número de elementos seleccionados en una columna. COUNT(*) cuenta el número de filas en el resultado de la consulta.
MIN(Elemento_Selección) determina el menor valor de Elemento_Selección en una columna.
MAX(Elemento_Selección) determina el mayor valor de Elemento_Selección en una columna.
SUM(Elemento_Selección) que proporciona el total de la suma de una columna de datos numéricos.
No se pueden probar las funciones de campo.
Combinaciones Visual FoxPro acepta sintaxis de combinación de 1992 SQL ANSI, lo que le permite crear consultas que vinculen las filas en dos o más tablas mediante la comparación de los valores de campos especificados. Por ejemplo, una combinación interna selecciona filas procedentes de dos tablas sólo cuando los valores de los campos combinados son iguales. Visual FoxPro admite combinaciones anidadas.
Dado que SQL se basa en la teorÃa de conjuntos matemática, se puede representar a cada tabla con un cÃrculo. La cláusula ON que especifica las condiciones de la combinación determina el punto de intersección, el cual representa el conjunto de filas que coinciden. En el caso de una combinación interna, la intersección tendrá lugar en el interior o en una parte “interna” de los dos cÃrculos. Una combinación externa incluye tanto las filas coincidentes que se han encontrado en la sección de intersección interna de las tablas, como las filas de la parte externa del cÃrculo a la izquierda, o a la derecha, de la intersección.
Importante Tenga presente la siguiente información a la hora de crear condiciones de combinación:
Si incluye dos tablas en una consulta y no especifica una condición de combinación, cada registro de la primera tabla se combinará con cada registro de la segunda tabla hasta que surtan efecto las condiciones del filtro. Una consulta tal puede producir unos resultados interminables.
Sea prudente al utilizar, en condiciones de combinación, funciones tales como DELETED( ), EOF( ), FOUND( ), RECCOUNT( ), y RECNO( ), que aceptan un área de trabajo o un alias opcional. La inclusión de un alias o de un área de trabajo en dichas funciones puede producir resultados inesperados. SELECT no utiliza sus áreas de trabajo; realiza lo equivalente a USE ... AGAIN. Las consultas de una única tabla que utilizan estas funciones sin un área de trabajo o un alias opcional, tendrán resultados correctos. De todas formas, las consultas de varias tablas que utilicen dichas funciones (incluso sin un área de trabajo o un alias opcional) pueden tener resultados inesperados.
Sea prudente al combinar tablas que contengan campos vacÃos porque Visual FoxPro concuerda campos vacÃos. Por ejemplo, si combina CUSTOMER.ZIP e INVOICE.ZIP, y CUSTOMER contiene 100 códigos postales vacÃos e INVOICE contiene 400 códigos postales vacÃos, el resultado de la consulta contendrá 40.000 registros más, como resultado de los campos vacÃos. Use la función EMPTY( ) para eliminar los registros vacÃos del resultado de la consulta.
Ejemplos de SELECT - SQL (Comando)
Los siguientes ejemplos ilustran la utilización de las funciones definidas por el usuario con SELECT - SQL:
Ejemplo 1
En el Ejemplo 1 se muestran los nombres de todas las compañÃas en customer (un campo de una tabla).
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT customer.company ;
FROM customer
Ejemplo 2
El ejemplo 2 muestra el contenido de tres campos de dos tablas y combina las dos tablas basándose en el campo clie_id. Utiliza alias locales para ambas tablas.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id
Ejemplo 3
El ejemplo 3 muestra únicamente registros con datos únicos en los campos especificados.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT DISTINCT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id
Ejemplo 4
El ejemplo 4 muestra los campos country, postalcode y company en orden ascendente.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + ‘datatestdata’)
SELECT country, postalcode, company ;
FROM customer ;
ORDER BY country, postalcode, company
Ejemplo 5
El ejemplo 5 almacena el contenido de los campos de dos tablas en una tercera tabla.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id ;
INTO TABLE custship.dbf
BROWSE
Ejemplo 6
El ejemplo 6 muestra únicamente los registros con una fecha de factura anterior al 02/16/1994.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id ;
AND b.order_date < {^1994-02-16}
Ejemplo 7
El ejemplo 7 muestra los nombres de todas las empresas de customer con un código postal que coincida con el código postal de la tabla orders.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT company FROM customer a WHERE ;
EXISTS (SELECT * FROM orders b WHERE a.postalcode = b.postalcode)
Ejemplo 8
El ejemplo 8 muestra todos los registros de customer que tengan un nombre de empresa que comience por una C mayúscula y tenga cualquier longitud.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer a WHERE a.company LIKE "C%"
Ejemplo 9
El ejemplo 9 muestra todos los registros de customer que tengan un nombre de paÃs que comience por U mayúscula seguido de un carácter desconocido.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer a WHERE a.country LIKE "U_"
Ejemplo 10
El ejemplo 10 muestra los nombres de todas las ciudades de customer en mayúsculas y llama CityList a la columna de los resultados.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT UPPER(city) AS CityList FROM customer
Ejemplo 11
En el Ejemplo 11 demuestra cómo se puede realizar una consulta de datos que contenga signos de porcentaje (%). Se colocará una barra inversa () antes del signo de porcentaje para indicar que tendrÃa que ser tratado como un literal, y la barra inversa se especifica como el carácter de escape en la cláusula ESCAPE.
Dado que las tablas de ejemplo incluidas con Visual FoxPro no contienen el carácter de signo de porcentaje, esta consulta no devolverá ningún resultado.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer;
WHERE company LIKE "%%%" ESCAPE ""
Ejemplo 12
En el Ejemplo 12 se demuestra cómo se puede realizar una consulta de datos que contenga signos de subrayado (_). Se colocará una barra inversa () antes del signo de subrayado para indicar que deberÃa ser tratado como un literal, y se especificará la barra inversa como el carácter de escape en la cláusula ESCAPE.
Dado que las tablas de ejemplo incluidas con Visual FoxPro no contienen el carácter de subrayado, esta consulta no devolverá ningún resultado.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer;
WHERE company LIKE "%_%" ESCAPE ""
Ejemplo 13
En el ejemplo 13, el carácter Escape se utiliza a sà mismo como un literal. El guión es tanto el carácter escape como un literal. La consulta devuelve todas las filas en las que el nombre de la compañÃa contiene un signo de porcentaje seguido de un guión.
Dado que las tablas de ejemplo proporcionadas con Visual FoxPro no contienen el carácter del signo de porcentaje, esta consulta no devolverá ningún resultado.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer;
WHERE company LIKE "%-%--%" Escape "-"
SELECT SQL
Recupera datos de una o más tablas.
Sintaxis
SELECT [ALL | DISTINCT] [TOP nExpresión [PERCENT]]
[Alias.] Elemento_Selección [AS Nombre_Columna]
[, [Alias.] Elemento_Selección [AS Nombre_Columna] ...]
FROM [FORCE]
[NombreBaseDatos!]Tabla [[AS] Local_Alias]
[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN
NombreBaseDatos!]Tabla [[AS] Local_Alias]
[ON CondiciónCombinación …]
[[INTO Destino]
| [TO FILE NombreArchivo [ADDITIVE] | TO PRINTER [PROMPT]
| TO SCREEN]]
[PREFERENCE NombrePreferencia]
[NOCONSOLE]
[PLAIN]
[NOWAIT]
[WHERE CondiciónCombinación [AND CondiciónCombinación ...]
[AND | OR CondiciónFiltro [AND | OR CondiciónFiltro ...]]]
[GROUP BY ColumnaGrupo [, ColumnaGrupo ...]]
[HAVING CondiciónFiltro]
[UNION [ALL] SELECTCommand]
[ORDER BY Elemento_Orden [ASC | DESC] [, Elemento_Orden [ASC | DESC] ...]]
Argumentos
SELECT
Especifica los campos, constantes y expresiones que se mostrarán en el resultado de la consulta.
ALL
De forma predeterminada, se muestran todas la filas del resultado de la consulta.
DISTINCT
Excluye duplicados de cualquier fila del resultado de la consulta.
Nota Puede utilizar DISTINCT únicamente una vez por cláusula SELECT.
TOP nExpresión [PERCENT]
Especifica que el resultado de la consulta contenga un número determinado de filas o un porcentaje de filas en el resultado de la consulta. Es necesario incluir una cláusula ORDER BY si incluye la cláusula TOP. La cláusula ORDER BY especifica las columnas en las que la cláusula TOP determinará el número de filas que se va a incluir en el resultado de la consulta.
Puede especificar desde 1 a 32,767 filas. Las filas de valores idénticos para las columnas especificadas en la cláusula ORDER BY se incluyen en el resultado de la consulta. A partir de entonces, si especifica 10 para nExpr, el resultado de la consulta podrá obtener más de 10 filas si hay más de 10 filas con valores idénticos para las columnas especificadas en la cláusula ORDER BY.
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.
Alias.
Califica nombres de elementos coincidentes. Cada elemento que especifique con Elemento_Selección genera una columna de los resultados de la consulta. Si dos o más elementos tienen el mismo nombre, incluya el alias de la tabla y un punto antes del nombre del elemento para impedir la duplicación de las columnas.
Elemento_Selección especifica un elemento a incluir en el resultado de la consulta. Un elemento puede ser uno de los siguientes:
El nombre de un campo de una tabla de la cláusula FROM.
Una constante especificando que el mismo valor constante ha de aparecer en cada fila del resultado de la consulta.
Una expresión que puede ser el nombre de una función definida por el usuario (FDU).
AS Nombre_Columna
Especifica el tÃtulo de una columna en el resultado de la consulta. Esta opción resulta muy útil cuando Elemento_Selección es una expresión o contiene una función de campo y desea dar un nombre significativo a la columna. Nombre_Columna puede ser una expresión pero no puede contener caracteres (por ejemplo, espacios) que no estén permitidos para nombres de campos de tablas.
FROM
Enumera las tablas que contienen los datos que ha obtenido la consulta. Si no hay ninguna tabla abierta, Visual FoxPro mostrará el cuadro de diálogo Abrir para permitirle especificar la ubicación del archivo. Una vez abierta, la tabla permanecerá abierta cuando la consulta se haya terminado.
FORCE especifica que las tablas se combinarán en el orden de aparición en la cláusula FROM. Si se omite FORCE, Visual FoxPro intentará optimizar la consulta. Sin embargo, es posible que la consulta se ejecute más rápido si se incluye la palabra clave FORCE para desactivar la optimización de consultas de Visual FoxPro.
NombreBaseDatos!
Especifica el nombre de una base de datos inactiva que contiene la tabla. Es necesario incluir el nombre de la base de datos que contiene la tabla en caso de que no sea la base de datos activa. Incluya el delimitador de signo de exclamación (!) después del nombre de la base de datos y antes del nombre de la tabla.
Alias_Local
Especifica un nombre temporal para la tabla indicada en Tabla. Si especifica un alias local, debe utilizar el alias local en lugar de la tabla a través de todo el SELECT.
INNER JOIN especifica que el resultado de la consulta contenga sólo filas para una tabla con la que coincidan una o varias filas en otra tabla.
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.
ON CondiciónCombinación especifica las condiciones según las cuales se combinan las tablas.
INTO Destino
Determina donde se almacenan los resultados de la consulta. Si incluye una cláusula INTO y una cláusula TO en la misma consulta, la cláusula TO se pasará por alto. Si no incluye la cláusula INTO, los resultados de la consulta se mostrarán en la ventana Examinar. Los resultados de la consulta pueden dirigirse también a la impresora o a un archivo mediante la cláusula TO.
Destino puede ser uno de los siguientes:
ARRAY NombreMatriz, que almacena los resultados de la consulta en una matriz de variable de memoria. Si la consulta selecciona 0 registros, la matriz no se creará.
CURSOR NombreCursor [NOFILTER], que almacena los resultados de la consulta en un cursor. Si especifica el nombre de una tabla abierta, Visual FoxPro generará un mensaje de error. Después de que se ejecute SELECT, el cursor temporal permanecerá abierto y estará activo pero solamente para lectura. Una vez que cierre este cursor temporal, se borrará. Los cursores pueden existir como un archivo temporal en la unidad SORTWORK.
Incluya NOFILTER para crear un cursor que se pueda usar en consultas posteriores. En versiones anteriores de Visual FoxPro, era necesario incluir una expresión o una constante adicional como un filtro para crear un cursor utilizable en consultas posteriores. Por ejemplo, la adición de un Logical verdadero como una expresión de filtro creaba una consulta utilizable en consultas posteriores:
SELECT *, .T. FROM customers INTO CURSOR myquery
Si se incluye NOFILTER es posible que disminuya el rendimiento de la consulta, puesto que se creará una consulta temporal en el disco. Cuando se cierre el cursor se eliminará del disco la consulta temporal.
DBF | TABLE NombreTabla
[DATABASE NombreBaseDatos [NAME NombreLargoTabla]] que almacena el resultado de la consulta en una tabla. Si especifica una tabla que ya esté abierta y SET SAFETY está en OFF, Visual FoxPro sobrescribirá la tabla sin previo aviso. Si no ha especificado ninguna extensión, Visual FoxPro dará una extensión .DBF a la tabla. La tabla permanecerá abierta y activa después de ejecutar SELECT.
Incluya DATABASE NombreBaseDatos para especificar una base de datos a la que se agregará la tabla. Incluya NAME NombreLargoTabla para especificar un nombre largo para la tabla. Los nombres largos pueden contener un máximo de 128 caracteres y pueden utilizarse en lugar de nombres cortos en la base de datos.
TO FILE NombreArchivo
Si incluye una cláusula TO pero no una cláusula INTO, podrá dirigir el resultado de la consulta a un archivo de texto ASCII llamado NombreArchivo, o a la impresora además de al escritorio o la ventana principal de Visual FoxPro.
ADDITIVE anexa los resultados de la consulta al contenido existente del archivo de texto especificado en TO FILE NombreArchivo.
TO PRINTER [PROMPT] dirige los resultados de la consulta a una impresora. Utilice la cláusula PROMPT opcional para que aparezca en pantalla un cuadro de diálogo antes de que empiece la impresión. En este cuadro de diálogo podrá modificar la configuración de la impresora. Los valores de la impresora modificables dependen del controlador de impresora instalado en este momento. Sitúe la palabra clave PROMPT inmediatamente después de TO PRINTER.
TO SCREEN dirige los resultados de la consulta a la ventana principal de Visual FoxPro o a una ventana definida por el usuario que esté activa.
PREFERENCE NombrePreferencia
Si el resultado de una consulta se envÃa a una ventana Examinar, podrá incluir PREFERENCE para guardar los atributos y opciones de la ventana Examinar para utilizarlos después. PREFERENCE guarda los atributos de la ventana Examinar por tiempo indefinido en el archivo de recursos FOXUSER. Las preferencias pueden recuperarse en cualquier momento.
Ejecutando SELECT con un NombrePreferencia de PREFERENCE, la primera vez se crea la preferencia. Ejecutando posteriormente SELECT con el mismo nombre de preferencia, se restaurará la ventana Examinar con el mismo estado de preferencia. Cuando se cierra la ventana Examinar, se actualiza la preferencia.
Si sale de una ventana Examinar presionando CTRL+Q+W, no se guardarán los cambios de la ventana Examinar en el archivo de recurso.
NOCONSOLE
Impide que el resultado de la consulta se envÃe a un archivo, a la impresora o a la ventana principal de Visual FoxPro.
PLAIN
Impide que aparezcan las cabeceras de las columnas al mostrar los resultados de la consulta. PLAIN puede utilizarse tanto si está presente una cláusula TO como si no. Si se incluye una cláusula TO, se pasará por alto PLAIN.
NOWAIT
Continúa la ejecución del programa después de abrir la ventana Examinar y de dirigir a ella los resultados de la consulta. El programa no esperará a que la ventana Examinar se cierre, sino que continuará con la ejecución de la lÃnea de programa inmediatamente siguiente a la instrucción SELECT.
Cuando se incluye TO SCREEN para dirigir los resultados hacia la ventana principal de Visual FoxPro o una ventana definida por el usuario, los resultados se detiene cuando la ventana principal de Visual FoxPro se llena con resultados de la consulta. Presione una tecla para ver el siguiente conjunto de resultados de la consulta. Si se incluye NOWAIT, los resultados de la consulta se desplazarán fuera del escritorio, la ventana principal de Visual FoxPro o una ventana definida por el usuario sin esperar a que se presione una tecla. NOWAIT se pasa por alto si se incluye con la cláusula INTO.
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.
CondiciónCombinación
especifica los campos que vinculan las tablas de la cláusula FROM. Si incluye más de una tabla en una consulta, deberá especificar una condición de combinación para cada tabla después de la primera.
Las condiciones de combinación múltiple deben conectarse mediante el operador AND. Cada condición de combinación tiene la forma siguiente:
NombreCampo1 Comparación NombreCampo2
NombreCampo1 es el nombre de un campo de una tabla, NombreCampo2 es el nombre de un campo de otra tabla y Comparación es uno de los operadores siguientes:
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.
La cláusula WHERE acepta el operador ESCAPE para la CondiciónCombinación, lo que le permite realizar consultas significativas sobre datos que contengan caracteres comodÃn _ y % de SELECT - SQL.
La cláusula ESCAPE le permite especificar que se traten los caracteres comodÃn de SELECT - SQL como si fueran caracteres literales. En la cláusula ESCAPE se especifica un carácter, el cual, cuando se sitúa inmediatamente antes del carácter comodÃn, indica que se tratará al carácter comodÃn como a un carácter literal.
CondiciónFiltro
especifica los criterios que deben cumplir los registros para que se incluyan en el resultado de la consulta. Una consulta puede incluir tantas condiciones de filtro como se deseen, conectadas con el operador AND y OR. También puede utilizar el operador NOT para invertir el valor de una expresión lógica o utilizar EMPTY( ) para comprobar si un campo está vacÃo.
CondiciónFiltro puede presentar una de estas formas:
Ejemplo 1
En el Ejemplo 1 se muestra la CondiciónFiltro en el formulario de NombreCampo1 Comparación NombreCampo2
customer.cust_id = orders.cust_id
Ejemplo 2
En el Ejemplo 2 se muestra CondiciónFiltro en el formulario de NombreCampo Comparación Expresión
payments.amount >= 1000
Ejemplo 3
En el Ejemplo 3 se muestra CondiciónFiltro en el formulario de NombreCampo Comparación ALL (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.
company < ALL ;
(SELECT company FROM customer WHERE country = "Reino Unido")
Ejemplo 4
En el Ejemplo 4 se muestra CondiciónFiltro en el formulario de NombreCampo Comparación ANY | SOME (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.
company < ANY ;
(SELECT company FROM customer WHERE country = "Reino Unido")
Ejemplo 5
En el Ejemplo 5 se muestra CondiciónFiltro en el formulario de NombreCampo [NOT] BETWEEN Inicio_Rango AND Fin_Rango
Este ejemplo comprueba si los valores del campo están dentro de un intervalo de valores especificado.
customer.postalcode BETWEEN 90000 AND 99999
Ejemplo 6
En el Ejemplo 6 se muestra CondiciónFiltro en el formulario de [NOT] EXISTS (Subconsulta)
Este ejemplo comprueba si al menos una lÃnea cumple los criterios de la subconsulta. Cuando la condición de filtro incluye EXISTS, la condición de filtro se evalúa como verdadera (.T.) a no ser que la subconsulta sea un conjunto vacÃo.
EXISTS ;
(SELECT * FROM orders WHERE customer.postalcode = orders.postalcode)
Ejemplo 7
En el Ejemplo 7 se muestra CondiciónFiltro en el formulario de NombreCampo [NOT] IN Conjunto_Configuración
Cuando una condición de filtro incluye IN, el campo debe contener uno de los valores antes de que el registro se incluya en los resultados de la consulta.
customer.postalcode NOT IN ("98052","98072","98034")
Ejemplo 8
En el Ejemplo 8 se muestra CondiciónFiltro en el formulario de NombreCampo [NOT] IN (Subconsulta)
AquÃ, el campo debe contener uno de los valores devueltos por la subconsulta antes de que su registro se incluya en los resultados de la consulta.
customer.cust_id IN ;
(SELECT orders.cust_id FROM orders WHERE orders.city="Seattle")
Ejemplo 9
En el Ejemplo 9 se muestra CondiciónFiltro en el formulario de NombreCampo [NOT] LIKE cExpresión
customer.country NOT LIKE "Reino Unido"
Esta condición de filtro busca cada uno de los campos que coinciden con cExpresión.
Puede utilizar el signo de porcentaje (%) y subrayado ( _ ) como parte de cExpresió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.
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).
HAVING CondiciónFiltro
Especifica una condición de filtro que los grupos deben satisfacer para quedar incluidos en el resultado de la consulta. HAVING debe utilizarse con GROUP BY. Puede incluir tantas condiciones de filtro como se deseen, conectadas con el operador AND u OR. También puede utilizar NOT para invertir el valor de una expresión lógica.
CondiciónFiltro no puede contener una subconsulta.
Una cláusula HAVING sin una cláusula GROUP BY actúa como una cláusula WHERE. Puede utilizar alias locales y funciones de campo en la cláusula HAVING. Utilice una cláusula WHERE para acelerar el rendimiento si su cláusula HAVING no contiene funciones de campo. No olvide que la cláusula HAVING deberÃa de aparecer antes de una cláusula INTO porque, de lo contrario, se producirá un error de sintaxis.
[UNION [ALL] ComandoSELECT]
Combina el resultado final de una SELECT con el resultado final de otra SELECT. De forma predeterminada, UNION comprueba el resultado combinado y elimina las filas duplicadas. Puede utilizar paréntesis para combinar múltiples cláusulas UNION.
Utilice la palabra clave opcional ALL para impedir que UNION elimine filas duplicadas de los resultados combinados.
Las cláusulas UNION siguen las reglas siguientes:
No puede utilizar UNION para combinar subconsultas.
Los resultados de ambos SELECT deben tener el mismo número de columnas.
Cada columna de los resultados de la consulta de un SELECT debe tener el mismo tipo de dato y anchura que su columna correspondiente en el otro SELECT.
Únicamente el SELECT final puede tener una cláusula ORDER BY, que debe referirse a las columnas de los resultados por su número. Si se incluye otra cláusula ORDER BY, afectará al resultado completo.
ORDER BY Elemento_Orden
Ordena el resultado de la consulta basándose en los datos de una o varias columnas. Cada Elemento_Orden debe corresponder a una columna del resultado de la consulta, y puede ser uno de los siguientes:
Un campo de una tabla FROM que también es un elemento de selección en la cláusula principal SELECT (no en una subconsulta).
Una expresión numérica que indica la ubicación de la columna en la tabla resultante. (La columna de la izquierda es la número 1.)
ASC especifica un orden ascendente para los resultados de la consulta, de acuerdo con el elemento o los elementos de orden, y es el valor predeterminado para ORDER BY.
DESC especifica un orden descendente para los resultados de la consulta.
Los resultados de la consulta aparecerán desordenados si no especifica un orden con ORDER BY.
Comentarios
SELECT es un comando SQL que está incorporado en Visual FoxPro como cualquier otro comando de Visual FoxPro. Cuando utiliza SELECT para componer una consulta, Visual FoxPro interpreta la consulta y recupera los datos especificados de las tablas. Puede crear una consulta SELECT:
En la ventana Comandos
En un programa Visual FoxPro (como cualquier otro comando de Visual FoxPro)
El Diseñador de consultas
Cuando ejecuta SET TALK ON y ejecuta SELECT, Visual FoxPro muestra la duración de la consulta y el número de registros del resultado. _TALLY contiene el número de registros del resultado de la consulta.
SELECT no respeta la condición de filtro actual especificada con SET FILTER.
Una subconsulta, a la que se hace referencia en los argumentos siguientes, es un comando SELECT dentro de otro SELECT y debe incluirse entre paréntesis. Puede tener múltiples subconsultas al mismo nivel (no anidadas) en la cláusula WHERE (consulte esta sección de los argumentos). Las subconsultas pueden contener múltiples condiciones de combinación.
Cuando se obtiene el resultado de una consulta, las columnas se denominarán según las siguientes reglas:
Si un elemento seleccionado es un campo con un nombre único, el nombre de la columna de resultado es el nombre del campo.
Si hay más de un elemento seleccionado con el mismo nombre, se anexarán un signo de subrayado y una letra al nombre de la columna. Por ejemplo, si una tabla llamada Cliente tiene un campo llamado CALLE, y una tabla llamada Empleados también tiene un campo llamado CALLE, las columnas de resultado se llamarán Extensión_A y Extensión_B (CALLE _A y CALLE _B). En el caso de un elemento seleccionado con un nombre de 10 caracteres, se truncará el nombre para anexar el sÃmbolo de subrayado y la letra. Por ejemplo, DEPARTMENT se convertirÃa en DEPARTME_A.
Si un elemento seleccionado es una expresión, su columna de resultado se llamará EXP_A. Cualquier otra expresión recibirá el nombre de EXP_B, EXP_C, y asà sucesivamente.
Si un elemento seleccionado contiene una función de campo como, por ejemplo, COUNT( ), la columna de resultado se llamará CNT_A. Si otro elemento seleccionado contiene SUM( ), su columna de resultado se llamará SUM_B.
Funciones definidas por el usuario con SELECT Aunque la utilización de funciones definidas por el usuario en la cláusula SELECT ofrece unas ventajas evidentes, también deberÃa tener en cuenta las siguientes limitaciones:
Es posible que la velocidad de realización de las operaciones con SELECT se vea limitada por la velocidad a la que se ejecutan las funciones definidas por el usuario. Las manipulaciones de un gran volumen que impliquen funciones definidas por el usuario se pueden realizar mejor utilizando funciones API y funciones definidas por el usuario escritas en C o en lenguaje ensamblador.
No se puede prever nada acerca de la entrada/salida de Visual FoxPro (E/S) ni del entorno de la tabla en funciones definidas por el usuario invocadas a partir de SELECT. Generalmente, no se puede saber qué área de trabajo se ha seleccionado, ni el nombre de la tabla actual, ni los nombres de los campos que se están procesando. El valor de dichas variables depende del lugar especÃfico, dentro del proceso de optimización, en el que se invoque la función definida por el usuario.
En funciones definidas por el usuario invocadas desde SELECT, no es seguro cambiar la E/S de Visual FoxPro ni el entorno de la tabla. Por norma general, los resultados son impredecibles.
La única forma segura de pasar valores a funciones definidas por el usuario invocadas desde SELECT es mediante la lista de argumentos pasada a la función cuando es invocada.
Si prueba y descubre una manipulación teóricamente prohibida que funciona correctamente en una versión determinada de FoxPro, eso no significa que también funcione en versiones posteriores.
Salvando dichas limitaciones, las funciones definidas por el usuario son aceptables en la cláusula SELECT. Sin embargo, recuerde que la utilización de SELECT puede ralentizar el rendimiento.
Las siguientes funciones de campo están disponibles para ser utilizadas con un elemento seleccionado que sea un campo o una expresión que implique a un campo:
AVG(Elemento_Selección), que realiza una media de una columna de datos numéricos.
COUNT(Elemento_Selección), que cuenta el número de elementos seleccionados en una columna. COUNT(*) cuenta el número de filas en el resultado de la consulta.
MIN(Elemento_Selección) determina el menor valor de Elemento_Selección en una columna.
MAX(Elemento_Selección) determina el mayor valor de Elemento_Selección en una columna.
SUM(Elemento_Selección) que proporciona el total de la suma de una columna de datos numéricos.
No se pueden probar las funciones de campo.
Combinaciones Visual FoxPro acepta sintaxis de combinación de 1992 SQL ANSI, lo que le permite crear consultas que vinculen las filas en dos o más tablas mediante la comparación de los valores de campos especificados. Por ejemplo, una combinación interna selecciona filas procedentes de dos tablas sólo cuando los valores de los campos combinados son iguales. Visual FoxPro admite combinaciones anidadas.
Dado que SQL se basa en la teorÃa de conjuntos matemática, se puede representar a cada tabla con un cÃrculo. La cláusula ON que especifica las condiciones de la combinación determina el punto de intersección, el cual representa el conjunto de filas que coinciden. En el caso de una combinación interna, la intersección tendrá lugar en el interior o en una parte “interna” de los dos cÃrculos. Una combinación externa incluye tanto las filas coincidentes que se han encontrado en la sección de intersección interna de las tablas, como las filas de la parte externa del cÃrculo a la izquierda, o a la derecha, de la intersección.
Importante Tenga presente la siguiente información a la hora de crear condiciones de combinación:
Si incluye dos tablas en una consulta y no especifica una condición de combinación, cada registro de la primera tabla se combinará con cada registro de la segunda tabla hasta que surtan efecto las condiciones del filtro. Una consulta tal puede producir unos resultados interminables.
Sea prudente al utilizar, en condiciones de combinación, funciones tales como DELETED( ), EOF( ), FOUND( ), RECCOUNT( ), y RECNO( ), que aceptan un área de trabajo o un alias opcional. La inclusión de un alias o de un área de trabajo en dichas funciones puede producir resultados inesperados. SELECT no utiliza sus áreas de trabajo; realiza lo equivalente a USE ... AGAIN. Las consultas de una única tabla que utilizan estas funciones sin un área de trabajo o un alias opcional, tendrán resultados correctos. De todas formas, las consultas de varias tablas que utilicen dichas funciones (incluso sin un área de trabajo o un alias opcional) pueden tener resultados inesperados.
Sea prudente al combinar tablas que contengan campos vacÃos porque Visual FoxPro concuerda campos vacÃos. Por ejemplo, si combina CUSTOMER.ZIP e INVOICE.ZIP, y CUSTOMER contiene 100 códigos postales vacÃos e INVOICE contiene 400 códigos postales vacÃos, el resultado de la consulta contendrá 40.000 registros más, como resultado de los campos vacÃos. Use la función EMPTY( ) para eliminar los registros vacÃos del resultado de la consulta.
Ejemplos de SELECT - SQL (Comando)
Los siguientes ejemplos ilustran la utilización de las funciones definidas por el usuario con SELECT - SQL:
Ejemplo 1
En el Ejemplo 1 se muestran los nombres de todas las compañÃas en customer (un campo de una tabla).
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT customer.company ;
FROM customer
Ejemplo 2
El ejemplo 2 muestra el contenido de tres campos de dos tablas y combina las dos tablas basándose en el campo clie_id. Utiliza alias locales para ambas tablas.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id
Ejemplo 3
El ejemplo 3 muestra únicamente registros con datos únicos en los campos especificados.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT DISTINCT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id
Ejemplo 4
El ejemplo 4 muestra los campos country, postalcode y company en orden ascendente.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + ‘datatestdata’)
SELECT country, postalcode, company ;
FROM customer ;
ORDER BY country, postalcode, company
Ejemplo 5
El ejemplo 5 almacena el contenido de los campos de dos tablas en una tercera tabla.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id ;
INTO TABLE custship.dbf
BROWSE
Ejemplo 6
El ejemplo 6 muestra únicamente los registros con una fecha de factura anterior al 02/16/1994.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id ;
AND b.order_date < {^1994-02-16}
Ejemplo 7
El ejemplo 7 muestra los nombres de todas las empresas de customer con un código postal que coincida con el código postal de la tabla orders.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT company FROM customer a WHERE ;
EXISTS (SELECT * FROM orders b WHERE a.postalcode = b.postalcode)
Ejemplo 8
El ejemplo 8 muestra todos los registros de customer que tengan un nombre de empresa que comience por una C mayúscula y tenga cualquier longitud.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer a WHERE a.company LIKE "C%"
Ejemplo 9
El ejemplo 9 muestra todos los registros de customer que tengan un nombre de paÃs que comience por U mayúscula seguido de un carácter desconocido.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer a WHERE a.country LIKE "U_"
Ejemplo 10
El ejemplo 10 muestra los nombres de todas las ciudades de customer en mayúsculas y llama CityList a la columna de los resultados.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT UPPER(city) AS CityList FROM customer
Ejemplo 11
En el Ejemplo 11 demuestra cómo se puede realizar una consulta de datos que contenga signos de porcentaje (%). Se colocará una barra inversa () antes del signo de porcentaje para indicar que tendrÃa que ser tratado como un literal, y la barra inversa se especifica como el carácter de escape en la cláusula ESCAPE.
Dado que las tablas de ejemplo incluidas con Visual FoxPro no contienen el carácter de signo de porcentaje, esta consulta no devolverá ningún resultado.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer;
WHERE company LIKE "%%%" ESCAPE ""
Ejemplo 12
En el Ejemplo 12 se demuestra cómo se puede realizar una consulta de datos que contenga signos de subrayado (_). Se colocará una barra inversa () antes del signo de subrayado para indicar que deberÃa ser tratado como un literal, y se especificará la barra inversa como el carácter de escape en la cláusula ESCAPE.
Dado que las tablas de ejemplo incluidas con Visual FoxPro no contienen el carácter de subrayado, esta consulta no devolverá ningún resultado.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer;
WHERE company LIKE "%_%" ESCAPE ""
Ejemplo 13
En el ejemplo 13, el carácter Escape se utiliza a sà mismo como un literal. El guión es tanto el carácter escape como un literal. La consulta devuelve todas las filas en las que el nombre de la compañÃa contiene un signo de porcentaje seguido de un guión.
Dado que las tablas de ejemplo proporcionadas con Visual FoxPro no contienen el carácter del signo de porcentaje, esta consulta no devolverá ningún resultado.
CLOSE ALL
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'datatestdata')
SELECT * FROM customer;
WHERE company LIKE "%-%--%" Escape "-"
