SQL - Oracle - Freedcanl.free.fr/Etudes/COURS_IUT_IQ2/BDD2/CM/SQL_-_Oracle... · 2006-10-17 ·...
Transcript of SQL - Oracle - Freedcanl.free.fr/Etudes/COURS_IUT_IQ2/BDD2/CM/SQL_-_Oracle... · 2006-10-17 ·...
Fonction NVLFonction NVLVous 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 DECODEFonction DECODE
Facilite la recherche conditionnelle, jouant le rôle de CASE ou IF-THEN-ELSESyntaxeDECODE (Colonne|Expression, recherche1, résultat1
[, recherche2, résultat2,…,][, Sinon])
Fonction DECODEFonction DECODEOn souhaite consulter le nouveau salaire des employés:
10% de plus pour les analystes50% pour le président20% pour les managers
IF job='ANALYSTE' THEN sal=sal*1.1IF job='PRESIDENT' THEN sal=sal*1.5IF job='MANAGER' THEN sal=sal*1.2ELSE sal = sal
Imbrication des fonctions Imbrication des fonctions monomono--ligneslignes
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 monomono--ligneligne
Remplacer les données vide du champ mgrpar "Pas de Manager"
Fonctions Fonctions multimulti--ligneligne
Agissent sur des groupes de lignesDonnent un résultat par groupeUn groupe peut-être une table ou un ensemble de lignes dans une table
Fonctions Fonctions multimulti--ligneligne
EMPEMP
““maximum maximum salarysalary in in
thethe EMP tableEMP table””
DEPTNO SAL--------- ---------
10 245010 500010 130020 80020 110020 300020 300020 297530 160030 285030 125030 95030 150030 1250
MAX(SAL)
---------
5000
Types de fonctionsTypes de fonctions
Variance de expr en ignorant les valeurs NullVARIANCE([DISTINCT|ALL]expr)
Somme de valeurs de expr, en ignorant les valeurs NullSUM ([DISTINCT|ALL]expr)
Valeur maximale de expr en ignorant les valeurs NullMAX([DISTINCT|ALL]expr)
Ecart-type de expr en ignorant les valeurs NullSTDDEV ([DISTINCT|ALL]expr)
Valeur minimale de expr en ignorant les valeurs NullMIN([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 NullAVG([DISTINCT|ALL]col)
DescriptionFonction
ConseilsAvec DISTINCT, la fonction ne prend en compte que les valeurs distinctes.Avec ALL, la fonction tient compte de toutes les valeurs y compris les doublonsSi expr est spécifié, les types de données possibles pour les arguments sont CHAR, VARCHAR2, NUMBER, ou DATEToutes les fonctions multi-ligne, à l'exception de COUNT(*) ignorent les valeurs Null
Fonctions AVG, SUM, Fonctions AVG, SUM, VARIANCE et STDDEVVARIANCE et STDDEV
S'utilisent avec des données numériquesAfficher 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 emp4 WHERE job LIKE 'SALES%';
Fonctions AVG, SUM, Fonctions AVG, SUM, VARIANCE et STDDEVVARIANCE et STDDEV
Attention aux valeurs nulles ignorées dans AVGSQL> SELECT AVG(comm)2 FROM emp;
AVG(COMM)---------
550
Fonctions AVG, SUM, Fonctions AVG, SUM, VARIANCE et STDDEVVARIANCE 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 MAXFonctions 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 COUNTFonction COUNTAfficher 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
OpOpéérateurs Ensemblistesrateurs Ensemblistes
Toutes les lignes sélectionnées par la première requête moins les lignes sélectionnées dans la seconde requêteMINUS
Renvoie toutes les lignes ramenées par les deux requêtes, y compris les doublonsUNION ALL
Renvoie toutes les lignes distinctes ramenées par les deux requêtesUNION
Donne toutes les lignes communes aux deux requêtesINTERSECT
RésultatOpérateur
RRèègles des opgles des opéérateurs rateurs ensemblistesensemblistes
Les expressions citées dans la clause SELECT doivent
Être égales en nombreAvoir 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)
RRèègles des opgles des opéérateurs rateurs ensemblistesensemblistes
Les noms de colonnes apparaissent dans le résultat sont ceux de la première requêtePar 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
SousSous--requêtesrequê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
SousSous--requêtesrequêtesSyntaxe
SELECT select_listeFROM tableWHERE expr opérateur
(SELECT select_listeFROM table)
La sous-requête est exécutée une fois avant la requête principaleLe résultat de la sous-requête est utilisé par la requête principale
SousSous--requêtesrequêtes
Conventions d'utilisations Placez les sous-requêtes entre parenthèsesPlacez les sous-requêtes à droite de l'opérateur de comparaisonN'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 soussous--requêtesrequêtes• Sous-requête mono-ligne
Requête Initiale
Sous req.RenvoieRenvoie
CLERKCLERK
• Sous-requête multi-ligne
CLERKCLERKMANAGERMANAGER
Requête Initiale
Sous req.RenvoieRenvoie
• Sous-requête multi-colonne
CLERK 7900CLERK 7900MANAGER 7698MANAGER 7698
Requête Initiale
Sous req.RenvoieRenvoie
SousSous--requêtesrequêtes monomono--ligneligne
Ne ramènent qu'une seule ligneUtilisent des opérateurs de comparaison mono-ligne
Différent de<>Inférieur ou égal à<=Inférieur à<Supérieur ou égal à>= Supérieur à>
Egal à=
SignificationOpérateur
SousSous--requêtesrequêtes monomono--ligneligneAfficher les employés occupant le même poste que l'employé 7369 et gagnent plus que l'employé 7876
CLERK
1100
SousSous--requêtesrequêtes monomono--ligneligneTrouver les employés qui touchent un salaire supérieur à la moyenne
SousSous--requêtesrequêtes multimulti--ligneligneRamènent plusieurs lignesUtilisent 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 listeIN
DescriptionOpérateur
SousSous--requêtesrequêtes multimulti--ligneligneAfficher les employés dont le salaire est inférieur à celui de
n'importe quel employé 'MANAGER'
SousSous--requêtesrequêtes multimulti--ligneligneAfficher les employés dont le salaire est supérieur au
salaire moyen de tous les départements
Requêtes de jointureRequêtes de jointure
SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column(+) = table2.column;
SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column(+) = table2.column;
SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column = table2.column(+);
SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column = table2.column(+);
DemiDemi--JointureJointure DroiteDroite
DemiDemi--JointureJointure GaucheGauche
Requêtes de jointureRequêtes de jointure
SQL> SELECT e.ename, d.deptno, d.dname2 FROM emp e, dept d3 WHERE e.deptno(+) = d.deptno4 ORDER BY e.deptno;
ENAME DEPTNO DNAME---------- --------- -------------KING 10 ACCOUNTINGCLARK 10 ACCOUNTING...
40 OPERATIONS15 rows selected.
Requête paramRequête paraméétrtrééee
Je souhaite que les critères des requêtes soient saisis pendant l’exécution....sal = ? …
… deptno = ? ….. ename = ? ...
UtilisateurUtilisateur
Requête paramRequête paraméétrtrééee
SQL*Plus permet de stocker temporairement des variables
Simple en utilisant le caractère &Double en utilisant les caractères &&
Requête paramRequête paraméétrtrééee
Afficher le nom des employés situés dans un département saisi par l'utilisateur
Requête paramRequête paraméétrtrééeeSET VERIFY ON
Permet d'afficher le texte de la commande avant et après la saisie de l'utilisateur
AttentionPlacez les valeurs de type caractère et date entre simples quottes
Les variables de substitutionLes variables de substitution
Peuvent remplacerUne condition WHEREUne clause ORDER BYUn nom de colonneUn nom de tableUne expressionUn ordre SELECT
Les variables de substitutionLes variables de substitution
SQL> SELECT empno, ename, job, &column_name2 FROM emp3 WHERE &condition4 ORDER BY &order_column;
Enter value for column_name: salsalEnter value for condition: sal>=3000sal>=3000Enter value for order_column: enameename
EMPNO ENAME JOB SAL--------- ---------- --------- ---------
7902 FORD ANALYST 30007839 KING PRESIDENT 50007788 SCOTT ANALYST 3000
Les variables de substitutionLes variables de substitution
Spécifier un && si vous voulez réutiliser la valeur de la variable sans interroger l'utilisateur à chaque foisSQL> SELECT empno, ename, job, &&column_name2 FROM emp3 ORDER BY &column_name;
Enter value for column_name: deptnodeptnoEMPNO ENAME JOB DEPTNO
--------- ---------- --------- ---------7839 KING PRESIDENT 107782 CLARK MANAGER 107934 MILLER CLERK 10
...14 rows selected.
DDééfinition des variables finition des variables utilisateurutilisateur
Les commandes ACCEPT lit une chaîne de caractère et la stocke dans une variableDEFINE crée une variable et lui affecte une valeur
Lit une ligne saisie par l'utilisateur et la stocke dans une variableACCEPT
Affiche toutes les variablesDEFINEAffiche la variable, sa valeur et son typeDEFINE variable
Crée une variable de type CHAR et lui affecte une valeurDEFINE variable = valeur
DescriptionCommande
Command ACCEPTCommand ACCEPTAffiche 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 ACCEPTCommand ACCEPT
ACCEPT dept PROMPT 'Provide the department name: 'SELECT * FROM deptWHERE dname = UPPER('&dept')/
Provide the department name: SalesSales
DEPTNO DNAME LOC--------- -------------- -------------
30 SALES CHICAGO
Commande DEFINECommande DEFINE
Permet de changer la valeur d'une variablePermet d'afficher la liste des variables définiesPour définir vos variables dans SQL*PLUS, modifier le fichier login.sqlUNDEFINE permet de libérer une variable
Commande DEFINECommande DEFINE
DEFINE DEPTNAME = "sales" (CHAR) DEFINE DEPTNAME = "sales" (CHAR)
SQL> DEFINE deptname = salesSQL> DEFINE deptname
SQL> SELECT * 2 FROM dept3 WHERE dname = UPPER('&deptname');