SELECT es la base de todas las consultas en High-performance Search Edition. Cada cláusula de consulta avanzada (filtrado, agrupación, ordenamiento y paginación) se construye sobre una instrucción SELECT. Para consultar la sintaxis de consultas avanzadas, consulte los temas relacionados.
Sintaxis
SELECT [ DISTINCT ]
{ * | projectItem [, projectItem ]* }
FROM tableExpression
[ WHERE booleanExpression ]
[ GROUP BY { groupItem [, groupItem ]* } ]
[ ORDER BY { orderByItem [, orderByItem ]* } ]
[ HAVING booleanExpression ]
[ LIMIT number ]
[ OFFSET number ]
projectItem:
expression [ [ AS ] columnAlias ]
| tableAlias . *
Cláusulas
SELECT
Devuelve todas las columnas o un conjunto específico de columnas de la tabla de origen.
Ejemplo 1: Devolver todas las columnas.
SELECT * FROM table;
Ejemplo 2: Devolver columnas específicas y asignar un alias.
SELECT f1, f2 AS ff FROM table;
Ejemplo 3: Devolver valores distintos y eliminar duplicados.
SELECT DISTINCT f FROM table;
WHERE
Filtra las filas antes de que se realice cualquier agrupación. Solo las filas en las que booleanExpression se evalúa como true se pasan a las cláusulas siguientes.
GROUP BY
Agrupa las filas que comparten los mismos valores en las columnas especificadas; se utiliza generalmente con funciones de agregación.
SELECT f1, count(*) AS num
FROM t1
GROUP BY f1;
ORDER BY
Ordena el conjunto de resultados por una o más columnas.
HAVING
Filtra los grupos después de la agregación de GROUP BY. Utilice HAVING para aplicar condiciones sobre los resultados agregados.
Diferencia con WHERE:
|
Cláusula |
Opera sobre |
Se evalúa |
|
|
Filas individuales |
Antes de la agrupación |
|
|
Grupos agregados |
Después de la agrupación |
LIMIT
Restringe el número de filas devueltas.
OFFSET
Omite un número específico de filas antes de devolver los resultados. Utilice OFFSET junto con LIMIT para realizar consultas paginadas.
A continuación se muestra un ejemplo que cuenta las filas por grupo en una subconsulta y luego filtra los grupos donde num supera 100:
SELECT * FROM (
SELECT f1, count(*) AS num
FROM t1
GROUP BY f1
) tt
WHERE tt.num > 100;