I. Intro▲

II. SQL:2008▲
II-A. Nouveautés▲
La fonction :
TRIM_ARRAY ( tableau, n )... qui permet d'extraire un sous tableau.
Une clause de limitation du nombre de ligne d'une requête qui ravira les afficionados de MySQL : OFFSET / FETCH.
De nouvelles fonctions de fenêtrage : ntile, lead, lag, first value, last value, nth value.
L'ordre TRUNCATE TABLE avec option pour la valeur de redémarrage de la colonne identity.
II-B. Modifications▲
Quelques amélioration mineures ont été apportées sur les éléments suivants : tableau, multiset, types distincs, curseurs et mécanismes d'auto incréments.
II-C. Syntaxes▲
-- paquets de lignes
NTILE ( <number of tiles> )
<number of tiles> :=
{ <simple value specification> | <dynamic parameter specification> }
-- valeur précédente, suivante
{ LEAD | LAG } ( <extent> [ , <offset> [ , <default expression> ] ] ) [ <null treatment> ]
<extent> : =
<value expression>
<offset> : =
<exact numeric>
<default expression> :=
<value expression>
<null treatment> :=
{ RESPECT NULLS | IGNORE NULLS }
-- première, dernière valeur
{ FIRST_VALUE | LAST_VALUE } ( <value expression> ) [ <null treatment> ]
-- nieme valeur
NTH_VALUE ( <value expression> , <nth row> ) [ <from first or last> ] [ <null treatment> ]
<nth row> .: =
{ <simple value specification> | <dynamic parameter specification> }
<from first or last> :=
{ FROM FIRST | FROM LAST }
-- retourner les lignes à partir de...
OFFSET <offset row count> { ROW | ROWS }
-- retourner n lignes
FETCH { FIRST | NEXT } [ <fetch first row count> ] { ROW | ROWS } ONLY
<offset row count> :=
<simple value specification>
<fetch first row count> :=
<simple value specification>II-D. Exemples▲
-- après la 25e ligne, prendre les 10 lignes suivantes dans l'ordre de la clause ORDER BY.
SELECT *
FROM T_CLIENT_CLI
ORDER BY 1
OFFSET 25 FETCH NEXT 10 ROWS
-- groupez en 10 paquets, pour chaque département, les noms des communes de chaque département
SELECT CMN_DEPARTEMENT, CMN_NUM_DEPARTEMENT,
NTILE(10) OVER(PARTITION BY CMN_DEPARTEMENT ORDER BY CMN_NOM) AS GROUPE_DEPARTEMENT
FROM T_COMMUNE_CMN
-- liste des communes par départements, avec n° de département suivant et précédent
SELECT CMN_NON_DEPARTEMENT, CMN_NOM, ROW_NUMBER(),
LEAD(CMN_NUM_DEPARTEMENT, 1, 0, IGNORE NULLS) OVER (ORDER BY CMN_NUM_DEPARTEMENT) AS PRECEDENT,
LAG(CMN_NUM_DEPARTEMENT, 1, 0, IGNORE NULLS) OVER (ORDER BY CMN_NUM_DEPARTEMENT) AS SUIVANT
-- obtenir, pour chaque département, la commune la plus importante en terme de démographie
SELECT CMN_DEPARTEMENT, CMN_NUM_DEPARTEMENT,
FIRST_VALUE(CMN_NOM) OVER(PARTITION BY CMN_DEPARTEMENT ORDER BY CMN_DEMOGRAPHIE DESC) AS VILLE_PLUS_PEUPLEE
FROM T_COMMUNE_CMNIII. Conclusions▲
On voit à l'évidence que la nouvelle et future norme SQL:2008 n'apporte rien de bien nouveau à l'essentiel du langage.
Il s'agit d'une version mineure, dans l'esprit du relationnel/objet, qui corrige certains défauts et des petits manques des versions antérieures (SQL:1999 et SQL:2003).



