Les fonctions
Les fonctions
2
Introduction
Syntaxe:◦ nom_fonction (arg1, arg2, …)
Exemple : SUBSTR(nom, 1,4)◦ Ceci retourne les 4 premier
caractères Frederic Fred
Une fonction peut être utilisée là où l’on peut utiliser un nom de colonne
SELECTnom
FROMemploye
WHERELENGTH(nom) = 6;
Il y a deux grands types de fonctions :◦ Fonctions individuelles qui s’appliquent à
des données. Exemple : LENGTH(nomColonne)
◦ Fonctions de groupes basées sur des regroupements de lignes. Exemple: SUM(nomColonne)
Selon le type de données, les fonctions individuelles sont subdivisées en:◦ Fonctions numériques◦ Fonction de caractères
Retournant des nombres Retournant des caractères
◦ Fonction de dates◦ Autres
3
Types de fonctions
C'est l'ensemble des fonctions qui traitent des chaînes de caractères.
Il y en a une vingtaine. Exemples:
CHR(n) retourne le caractère dont le code ASCII est n en décimal.
SELECT CHR(75)FROM DUAL;
Retourne le caractère K.
Note : la table DUAL est une utilisée lors d’une interrogation sans table. Ex: SELECT sysdate FROM DUAL;
4
Fonctions caractères
Fonctions caractères retournant des caractères
FONCTION Valeur retournée
CHR(n) Caractère équivalent à la valeur ASCII n.
CONCAT(ch1,ch2) Concaténation de ch1 avec ch2.
INITCAP(ch) La première lettre de ch est capitalisée.
LOWER (ch) Transforme tous les caractères en minuscule.
LPAD(ch1,n[,ch2])Left padding( L=left pour gauche)
ch1 est précédé de k fois ch2 sur une longueur totale de n positions (k sera donc fonction de n, ch1 et ch2).
5
Fonctions caractères retournant des caractères
LTRIM (ch,[,chaîne])( L=left pour gauche)
La première lettre de ch est enlevée si elle existe dans la chaîne. Le procédé continue jusqu'à ce qu'on rencontre une lettre n'existant pas dans la chaîne.
REPLACE(ch,ch1,ch2) Remplace toute occurrence de ch1 dans ch par ch2.
RPAD(ch1,n[,ch2])R=right pour droite
ch1 est suivi de k fois ch2 sur une longueur totale de n positions (k sera donc fonction de n, ch1 et ch2).
RTRIM (ch,[,chaîne])(R=right pour droite)
La dernière lettre de ch est enlevée si elle existe dans la chaîne. Le procédé continue jusqu'à ce qu'on rencontre une lettre n'existant pas dans la chaîne.
V-6
Fonctions caractères retournant des caractères
SUBSTR(ch,m[,n])
Affiche n caractères de ch, commençant par le m ième caractère.
TRANSLATE(ch,ancienne,nouvelle)
Remplace toute occurrence de ancienne dans ch par nouvelle (sert à encoder des données)
UPPER(ch) Tous les caractères de ch sont mis en majuscule.
7
Fonctions de caractères retournant des nombres
FONCTION Valeur retournée
ASCII(ch) Valeur décimale du caractère.
LENGTH(ch) Longueur de ch en caractères.
INSTR(ch1,ch2¸[,n[,M]])
Position de la m ième occurrence de ch2 dans ch1, à partir du n iène caractère.
8
Produire la liste des commis avec leur salaire
SELECT INITCAP(Nom) Employé,
‘$’ || LPAD(salaire,6, ’*’) Salaire FROM
employe WHERE
LOWER(poste) = 'commis';
9
Exemple de fonctions caractères
Employé Salaire
Admin $**1100
Bertrand $***950
Parent $**1300
Rivest $***800
C'est l'ensemble des fonctions qui traitentdes nombres
Il y en a une vingtaine. Exemples:
◦ ABS (n) : retourne la valeur absolue de n.◦ ROUND(n,m) : retourne la valeur de n arrondie
à 10-m position. Par défaut, arrondi à l’unité (m=0)
◦ Valeur de m et correspondance: -1 : dizaine, -2 : centaine, -3 : milliers 1 : dixième, 2 : centième, 3 : millième
Exemple:◦ Produire la liste des employés avec leur salaire
arrondi aux milliers de dollars.
SELECT nom, ROUND ( salaire , -3 ) FROM employe;
10
Fonctions numériques
Fonctions numériques
FONCTIONn,m et x =
nombre
Valeur retournée
ABS(n) Valeur absolue de n.
CEIL(n) L’entier immédiatement supérieur ou égal à n.
FLOOR(n) L’entier immédiatement inférieur ou égal à n.
MOD(m,n) Le reste de la division de m par n (modulo).
POWER(m,n) m à la puissance n.
ROUND(n,[x]) n est arrondi au 10-x ième. Par défaut x=0 (arrondit à l'entier)
SIGN(n) Le signe (+ ou -) de n.
SQRT(n) La racine carrée de n, retourne NULL si n<0.
TRUNC(n,[x]) n est tronqué au 10-x ième. Par défaut x=0 (tronque à l'entier) 11
Il s'agit d'un ensemble de fonctions qui permettent de convertir des données d'un type à un autre.
Il y en a 9. Exemples:
◦ TO_CHAR( date , format ) converti une date en chaîne de
caractères.
◦ TO_DATE( char , format ) converti une chaîne de caractères
valides en date.
12
Fonctions de conversions
Dans les fonctions TO_CHAR et TO_DATE on peut utiliser 30 spécifications pour indiquer un format de date.
Les principales spécifications sont: YYYY,YYY,YY ou Y spécifie l'année de la
date avec 4,3,2 ou 1 chiffres.
MM spécifie le numéro du mois MONTH spécifie le nom du mois MON spécifie les 3 premières lettres du
nom du mois DAY spécifie le nom du jour DD spécifie le numéro de la journée
dans le mois "texte" Le texte sera reproduit tel quel.
Exemples:TO_CHAR ( date_embauche, 'DD/MM/YY' )
retourne : 16/03/93TO_CHAR ( DATEMBAUCHE , 'DAY, "le" DD MONTH YYYY')
retourne : mardi, le 16 mars 1993
13
Formats de dates
L'heure est une donnée qui fait partie de la date.
Lors d’une conversion automatique l’heure n’est pas affichée.
Les spécifications à utiliser pour manipuler les heures sont:
HH pour l'heure de 1 à 12, HH24 pour l'heure de 1 à 24, MI pour les minutes de 0 à 59, SS pour les secondes de 0 à 59.
Exemples: TO_CHAR ( date , 'DD/MM/YY
HH24:MI:SS‘ ) Retourne, par exemple :
17/03/11 14:08:16
L’insertion d’une date avec SYSDATE inclut l’heure à laquelle s’est fait l’enregistrement.
14
Traitement des heures
C'est l'ensemble des fonctions qui traitent des dates.
Il y en a une dizaine.
Exemples:◦ ADD_MONTHS (date, n)
ajoute n mois à la date.
◦ LAST_DAY (date) retourne la date du dernier jour du
mois de la 'date'.
SELECT LAST_DAY(’01/01/2011’) FROM DUAL;
Retourne le ’31/01/2011’
15
Les fonctions de dates
Les fonctions de date
Fonctiondate : une date
Valeur retournée
ADD_MONTHS(date, n_mois)
Ajoute n mois à la date et retourne une date comme résultat.
LAST_DAY(date)
Dernier jour du mois de la ‘date’.
NEXT_DAY(date,char)
Calcule la date du premier jour de la semaine indiqué par char qui suit la date. Char doit correspondre à un jour de la semaine (exemple ‘lundi’).
SYSDATE Date courante du système.
ROUND(date,
[,format])
La date est arrondie jusqu'à la précision spécifiée par format.
TRUNC(date,
[,format])
La date est tronquée à la précision spécifiée par format.
16
Les formats de précision utilisés avec ROUND et TRUNC
Précision Description
CC,SCC Siècle
YYYY,SYYYYYEAR, SYEAR,YYY, YY,Y
Année
Q Trimestre (Quart de l'année: de 1 à 4)Janvier à mars = 1
MONTH, MON, MM Mois (arrondi à partir du 16e jour)
DDD, DD, J Jour
DAY, DY, D Date du premier jour de la semaine (un dimanche)
17
18
Autres fonctionsNVL(Colonne,n) La fonction NVL permet de
remplacer une valeur nulle par une valeur donnée.Exemple:
SELECT nomFROM employeWHERE salaire+ NVL(Comm,0)>100;
SOUNDEX(ch) Le mot dont l’intonation ressemble à celle spécifiée.
Exemple :SELECT nomFROM employeWHERE SOUNDEX(nom) = SOUNDEX(‘bourie’);
Retournera Bourry si présent dans la base de données car se prononce comme ‘bourie’
Les fonctionsde groupes
(Aggregate functions)
Fonctions qui retournent une seule valeur pour un ensemble de rangées.
Fonction de groupes
Fonction de lignes
20
Fonctions de groupes
SELECT SUM(salaire) FROM employe
SELECT ROUND(salaire,-2) FROM employe
WHERE spécifie quelles rangées doivent être retenues.
21
Fonction groupe et WHERE
SELECT SUM(salaire)FROM employeWHERE id_departement= 20;
Un SELECT ne peut retourner des résultats individuels et des résultats de fonction de groupes
La requête suivante engendrera une erreur:
SELECT nom, SUM(salaire)FROM employe;
22
Uniformité de la sélection
AVG la moyenne COUNT le nombre de
lignes MAX le maximum MIN le minimum SUM la somme
23
Les principalesfonctions de groupes
DISTINCT◦ des valeurs identiques ne sont
utilisées qu’un seul fois. ALL (par défaut)
◦ toutes les valeurs sont utilisées
24
DISTINCT et ALL
ALL
DISTINCT
Les fonctions de groupes ignorent les «NULL»◦ sauf COUNT(*)
COUNT(*)◦ retourne le nombre de rangées.
25
Valeurs NULL
GROUP BY permet de former des groupe de rangées
Les fonctions de groupes retournent une valeur pour chaque groupe
Pour avoir la somme des salaires, par département :
SELECT SUM(salaire)FROM employeGROUP BY id_departement
26
GROUP BY
Le critère de formation de groupes peut être utilisé dans un résultat de SELECT
SELECTid_departement,SUM(salaire)
FROM employe
GROUP BY id_departement;
27
Valeur de groupe
Dept 10 Dept 20 Dept 30
8750 10875 9400
Pour avoir le nombre d’employés par poste et par département:
SELECTid_departement,poste,COUNT(*)
FROMemploye
GROUP BYid_departement, poste
28
GROUP BYavec critères multiples
Si l’on exécute l’instruction suivante:SELECT
AVG(salaire)FROM
employe;
Puisqu’il n’y a pas de GROUP BY despécifier, l’ensemble de référence
seratous les enregistrements de la tableemploye.
29
Fonction de groupe sans GROUP BY
Permet de sélectionner les groupes
30
HAVING
10,commis 10,gestion 20,commis 20,gestion
Obtenir le numéro du département la somme des salaires pour les départements dont la somme
des salaires est > $9 000
SELECT id_departement, SUM(salaire)
FROM employe
GROUP BY id_departement
HAVING SUM(salaire) > 9000;
31
Exemple
WHERE permet de spécifier les rangées à considérer.
HAVING permet de spécifier les groupes à considérer.
32
WHERE et HAVING
Obtenir la somme des salaires des employés (excluant les commis)
pour les départements dont la somme des salaires (excluant les commis) est > $8,000.
SELECT id_departement, SUM(salaire)
FROM employe
WHERE poste != ‘commis’
GROUP BY id_departement
HAVING SUM(salaire) > 8000;
33
Exemple