Telechargé par Mohamed Karoui

Le-langage-SQL-Part2 (3)

publicité
Plan
•
•
•
•
Introduction
La sélection simple
Les fonctions
Extraction de données à partir de plusieurs
tables
• Les sous-requêtes
• La manipulation de données
• La gestion des transactions
Plan
• Introduction
• La sélection simple
• Les fonctions
• Extraction de données à partir de plusieurs
tables
• Les sous-requêtes
• La manipulation de données
• La gestion des transactions
Les fonctions
Une fonction a:
Un ou plusieurs arguments ou paramètres
(pouvant être une colonne, une expression, une
constante ou le résultat d’une fonction).
Un seul résultat sous forme de valeur.
• Il existe deux types de fonctions:
Les fonctions qui opèrent sur les lignes .
Les fonctions qui opèrent sur des groupes de
lignes.
• Une fonction :
Un ou plusieurs arguments ou paramètres
(pouvant être une colonne, une expression, une
constante ou le résultat d’une fonction).
Un seul résultat sous forme de valeur.
• Il existe deux types de fonctions:
Les fonctions qui opèrent sur les lignes .
Les fonctions qui opèrent sur des groupes de
lignes.
Les fonctions de lignes
Concernent une seule ligne et retournent un seul
résultat par ligne (utilisées dans la clause SELECT, dans la
clause WHERE ou encore dans la clause ORDER BY);
Cinq types de fonctions de lignes (selon le type de
données de leurs arguments principaux )
Les fonctions de caractères:
• Au moins un argument de type chaîne de caractères.
• Un seul résultat de type chaîne de caractères ou nombre.
Exemple 1:
LOWER(arg) : renvoie l’argument mais en minuscule.
REQ 20
SELECT LOWER(‘NOM’) NOM, LOWER(ENAME) FROM EMP ;
(Suite)
Exemple 2:
LENGTH(arg) : retourne la taille de l’argument en nombre de
caractères.
REQ 21
Afficher le nombre d’occurrences du caractère ‘E’ dans chaque
nom d’employé ?
SELECT LENGTH(ENAME)–LENGTH(REPLACE(ENAME,’E’)) NBRE
FROM EMP ;
(Voir annexe B pour la liste des fonctions de caractères)
Les fonctions numériques
(Voir annexe B pour la liste des fonctions numériques)
Les fonctions de date
• Le format de date par défaut est : DD-MON-YY.
• Oracle stocke une date suivant un format numérique
interne plus détaillé : siècle, année, mois, jour, heure,
minute et seconde.
• La pseudo colonne SYSDATE de la table DUAL retourne
la date système (inclut aussi l’heure système).
(Voir annexe B)
Les fonctions de conversion
• Conversion entre types de données.
• Le serveur Oracle peut convertir implicitement, sans
l’utilisation d’une fonction :
1. VARCHAR2/CHAR
NUMBER
2. VARCHAR2/CHAR
DATE
3. DATE
VARCHAR2 /CHAR
4. NUMBER
VARCHAR2/CHAR
La conversion explicite est faite à travers un ensemble
de fonctions de conversion (voir annexe B)
(Suite)
REQ 22
SELECT TO_CHAR(SYSDATE,’DD/MM/YYYY’) FROM DUAL;
Affiche : 08/11/2020
REQ 23
SELECT TO_CHAR(SYSDATE,’DAY’) FROM DUAL;
Affiche : ‘SATURDAY’
Les fonctions opérant sur tous les types de données
Exemple:
DECODE(arg,SEARCH1,val1,[SEARCH2,val2,…],default_arg)
Cette fonction retourne vali si arg=SEARCHi, si aucune
valeur SEARCHi ne correspond à l’argument arg, alors
default_arg sera retournée.
(voir annexe B)
(Suite)
REQ 24
Afficher les salaires de tous les employés sauf les
managers à qui on affichera ‘MMM’ et le président à
qui on affichera ‘PPP’ ?
SELECT ENAME,
DECODE(JOB, ‘MANAGER’,
‘PRESIDENT’, ’PPP’, SAL) SALAIRE FROM EMP;
‘MMM’,
Les fonctions de groupe
Les fonctions de groupe opèrent sur des groupes de
lignes et retournent un seul résultat par groupe.
Deux manières de faire:
1. Traiter la table comme étant un seul groupe de
lignes.
2. Diviser la table en petits groupes (clause GROUP BY)
1. Traiter la table comme étant un seul groupe de lignes:
Exemple 1:
AVG([DISTINCT|ALL] arg) : retourne la moyenne des
arguments pour chaque groupe tout en ignorant les
valeurs NULL.
REQ 25
Afficher la moyenne des commissions des employés.
SELECT AVG(COMM) MOYENNE FROM EMP ;
(Suite)
REQ 26
Afficher la moyenne des salaires annuels des employés du
département 10.
SELECT AVG(SAL*12+NVL(COMM,0)) MOYENNE FROM
EMP WHERE DEPTNO=10;
(Suite)
Exemple 2:
COUNT(*|[DISTINCT]|[ALL] arg) : retourne pour chaque groupe le
nombre de lignes où l’argument est différent de NULL.
COUNT(*): retourner le nombre de lignes total.
REQ 27
Afficher le nombre de lignes de la table DEPT.
SELECT COUNT(*) “NB LIGNES” FROM DEPT ;
REQ 28
Afficher le nombre de jobs dans l’entreprise.
SELECT COUNT(DISTINCT JOB) NB_JOB FROM EMP ;
(Suite)
Exemple 3:
MAX([DISTINCT|ALL] arg) : retourne la valeur maximale de
l’argument pour chaque groupe.
REQ 29
Afficher le salaire maximum.
SELECT MAX(SAL) SAL_MAX FROM EMP ;
(Suite)
Exemple 4:
MIN([DISTINCT|ALL] arg) : retourne la valeur minimale de
l’argument pour chaque groupe.
REQ 30
Afficher le salaire minimum.
SELECT MIN(SAL) SAL_MIN FROM EMP ;
Remarques:
• Le mot clé DISTINCT oblige une fonction de groupe à ne
considérer que les lignes distinctes.
• ALL l’oblige à considérer les valeurs dupliquées. (par
défaut).
• Toutes les fonctions de groupe ignorent les valeurs
NULL.
Pour considérer cette valeur spéciale, on utilise la
fonction NVL.
2. Diviser la table en petits groupes :
La clause GROUP BY :
Suivie d’une colonne.
Les lignes qui sont incluses dans chaque
groupe résultant ont la même valeur pour
cette colonne.
REQ 31
Afficher le nombre d’employés dans chaque département.
SELECT DEPTNO, COUNT(*) NBR_EMP FROM EMP
GROUP BY DEPTNO ;
REQ 32
Afficher la moyenne des salaires par job dans le département 30.
SELECT JOB, AVG(SAL) FROM EMP
WHERE DEPTNO=30
GROUP BY JOB ;
Remarques:
• On ne peut mettre dans la clause SELECT que les
fonctions de groupe et/ou les colonnes qui suivent la
clause GROUP BY.
• Groupes dans les groupes:
Pour créer des groupes à l’intérieur des groupes
Lister plus qu’une colonne dans la clause GROUP BY.
REQ 33
Afficher la moyenne de salaires des employés pour
chaque job à l’intérieur de chaque département.
SELECT DEPTNO, JOB, AVG(SAL) FROM EMP
GROUP BY DEPTNO, JOB ;
La clause HAVING:
Sert à restreindre les groupes retournés.
Suivie d’une condition simple ou composée
qui concerne les colonnes qui suivent la clause
GROUP BY, ou/et des fonctions de groupe.
REQ 34
Afficher les moyennes de salaires de chaque département
s’il inclut plus de 3 employés.
SELECT DEPTNO, AVG(SAL) FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) > 3 ;
REQ 35
Afficher la date d’embauche du dernier salarié recruté pour
chaque unité de travail et par département (une unité de
travail regroupe tous les employés de même directeur). Exclure
les groupes dont le salaire minimum est inférieur à 1000.
Exclure tous les employés dont le nom commence par ‘C’.
SELECT MGR, DEPTNO , MAX(HIREDATE) FROM EMP
WHERE ENAME NOT LIKE ‘C%’
GROUP BY MGR, DEPTNO
HAVING MIN(SAL)>=1000;
A suivre…
Téléchargement