Fonction NVL Fonction NVL
Vous pouvez substituer la valeur nulle par une autre valeur avec la fonction NVL( )
Afficher zéro à la place des valeurs vides dans la colonne mgr de la table EMP
Même type
Fonction DECODE Fonction DECODE
Facilite la recherche conditionnelle, jouant le rôle de CASE ou IF-THEN-ELSE
Syntaxe
DECODE (Colonne|Expression, recherche1, résultat1 [, recherche2, résultat2,…,]
[, Sinon])
Fonction DECODE Fonction DECODE
On souhaite consulter le nouveau salaire des
employés:
10% de plus pour les analystes
50% pour le président 20% pour les managers
IF job='ANALYSTE' THEN sal=sal*1.1 IF job='PRESIDENT' THEN sal=sal*1.5 IF job='MANAGER' THEN sal=sal*1.2 ELSE sal = sal
Imbrication des fonctions Imbrication des fonctions
mono mono - - lignes lignes
Le niveau d'imbrication des fonctions mono-lignes est illimité
Les fonctions imbriquées sont évaluées de l'intérieur vers l'extérieur
F3(F2(F1(paramètre1), paramètre2), paramètre3)
Etape 1
Etape 2
Etape 3
Imbrication des fonctions Imbrication des fonctions
mono mono - - ligne ligne
Remplacer les données vide du champ mgr
par "Pas de Manager"
Fonctions
Fonctions multi multi - - ligne ligne
Agissent sur des groupes de lignes Donnent un résultat par groupe
Un groupe peut-être une table ou un
ensemble de lignes dans une table
Fonctions
Fonctions multi multi - - ligne ligne
EMPEMP
“maximum “maximum salary
salary in in thethe EMP tableEMP table”” DEPTNO SAL
--- --- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250
MAX(SAL) --- 5000
Types de fonctions Types de fonctions
Variance de expr en ignorant les valeurs Null VARIANCE([DISTINCT|ALL]expr)
Somme de valeurs de expr, en ignorant les valeurs Null SUM ([DISTINCT|ALL]expr)
Valeur maximale de expr en ignorant les valeurs Null MAX([DISTINCT|ALL]expr)
Ecart-type de expr en ignorant les valeurs Null STDDEV ([DISTINCT|ALL]expr)
Valeur minimale de expr en ignorant les valeurs Null MIN([DISTINCT|ALL]expr)
Nombre de ligne où expr est différent de Null. *
comptabilise toutes les lignes sélectionnées y compris les doublons et les lignes Null
COUNT({*|[DISTINCT|ALL]expr})
Valeur moyenne de col en ignorant les valeurs Null AVG([DISTINCT|ALL]col)
Description Fonction
Conseils
Avec DISTINCT, la fonction ne prend en compte que les valeurs distinctes.
Avec ALL, la fonction tient compte de toutes les valeurs y compris les doublons
Fonctions AVG, SUM, Fonctions AVG, SUM, VARIANCE et STDDEV VARIANCE et STDDEV
S'utilisent avec des données numériques
Afficher le salaire moyenne et la somme des salaires
AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) --- --- --- --- 1400 1600 1250 5600 SQL> SELECT AVG(sal), MAX(sal),
2 MIN(sal), SUM(sal) 3 FROM emp
4 WHERE job LIKE 'SALES%';
Fonctions AVG, SUM, Fonctions AVG, SUM, VARIANCE et STDDEV VARIANCE et STDDEV
Attention aux valeurs nulles ignorées dans AVG
SQL> SELECT AVG(comm) 2 FROM emp;
AVG(COMM) ---
550
Fonctions AVG, SUM, Fonctions AVG, SUM, VARIANCE et STDDEV VARIANCE et STDDEV
Attention aux valeurs nulles ignorées dans AVG
SQL> SELECT AVG(NVL(comm,0)) 2 FROM emp;
AVG(NVL(COMM,0)) --- 157.14286
Fonctions MIN et MAX Fonctions MIN et MAX
S'utilisent avec tous types de données
Afficher le nom des employés qui apparaissent en premier et en dernier dans le classement alphabétique
SQL> SELECT MIN(hiredate), MAX(hiredate) 2 FROM emp;
MIN(HIRED MAX(HIRED --- --- 17-DEC-80 12-JAN-83
Fonction COUNT Fonction COUNT
Afficher le nombre de commissions pour le département 30
Ramène le nombre de lignes d'une table
Ramène le nombre de lignes non Null
Op Op é é rateurs Ensemblistes rateurs Ensemblistes
Toutes les lignes sélectionnées par la première requête moins les lignes sélectionnées dans la seconde requête
MINUS
Renvoie toutes les lignes ramenées par les deux requêtes, y compris les doublons
UNION ALL
Renvoie toutes les lignes distinctes ramenées par les deux requêtes UNION
Donne toutes les lignes communes aux deux requêtes INTERSECT
Résultat Opérateur
R R è è gles des op gles des op é é rateurs rateurs ensemblistes
ensemblistes
Les expressions citées dans la clause SELECT doivent
Être égales en nombre
Avoir des données de même type
Vous pouvez utiliser les fonctions explicites de conversion
Les doublons sont automatiquement éliminés
(sauf avec l'opérateur UNION ALL)
R R è è gles des op gles des op é é rateurs rateurs ensemblistes
ensemblistes
Les noms de colonnes apparaissent dans le résultat sont ceux de la première requête
Par défaut, le résultat est trié par ordre croissant (sauf avec l'opérateur UNION ALL)
Utilisez des parenthèses pour modifier la
séquence d'exécution
Sous Sous - - requêtes requêtes
Quels sont les salariés qui gagnent plus que Jones ?
Quels sont les salariés qui ont un salaire supérieur à celui de Jones ?
Requête initiale
? ?
Quel est le salaire de Jones ?
? ?
Sous-requête
Sous Sous - - requêtes requêtes
Syntaxe
SELECT select_liste FROM table
WHERE expr opérateur
(SELECT select_liste FROM table)
La sous-requête est exécutée une fois avant la requête principale
Le résultat de la sous-requête est utilisé par la
requête principale
Sous Sous - - requêtes requêtes
Conventions d'utilisations
Placez les sous-requêtes entre parenthèses Placez les sous-requêtes à droite de
l'opérateur de comparaison
N'ajoutez jamais la clause ORDER BY à une sous-requête
Une seule clause ORDER BY est autorisée par
requête
Types de
Types de sous sous - - requêtes requêtes
• Sous-requête mono-ligne
Requête Initiale
Sous req.
Renvoie Renvoie
CLERK CLERK
• Sous-requête multi-ligne
CLERK CLERK MANAGER MANAGER
Requête Initiale
Sous req.
Renvoie Renvoie
• Sous-requête multi-colonne
Requête Initiale
Sous Sous - - requêtes requêtes mono mono - - ligne ligne
Ne ramènent qu'une seule ligne
Utilisent des opérateurs de comparaison mono-ligne
Différent de
<>
Inférieur ou égal à
<=
Inférieur à
<
Supérieur ou égal à
>=
Supérieur à
>
Egal à
=
Signification Opérateur
Sous Sous - - requêtes requêtes mono mono - - ligne ligne
Afficher les employés occupant le même poste que l'employé 7369 et gagnent plus que l'employé 7876
CLERK
1100
Sous Sous - - requêtes requêtes mono mono - - ligne ligne
Trouver les employés qui touchent un salaire supérieur à la moyenne
Sous Sous - - requêtes requêtes multi multi - - ligne ligne
Ramènent plusieurs lignes
Utilisent des opérateurs de comparaison multi-ligne
Compare la valeur à toutes les valeurs ramenées par la sous-requête
> ALL ⇒signifie supérieur au maximum
< ALL ⇒signifie inférieur au minimum
ALL
Compare la valeur à chaque valeur ramenée par la sous-requête
< ANY ⇒ signifie inférieur à au moins une des valeurs, donc < au maximum
> ANY ⇒ signifie supérieur à au moins une des valeurs, donc > au minimum
= ANY ⇒équivalent IN
ANY
Egal à un élément quelconque de la liste
IN
Description Opérateur
Sous Sous - - requêtes requêtes multi multi - - ligne ligne
Afficher les employés dont le salaire est inférieur à celui de
n'importe quel employé 'MANAGER'
Sous Sous - - requêtes requêtes multi multi - - ligne ligne
Afficher les employés dont le salaire est supérieur au
salaire moyen de tous les départements
Requêtes de jointure Requêtes de jointure
SELECT table1.column, table2.column FROM table1, table2
WHERE table1.column(+) = table2.column;
SELECT table1.column, table2.column FROM table1, table2
WHERE table1.column(+) = table2.column;
SELECT table1.column, table2.column FROM table1, table2
WHERE table1.column = table2.column(+);
SELECT table1.column, table2.column FROM table1, table2
WHERE table1.column = table2.column(+);
Demi-Demi-JointureJointure DroiteDroite
DemiDemi--JointureJointure GaucheGauche
Requêtes de jointure Requêtes de jointure
SQL> SELECT e.ename, d.deptno, d.dname 2 FROM emp e, dept d
3 WHERE e.deptno(+) = d.deptno 4 ORDER BY e.deptno;
ENAME DEPTNO DNAME
--- --- --- KING 10 ACCOUNTING CLARK 10 ACCOUNTING ...
40 OPERATIONS 15 rows selected.
Requête param
Requête param é é tr tr é é e e
Je souhaite que les critères des requêtes soient saisis pendant l’exécution.
...sal = ? …
… deptno = ? … .. ename = ? ...
Utilisateur
Utilisateur
Requête param
Requête param é é tr tr é é e e
SQL*Plus permet de stocker temporairement des variables
Simple en utilisant le caractère &
Double en utilisant les caractères &&
Requête param
Requête param é é tr tr é é e e
Afficher le nom des employés situés dans
un département saisi par l'utilisateur
Requête param
Requête param é é tr tr é é e e
SET VERIFY ON
Permet d'afficher le texte de la commande avant et après la saisie de l'utilisateur
Attention
Placez les valeurs de type caractère et date entre simples
quottes
Les variables de substitution Les variables de substitution
Peuvent remplacer
Une condition WHERE Une clause ORDER BY Un nom de colonne
Un nom de table
Une expression
Un ordre SELECT
Les variables de substitution Les variables de substitution
SQL> SELECT empno, ename, job, &column_name
2 FROM emp
3 WHERE &condition
4 ORDER BY &order_column;
Enter value for column_name: salsal
Enter value for condition: sal>=3000sal>=3000 Enter value for order_column: enameename
EMPNO ENAME JOB SAL --- --- --- --- 7902 FORD ANALYST 3000
Les variables de substitution Les variables de substitution
Spécifier un && si vous voulez réutiliser la valeur de la variable sans interroger
l'utilisateur à chaque fois
SQL> SELECT empno, ename, job, &&column_name
2 FROM emp
3 ORDER BY &column_name;
Enter value for column_name: deptnodeptno
EMPNO ENAME JOB DEPTNO --- --- --- --- 7839 KING PRESIDENT 10 7782 CLARK MANAGER 10 7934 MILLER CLERK 10 ...
D D é é finition des variables finition des variables utilisateur
utilisateur
Les commandes
ACCEPT lit une chaîne de caractère et la stocke dans une variable
DEFINE crée une variable et lui affecte une valeur
Lit une ligne saisie par l'utilisateur et la stocke dans une variable
ACCEPT
Affiche toutes les variables DEFINE
Affiche la variable, sa valeur et son type DEFINE variable
Crée une variable de type CHAR et lui affecte une valeur
DEFINE variable = valeur
Description Commande
Command ACCEPT Command ACCEPT
Affiche un message d'invité personnalisé et récupère une valeur saisie par
l'utilisateur
En définissant le type de donnée (CHAR, NUMBER et DATE)
En masquant parfois la saisie des mots de passe
Syntaxe
ACCEPT variable [Type] [FORMAT fmt] [PROMPT invite] [HIDE]
Command ACCEPT Command ACCEPT
ACCEPT dept PROMPT 'Provide the department name: ' SELECT *
FROM dept
WHERE dname = UPPER('&dept') /
Provide the department name: SalesSales DEPTNO DNAME LOC
--- --- --- 30 SALES CHICAGO
Commande DEFINE Commande DEFINE
Permet de changer la valeur d'une variable
Permet d'afficher la liste des variables définies
Pour définir vos variables dans
SQL*PLUS, modifier le fichier login.sql
¾ UNDEFINE permet de libérer une variable
Commande DEFINE Commande DEFINE
DEFINE DEPTNAME = "sales" (CHAR) DEFINE DEPTNAME = "sales" (CHAR) SQL> DEFINE deptname = sales
SQL> DEFINE deptname
SQL> SELECT * 2 FROM dept
3 WHERE dname = UPPER('&deptname');