2. Trier, classer, calculer

2.1. Classer des données

Classer des données consiste, en SQL, à imposer l'ordre dans lequel elles doivent s'afficher. Dans le premier exemple que nous avons écrit, les marins sont sortis dans un ordre aléatoire, qui n'est d'ailleurs pas celui dans lequel on les a entrés. Imposer un ordre à cet affichage se fait en utilisant la directive order by, comme dans l'exemple suivant.

Exemple 7. Sélection classée par ordre alphabétique

select nom, prenom  from Marins  order  by nom, prenom  asc ;

Cette commande permet de classer les marins par nom puis par prénom en cas d’égalité de nom, dans l’ordre ascendant (mot-clé asc). Le résultat est le suivant.
NOM                            PRENOM
------------------------------ ------------------------------
Auguin                         Christophe
Bart                           Jean
Cartier                        Jacques
Dumont d'Urville               Jules
Dupleix                        Joseph
Moitessier                     Bernard
Montcalm                       Louis
Surcouf                        Robert
Tabarly                        Eric

2.2. Trier des données

Trier des données consiste à extraire des lignes d’une table suivant certains critères. Jusqu’à présent nous avons extrait l’ensemble des données de notre table Marins. Là nous souhaitons juste extraire les lignes qui nous intéressent. Par exemple, extrayons les marins nés au 18 ème siècle, soit entre 1701 et 1800 :

Exemple 8. Marins nés au 18 ème siècle

select nom, prenom,  from Marins 
    where ddnaissance <= 1701  and ddmort > 1801 
    order  by nom ;

Le résultat est bien entendu le suivant :
NOM                            PRENOM
------------------------------ ------------------------------
Bart                           Jean
Dupleix                        Joseph
Montcalm                       Louis

2.3. Effectuer des calculs

Le langage SQL permet également de calculer des expressions. Ces expressions peuvent prendre en paramètre une cellule unique, plusieurs cellules d'une même ligne, ou plusieurs cellules d'une même colonne. Ces types de calculs n’ont pas le même statut, comme nous le verrons dans la suite. Dans ce premier exemple, nous nous bornerons à calculer des expressions entre cellules d'une même ligne. Extrayons par exemple la liste des marins, en calculant l’âge qu’ils avaient le jour de leur mort. On peut obtenir cet âge simplement en soustrayant leur date de mort et leur date de naissance.

Exemple 9. Calcul de l'âge des marins

select nom, ddmort – ddnaissance  as age 
    from Marins  order  by age  asc ;

Remarquons que nous avons créé une colonne dans ce calcul, appelée age, et qui prend la valeur ddmort - ddnaissance. Une fois cette colonne créée dans le contexte de ce calcul, on peut effectuer un tri dessus. Le résultat de ce calcul est le suivant :
NOM                                   AGE
------------------------------ ----------
Auguin                             <null>
Montcalm                               47
Bart                                   52
Dumont d'Urville                       52
Surcouf                                54
Cartier                                66
Dupleix                                66
Tabarly                                67
Moitessier                             69
Remarquons de suite que Auguin est présent dans ce tableau, avec <null> comme valeur pour son âge. Ceci est attendu, et vient du fait que Auguin est toujours en vie, que son année de mort est <null>. Nous verrons le traitement des valeurs <null> en détails dans la suite. Ici nous avons créé une colonne supplémentaire dans une requête, résultat du calcul d’autres colonnes. On peut aussi regrouper des lignes entre elles, et effectuer des calculs numériques sur ces regroupements, que l’on appelle agrégations .

Exemple 10. Comptage des marins de notre table

select count(nom)  as nombre_de_marins  from Marins ;

La fonction count() compte le nombre de valeurs présentes dans le champ nom de l’intégralité de la table Marins. Il existe de nombreuses autres fonctions de ce type, pour calculer des moyennes, des écarts-type, etc… Le résultat est bien sûr :
NOMBRE_DE_MARINS
----------------
               9
On peut sélectionner une partie de la table, en ajoutant des critères :

Exemple 11. Comptage du nombre de marins nés depuis 1700

select count(nom) nombre_de_marins 
    from Marins 
    where ddnaissance <= 1700 ;

Voici le résultat :
NOMBRE_DE_MARINS
----------------
               6
Avec tous ces éléments, il devient possible de calculer la moyenne de l’âge auquel sont morts les marins depuis 1700 : Voici le résultat :

Exemple 12. Espérance de vie des marins nés depuis 1700

select avg(ddmort - ddnaissance)  as esperance_de_vie
    from Marins
    where ddnaissance > 1700 ;

Voici le résultat de cette requête.
ESPERANCE_DE_VIE
----------------
            57,8

2.4. Mise à jour d'une valeur

La mise à jour d’une ou plusieurs valeurs d’une ou plusieurs colonnes se fait à l’aide de la commande update. Si par exemple, une erreur s’est glissée dans la date de naissance d’un des marins, il est possible de la corriger à l’aide de la commande :

Exemple 13. Correction de la date de naissance de Jean Bart

update Marins  set ddnaissance = 1650
    where nom =  'Bart' ;
Une commande Update qui ne serait suivie d'aucune clause Where agirait sur toutes les lignes de la table concernée. Il faut donc être prudent lorsque l'on manipule cette commande.

Introduction à SQL
Retour au blog Java le soir
Cours & Tutoriaux
Table des matières
Introduction
1. Un peu d'histoire
2. Organisation de la présentation
Un premier exemple
1. Un premier exemple
1.1. Construction d'une première table
1.2. Enregistrer quelques données
1.3. Extraire des données
2. Trier, classer, calculer
2.1. Classer des données
2.2. Trier des données
2.3. Effectuer des calculs
2.4. Mise à jour d'une valeur
3. Sélection sur plusieurs tables
3.1. Ajout du lieu de naissance
3.2. Clés primaires et clés étrangères
Organisation des données
1. Introduction
2. Bases de données, schémas et tables
2.1. Création d'une table
2.2. Création d'une colonne
2.3. Contraintes sur une table
2.4. Nommage des contraintes
2.5. Exemples de création de tables
2.6. Modification d'une table
2.7. Effacement d'une table
2.8. Remarques sur restrict et cascade
3. Types de données
3.1. Les types numériques
3.2. Les types caractère
3.3. Les types temporels
3.4. Les types binaires
3.5. Type auto-incrémental de MySQL
3.6. Type auto-généré de Derby
3.7. Séquences d'Oracle
Manipulation des données
1. Introduction
2. Extraire des données : select
2.1. Extraire des données d'une table unique
2.2. Clause where
2.3. Requêtes imbriquées
2.4. Fonctions d'agrégation, groupage
3. Supprimer des données : delete
3.1. Forme générale du delete
3.2. Effacement en cascade
3.3. Fonctionnement du delete
4. Ajouter des données : insert
4.1. Forme générale de l' insert
4.2. Copie d'une table dans une autre
5. Mettre à jour des données : update
5.1. Forme générale de l' update
5.2. Mise à jour avec une requête imbriquée
Interrogations sur plusieurs tables
1. Introduction
2. Formes normales
2.1. Première forme normale
2.2. Deuxième forme normale
2.3. Troisième forme normale
2.4. Formes normales d'ordres supérieurs
3. Relations entre éléments
3.1. Cardinalité d'une relation
3.2. Relation 1:1
3.3. Relation 1:p
3.4. Relation p:1
3.5. Relation n:p
4. Jointures
4.1. Jointure interne
4.2. Jointure externe
4.3. Auto-jointure
5. Unions
6. Vues
6.1. Création d'une vue
6.2. Exemples de vues
Transactions
1. Introduction
2. Isolation des transactions
2.1. ACIDité d'une transaction
2.2. Définition de l'isolation
3. Gestion d'une transaction
3.1. Mode auto-commit
3.2. Fixer le niveau d'isolation
3.3. Démarrer une transaction
3.4. Terminer une transaction
3.5. Remarques importantes
Index
1. Introduction
2. Manipulation d'index
2.1. Création automatique d'index
2.2. Création manuelle d'index