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