Vous êtes sur la page 1sur 4

TP2_BIS : BASE DE DONNEES AVANCEES (S3 : 2022/2023)

PAR MR :
 Fonctions arithmétiques
I.CHANA
 Expressions et fonctions sur les chaînes de
caractères

Introduction :

Le langage SQL contient plusieurs fonctions le rendant puissant en terme de traitement des chaines de
caractères et aussi en terme de calcule arithmétique. Durant ce TP nous allons découvrir et pratiquer un
bon nombre de ces fonctions et qui sont d’ailleurs les plus utilisées. Nous découvrirons aussi
l’instruction DECODE

Consignes : Vous vous connectez à la base de données de gestion des ressource humaines
(scoot/tigger) exécuter la requette suivante si le compte scott est verrouillé ( Alter user scott identified
by mot_passe account unlock ;). Vous pouvez se connecter également à un autre schéma (celui crée
la séance précédente), puis tapez toutes ces fonctions sur votre éditeur des requêtes SQL en utilisant la
table DUAL dans la clause from, avec des exemples sur les nombres et les chaines de caractères de
votre choix. Un compte rendu contenant tous cet exemple, requêtes et résultats sera rendu à la fin de la
séance

Exemple : dans cet exemple on a utilisé deux fonctions POWER et REPLACE

- POWER(m,n) :retourne m à la puissance n(mn) 


Cas( 5,2) Requête> select POWER(5,2) from dual ;
Résultat :25
- REPLACE(chaine, avant,après) : Renvoie chaine dans laquelle toutes les occurrences de la
chaîne de caractères avant ont été remplacés par la chaîne de caractères après.

Cas(‘balatata’,’tata’,’lolo’)
Requête : select REPLACE (‘blatata’,’tata’,’lolo’) from dual;
Résultat : blalolo

Important !! : Un compte rendu contenant toutes les manipulations objet de ce TP est à rendre la fin de
la séance

I- Fonctions arithmétiques

 SIN(n), COS(n),TAN(n) : Renvoient le sinus ,cosinus et tangente de n, n étant un angle


exprimé en radians.

 EXP(n) : Renvoie e puissance n.

 LN(n) : Renvoie le logarithme népérien de n qui doit être un entier strictement positif.

 LOG(m,n) : Renvoie le logarithme en base m de n. m doit être un entier strictement supérieur


à 1, et n un entier strictement positif.
 MOD(m,n) : Renvoie le reste de la division entière de m par n, si n vaut 0 alors renvoie m.
Attention, utilisée avec au moins un de ses arguments négatifs, cette fonction donne des résultats
qui peuvent être différents d'un modulo classique. Cette fonction ne donne pas toujours un
résultat dont le signe du diviseur.

 POWER(m,n) : Renvoie m puissance n, m et n peuvent être des nombres quelconques entiers


ou réels mais si m est négatif n doit être un entier.
 SQRT(nb) : Renvoie la racine carrée de nb qui doit être un entier positif ou nul.
 FLOOR(nb) : Renvoie le plus grand entier inférieur ou égal à nb.
 CEIL(nb) : Renvoie le plus petit entier supérieur ou égal à nb.

 ROUND(n[,m]) : Si m est positif, renvoie n arrondi (et non pas tronqué) à m chiffres après la
virgule. Si m est négatif, renvoie n arrondi à m chiffres avant la virgule. m doit être un entier et
il vaut 0 par défaut.
 ABS(nb) : Renvoie la valeur absolue de nb.

 SIGN(nb) : Renvoie -1 si nb est négatif, 0 si nb est nul, 1 si nb est positif.

 TRUNC(n,m) : Si m est positif, renvoie n arrondi tronqué à m chiffres après la virgule. Si m est
négatif, renvoie n tronqué à m chiffres avant la virgule. m doit être un entier et il vaut 0 par
défaut.

Exemple : Donner pour chaque employé son salaire journalier.

SELECT ename, ROUND (sal/22,2) FROM emp;

La table emp se trouve dans le schéma SCOTT

II- Expressions et fonctions sur les chaînes de caractères

 Opérateur sur les chaînes de caractères

Il existe un seul opérateur sur les chaînes de caractères : la concaténation. Cet opérateur se note au
moyen de deux caractères |(barre verticale) accolés. Le résultat d'une concaténation est une chaîne de
caractères obtenue en écrivant d'abord la chaîne à gauche de || puis celle à droite de ||.

SELECT ename || '/' || job FROM emp;

 Fonctions sur les chaînes de caractères

Le paragraphe suivant contient les fonctions travaillant sur les chaînes de caractères et renvoyant des
chaînes de caractères.

 CONCAT(chaîne1,chaîne2) : Renvoie la chaîne obtenue en


concaténant ‘chaîne1’ à ‘chaîne2’. Cette fonction est équivalente à l'opérateur de
concaténation | |.
 INITCAP(chaîne) : Renvoie ‘chaîne’ en ayant mis la première lettre de chaque mot en
majuscule et toutes les autres en minuscule. Les séparateurs de mots sont les espaces et les
caractères non alphanumériques.

 LOWER(chaîne) : Renvoie ‘chaîne’ en ayant mis toutes ses lettres en minuscules.


 UPPER(chaîne) : Renvoie ‘chaîne’ en ayant mis toutes ses lettres en majuscules.

 LPAD(chaîne,long,[char]) : Renvoie la chaîne obtenue en complétant, ou en


tronquant, ‘chaîne’ pour qu'elle ait comme longueur long en ajoutant éventuellement à gauche
le caractère (ou la chaîne de caractères) ‘char’. La valeur par défaut de ‘char’ est un espace.

 RPAD(chaîne,n,[char]) : Renvoie la chaîne obtenue en complétant, ou en


tronquant, ‘chaîne’ pour qu'elle ait comme longueur long en ajoutant éventuellement à droite
le caractère (ou la chaîne de caractères) ‘char’. La valeur par défaut de char est un espace.

 LTRIM(chaîne[,ens]) : Renvoie la chaîne obtenue en parcourant à partir de la


gauche ‘chaîne’ et en supprimant tous les caractères qui sont dans ens. On s'arrête quand on
trouve un caractère qui n'est pas dans ens. La valeur de defaut de ens est un espace.

exemple: select ltrim('hhhkhhjhhhh','hk') from dual

 RTRIM(chaîne[,ens]) : Renvoie la chaîne obtenue en parcourant à partir de la droite de


‘chaîne’ et en supprimant tous les caractères qui sont dans ens. On s'arrête quand on trouve un
caractère qui n'est pas dans ens. La valeur de defaut de ens est un espace

exemple select rtrim('hhhkhhjhhhh','hj') from dual.

 REPLACE(chaine,avant,après) : Renvoie chaine dans laquelle toutes les occurrences de la


chaîne de caractères avant ont été remplacés par la chaîne de caractères après.

 SUBSTR(chaîne,m[,n]) : Renvoie la partie de chaîne commençant au caractère de la position


m et ayant une longueur de n.

 TRANSLATE (chaîne, avant, après) : Renvoie une chaîne de caractères en remplaçant chaque
caractère de chaîne présent dans ‘avant’ par le caractère situé à la même position dans ‘après’.
Les caractères de ‘chaîne’ non présents dans ‘avant’ ne sont pas modifiés. ‘avant’ peut
contenir plus de caractères que ‘après, dans ce cas les caractères de ‘avant’ sans correspondants
dans ‘aprè’s seront supprimés de ‘chaîne’.

Le paragraphe suivant contient les fonctions travaillant sur les chaînes de caractères et renvoyant des
entiers.

 INSTR(chaîne, sous-chaîne, début, occ) : Renvoie la position du premier caractère


de ‘chaîne’ correspondant à l'occurrence occ ( un entier ) de ‘sous-chaîne’ en commençant la
recherche à la position début ( entier).

- Exemple : select instr('bbbaabcaa','aa',1,2) from dual


 LENGTH (chaîne) : Renvoie la longueur de ‘chaîne’, exprimée en nombre de caractères.

 Application
- Se connecter au schéma HR, puis consulter la table EMPLOYEE et réaliser la requête suivante :
- Afficher le nom et prénom séparés par un espace pour touts les employées, avec les 3 premières
lettres des noms en majuscule et toute les lettres des prénoms en minuscule.

III) L’instruction DECODE


Une des instructions SQL les plus puissantes et négligées est l’instruction DECODE. Cette
instruction a la syntaxe suivante : DECODE(val, exp1, exp2, exp3, exp4, ..., def);
DECODE va d’abord évaluer la valeur ou expression val puis comparer l’expression exp1 à
val. Si val est égale a exp1, l’expression exp2 sera retournée. Si val n’est pas égale à exp1,
l’expression exp3 sera évaluée et retournera l’expression exp4 si val est égale à exp3. Ce
processus continue jusqu’`a ce que toutes les expressions aient été évaluées. S’il n’y a pas de
correspondance, la valeur par défaut def est renvoyée.

SELECT e.first_name,e.last_name,e.JOB_ID,
DECODE(e.JOB_ID, 'AD_PRES', '******', e.salary) FROM EMPLOYEES e
WHERE e.EMPLOYEE_ID in (SELECT z.manager_id FROM EMPLOYEES z);

Dans cet exemple, tous les noms de manager sont extraits avec leur salaire. Lorsque la ligne
identifiant le président ('AD_PRES') est affichée, on affiche ’******’ `a la place du salaire
Application
En utilisant le schéma HR ( table employees)
- Lister des employés en remplaçant le noms par "---" dans le département ayant le
department_id=90

Vous aimerez peut-être aussi