Archives par mot-clé : ORDER BY

Instruction SQL ORDER BY

Pour trier explicitement les données extraites à l’aide d’une instruction SELECT, la clause ORDER BY est utilisée.

Le mot-clé ORDER BY trie les enregistrements par ordre croissant par défaut. Pour trier les enregistrements par ordre décroissant, utilisez le mot-clé DESC.

Syntaxe:

SELECT colonne1, colonne2, ... 
  FROM nom_table 
  ORDER BY colonne1, colonne2, ... ASC|DESC;

Base de données DB2 :

Vous trouverez ci-dessous une sélection de la table “Product” de la base de données DB2.

ID-ProduitNom-ProduitCategoriePrixStockValeur-Totale
7001SourisAccessoires75,00
7002Disque durAccessoires65,00201 300
7003ClavierAccessoires36.00331 118,00
7004RAMComposants23.5016376,00
7005VTTvélos1 200
7006StyloPapeterie7.45dix74,50
7007Clé USBAccessoires65,00201 300

Exemple 1 : tri par colonnes simples

SELECT ID-Produit, Nom-Produit, Categorie, Prix
  FROM Produit
  ORDER BY Prix;

Cette instruction trie les données par ordre alphabétique dans l’ordre croissant de la colonne Prix.

Résultat:
ID-ProduitNom-ProduitCategoriePrix
7006StyloPapeterie7.45
7004RAMComposants23.50
7003ClavierAccessoires36.00
7002Disque durAccessoires65,00
7007Clé USBAccessoires65,00
7001SourisAccessoires75,00
7005VTTvélos1 200

Exemple 2 : tri sur plusieurs colonnes

Pour trier sur plusieurs colonnes, spécifiez simplement les noms de colonne séparés par des virgules dans la clause ORDER BY.

SELECT ID-Produit, Nom-Produit, Prix
  FROM Produit
  ORDER BY Prix, Nom-Produit;

Ce code récupère trois colonnes et trie les résultats par deux d’entre eux, d’abord par Price puis par ProductName (c’est-à-dire si plusieurs enregistrements sont présents avec le même prix, ces enregistrements seront à nouveau triés en fonction du nom).

Résultat:
ID-ProduitNom-ProduitPrix
7006Stylo7.45
7004RAM23.50
7003Clavier36.00
7002Disque dur65,00
7007Clé USB65,00
7001Souris75,00
7005VTT1 200

Exemple 3 : Trier par position de colonne

ORDER BY prend également en charge le classement spécifié par la position relative des colonnes.

SELECT ID-Produit, Prix, Nom-Produit
  FROM Produit
 ORDER BY 2, 3;

ORDER BY 2 signifie trier par la deuxième colonne de la liste SELECT, la colonne Prix. ORDER BY 2, 3 signifie trier par Price puis par ProductName.

Résultat:
ID-ProduitPrixNom-Produit
70067.45Stylo
700423.50RAM
700336.00Clavier
700265,00Disque dur
700765,00Clé USB
700175,00Souris
70051 200VTT

Exemple 4 : Spécification du sens de tri

Le tri des données ne se limite pas aux ordres de tri croissants (de A à Z). Bien qu’il s’agisse de l’ordre de tri par défaut, la clause ORDER BY peut également être utilisée pour trier par ordre décroissant (de Z à A).

Pour trier par ordre décroissant, le mot-clé DESC doit être spécifié.

SELECT ProductID, ProductName, Price FROM Product ORDER BY Price DESC ;

Ce SQL trie les produits par prix dans l’ordre décroissant (produit le plus cher présent en premier).

Résultat:
ID-ProduitNom-ProduitPrix
7005VTT1 200
7001Souris75,00
7002Disque dur65,00
7007Clé USB65,00
7003Clavier36.00
7004RAM23.50
7006Stylo7.45

Clause SQL HAVING

En plus de pouvoir regrouper des données à l’aide de GROUP BY, SQL vous permet également de filtrer les groupes à inclure et ceux à exclure.

Par exemple, vous pouvez souhaiter une liste de tous les clients qui ont passé au moins deux commandes. Pour obtenir ces données, vous devez filtrer en fonction du groupe complet, et non des lignes individuelles.

HAVING est très similaire à WHERE. La seule différence est que WHERE filtre les lignes et HAVING filtre les groupes. WHERE filtre avant que les données ne soient regroupées et HAVING filtre après que les données soient regroupées.

De plus, la clause HAVING a été ajoutée à SQL car le mot-clé WHERE ne pouvait pas être utilisé avec les fonctions d’agrégation.

Base de données DB2 :

Vous trouverez ci-dessous une sélection de la table “Commandes” de la base de données DB2.

Numéro-CommandeNuméro-ClientDate-Commande
1001102020-09-08
1002992020-09-01
1003172020-08-25
1004762020-07-19
1005992020-09-21
1006172020-08-25
1007762020-05-19
1008992020-03-01
1009302020-06-25
1010402020-09-19
1011762020-05-19
1011992020-05-19

Exemple 1:

L’instruction SQL suivante sélectionne la liste de tous les clients qui ont passé au moins deux commandes.

SELECT Numero_Client, COUNT(*) AS Commandes
   FROM Commandes
   GROUP BY Numero_Client
   HAVING COUNT(Numero_Client) >= 2;

Dans cette instruction, la clause GROUP BY est utilisée pour regrouper les données par numéro de client afin que la fonction COUNT(*) puisse renvoyer le nombre de commandes passées par chaque numéro de client.

La clause HAVING filtre les données afin que seules les commandes avec deux éléments ou plus soient renvoyées.

Résultat:

Numéro-ClientCommandes
172
763
994

Exemple 2 : Regroupement et tri

Pour trier la sortie de GROUP BY, vous devez utiliser ORDER BY.

SELECT Numero_Client, COUNT(*) AS Commandes
    FROM Commandes
    GROUP BY Numero_Client
    HAVING COUNT(Numero_Client) >= 2;
     ORDER BY COUNT(Numero_Client) DESC;

Dans cette instruction, la clause GROUP BY est utilisée pour regrouper les données par numéro de client afin que la fonction COUNT(*) puisse renvoyer le nombre de commandes passées par chaque numéro de client.

La clause HAVING filtre les données afin que seules les commandes avec deux éléments ou plus soient renvoyées. Enfin, la sortie est triée à l’aide de la clause ORDER BY.

Résultat:

Numéro-ClientCommandes
994
763
172