Compartir por


Seleccione - comando SQL

Recupera datos de una o varias tablas.

Visual FoxPro ODBC Driver admite la sintaxis nativa del lenguaje Visual FoxPro para este comando. Para obtener información específica del controlador, vea Comentarios del controlador.

Sintaxis

  
SELECT [ALL | DISTINCT]  
   [Alias.] Select_Item [AS Column_Name]  
   [, [Alias.] Select_Item [AS Column_Name] ...]   
FROM [DatabaseName!]Table [Local_Alias]  
   [, [DatabaseName!]Table [Local_Alias] ...]   
[WHERE JoinCondition [AND JoinCondition  
...]  
   [AND | OR FilterCondition [AND | OR FilterCondition ...]]]  
[GROUP BY GroupColumn [, GroupColumn ...]]  
[HAVING FilterCondition]  
[UNION [ALL] SELECTCommand]  
[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]  

Argumentos

Nota

Una subconsulta, a la que se hace referencia en los argumentos siguientes, es una instrucción SELECT dentro de un SELECT y debe ir entre paréntesis. Puede tener hasta dos subconsultas en el mismo nivel (no anidado) en la cláusula WHERE. (Vea esa sección de los argumentos). Las subconsultas pueden contener varias condiciones de combinación.

[ALL | DISTINCT] [Alias.] Select_Item [AS Column_Name] [, [Alias.] Select_Item [AS Column_Name] ...]
La cláusula SELECT especifica los campos, constantes y expresiones que se muestran en los resultados de la consulta.

De forma predeterminada, ALL muestra todas las filas de los resultados de la consulta.

DISTINCT excluye los duplicados de las filas de los resultados de la consulta.

Nota

Solo puede usar DISTINCT una vez por cada cláusula SELECT.

Alias. califica los nombres de elemento coincidentes. Cada elemento especificado con Select_Item genera una columna de los resultados de la consulta. Si dos o más elementos tienen el mismo nombre, incluya el alias de tabla y un punto antes del nombre del elemento para evitar que se dupliquen las columnas.

Select_Item especifica un elemento que se va a incluir en los resultados de la consulta. Un elemento puede ser uno de los siguientes:

  • Nombre de un campo de una tabla en la cláusula FROM.

  • Constante que especifica que el mismo valor constante debe aparecer en cada fila de los resultados de la consulta.

  • Expresión que puede ser el nombre de una función definida por el usuario.

Funciones definidas por el usuario con SELECT

Aunque el uso de funciones definidas por el usuario en la cláusula SELECT tiene ventajas obvias, también debe tener en cuenta las siguientes restricciones:

  • La velocidad de las operaciones realizadas con SELECT puede estar limitada por la velocidad a la que se ejecutan estas funciones definidas por el usuario. Las manipulaciones de gran volumen que implican funciones definidas por el usuario podrían lograrse mejor mediante el uso de la API y las funciones definidas por el usuario escritas en C o lenguaje de ensamblado.

  • La única manera confiable de pasar valores a funciones definidas por el usuario invocadas desde SELECT es mediante la lista de argumentos que se pasa a la función cuando se invoca.

  • Incluso si experimentas y descubres una manipulación supuestamente prohibida que funciona correctamente en una versión determinada de FoxPro, no hay ninguna garantía de que siga funcionando en versiones posteriores.

Además de estas restricciones, las funciones definidas por el usuario son aceptables en la cláusula SELECT. Sin embargo, recuerde que el uso de SELECT podría ralentizar el rendimiento.

Las siguientes funciones de campo están disponibles para su uso con un elemento de selección que es un campo o una expresión que implica un campo:

  • AVG(Select_Item): promedio de una columna de datos numéricos.

  • COUNT(Select_Item):cuenta el número de elementos seleccionados en una columna. COUNT(*) cuenta el número de filas en la salida de la consulta.

  • MIN(Select_Item): determina el valor más pequeño de Select_Item en una columna.

  • MAX(Select_Item): determina el valor más grande de Select_Item en una columna.

  • SUM(Select_Item):totaliza una columna de datos numéricos.

No se pueden anidar funciones de campo.

AS Column_Name
Especifica el encabezado de una columna en la salida de la consulta. Esto resulta útil cuando Select_Item es una expresión o contiene una función de campo y desea asignar un nombre descriptivo a la columna. Column_Name puede ser una expresión, pero no puede contener caracteres (por ejemplo, espacios) que no están permitidos en los nombres de campo de tabla.

FROM [DatabaseName!] Tabla [Local_Alias] [, [DatabaseName!] Tabla [Local_Alias] ...]
Listas las tablas que contienen los datos que recupera la consulta. Si no hay ninguna tabla abierta, Visual FoxPro muestra el cuadro de diálogo Abrir para que pueda especificar la ubicación del archivo. Una vez abierta, la tabla permanece abierta una vez completada la consulta.

DatabaseName! especifica el nombre de una base de datos distinta de la especificada con el origen de datos. Debe incluir el nombre de la base de datos que contiene la tabla si no se especifica la base de datos con el origen de datos. Incluya el delimitador de signo de exclamación (!) después del nombre de la base de datos y antes del nombre de la tabla.

Local_Alias especifica un nombre temporal para la tabla denominada en Table. Si especifica un alias local, debe usar el alias local en lugar del nombre de tabla en toda la instrucción SELECT. El alias local no afecta al entorno de Visual FoxPro.

WHERE JoinCondition [AND JoinCondition ...] [AND | OR FilterCondition [AND | OR FilterCondition ...]]
Indica a Visual FoxPro que incluya solo determinados registros en los resultados de la consulta. WHERE es necesario para recuperar datos de varias tablas.

JoinCondition especifica campos que vinculan las tablas de la cláusula FROM. Si incluye más de una tabla en una consulta, debe especificar una condición de combinación para cada tabla después de la primera.

Importante

Tenga en cuenta la siguiente información al 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 combina con cada registro de la segunda tabla siempre que se cumplan las condiciones de filtro. Esta consulta puede generar resultados largos.

  • Tenga cuidado al combinar tablas con campos vacíos porque Visual FoxPro coincide con campos vacíos. Por ejemplo, si se une en CUSTOMER.ZIP y INVOICE.ZIP y si CUSTOMER contiene 100 códigos postales vacíos y INVOICE contiene 400 códigos postales vacíos, la salida de la consulta contiene 40 000 registros adicionales resultantes de los campos vacíos. Use la función EMPTY( ) para eliminar los registros vacíos de la salida de la consulta.

  • Debe usar el operador AND para conectar varias condiciones de combinación. Cada condición de combinación tiene el siguiente formato:

    FieldName1 Comparación FieldName2

    FieldName1 es el nombre de un campo de una tabla, FieldName2 es el nombre de un campo de otra tabla y Comparison es uno de los operadores descritos en la tabla siguiente.

Operador De comparación
= Igual
== Exactamente igual
LIKE SQL LIKE
<>, !=, # No igual a
> Más que
>= Más o igual que
< Menor que
<= Menor o igual que

Cuando se usa el operador = con cadenas, actúa de forma diferente, dependiendo de la configuración de SET ANSI. Cuando SET ANSI se establece en OFF, Visual FoxPro trata las comparaciones de cadenas de una manera familiar para los usuarios de Xbase. Cuando SET ANSI se establece en ON, Visual FoxPro sigue los estándares ANSI para las comparaciones de cadenas. Consulte SET ANSI y SET EXACT para obtener más información sobre cómo Visual FoxPro realiza comparaciones de cadenas.

FilterCondition especifica los criterios que deben cumplir los registros para incluirse en los resultados de la consulta. Puede incluir tantas condiciones de filtro en una consulta como desee, conectándolas con el operador AND u OR. También puede usar el operador NOT para invertir el valor de una expresión lógica, o puede usar EMPTY( ) para comprobar si hay un campo vacío. FilterCondition puede tomar cualquiera de los formularios de los ejemplos siguientes:

Ejemplo 1FieldName1 Comparación FieldName2

customer.cust_id = orders.cust_id

Expresión de comparación FieldNamede ejemplo 2

payments.amount >= 1000

Ejemplo 3FieldName Comparison ALL (subconsulta)

company < ALL ;

(SELECT company FROM customer WHERE country = "USA")

Cuando la condición de filtro incluye ALL, el campo debe cumplir la condición de comparación de todos los valores generados por la subconsulta antes de que se incluya su registro en los resultados de la consulta.

Ejemplo 4Comparación de FieldName ANY | SOME (Subconsulta)

company < ANY ;

(SELECT company FROM customer WHERE country = "USA")

Cuando la condición de filtro incluye ANY o SOME, el campo debe cumplir la condición de comparación para al menos uno de los valores generados por la subconsulta.

En el ejemplo siguiente se comprueba si los valores del campo están dentro de un intervalo de valores especificado:

Ejemplo 5FieldName [NOT] BETWEEN Start_Range AND End_Range

customer.postalcode BETWEEN 90000 AND 99999

En el ejemplo siguiente se comprueba si al menos una fila cumple los criterios de la subconsulta. Cuando la condición de filtro incluye EXISTS, la condición de filtro se evalúa como True (.T.) a menos que la subconsulta se evalúe como el conjunto vacío.

Ejemplo 6 [NOT] EXISTS (subconsulta)

EXISTS ;

(SELECT * FROM orders WHERE customer.postalcode =

orders.postalcode)

Ejemplo 7FieldName [NOT] IN Value_Set

customer.postalcode NOT IN ("98052","98072","98034")

Cuando la condición de filtro incluye IN, el campo debe contener uno de los valores antes de que se incluya su registro en los resultados de la consulta.

Ejemplo 8FieldName [NOT] IN (subconsulta)

customer.cust_id IN ;

(SELECT orders.cust_id FROM orders WHERE orders.city="Seattle")

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.

Ejemplo 9FieldName [NOT] LIKE cExpression

customer.country NOT LIKE "USA"

Esta condición de filtro busca cada campo que coincida con cExpression. Puede usar los caracteres comodín signo de porcentaje (%) y subrayado ( _ ) como parte de cExpression. El carácter de subrayado representa un único carácter desconocido en la cadena.

GROUP BY GroupColumn [, GroupColumn ...]
Agrupa las filas de la consulta en función de los valores de una o varias columnas. GroupColumn puede ser uno de los siguientes:

  • Nombre de un campo de tabla normal.

  • Campo que incluye una función de campo SQL.

  • Expresión numérica que indica la ubicación de la columna en la tabla de resultados. (El número de columna situado más a la izquierda es 1).

HAVING FilterCondition
Especifica una condición de filtro que los grupos deben cumplir para incluirse en los resultados de la consulta. HAVING debe usarse con GROUP BY y puede incluir tantas condiciones de filtro como desee, conectadas por el operador AND u OR. También puede usar NOT para invertir el valor de una expresión lógica.

FilterCondition no puede contener una subconsulta.

Una cláusula HAVING sin una cláusula GROUP BY se comporta como una cláusula WHERE. Puede usar alias locales y funciones de campo en la cláusula HAVING. Use una cláusula WHERE para obtener un rendimiento más rápido si la cláusula HAVING no contiene funciones de campo.

[UNION [ALL] SELECTCommand]
Combina los resultados finales de un SELECT con los resultados finales de otro SELECT. De forma predeterminada, UNION comprueba los resultados combinados y elimina las filas duplicadas. Use paréntesis para combinar varias cláusulas UNION.

ALL evita que UNION elimine las filas duplicadas de los resultados combinados.

Las cláusulas UNION siguen estas reglas:

  • No se puede usar UNION para combinar subconsultas.

  • Ambos comandos SELECT deben tener el mismo número de columnas en la salida de la consulta.

  • Cada columna de los resultados de la consulta de un SELECT debe tener el mismo tipo de datos y ancho que la columna correspondiente en la otra SELECT.

  • Solo la instrucción SELECT final puede tener una cláusula ORDER BY, que debe hacer referencia a las columnas de salida por número. Si se incluye una cláusula ORDER BY, afecta al resultado completo.

También puede usar la cláusula UNION para simular una combinación externa.

Al combinar dos tablas en una consulta, solo los registros con valores coincidentes en los campos de combinación se incluyen en la salida. Si un registro de la tabla primaria no tiene un registro correspondiente en la tabla secundaria, el registro de la tabla primaria no se incluye en la salida. Una combinación externa permite incluir todos los registros de la tabla primaria en la salida, junto con los registros coincidentes de la tabla secundaria. Para crear una combinación externa en Visual FoxPro, debe usar un comando SELECT anidado, como en el ejemplo siguiente:

SELECT customer.company, orders.order_id, orders.emp_id ;  
FROM customer, orders ;  
WHERE customer.cust_id = orders.cust_id ;  
UNION ;  
SELECT customer.company, 0, 0 ;  
FROM customer ;  
WHERE customer.cust_id NOT IN ;  
(SELECT orders.cust_id FROM orders)  

Nota

Asegúrese de incluir el espacio que precede inmediatamente a cada punto y coma. Si no, recibirá un error.

La sección del comando antes de la cláusula UNION selecciona los registros de ambas tablas que tienen valores coincidentes. No se incluyen las empresas cliente que no tienen facturas asociadas. La sección del comando después de la cláusula UNION selecciona los registros de la tabla de clientes que no tienen registros coincidentes en la tabla orders.

En cuanto a la segunda sección del comando, tenga en cuenta lo siguiente:

  • La instrucción SELECT dentro de los paréntesis se procesa primero. Esta instrucción crea una selección de todos los números de cliente en la tabla orders.

  • La cláusula WHERE busca todos los números de cliente de la tabla customer que no están en la tabla orders. Dado que la primera sección del comando proporcionó a todas las empresas que tenían un número de cliente en la tabla de pedidos, todas las empresas de la tabla de clientes ahora se incluyen en los resultados de la consulta.

  • Dado que las estructuras de las tablas incluidas en union deben ser idénticas, hay dos marcadores de posición en la segunda instrucción SELECT para representar orders.order_id y orders.emp_id de la primera instrucción SELECT.

    Nota

    Los marcadores de posición deben ser del mismo tipo que los campos que representan. Si el campo es un tipo de fecha, el marcador de posición debe ser { / / }. Si el campo es un campo de caracteres, el marcador de posición debe ser la cadena vacía ("").

ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]
Ordena los resultados de la consulta en función de los datos de una o varias columnas. Cada Order_Item debe corresponder a una columna en los resultados de la consulta y puede ser una de las siguientes:

  • Campo de una tabla FROM que también es un elemento select en la cláusula SELECT principal (no en una subconsulta).

  • Expresión numérica que indica la ubicación de la columna en la tabla de resultados. (La columna situada más a la izquierda es el número 1).

ASC especifica un orden ascendente para los resultados de la consulta, según el elemento de pedido o los elementos, y es el valor predeterminado para ORDER BY.

DESC especifica un orden descendente para los resultados de la consulta.

Los resultados de la consulta aparecen sin ordenar si no especifica un pedido con ORDER BY.

Comentarios

SELECT es un comando SQL integrado en Visual FoxPro como cualquier otro comando de Visual FoxPro. Cuando se usa SELECT para plantear una consulta, Visual FoxPro interpreta la consulta y recupera los datos especificados de las tablas. Puede crear una consulta SELECT desde la ventana del símbolo del sistema o un programa de Visual FoxPro (como con cualquier otro comando de Visual FoxPro).

Nota

SELECT no respeta la condición de filtro actual especificada con SET FILTER.

Comentarios del controlador

Cuando la aplicación envía la instrucción SQL ODBC SELECT al origen de datos, el controlador ODBC de Visual FoxPro convierte el comando en el comando SELECT de Visual FoxPro sin traducción a menos que el comando contenga una secuencia de escape ODBC. Los elementos incluidos en una secuencia de escape ODBC se convierten en la sintaxis de Visual FoxPro. Para obtener más información sobre el uso de secuencias de escape ODBC, vea Funciones de fecha y hora y en la referencia del programador de Microsoft ODBC, vea Secuencias de escape en ODBC.

Consulte también

CREATE TABLE: SQL
INSERT: SQL
SET ANSI
SET EXACT