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.
Transcription textuelle
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 relationsWHERE conditionORDER BY liste ordonnée d'attributsLes 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 parentORDER 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 parentORDER 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 nomFROM 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.