Todos los productos
Search
Centro de documentos

Lindorm:SELECT

Última actualización: Sep 05, 2026

Consulta datos de una tabla.

Motores compatibles

La sintaxis de SELECT aplica para LindormTable y LindormTSDB.

Límites

SELECT solo admite consultas planas (de una sola tabla). No es compatible con consultas de unión de varias tablas (JOIN) ni con consultas de conjuntos (UNION, INTERSECT).

Sintaxis

SELECT [hint_clause] ( select_clause | '*' )
    FROM table_name
    [ WHERE where_clause ]
    [ GROUP BY group_by_clause ]
    [ ORDER BY ordering_clause ]
    [ LIMIT integer [OFFSET integer] ] | [LIMIT integer, integer]
select_clause    ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector         ::=  column_name
                      | term
                      | function_name '(' [ selector ( ',' selector )* ] ')'
where_clause     ::=  relation ( AND|OR relation )*
relation         ::=  column_name operator term
                      |'(' column_name ( ',' column_name )* ')' operator tuple_literal
operator         ::=  '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL | LIKE
group_by_clause  ::=  column_name ( ',' column_name )*
ordering_clause  ::=  column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*

hint_clause::=/*+hint_items*/
hint_items::=hint_item(','hint_item)*
hint_item::=identifier('('hint_option(','hint_option)*')')
hint_option::=expression

Notas de uso

Cláusula SELECT

La cláusula SELECT especifica las columnas, constantes y expresiones de función que se devolverán. Use AS para definir un alias temporal para una columna en el conjunto de resultados.

Cláusula WHERE

La cláusula WHERE especifica las condiciones de la consulta.

Consultas de tablas anchas

Importante

Para evitar consultas ineficientes en tablas anchas, siga estas reglas:

  • Use únicamente la primera columna de clave primaria o la primera columna de índice de la tabla de índices como condición de consulta, O BIEN

  • Si necesita filtrar por cualquier otra columna, establezca un límite superior e inferior para la primera columna de clave primaria o la primera columna de índice. Las consultas que incumplan ambas reglas se marcan como ineficientes y se bloquean de forma predeterminada. Para forzar la ejecución de este tipo de consultas, agregue /*+ _l_allow_filtering_ */. Consulte Force an inefficient query.

A continuación se muestra la diferencia entre una consulta eficiente y una ineficiente sobre la tabla sensor, cuya primera columna de clave primaria es device_id:

-- Allowed: first primary key column (device_id) is used as a condition
SELECT * FROM sensor WHERE device_id = 'F07A1260' AND humidity = 20;

-- Not allowed: no bound on device_id; filtering on a non-primary-key column only
-- This query is flagged as inefficient and blocked unless _l_allow_filtering_ is added.
SELECT * FROM sensor WHERE humidity = 20;

Columnas dinámicas

Si las columnas dinámicas están habilitadas para la tabla ancha:

  • Incluya columnas de clave primaria o de índice en la cláusula WHERE para garantizar el rendimiento de la consulta.

  • Las condiciones sobre columnas dinámicas en la cláusula WHERE deben ser HexStrings.

Para obtener más información, consulte Dynamic columns.

Cláusula ORDER BY

Especifica una o más columnas para ordenar el conjunto de resultados.

Importante
  • Cada columna de la cláusula ORDER BY también debe aparecer en la cláusula SELECT. De lo contrario, se genera un error de comprobación semántica.

  • La cláusula ORDER BY no admite alias.

Cláusula LIMIT

La cláusula LIMIT controla cuántas filas se devuelven y admite consultas paginadas.

Sintaxis

Comportamiento

LIMIT n

Devuelve n filas

LIMIT n, m

Omite n filas y luego devuelve m filas

LIMIT m OFFSET n

Equivalente a LIMIT n, m

Importante
  • Mantenga OFFSET en 5,000 o menos. Incluso con un OFFSET, la consulta recupera internamente las filas omitidas, por lo que los valores altos de OFFSET aumentan la sobrecarga de la consulta.

  • Si las columnas dinámicas están habilitadas, SELECT * requiere una cláusula LIMIT para garantizar metadatos correctos en el conjunto de resultados. El valor máximo predeterminado de LIMIT para estas consultas es 5,000; si se supera este valor, se devuelve un error.

HINT

LindormTable y LindormTSDB admiten hints para influir en los planes de consulta o habilitar comportamientos específicos. Para obtener más detalles, consulte HINT overview.

Ejemplos

Los ejemplos de este tema utilizan la siguiente tabla:

CREATE TABLE sensor (
    device_id   VARCHAR NOT NULL,
    region      VARCHAR NOT NULL,
    time        BIGINT  NOT NULL,
    temperature DOUBLE,
    humidity    BIGINT,
    PRIMARY KEY(device_id, region, time)
);

Consultas simples

-- Select all columns
SELECT * FROM sensor;

-- Select specific columns
SELECT device_id, region, humidity FROM sensor;

-- Limit results with an offset (LIMIT 5, 20 is equivalent)
SELECT * FROM sensor WHERE device_id = 'F07A1260' LIMIT 20 OFFSET 5;

-- Define a column alias
SELECT count(*) AS countRow FROM sensor;

Ejemplos de funciones espaciotemporales:

-- Return the WKT representation of a geometry column
SELECT id, ST_AsText(g) FROM gps_data;

-- Return a buffered geometry
SELECT id, ST_Buffer(g, 1.0) AS buffer FROM gps_data;

Consultas de agregación

Cuente todos los registros del dispositivo F07A1260 en un momento específico:

SELECT count(*) FROM sensor
WHERE device_id = 'F07A1260' AND time = '2021-04-22 15:33:00';

Obtenga la temperatura máxima del dispositivo F07A1260 durante un intervalo de tiempo:

SELECT max(temperature) AS max_temp FROM sensor
WHERE device_id = 'F07A1260'
  AND time >= '2021-04-22 15:33:00'
  AND time <  '2021-04-22 15:33:20';

Consultas condicionales

Consulte la humedad del dispositivo F07A1260 cuando la región y la temperatura cumplan condiciones compuestas, y la humedad no sea nula:

SELECT device_id, humidity FROM sensor
WHERE ((region = 'north-cn' AND temperature > 15)
    OR (region = 'south-cn' AND temperature > 10))
  AND device_id = 'F07A1260'
  AND humidity IS NOT NULL;

Consulte datos de varios dispositivos mediante IN:

SELECT * FROM sensor WHERE device_id IN ('F07A1260', 'F07A1261');

Consultas condicionales espaciotemporales: las tres condiciones espaciales siguientes admiten una ejecución eficiente:

-- ST_Contains: points inside a polygon
SELECT id FROM gps_data
WHERE ST_Contains(ST_GeomFromText('POLYGON((...))'), g);

-- ST_DWithin: points within a planar distance (unit: degrees)
SELECT id FROM gps_data
WHERE ST_DWithin(ST_GeomFromText('POINT(0 0)'), g, 100);

-- ST_DWithinSphere: points within a spherical distance (unit: meters)
SELECT id FROM gps_data
WHERE ST_DWithinSphere(ST_GeomFromText('POINT(0 0)'), g, 100);

Forzar una consulta ineficiente

Cuando LindormTable detecta que una instrucción SELECT es ineficiente, bloquea la consulta de forma predeterminada y genera una excepción. Esto protege el rendimiento general del sistema.

Una consulta se considera ineficiente cuando se cumplen todas las siguientes condiciones:

  • La cláusula WHERE no establece un límite superior e inferior para la primera columna de clave primaria.

  • La cláusula WHERE no establece un límite superior e inferior para la primera columna de índice de la tabla de índices.

  • La cláusula WHERE filtra por una columna que no es ni la primera columna de clave primaria ni la primera columna de índice.

Para omitir la comprobación y forzar la ejecución de la consulta, agregue /*+ _l_allow_filtering_ */:

SELECT /*+ _l_allow_filtering_ */ * FROM sensor WHERE humidity = 20;

Para obtener orientación sobre cómo resolver o evitar consultas ineficientes, consulte How to resolve or avoid inefficient queries.