SQL A Module 01
SQL A Module 01
SQL A Module 01
Module n°
SQL Avancé
PSBDMF!
Programme de Formation de Supinfo
Les fonctions CUBE et ROLLUP sont utilisées avec GROUP BY pour obtenir des super agrégats de lignes par
références croisées aux colonnes.
Les opérations de ROLLUP et de CUBE sont spécifiées dans la clause GROUP BY d’une requête.
Le groupement ROLLUP retourne le même résultat q’une requête avec un GROUP BY, mais il retourne
également des lignes de résultat prenant en compte tous les sur ensembles.
Le groupement CUBE retourne le même résultat que le groupement ROLLUP mais il retourne également des
lignes de résultat prenant en compte tous les sous-ensemble.
L’opérateur ROLLUP est une extension de la clause GROUP BY qui permet de produire des agrégats
cumulatifs tels que des sous totaux.
L’opérateur ROLLUP crée des groupements en parcourant dans une direction, « de la droite vers la gauche »,
la liste de colonnes spécifiée dans la clause GROUP BY. Il effectue ensuite la fonction de groupe à ces
groupements.
L’opérateur ROLLUP crée des sous totaux allant du niveau le plus détaillé à un total général, suivant la liste de
groupement spécifié. Il calcule d’abord les valeurs standards de la fonction de groupe pour les groupements
spécifiés dans la clause GROUP BY, puis il crée des sous totaux pour les sur ensembles, en parcourant la liste
des colonnes de droite a gauche.
Pour deux arguments dans l’opérateur ROLLUP d’un GROUP BY, la requête retournera n+1=2+1=3
groupements. Les lignes résultant des valeurs des n premiers arguments sont appelées lignes originales et les
autres sont appelées lignes de grand ensemble.
Exemple:
13 ligne(s) sélectionnée(s).
-> Cette requête affiche la somme des salaires pour chaque fonction dans chaque
département ainsi que la somme des salaires pour chaque département et pour tous les
départements.
L’opérateur CUBE est une extension de la clause GROUP BY qui permet de retourner des valeurs de sous
ensembles avec un ordre SELECT et qui peut être utilisé avec toutes les fonctions de groupe.
Alors que ROLLUP ne retourne qu’une partie des combinaisons de sous totaux possibles, CUBE retourne
toutes les combinaisons possibles des groupes spécifiés dans le GROUP BY ainsi qu’un total. Toutes les
valeurs retournées sont calculées à partir de la fonction de groupe spécifiée dans la liste de SELECT.
L’opérateur CUBE retourne donc le même résultat que ROLLUP mais il y a en plus la fonction de groupe
appliquée au sous groupe.
Le nombre de groupes supplémentaires dans le résultat est déterminé par le nombre de colonnes inclues dans
la clause GROUP BY, car chaque combinaison de colonnes est utilisée pour produire de grands ensembles.
Donc si il y a n colonnes ou expressions dans le GROUPY BY, il y aura 2ⁿ combinaisons de grands ensembles
possibles.
Exemple :
Lors de l’utilisation des opérateurs ROLLUP et CUBE, des champs vides apparaissent dans la présentation du
résultat. Pour ne pas confondre ces champs avec des valeurs NULL il existe la fonction GROUPING. Elle
permet également de déterminer le niveau du sous total, c'est-à-dire le ou les groupes à partir desquels sont
calculés les sous totaux.
La fonction GROUPING ne peut recevoir qu’une seule colonne en argument. Cet argument doit être le même
qu’une des expressions de la clause GROUP BY.
Exemple :
13 ligne(s) sélectionnée(s).
-> Cette requête affiche deux colonnes GROUPING qui indiquent si les champs deptno et job
ont été calculés avec l’opérateur ROLLUP. Lorsque que la valeur renvoyée est 1 cela signifie
que la colonne en argument n’a pas été prise en compte et donc que ce n’est pas une valeur
NULL.
Quand la fonction GROUPING est utilisée avec l’opérateur CUBE, la colonne GROUPING(deptno) contiendra
un 1 et la colonne GROUPING(job) un 0 car la colonne deptno n’est pas prise en compte pour calculer la
somme du sous groupe
Pour faciliter la programmation avancée en SQL, Oracle8i release 2 a introduit des fonctions analytiques pour
faciliter les calculs tels que les moyennes variables et les classements.
Les groupes définis par la clause GROUP BY d’un ordre SELECT sont appelés partition. Le résultat d’une
requête peut se composé d’une partition contenant toutes les lignes, quelques grandes partition, ou de
nombreuses petites partitions contenant chacune peu de lignes. Les fonctions analytiques s’appliquent à
chaque ligne dans chaque partition.
SELECT column,group_function(argument),
RANK() OVER([PARTITION BY column] ORDER BY
group_function(argument [DESC])
FROM table
GROUP BY column
Exemple :
11 ligne(s) sélectionnée(s).
-> Cette requête affiche le classement de la somme des salaires par département et pour tous
les départements.
Le classement s’effectue sur les colonnes spécifiées dans le ORDER BY, si aucune partition n’est spécifiée le
classement se fait sur toutes les colonnes. RANK assigne un rang de 1 a la plus petite valeur sauf lorsque que
l’ordre DESC est utilisé.
La fonction de distribution cumulative calcule la position relative d’une valeur par rapport aux autres valeurs de
la partition.
La fonction CUME_DIST détermine la partie des lignes de la partition qui sont inférieures ou égales à la valeur
courante. Le résultat est une valeur décimale entre zéro et un inclus. Par défaut, l’ordre est ascendant, c'est-à-
dire que la plus petite valeur de la partition correspond au plus petit CUME_DIST.
Exemple :
9 ligne(s) sélectionnée(s).
-> Cette requête affiche le CUME_DIST de la somme des salaires pour chaque job dans
chaque département.
2 RECUPERATION HIERARCHIQUE.
2.1 Aperçu des requêtes hiérarchiques
2.1.1 Dans quel cas utiliser une requête hiérarchique ?
Les requêtes hiérarchiques permettent de récupérer des données basées sur une relation hiérarchique
naturelle entre les lignes dans une table.
Une base de donnée relationnelle ne stocke pas les données de manière hiérarchique. Cependant, quand une
relation hiérarchique existe entre les lignes d’une seule table, il est possible de faire du tree walking qui permet
de construire la hiérarchie. Une requête hiérarchique est un moyen d’afficher dans l’ordre les branches d’un
arbre.
Une structure en arbre est constituée d’un nœud parent qui se divise en branches enfants qui elles-mêmes se
divisent en branches et ainsi de suite. Par exemple la table EMP, qui représente le management d’une
entreprise, a une structure en arbre avec aux nœuds les managers et sur les branches tous les employés qui
leurs sont affectés. Cette hiérarchie est possible grâce aux colonnes EMPNO et MGR. La relation de hiérarchie
est produite par un self-join : le numéro de manager d’un employé correspond au numéro d’employé de son
manager.
La relation parent-enfant d’une structure en arbre permet de contrôler :
Î La direction dans laquelle la hiérarchie est parcourue
Î Le point de départ dans la hiérarchie
Les requêtes hiérarchiques sont des requêtes contenant les clauses CONNECT BY et START WITH.
LEVEL est une pseudo colonne qui retourne 1 pour le nœud racine, 2 pour la branche de la racine et ainsi de
suite. LEVEL permet de calculer jusqu’à quel niveau l’arbre a été parcouru.
START WITH permet de spécifier le nœud racine de la hiérarchie. Pour effectuer une vraie requête
hiérarchique, cette clause est obligatoire.
CONNECT BY PRIOR permet de spécifier les colonnes pour lesquelles il existe une relation de parenté entre
les lignes.
La requête SELECT ne doit pas contenir de jointure.
Le point de départ du parcours est précisé dans la clause START WITH de la requête hiérarchique. START
WITH peut être utilisée avec toutes les conditions valides et elle peut contenir une sous requête.
Si la clause START WITH n’est pas précisée dans la requête, le parcours de l’arbre est commencée avec
toutes les lignes de la table en tant que nœud racine. Si la requête comporte une clause WHERE, toutes les
lignes satisfaisant la condition sont considérées comme nœuds racines. Cette structure ne reflète plus un arbre
hiérarchique.
Les clauses START WITH et CONNECT BY PRIOR ne font pas partie du langage ANSI SQL standard.
Le sens de parcours de l’arbre est déterminé par les arguments de la clause CONNECT BY PRIOR. L’arbre
peut être parcouru dans deux sens : de l’enfant vers le parent ou du parent vers l’enfant. L’opérateur PRIOR
fait référence à la ligne parent.
Pour trouver l’enfant d’une ligne parent, le serveur Oracle examine le premier argument de PRIOR pour avoir la
ligne parent et la compare avec toutes les lignes désignées par le deuxième argument. Les lignes pour
lesquelles la condition est vérifiée sont le parent et l’enfant.
Le serveur Oracle choisit toujours les enfants en évaluant la condition du CONNECT BY et en respectant la
ligne parent actuelle.
Par exemple pour parcourir la table EMP de haut en bas, il faut définir une relation hiérarchique dans laquelle
la valeur EMPNO de la ligne parent est égale à la valeur MGR de la ligne enfant.
Exemple :
Les expressions en argument peuvent porter sur plusieurs colonnes. Mais dans ce cas l’opérateur PRIOR n’est
valable que pour le premier argument.
Exemple :
La pseudo colonne LEVEL permet d’afficher explicitement le rang ou niveau d’une ligne dans la hiérarchie.
Cela permet de créer des rapports plus faciles à exploiter et à comprendre.
Dans un arbre l’endroit où une ou plusieurs branches se séparent d’une branche supérieure est appelée nœud
et la fin d’une branche est appelée feuille ou nœud feuille. La valeur de la pseudo colonne LEVEL dépend du
nœud sur lequel se trouve la ligne. La valeur de LEVEL sera 1 pour le nœud parent, puis 2 pour un enfant et
ainsi de suite.
Le premier nœud d’un arbre est appelé nœud racine, alors que tous les autres sont appelés nœud enfant. Un
nœud parent est un nœud ayant au moins un enfant. Un nœud feuille est un nœud ne possédant pas d’enfant.
Il est possible de refléter la structure de la hiérarchie dans une seule colonne en combinant la pseudo colonne
avec un LPAD (cf. cours SQLP « Module 1 : Ordres SELECT Basiques » § 4.2.2 « Les fonctions de
manipulation de caractère »).
Cette représentation sera sous la forme d’un arbre indenté.
Exemple :
14 ligne(s) sélectionnée(s).
-> Cette requête ajoute des espaces devant les noms des employés en fonction de leur
niveau dans la hiérarchie.
Dans une requête hiérarchique il est possible de supprimer une branche ou un nœud de l’arbre.
Pour éliminer une branche il faut utiliser une condition WHERE. Ainsi la branche concernée n’est pas prise en
compte mais les branches enfants situées après sont quand même affichées.
Laboratoire Supinfo des Technologies Oracle Page 12 / 32
http://www.labo-oracle.com 07/03/2003
SQL Avancé - Version 1.2
Exemple :
Pour éliminer un nœud il faut ajouter la condition dans la clause CONNECT BY. Ainsi ni le nœud concerné, ni
les branches enfants de ce nœud ne sont affichées.
Il est possible d’ordonner les données d’une requête hiérarchique en utilisant la clause ORDER BY. Cependant
ceci n’est pas conseillé car l’ordre naturel de l’arbre sera brisé.
Par défaut, les valeurs NULL sont affichées en premier lors d’un classement décroissant. Avec Oracle8i
release 2 il est possible de forcer les valeurs NULL à apparaître en dernier en ajoutant NULLS LAST dans la
clause ORDER BY.
La fonction ROW_NUMBER donne à chaque ligne de la partition un numéro suivant la séquence définie dans
la clause ORDER BY.
Exemple :
14 ligne(s) sélectionnée(s).
-> Cette requête numérote les lignes en se basant sur la valeur de la commission et en
plaçant les valeurs NULL à la fin.
Une sous requête corrélée est une sous requête imbriquée qui est évaluée pour chaque ligne traitée par la
requête principale, et qui, lors de son exécution, utilise les valeurs d’une colonne retournée par la requête
principale. La corrélation est obtenue en utilisant un élément de la requête externe dans la sous requête.
Etapes d’exécution d’une requête corrélée :
Î Récupère la ligne à utilisée (renvoyée par la requête externe)
Î Exécute la requête interne en utilisant la valeur de la ligne récupérée
Î Utilise la valeur retournée par la requête interne pour conserver ou éliminer la ligne
Î Recommence jusqu'à ce qu’il n’y ait plus de lignes
Les sous requêtes sont principalement utilisée dans des ordres SELECT mais elles peuvent aussi s’appliquer
aux ordres UPDATE et DELETE.
Une requête corrélée est un moyen de lire chaque ligne d’une table et de comparer la valeur trouvée avec une
donnée correspondante d’une autre table. Commentaire : Cette
définition n’est pas claire et
SELECT outer1, outer2, ... contient un « la » en trop. A
FROM table1 alias1 reformuler.
21/08 : Corrigé
WHERE outer1 operator
(SELECT inner1
FROM table2 alias2
WHERE alias1.expr1 =
alias2.expr2);
Elle est utilisée quand une sous requête doit retourner différents résultats selon la ligne considérée par la
requête principale, c'est-à-dire qu’on l’utilise pour répondre à une question complexe dont la réponse dépend
de chaque ligne considérée par la requête principale.
Le serveur Oracle effectue une requête corrélée quand la sous requête fait appel à une colonne d’une table de
la requête parent.
Exemple :
6 ligne(s) sélectionnée(s).
Æ Cette requête affiche tous les employés qui ont un salaire supérieur au salaire moyen de
leur département.
Quand les requêtes internes et externes font appel à la même table il faut utiliser des alias afin que les
résultats ne soient pas faussés.
Dans les ordres SELECT imbriqués, tous les opérateurs logiques peuvent être utilisés mais en plus lorsqu’il
s’agit d’ordres SELECT imbriqués, on peut utiliser l’opérateur EXISTS. Cet opérateur teste l’existence de lignes
dans la sous requête.
Si la sous requête renvoie une ligne :
Î La recherche ne continue pas dans la sous requête.
Î La condition est évaluée TRUE
Si la sous requête ne renvoie pas de valeurs pour une ligne :
Î La condition est évaluée FALSE
Î La recherche se poursuit à la ligne suivante dans la sous requête
L’opérateur NOT EXISTS quant à lui teste si la valeur n’est pas trouvée.
Exemple :
6 ligne(s) sélectionnée(s).
Æ Cette requête affiche tous les employés ayant au moins une personne à ses ordres.
Comme elle effectue uniquement un test, la requête interne n’a pas besoin de retourner de valeur donc on peut
utiliser n’importe quel valeur littérale. Il est d’ailleurs conseillé d’utiliser une constante à la place d’une colonne
afin d’accélérer la requête.
Exemple :
DEPTNO DNAME
---------- --------------
40 OPERATIONS
Æ Cette requête affiche les départements dans lesquels il n’y a aucun employés.
Une structure NOT IN peut être utilisée en alternative à un opérateur NOT EXISTS. Cependant il faut faire
attention car la condition sera évaluée FALSE si elle rencontre une valeur NULL. Commentaire : Il serait
judicieux d’ajouter ici deux
Exemple : exemples, l’un avec « not
exists » et l’autre « not in » pour
montrer dans quel cas il est
SQL> SELECT o.ename trompeur d’utiliser ce dernier
2 FROM emp o 22-08 : Corrigé
3 WHERE NOT EXISTS (SELECT 'X'
4 FROM emp i
5 WHERE i.mgr = o.empno);
ENAME
----------
SMITH
ALLEN
WARD
MARTIN
TURNER
ADAMS
JAMES
MILLER
8 ligne(s) sélectionnée(s).
-> Cette requête affiche tous les employés n’ayant personne sous leurs ordres.
La requête de l’exemple peut être également construite avec NOT IN seulement le résultat sera totalement
différent puisque les valeurs NULL seront prises en compte.
Exemple :
Il est donc conseillé, lorsque la sous requête retourne des valeurs NULL, de ne pas utiliser NOT IN en
alternative de NOT EXISTS.
Commentaire : Un exemple
concret ne ferait pas de mal ici
3.3 UPDATE corrélés non plus après la description de
la syntaxe. Ce qu’on recherche
Une sous requête corrélée peut être utilisée dans le cas d’un ordre UPDATE pour mettre à jour les lignes d’une souvent dans une doc ce sont
les exemples donc donnons
table en fonction des lignes d’une autre table. leurs des exemples.
22-08 : Corrigé
Page 17 / 32 Laboratoire Supinfo des Technologies Oracle
07/03/2003 http://www.labo-oracle.com
SQL Avancé - Version 1.2
Exemple :
Exemple :
Opérateur Résultat
INTERSECT Sélectionne toutes les lignes similaires retournées par les requêtes (INTERSECT
combine deux requêtes et retourne uniquement le valeurs du premier SELECT qui
sont identiques à au moins une de celles du second SELECT)
UNION Renvoie toutes les lignes sélectionnées par les deux requêtes en excluant les
lignes identiques
UNION ALL Renvoie toutes les lignes sélectionnées par les deux requêtes en incluant les
lignes identiques
MINUS Renvoie toutes les lignes retournées par le premier SELECT qui ne sont pas
retournées par le second SELECT
Tous les opérateurs d’ensemble ont une priorité égale. Si un ordre SQL contient plusieurs de ces opérateurs, le
serveur les exécute de la droite vers la gauche (du plus imbriqué au moins imbriqué) si aucune parenthèse ne
définit d’ordre explicite.
Les opérateurs INTERSECT et MINUS sont spécifiques à Oracle.
Commentaire : Un exemple
4.2 UNION et UNION ALL concret. Ce qu’on recherche
souvent dans une doc ce sont
les exemples donc donnons
4.2.1 L’opérateur UNION leurs des exemples.
22-08 : Corrigé
L’opérateur UNION combine le résultat de plusieurs requêtes en éliminant les lignes retournées par les deux
requêtes.
Le nombre de colonnes et le type de données doivent être identiques dans les deux ordres SELECT. Les noms
de colonnes peuvent être différents.
UNION agit sur toutes les colonnes sélectionnées
Les valeurs NULL ne sont pas ignorées lors de la vérification des doublons.
Les requêtes utilisant UNION dans la clause WHERE doivent avoir le même nombre de colonnes et le même
type de données dans la liste SELECT.
Par défaut, le résultat sera trié selon un ordre ascendant en fonction de la première colonne de la liste de
SELECT.
Exemple :
L’opérateur UNION ALL retourne toutes les lignes d’une requête multiple sans éliminer les doublons.
Contrairement à l’opérateur UNION, les résultats de la requête ne sont pas triés par défaut. Le mot clé
DISTINCT ne peut être utilisé.
Exemple :
Si l’on remplace UNION par UNION ALL, la requête renvoie 23 lignes puisqu’elle affiche tous les
résultats en incluant les doublons.
4.3 INTERSECT
4.3.1 L’opérateur INTERSECT
L’opérateur INTERSECT retourne uniquement les résultats communs aux deux requêtes.
Le nombre de colonnes et le type des données doivent être identiques dans les deux ordres SELECT, mais les
noms peuvent être différents.
L’inversion des tables dont on fait l’intersection ne change pas le résultat.
Comme UNION, INTERSECT n’ignore pas les valeurs NULL.
Les requêtes qui utilisent INTERSECT dans la clause WHERE doivent avoir le même nombre et le même type
de colonnes que dans la liste de SELECT.
Exemple :
Si l’on ajoute une colonne dans la liste des SELECT il se peut que le résultat de la requête soit
différent.
4.4 MINUS
4.4.1 L’opérateur MINUS
L’opérateur MINUS retourne les lignes résultantes de la première requête et qui ne se trouvent pas dans les
résultats de la seconde (la première requête MOINS la seconde).
Comme pour les autres opérateurs il faut veiller à respecter le nombre de colonne et le type de données. Il faut
également faire attention lors de l’utilisation avec la clause WHERE.
6 ligne(s) sélectionnée(s).
Æ Cette requête affiche le nom, le numéro d’employé et la fonction des employés ayant
quittés la compagnie (les employés présents dans la table EMP_HISTORY MOINS les
employés de la table EMP)
Les expressions dans les listes de SELECT doivent avoir le même nombre de colonnes et le même type de
données. Les noms des colonnes affichés dans le résultat sont ceux du premier SELECT.
Les lignes doublons sont automatiquement retirées excepté lors de l’utilisation de l’opérateur UNION ALL.
Les résultats sont triés en ordre ascendant par défaut sauf dans le cas de UNION ALL. La clause ORDER BY
peut être utilisée mais uniquement en fin de requête. Comme les noms de colonnes affichés sont ceux de la
première liste SELECT, l’argument de ORDER BY doit être un nom du premier SELECT.
Des parenthèses peuvent être utilisées pour modifier l’ordre d’exécution, qui par défaut va de l’opérateur le
plus imbriqué au moins imbriqué.
Les requêtes utilisant un opérateur d’ensemble dans leur clause WHERE doivent avoir le même nombre et
type de colonnes dans leur liste SELECT.
Pour afficher une colonne qui n’a pas d’équivalent dans une des tables, on peut faire appel à la table DUAL et
aux fonctions de conversions de données pour respecter la syntaxe. Dans le résultat de la requête, les lignes
Commentaire : Attention,
issues de la table n’ayant pas la colonne équivalente renverront l’expression littérale dans un des champs. l’exemple ne correspond pas au
paragraphe. Où est DUAL dans
Exemple : cet exemple ?
22-08 : Dans l’exemple je
SQL> SELECT deptno, TO_CHAR(null) AS location, hiredate démontre l’utilisation des
fonctions de conversions de
2 FROM emp données. La table DUAL est
3 UNION utilisée dans l’exemple suivant.
Laboratoire Supinfo des Technologies Oracle Page 22 / 32
http://www.labo-oracle.com 07/03/2003
SQL Avancé - Version 1.2
18 ligne(s) sélectionnée(s).
Æ Cette requête affiche le numéro de département, la location, et la date d’embauche pour
tous les employés.
Exemple :
Mon rêve
---------------------
Je voudrais apprendre
au monde à
chanter
Æ L’utilisation de la colonne A_DUMMY permet de trier le résultat afin d’afficher une phrase
correcte. La commande NOPRINT permet de ne pas afficher la colonne contenant le critère
de tri.
Préfixe Description
USER_ Liste tous les objets dont l’utilisateur est propriétaire
ALL_ Liste tous les objets sur lesquels l’utilisateur a des droits d’accès, en plus des objets dont il
est propriétaire
DBA_ Autorise les utilisateurs possédant des privilèges DBA à lister tous les objets de la base de
données
V$_ Affiche les performances du serveur de base de données ; initialement disponible uniquement
pour le DBA
Exemple :
11 ligne(s) sélectionnée(s).
Æ Cette requête génère une ligne de création d’une nouvelle table pour chaque table dont
l’utilisateur est propriétaire.
La requête de l’exemple utilise la vue USER_TABLE afin de connaître le nom des tables de l’utilisateur. Parmi
les vues couramment utilisées il y a également USER_OBJECTS, USER_TAB_PRIVS_MADE et
USER_COL_PRIVS_MADE.
TERMOUT Contrôle l’affichage du résultat généré par l’exécution d’un fichier de commande
PAGESIZE Contrôle le nombre de lignes par page (La définir à 0 supprime les en-têtes, les sauts
de page, les titres)
FEEDBACK Contrôle l’affichage du nombre de lignes renvoyées par la requête
ECHO Active ou non l’affichage de la liste des commandes exécutées lors du lancement d’un
script
SPOOL dropem.sql
SPOOL OFF
SET FEEDBACK ON
SET PAGESIZE 24
SET ECHO ON
Æ Cette requête SQL écrit dans un fichier en générant des ordres pour toutes les tables dont
l’utilisateur est le propriétaire. Le résultat envoyé dans le fichier ne contiendra que les ordres
DROP grâce à l’utilisation des commandes de contrôle d’environnement.
Source Résultat
‘’’X’’’ ‘X’
‘’’’ ‘
‘’’’||dname||’’’’ ‘BOSTON’
‘’’,’’’ ‘,’
‘’’) ;’ ‘) ;
‘l’’apostrophe’ l’apostrophe
Exemple :
Exemple :
ENAME
----------
ADAMS
Æ Cette requête génère un ordre SELECT qui renvoie les données des employés d’un
département et qui on été embauchés un certain jour. La clause WHERE de cet ordre est
générée automatiquement selon les données fournies par l’utilisateur.
La commande SET est une variable système qui affecte la façon dont SQL*Plus exécute les commandes. Elle
permet de contrôler l’affichage des résultats d’une requête SQL.
Les variables de la commande SET sont utilisées pour :
Contrôler le nombre de lignes vides entre les résultats
Contrôler le nombre d’espaces entres les colonnes
Créer des rapports avec des noms évocateurs, des groupes et des sous totaux
Etablir une valeur pour remplacer les valeurs NULL
Afficher des titres de colonnes spécifiques
La commande SHOW ALL permet de voir les paramètres actuels de toutes les variables. SHOW suivi du nom
du paramètre pour n’afficher que ce paramètre.
Option Description
NEW_V[ALUE] variable Définit une variable contenant la valeur d’une colonne et qui peut être utilisée
dans la commande TTITLE
NOPRI[NT] PRI[NT] Contrôle si une colonne est affichée ou non
CLE[AR] DEF[AULT] Assigne aux paramètres d’affichage des colonnes les valeurs par défauts
Pour effacer tous les paramètres de COMPUTE sur les colonnes, on peut utiliser la commande CLEAR
COMPUTE.
Pour pouvoir obtenir le résultat souhaité avec la commande COMPUTE il faut utilisé la commande BREAK (cf.
Module 2 : Récupération de données, § 4.3.4 « La commande BREAK ») sur la ou les colonnes concernées
par le COMPUTE.
Exemple :
6 ligne(s) sélectionnée(s).
Æ Cette requête utilise la commande COMPUTE pour faire calculer le total des salaires pour Commentaire : Dans ton
chaque job listés dans la clause WHERE et pour chaque départements. exemple, c’est le maximum et
non pas la somme que tu
calcules. De plus je ne
Pour effectuer un COMPUTE sur l’ensemble du rapport il faut utiliser l’option SKIP REPORT dans la comprends pas l’intérêt d’un
commande BREAK et COMPUTE…ON REPORT dans la commande COMPUTE. Ainsi le résultat pour tout le COMPUTE sur deptno et job,
rapport sera affiché en fin de page. vu que le résultat est le même.
Il est possible de renommer la ligne contenant le COMPUTE en utilisant LABEL suivi du nom après la fonction Dans le cas d’un exemple
d’illustration ce n’est pas très
de groupe du COMPUTE. Ainsi dans le rapport la ligne issue du COMPUTE sera renommée en utilisant le parlant.
paramètre du LABEL. 22-08 : MAX remplacé par
SUM, c’est peut être un peu
plus parlant mais je ne vois pas
trop comment faire un exemple
plus parlant. Sinon il faut juste
faire le COMPUTE sur une
seule colonne, mais ici c’est
juste pour montrer que l’on peut
le faire sur plusieurs colonnes.
SQL> SELECT *
2 FROM emp;
SQL> SELECT *
2 FROM dept;
SQL> SELECT *
2 FROM emp_history;
9 ligne(s) sélectionnée(s).