SELECT constitue la base de toutes les requêtes dans l'édition High-performance Search. Chaque clause de requête avancée — filtrage, regroupement, tri et pagination — s'appuie sur une instruction SELECT. Pour en savoir plus sur la syntaxe des requêtes avancées, consultez les rubriques connexes.
Syntaxe
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 . *
Clauses
SELECT
Renvoie toutes les colonnes ou un sous-ensemble spécifique de colonnes de la table source.
Exemple 1 : Renvoyer toutes les colonnes.
SELECT * FROM table;
Exemple 2 : Renvoyer des colonnes spécifiques et leur attribuer un alias.
SELECT f1, f2 AS ff FROM table;
Exemple 3 : Renvoyer des valeurs distinctes en supprimant les doublons.
SELECT DISTINCT f FROM table;
WHERE
Filtre les lignes avant tout regroupement. Seules les lignes pour lesquelles l'expression booleanExpression est évaluée à true sont transmises aux clauses suivantes.
GROUP BY
Regroupe les lignes partageant les mêmes valeurs dans les colonnes spécifiées. Cette clause est généralement utilisée avec des fonctions d'agrégation.
SELECT f1, count(*) AS num
FROM t1
GROUP BY f1;
ORDER BY
Trie l'ensemble de résultats selon une ou plusieurs colonnes.
HAVING
Filtre les groupes après l'agrégation GROUP BY. Utilisez la clause HAVING pour appliquer des conditions sur les résultats agrégés.
Différence par rapport à WHERE :
| Clause | S'applique à | Évaluation |
|---|---|---|
WHERE |
Lignes individuelles | Avant le regroupement |
HAVING |
Groupes agrégés | Après le regroupement |
LIMIT
Limite le nombre de lignes renvoyées.
OFFSET
Ignore un nombre spécifié de lignes avant de renvoyer les résultats. Combinez les clauses OFFSET et LIMIT pour paginer les requêtes.
L'exemple suivant compte les lignes par groupe dans une sous-requête, puis filtre les groupes dont la valeur num dépasse 100 :
SELECT * FROM (
SELECT f1, count(*) AS num
FROM t1
GROUP BY f1
) tt
WHERE tt.num > 100;