Comment classer nos données en SQL et utiliser la variable de substitution

Publié le 10 septembre 2012 par Lolokai @lolokai

Introduction

Cet article est la suite logique de celui-ci (on utilisera le même script): http://www.lolokai.com/sgbd/linstruction-select-et-la-clause-where/

Un état des lieux s’impose, lors du précèdent article on a vu ensemble comment interroger simplement notre base de données avec l’instruction SELECT et surtout comment restreindre les données retournées avec la clause WHERE.

Dans cet article nous allons voir comment ordonner nos données et comment utiliser la variable de substitution.

L’ordonnancement de nos données

Jusqu’à présent nous savons comment renvoyer nos données, mais ces données sont renvoyées de manière aléatoire. Souvent pour une raison x , il nous sera souhaitable d’avoir nos données ordonnées en fonction d’une ou de plusieurs colonnes.

Pour se faire nous allons utiliser la clause optionnelle ORDER BY de l’instruction SELECT. La clause ORDER BY doit être placée après la clause WHERE si celle-ci existe.

Voici la syntaxe de cette clause :

ORDER BY column_name [,….] [ASC | DESC] 

Toute colonne spécifiée après notre clause peut être ordonnée de manière croissante ou décroissante. Par défaut Oracle ordonne nos données de manière croissante , il suffira donc de rajouter le mot clé DESC pour classer nos données par ordre décroissant.

Retournez le nom, prénom , age des personnes:  du plus jeune au moins jeune.

SELECT lastname, firstname , age FROM C1 ORDER BY age ;

Retournez le nom, prénom, l’age des personnes ayant moins de 68 ans et ordonnez le resultat du moins jeune au plus jeune.

SELECT lastname, firstname, age FROM C1 WHERE age < 68 ORDER BY age DESC ;

La variable de substitution

La variable de substitution va nous permettre d’utiliser nos requêtes plusieurs fois de manière « dynamique ». Allez houst , je vous explique cela avec un exemple concret ( c’est bien mieux :p )

Supposons que nous ayons une requete comme celle-ci :

SELECT lastname , firstname , age FROM C1 WHERE age = 20 ; 

Par exemple, si nous voulons utiliser cette requête pour avoir les informations sur les personnes ayant 22 et 68 ans , on devra chaque fois retourner dans le code et modifier notre clause WHERE (je ne sais pas pour vous , mais une fois ma requête créée , je n’aime pas  retourner dans mon code :p ). Pour pallier à cela on va utiliser une variable de substitution , ainsi a chaque fois qu’on exécutera notre requête un prompt nous sera affiché ,  nous demandons ainsi d’entrer une valeur. (C’est cool hein ? ☺ )

SELECT lastname , firstname , age FROM C1 WHERE age = &s_age ;

Ici nous voyons que pour avoir une variable de substitution, il faut précéder le nom de la variable par une esperluette (&) .

Lorsque vous utilisez une seul esperluette (comme dans notre exemple) à chaque fois qu’oracle en verra une , il vous demandera de rentrer une valeur. Dans le cas ou nous voudrions utiliser plusieurs fois notre variable de substitution , cette manière de faire peut devenir très vite fastidieuse.

Pour éviter de rentrer à chaque fois la même valeur nous allons utiliser deux esperluettes (&). Lors de la première utilisation de la variable de substitution , il faudra mettre &nom_variable et pour les autres occurrences de notre variable, il faudra juste en mettre une , &nom_variable.

Supposons qu’on ai un script qui contient deux requêtes : la première retourne les personnes ayant 22 ans ou plus et la deuxieme retourne les personnes ayant 22 ou moins.

Exemple 1

SELECT * FROM C1 WHERE age > &s_age ;
SELECT * FROM C1 WHERE age < &s_age ;

Exemple 2 :

SELECT * FROM C1 WHERE age > &s_age ;
SELECT * FROM C1 WHERE age < &s_age ;

Dans l’exemple 1 nous allons devoir rentrer deux fois le nombre 22 , alors que dans l’exemple deux Oracle ne nous demandera qu’une seule fois d’entrer la valeur.

Quelques astuces

Vous l’aurez sans doute remarquer lorsqu’on utilise la variable de substitution , nous avons un prompt sans message , on a juste le nom de la variable.Il faut savoir qu’on peut mettre un message avec la commande suivante :

ACCEPT nom_variable PROMPT notre_message

Exemple :

ACCEPT s_age PROMPT 'Veuillez rentrer un age s’il vous plait : '
SELECT lastname , firstname , age FROM C1 WHERE age <  &s_age ;

Essayez de relancer votre script après avoir utilisé une variable de substitution avec une double esperluette (&)… Vous remarquerez qu’Oracle ne vous demande plus de valeur , et qu’il utilise toujours la même valeur…

Pour donner une nouvelle valeur à votre variable il va falloir la « réinitialiser » la variable avec la commande :

UNDEFINE nom_variable

Exemple :

UNDEFINE s_age
ACCEPT s_age PROMPT 'Veuillez rentrer un age s’il vous plait : '
SELECT lastname , firstname , age FROM C1
WHERE age <  &s_age ;
SELECT lastname , firstname , age FROM C1
WHERE age > &s_age ;

Conclusion

Voilà nous arrivons au terme de cet article, en résumé nous avons vu comment classer nos données avec la clause ORDER BY et comment utiliser la variable de substitution.

J’espère que tout est clair pour vous , si vous avez des questions n’hésité pas à me laisser un commentaire ☺Said ASSOUMANI