FirebirdSQL logo

Exemples

Dans la requête ci-dessous, la sélection sera triée en ordre croissant par les colonnes RDB$CHARACTER_SET_ID, RDB$COLLATION_ID de la table RDB$COLLATIONS :

SELECT
    RDB$CHARACTER_SET_ID AS CHARSET_ID,
    RDB$COLLATION_ID AS COLL_ID,
    RDB$COLLATION_NAME AS NAME
FROM RDB$COLLATIONS
ORDER BY RDB$CHARACTER_SET_ID, RDB$COLLATION_ID

Idem, mais trié par alias de colonne :

SELECT
    RDB$CHARACTER_SET_ID AS CHARSET_ID,
    RDB$COLLATION_ID AS COLL_ID,
    RDB$COLLATION_NAME AS NAME
FROM RDB$COLLATIONS
ORDER BY CHARSET_ID, COLL_ID

La requête suivante est triée, par numéro de colonne :

SELECT
    RDB$CHARACTER_SET_ID AS CHARSET_ID,
    RDB$COLLATION_ID AS COLL_ID,
    RDB$COLLATION_NAME AS NAME
FROM RDB$COLLATIONS
ORDER BY 1, 2

Comme mentionné ci-dessus, ce tri est également acceptable, mais non recommandé :

SELECT *
FROM RDB$COLLATIONS
ORDER BY 3, 2

Dans cette requête, la deuxième colonne de la table BOOKS est triée :

SELECT
    BOOKS.*,
    FILMS.DIRECTOR
FROM BOOKS, FILMS
ORDER BY 2
Warning

Notez que les expressions dont le résultat doit être un entier non négatif seront interprétées comme des numéros de colonne et soulèveront une exception si elles ne sont pas comprises entre 1 et le nombre de colonnes.

SELECT
  X, Y, NOTE
FROM PAIRS
ORDER BY X+Y DESC

Notes :

  • Le nombre renvoyé par une fonction ou une procédure à partir d’un UDF ou d’une procédure stockée est imprévisible, que le tri soit défini par l’expression elle-même ou par le numéro de colonne ;

  • Seuls les entiers non négatifs sont interprétés comme un numéro de colonne. Un nombre entier obtenu par un seul calcul d’une expression ou d’une substitution de paramètre est mémorisé comme une constante entière, puisque cette valeur est la même pour toutes les lignes.

Trier dans l’ordre décroissant des valeurs de la colonne PROCESS_TIME avec les valeurs NULL placées au début de la sélection :

SELECT *
FROM MSG
ORDER BY PROCESS_TIME DESC NULLS FIRST

Tri d’un échantillon obtenu en combinant les échantillons de deux requêtes. L’échantillon est trié par valeurs décroissantes dans la deuxième colonne avec les valeurs NULL à la fin de la liste et par valeurs croissantes dans la première colonne avec les valeurs NULL au début de la liste.

SELECT
  DOC_NUMBER, DOC_DATE
FROM PAYORDER
UNION ALL
SELECT
  DOC_NUMBER, DOC_DATE
FROM BUDGORDER
ORDER BY 2 DESC NULLS LAST, 1 ASC NULLS FIRST

ROWS

affectation

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

Syntaxe
SELECT <columns> FROM ...
  [WHERE ...]
  [ORDER BY ...]
  ROWS <value-expression> [TO <value-expression>]
Table 1. Paramètres de la clause ROWS
Paramètre Description

value-expression

Toute expression entière.

La clause ROWS a été introduite pour la compatibilité avec Interbase 6.5 et plus.

Contrairement à FIRST et SKIP, la clause ROWS accepte tous les types d’expressions entières comme argument - sans parenthèses ! Bien entendu, les parenthèses peuvent être nécessaires pour effectuer des calculs corrects dans une expression, et la requête imbriquée doit également être entourée de parenthèses.Si le résultat de l’expression n’est pas un entier, il sera converti en entier si possible.

Important
  • La numérotation des enregistrements dans l’ensemble de données commence par 1.

  • Les clauses FIRST/SKIP et ROWS peuvent être utilisées sans la clause ORDER BY, bien que cela ait rarement un sens, sauf si vous voulez jeter un coup d’oeil rapide aux données de la table - les lignes résultantes seront le plus souvent dans un ordre aléatoire. Dans ce cas, une requête telle que SELECT * FROM TABLE1 ROWS 20 renverra les 20 premières entrées plutôt que la table entière (qui peut être très grande).

L’appel de ROWS m renverra les m premiers enregistrements de l’ensemble de données.