Tri (ORDER BY) et dédoublonnage (SELECT DISTINCT)
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectifs
Savoir trier les résultats d'une requête SQL.
Savoir enlever les doublons des résultats d'une requête SQL.
Mise en situation
Les enregistrements d'une table ne sont pas ordonnés, ce qui implique que l'ordre des résultats d'une requête de sélection n'est pas prévisible.
Or il peut être très utile de trier les résultats selon un critère, par exemple pour afficher les articles en stock, en allant des prix les plus bas aux pris les plus hauts.
Aussi, lorsque l'on ne récupère que quelques attributs d'une table, comme le nom d'une personne, il y des risques de doublons. Comment supprimer ces doublons de l'affichage ?
SQL fournit des instructions pour le tri et le dédoublonnage des résultats.
Fondamental : Tri des enregistrement
On peut trier les résultats de sélection en fonction des valeurs de certains attributs des enregistrements retournés.
Syntaxe : ORDER BY
SELECT liste d'attributs projetés
FROM liste de relations
WHERE condition
ORDER BY liste ordonnée d'attributs
Les tuples sont triés d'abord par le premier attribut spécifié dans la clause ORDER BY
, puis en cas de doublons par le second, etc.
Exemple :
SELECT *
FROM parent
ORDER BY nom, age;
Remarque : Tri décroissant
Le tri défini à l'aide de ORDER BY
est un tri croissant. Pour effectuer un tri décroissant on fait suivre l'attribut du mot-clé DESC
.
Exemple :
SELECT *
FROM parent
ORDER BY nom, age DESC;
Attention : Dédoublonnage des enregistrement
L'opérateur SELECT
n'élimine pas les doublons (i.e. les tuples identiques dans la relation résultat) par défaut. Il faut pour cela utiliser l'opérateur SELECT DISTINCT
.
Exemple :
CREATE TABLE parent (
id INTEGER PRIMARY KEY,
nom VARCHAR(255),
prenom VARCHAR(255),
age INTEGER CHECK (age > 0)
);
INSERT INTO parent VALUES (1, 'Brasseur', 'Alexandre', 91);
INSERT INTO parent VALUES (2, 'Brasseur', 'Pierre', 67);
SELECT nom
FROM parent;
nom
----------
Brasseur
Brasseur
(2 rows)
Cette requête sélectionne l'attribut nom
de la relation parent
et renvoie tous les enregistrements.
SELECT DISTINCT nom
FROM parent;
nom
----------
Brasseur
(1 row)
Cette requête sélectionne l'attribut nom
de la relation parent
et renvoie les enregistrements sans doublons (donc elle ne renvoie qu'un seul enregistrement si plusieurs parents ont le même nom).
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.