Les nouveautés de la norme SQL:2008

Frédéric Brouard

La nouvelle norme SQL portera le nom de SQL:2008... Ce qui veut dire qu'elle devrait être publiée par l'ISO dans le courant de cette année. Voyons quelles en sont les nouveautés...

- Titre : Les nouveautés de la norme SQL:2008

- Auteur : Frédéric Brouard

- Parution : 6 mai 2008

- Licence : Copyright ® 2008 Frédéric Brouard. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Intro

- II. SQL:2008

- II-A. Nouveautés

- II-B. Modifications

- II-C. Syntaxes

- II-D. Exemples

- III. Conclusions

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

Syntaxe des nouveautés SQL:2008

-- 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

Exemples des nouveautés SQL:2008

-- 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_CMN

III - 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).