FirebirdSQL logo

SELECT

affectation

Echantillonnage des données

Disponible en

DSQL, ESQL, PSQL

Syntaxe
[WITH [RECURSIVE] <cte> [, <cte> ...]]
SELECT
  [FIRST <limit-expression>] [SKIP <limit-expression>]
  [DISTINCT | ALL] <select-list>
FROM <table-reference> [, <table-reference> ...]
[WHERE <search-condition>]
[GROUP BY <value-expression> [, <value-expression> ...]]
[HAVING <aggregate-condition>]
[WINDOW <window-definition> [, <window-definition> ...]]
[PLAN <plan-expression>]
[UNION [DISTINCT | ALL] <query-term>]
[ORDER BY <sort-specification> [, <sort-specification> ...]]
[   { ROWS <value-expression> [TO <value-expression>] }
  | { [OFFSET <offset-fetch-expression> {ROW | ROWS}]
      [FETCH {FIRST | NEXT} [<offset-fetch-expression>] {ROW | ROWS} ONLY] }

]
[FOR UPDATE [OF <column-name-list>]]
[WITH LOCK [SKIP LOCKED]]
[OPTIMIZE FOR {FIRST | ALL} ROWS]
[INTO <variable-list>]

<variables-list> ::= varname varname ...]
Description

L’instruction SELECT extrait des données de la base de données et les transmet à l’application ou à la commande SQL appelante. Les données sont renvoyées sous la forme d’un ensemble de lignes (qui peuvent être 0 ou plus), chaque ligne contenant une ou plusieurs colonnes ou champs. L’ensemble des lignes renvoyées est le jeu de données de la commande résultante.

Les parties suivantes de la commande SELECT sont obligatoires :

  • Le mot-clé SELECT suivi d’une liste de champs. Cette partie précise ce qui est demandé à la base de données ;

  • Le mot-clé FROM suivi de l’objet échantillonné (par exemple une table). Cette partie indique au serveur où chercher les données demandées.

Dans sa forme la plus simple, SELECT récupère un certain nombre de champs d’une seule table, par ex :

SELECT id, name, address
FROM contacts

Ou, afin d’extraire tous les champs d’une table :

SELECT * FROM contacts

En pratique, la commande SELECT est généralement exécutée avec l’expression WHERE, qui contraint le jeu de données retourné. De même, le jeu de données résultant est généralement trié avec l’expression ORDER BY, puis contraint (afin d’organiser la navigation des données paginées) par les expressions FIRST …​ SKIP', `OFFSET …​ FETCH ou ROWS.

Une liste de champs peut contenir différents types d’expressions au lieu de noms de champs et la source n’est pas nécessairement une table ou une vue, elle peut aussi être une table dérivée, une expression de table générique (CTE) ou une procédure stockée sélective.

Plusieurs sources de données peuvent être jointes à l’aide de la clause JOIN, et plusieurs ensembles de données résultants peuvent être combinés à l’aide de la clause UNION.

Dans les sections suivantes, nous allons examiner en détail toutes les expressions de la commande SELECT et leur utilisation.

FIRST, SKIP

affectation

Récupération d’une partie des lignes d’un ensemble ordonné.

Syntaxe
SELECT [FIRST <m>] [SKIP <limit-expression>]
FROM ...
...

<m>, <limit-expression> ::=
    <integer-literal>
  | <query-parameter>
  | (<integer-expression>)
Table 1. Paramètres des fonctions FIRST et SKIP
Paramètre Description

integer-literal

Littéral entier.

query-parameter

Paramètre de la demande? en DSQL et :paramname en PSQL.

integer-expression

Une expression qui renvoie une valeur entière.

Important

FIRST et SKIP ne sont utilisés que dans Firebird, ils ne sont pas inclus dans le standard SQL. Il est recommandé d’utiliser [fblangref-dml-select-fetch-offset] dans la mesure du possible.

L’expression FIRST m limite le jeu de données résultant au nombre spécifié de m enregistrements.

L’expression SKIP saute le nombre spécifié d’enregistrements n avant de sortir le jeu de données résultant.

FIRST et SKIP n sont des expressions facultatives.

Lorsque ces expressions sont utilisées ensemble, par exemple "FIRST m SKIP n, le résultat est que n enregistrements seront ignorés et, parmi les enregistrements restants, m enregistrements seront retournés dans le jeu de données résultant.