PSBDMF!
Programme de formation Supinfo
Laboratoire ORACLE Auteur : Aurlie vuaroqueaux Date : 03/11/2002 - v 1.1 Nombre de pages : 1 http://www.labo-oracle.com Ecole Suprieure d'Informatique 23 rue Chteau Landon 75010 PARIS http://www.supinfo.com
1.2
1.3
2.2
2.3
RESTREINDRE ET EXTRAIRE DES DONNEES _____________________________________ 0 3.1 Restreindre des enregistrements ___________________________________________ 0 3.1.1 La clause WHERE _________________________________________________ 0 3.1.2 Les rgles de conduite de la clause WHERE _____________________________ 0 Les oprateurs de comparaison____________________________________________ 3.2.1 Expressions de comparaison _________________________________________ 3.2.2 Loprateur BETWEEN ______________________________________________ 3.2.3 L'oprateur IN _____________________________________________________ 3.2.4 L'oprateur LIKE ___________________________________________________ 3.2.5 L'oprateur IS NULL ________________________________________________ Les oprateurs logiques __________________________________________________ 3.3.1 L'oprateur AND ___________________________________________________ 3.3.2 L'oprateur OR ____________________________________________________ 3.3.3 L'oprateur NOT ___________________________________________________ 3.3.4 Ordres d'valuation des oprateurs ____________________________________ Ordonner les enregistrements _____________________________________________ 3.4.1 La Clause ORDER BY ______________________________________________ 3.4.2 Trier dans lordre dcroissant _________________________________________ 3.4.3 Trier sur un alias de colonne ou une expression___________________________ 3.4.4 Trier sur plusieurs colonnes __________________________________________
03/09/2002
3.2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3.3
3.4
Page 0
LES FONCTIONS SINGLE-ROW _________________________________________________ 0 4.1 Les fonctions SQL _______________________________________________________ 0 4.1.1 Les types de fonctions SQL __________________________________________ 0 4.1.2 Les fonctions SQL single-row _________________________________________ 0 Les fonctions oprant sur les caractres ____________________________________ 4.2.1 Les fonctions de conversion de casse __________________________________ 4.2.2 Les fonctions de manipulation de caractres _____________________________ 4.2.3 Utilisation des fonctions SQL manipulant les caractres ____________________ Les fonctions oprant sur les nombres______________________________________ 4.3.1 La fonction ROUND ________________________________________________ 4.3.2 La fonction TRUNC _________________________________________________ 4.3.3 La fonction MOD ___________________________________________________ Les fonctions oprant sur les dates_________________________________________ 4.4.1 La fonction SYSDATE_______________________________________________ 4.4.2 Oprations arithmtiques sur les dates__________________________________ 4.4.3 Les fonctions oprant sur les dates ____________________________________ Fonctions de conversions de types de donnes ______________________________ 4.5.1 Conversion explicite de types de donnes _______________________________ 4.5.2 La fonction TO_CHAR avec des dates __________________________________ 4.5.3 La fonction TO_CHAR avec des nombres _______________________________ 4.5.4 Autres fonctions de conversion de types de donnes_______________________ 4.5.5 Le format Date RR _________________________________________________ Les fonctions gnrales __________________________________________________ 4.6.1 La fonction NVL____________________________________________________ 4.6.2 La fonction DECODE _______________________________________________ 4.6.3 Les fonctions imbriques ____________________________________________ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.2
4.3
4.4
4.5
4.6
03/09/2002
Page 0
Figure 1 : Stocker des donnes sur diffrents supports Une base de donnes est une collection organise d'informations. Elle permet un accs et une administration plus facile des donnes. Pour administrer efficacement une base de donnes, il est ncessaire de possder un systme de management de base de donnes (DBMS : Data Base Management System). Un DBMS permet de stocker, modifier, supprimer et retrouver les donnes dans une base de donnes tout en assurant leur cohrence. Les objectifs d'un DBMS sont les suivants : - Indpendance physique - Indpendance logique - Manipulation des donnes par des non informaticiens - Efficacit des donnes - Administration cohrente des donnes - Partageabilit des donnes - Scurit des donnes
03/09/2002
Page 0
Il existe quatre types de bases de donnes : - hirarchique - en rseau - relationnelle - objet relationnelle (la plus rcente)
Figure 2 : Les quatre types de bases de donnes Ce cours portera essentiellement sur les bases de donnes relationnelle et objet-relationnelle. Une base de donnes relationnelle (RDB relational database) est une collection de relations ou de tables deux dimensions dans lesquelles sont stockes les informations. Le modle relationnel a t propos par le Dr E.F Codd en juin 1970 dans un article appel " A relational model of data for large shared data banks". Le modle relationnel est constitu de trois composants : - une collection d'objets ou de relations (appeles aussi tables), - un groupe d'oprateurs pour agir sur les tables, - des rgles d'intgrit des donnes. Une contrainte dintgrit est une assertion logique devant tre vrifie en permanence pour maintenir la base de donnes dans un tat fiable. Un RDBMS (Relational Data Base Management System) est un DBMS grant une collection de tables (appeles aussi relations) dans lesquelles sont stockes et organises les donnes.
03/09/2002
Page 0
Le SQL (Structured Query Language) est un langage de programmation Standard ANSI utilis pour rcuprer et manipuler les donnes dans une base de donnes relationnelle. Trois concepts importants : - Le stockage des donnes se fait dans des tables de la base de donnes relationnelle. - Laccs aux donnes est possible grce des requtes SQL qui interrogeront la base de donnes au sujet des informations que lutilisateur a demand. - La rcupration des donnes ne ncessite pas une connaissance de lorganisation physique des donnes pour lutilisateur.
03/09/2002
Page 0
1.2
Du concept initial la production, une base de donnes peut tre dveloppe en se basant sur les tapes de dveloppement dun systme dinformation. Cette approche systmatique permet de transformer (ou retranscrire) les informations ncessaires d'une entreprise en une base de donne oprationnelle. Le dveloppement dun systme dinformation compte 5 tapes : La stratgie et l'analyse : Il s'agit d'tudier et d'analyser les besoins de l'entreprise. Les managers et les utilisateurs doivent tre interrogs afin de connatre les informations ncessaires et de pouvoir ainsi prvoir les spcifications futures du systme. Le modle du systme est cr en transformant les informations et les rgles de l'entreprise en une reprsentation graphique des besoins de l'entreprise. La conception (design) : Les informations de l'tape prcdente serviront modliser la base de donnes. La modlisation finale est un diagramme relationnel reprsentant les dtails de la structure de la base de donnes. La construction et la documentation : Il s'agit de la construction d'un prototype du systme (cration d'une base de test et des objets requis), de la rdaction d'une documentation daide explicative destine aux utilisateurs finaux et d'un manuel des oprations effectues sur le systme. La transition :
03/09/2002 Page 0
Le prototype est affin afin qu'il corresponde au plus prs aux exigences des utilisateurs. La conversion des donnes existantes est ralise ainsi que toutes les modifications ncessaires sur le prototype. La production : Le systme est fournit aux utilisateurs, et une analyse de ses performances sera effectue afin de l'optimiser.
Figure 5 : Les modles de donnes Le modle ER est constitu de trois composantes : Les entits : Une entit (ou objet) est un objet pourvu dune existence propre et conforme aux choix de gestion. Exemple : employ, dpartement, ordres. Les attributs :
03/09/2002
Page 0
Un attribut (ou proprit) est une donne lmentaire dcrivant ou qualifiant une entit ou une relation entre objets. Un attribut peut tre obligatoire ou optionnel. Cette caractristique est appele "optionalit de lattribut" (optionnality). Exemple : nom de lemploy, salaire de lemploy, commission de lemploy. Les relations : Une relation est une association nomme entre deux ou plusieurs entits reprsentant l'optionalit et le degrs de la relation. Il y a 3 types de degrs : o 1-1 (un un) o 1-n (un plusieurs) o n-n (plusieurs plusieurs)
La combinaison de ces composants dans le modle ER aboutie une carte graphique claire et prcise de la base de donnes permettant de dfinir l'ventail des informations requises.
Une relation est reprsente par une ligne reliant les deux entits. Chaque extrmit de la relation possde un nom, une optionalit et un degr. Le nom de la relation dcris l'association entre les deux entits. Le nom doit tre un verbe au participe pass. Le type de la ligne de la relation reprsente le caractre optionnel de la relation. Une ligne pleine signifie que la relation est obligatoire (exemple : un employ doit tre assign un dpartement), alors qu'une ligne pointille signifie que la relation est optionnelle (exemple : un dpartement peut tre assign un employ). Une ligne peut tre la fois pleine et pointille, dans ce cas la relation est obligatoire pour une entit et optionnelle pour l'autre. Le degr de la relation est reprsent par : - 1-1 : une ligne simple. - 1-n : une ligne simple finissant l'extrmit n par le symbole compos de trois lignes (three line symbole, crow's foot). - n-n : une ligne simple finissant chaque extrmit par le symbole compos de trois lignes.
03/09/2002
Page 0
Exemple : Un employ doit tre assign un dpartement, ce qui signifie que la relation est assign entre les entits EMPLOYE et DEPARTEMENT est obligatoire et de degr 1 pour lentit EMPLOYE. Un dpartement peut tre compos dun ou plusieurs employ, ce qui signifie que la relation est compos de entre les entits EMPLOYE et DEPARTEMENT est optionnelle et de degr n pour lentit DEPARTEMENT. Un employ peut tre dirig par un autre employ, ce qui signifie que la relation rflexive est dirig par sur lentit EMPLOYE est optionnelle et de degr n du ct de lentit EMPLOYE considr comme lemploy dirig. Un employ peut tre le manager d'un ou plusieurs employs, ce qui signifie que la relation rflexive est le chef de sur lentit EMPLOYE est optionnelle et de degr n du cot de lentit EMPLOYE considr comme le manager. EMPLOYE (EMP) DEPARTEMENT (DEPT) Est compos de Est dirig par Est le chef de
On lit le modle en passant d'une entit l'autre avec la syntaxe suivante : Entit source { peut | doit } nom de la relation {un et un seul | un plusieurs} entit destination
Le SQL est utilis pour dfinir, retrouver et manipuler les donnes sur un serveur. Le SQL contient de nombreux oprateurs qui permettent de partitionner et de combiner les tables. Intraction avec PL/SQL Le PL/SQL (Procedural Language / Structured Query Language) est un langage procdural qui permet d'tendre les fonctions du SQL. Intraction avec SQL*Plus SQL*Plus est un environnement qui reconnat et envoie des requtes excuter au serveur. SQL*Plus possde son propre langage. Il ne permet pas de modifier les donnes mais seulement de modifier l'environnement de SQL*Plus et le formatage des donnes pour laffichage.
03/09/2002
Page 0
Un ordre SELECT est compos de deux clauses : - La clause SELECT qui spcifie les colonnes slectionner, - La clause FROM qui spcifie la table o sont situes les colonnes slectionnes dans la clause SELECT. L'ordre SELECT possde trois capacits : - Slection : Slection de une ou plusieurs lignes - Projection : Slection de une ou plusieurs colonnes - Jointure : Slection de deux colonnes dans deux tables diffrentes, crant ainsi une relation entre les donnes des deux colonnes.
Figure 5 : Slection, projection et jointure On excute une requte SQL en la terminant par les caractres " ; " ou " / ". (Le caractre " / " permet aussi de re-excuter l'ordre SQL stock dans le buffer). Pour faciliter la relecture du code SQL, il est fortement conseill de mettre chaque clause sur des lignes diffrentes, de noter les mots rservs en majuscule et les autres mots en minuscule. Remarque : Le serveur ne tient pas compte de la casse des mots.
SELECT FROM
{ * | column, } table ;
Le caractre * plac dans la clause SELECT signifie que toutes les colonnes de toutes les tables de la clause FROM sont slectionnes. L'ordre des colonnes spcifies dans la clause SELECT correspond l'ordre des colonnes affiches dans les rsultats. Les donnes de type numrique sont automatiquement alignes droite, et les donnes de type alpha numrique ou date automatiquement alignes gauche. Tous les en-ttes de colonne sont affichs, par dfaut, en majuscule.
4 rows selected.
03/09/2002
Page 0
Oprateur + * /
Exemple :
SQL> SELECT 2 FROM ename, sal, sal+300 emp;
ENAME SAL SAL+300 ---------- --------- --------KING 5000 5300 BLAKE 2850 3150 CLARK 2450 2750 JONES 2975 3275 MARTIN 1250 1550 ALLEN 1600 1900 ... 14 rows selected.
Les oprateurs arithmtiques peuvent tre utiliss dans toutes les clauses sauf la clause FROM. Les oprateurs arithmtiques * et / sont prioritaires par rapport aux oprateurs arithmtiques + , . Les oprateurs de mme priorit sont valus de gauche droite. Exemple :
SQL> SELECT 2 FROM ename, sal, 12*sal+100 emp;
ENAME SAL 12*SAL+100 ---------- --------- ---------KING 5000 60100 BLAKE 2850 34300 CLARK 2450 29500 JONES 2975 35800 MARTIN 1250 15100 ALLEN 1600 19300 ... 14 rows selected.
Des parenthses peuvent tre utilises pour clarifier les calculs et modifier l'ordre d'valuation. Exemple :
SQL> SELECT 2 FROM ename, sal, 12*(sal+100) emp;
ENAME SAL 12*(SAL+100) ---------- --------- ----------KING 5000 61200 BLAKE 2850 35400 CLARK 2450 30600 JONES 2975 36900 MARTIN 1250 16200 ... 14 rows selected.
Une valeur nulle est une valeur non assigne, inconnue ou inapplicable. Elle n'est pas quivalente zro ou un espace. Exemple :
03/09/2002
Page 0
ENAME JOB SAL COMM ---------- --------- -------- -------KING PRESIDENT 5000 BLAKE MANAGER 2850 ... TURNER SALESMAN 1500 0 ... 14 rows selected.
La valeur de la commission des employs KING et BLAKE est nulle tandis que la commission de lemploy TURNER est de 0. Si une expression arithmtique contient une valeur nulle, alors le rsultat de l'expression sera nul. Exemple :
SQL> SELECT 2 FROM 3 WHERE ename, 12*sal+comm emp ename='KING';
les requtes
L'utilisation des alias de colonne clarifiera et allgera les requtes SQL lorsque ces dernires se compliqueront. Il est fortement conseill de les utiliser. Les alias servent galement "renommer" les colonnes lors de l'affichage. Si l'alias est compos dune chane de caractres sans espace, il suffira juste de sparer le nom de la colonne et l'alias par un espace ou bien d'utiliser le mot optionnel AS. SELECT FROM Exemple :
SQL> SELECT 2 FROM ename name emp ;
Dans ces deux cas, lalias name apparatra en majuscule dans le rsultat :
NAME ------------...
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0
Pour respecter la casse de lalias lorsque celui-ci ne compte quun seul mot, il suffit de la placer entre guillemets. Exemple :
SQL> SELECT 2 FROM ename emp; "Name"
Dans ce cas, la casse de l'alias est respecte et il s'affichera comme suit : Si lalias est compos de plusieurs mots, il doit tre plac entre guillemets. Exemple :
SQL> SELECT 2 3 FROM ename "Employee's Name", sal*12 "Annual Salary" emp;
Password --------------SMITH20 ALLEN30 WARD30 JONES20 MARTIN30 BLAKE30 CLARK10 ... 14 rows selected
DEPTNO
Page 0
----------------------------------------- -----------SMITH travaille dans le dpartement 20 ALLEN travaille dans le dpartement 30 WARD travaille dans le dpartement 30 JONES travaille dans le dpartement 20 MARTIN travaille dans le dpartement 30 BLAKE travaille dans le dpartement 30 CLARK travaille dans le dpartement 10 ... 14 rows selected
Dans ce cas, la chane de caractre "travaille dans le dpartement" possde sa propre colonne lors de l'affichage. Les champs de cette colonne ont tous la mme valeur : la chane de caractre "travaille dans le dpartement". Exemple 2 :
SQL> SELECT 2 3 FROM ename||' travaille au dpartement '||deptno "Localisation" emp ;
Localisation ----------------------------------------SMITH travaille au dpartement 20 ALLEN travaille au dpartement 30 WARD travaille au dpartement 30 JONES travaille au dpartement 20 MARTIN travaille au dpartement 30 BLAKE travaille au dpartement 30 CLARK travaille au dpartement 10 ... 14 rows selected
Grce l'oprateur de concatnation, toutes les colonnes (y compris la chane de caractres) ne forment qu'une seule colonne lors de l'affichage.
03/09/2002
Page 0
Certains dpartements apparaissent plusieurs fois dans le rsultat. La requte affiche tous les doublons. Exemple avec l'utilisation du mot-cl DISTINCT :
SQL> SELECT 2 FROM DEPTNO --------10 20 30 3 rows selected . DISTINCT deptno emp;
Grce au mot-cl DISTINCT, seulement trois enregistrements sont retourns au lieu de quatorze. Ces trois enregistrements correspondent aux trois numros de dpartement.
2.3
SQL est un langage qui permet de communiquer avec le serveur Oracle depuis des outils ou des applications. Le SQL Oracle contient des extensions. Quand un ordre SQL est entr, il est stock dans une partie de la mmoire appele SQL buffer et y reste jusqu' l'entre d'un nouvel ordre. SQL*Plus est un outil Oracle qui reconnat et soumet les ordres SQL au serveur Oracle pour l'excution. SQL*Plus possde son propre langage. Caractristiques de SQL : - SQL peut tre utilis par des utilisateurs ayant peu voir aucune exprience en programmation. - SQL est un langage non procdural. - SQL rduit le temps rduit pour crer et maintenir les systmes. - SQL est un langage proche de l'anglais. Caractristiques de SQL*Plus : - accepte les entre "ad hoc" des ordres. - accepte du code SQL provenant de fichiers. - fournit un diteur de lignes pour modifier les ordres SQL. - Contrle les caractristiques de l'environnement. - Formate les rsultats d'une requte sous la forme d'un rapport. - Accde des bases de donnes locales et lointaines. Les diffrences entre SQL*PLUS et SQL :
03/09/2002
Page 0
SQL
SQL*Plus
- un langage pour communiquer avec le Serveur - reconnat les ordres SQL et les envoie au serveur Oracle pour accder aux donnes Oracle - un standard ANSI - une proprit Oracle pour interfacer l'excution d'ordres SQL - Les mots cls n'ont pas d'abbrviation - Les mots cls peuvent avoir des abbrviations - Les ordres SQL manipulent des donnes et la - Les commandes SQL*Plus grent l'environnement dfinition des tables dans la base de donnes SQL*Plus - Les ordres SQL sont placs dans le buffer - Les commandes SQL*Plus ne sont pas places dans le buffer - ncessite un caractre de terminaison pour - ne ncessite pas de caractre de terminaison pour excuter immdiatement un ordre excuter une commande immdiatement
Figure 6 : interaction avec SQL et SQL*Plus SQL*Plus est un environnement dans lequel on peut : - Excuter des ordres SQL pour rcuprer, modifier, ajouter et supprimer des donnes de la base de donnes. - Formater, permettre des calculs, stocker et imprimer les rsultats d'une requte sous la forme d'un rapport. - Crer des fichiers de script pour stocker des ordres SQL destins tre souvent utiliss. Les commandes SQL*Plus se divise en sept catgories : - Environnement : affecte le comportement gnral des ordres SQL pour une session. - Formatage : formate les rsultats d'une requte. - Manipulation des fichiers : sauve, charge et lance des fichiers script. - Excution : envoie les ordres SQL du buffer SQL au serveur Oracle. - Edition : modifie les ordres SQL stocks dans le buffer. - Interaction : permet de crer et de transmettre des variables des ordres SQL, d'imprimer les valeurs des variables et des messages l'cran. Le module 1 du cours SQLP traite les commandes ddition et les commandes manipulant les fichiers, tandis que le module 2 du cours SQLP traite des commandes de formatage, dinteraction et denvironnement.
03/09/2002
Page 0
Figure 7 : Bote de dialogue de connexion la base de donnes Pour ouvrir une session SQL*Plus en ligne de commande sous DOS : sqlplus loggin/password[@host_string] Pour ouvrir une session SQL*Plus en ligne de commande sous SQL*Plus : CONNECT loggin/password[@host_string]
La commande DESCRIBE affiche, pour chaque colonne de la table, l'existence ou non d'une contrainte NOT NULL sur la colonne et le type de donnes de la colonne. Les principaux types de donnes sont : - NUMBER : chiffre - CHAR : chane de caractres - VARCHAR2 : chane de caractres de longueur variable - DATE
03/09/2002
Page 0
ename, deptno,
Permet de remplacer la chane de caractres old de la ligne courante du buffer par la chane de caractres new. Permet de supprimer la chane de caractres old de la ligne courante.
Le buffer contient :
SELECT
ename, deptno
Permet d'insrer une nouvelle ligne dans le buffer. Permet d'insrer une nouvelle ligne contenant la chane de caractres text dans le buffer.
Le buffer contient :
SQL> I FROM emp
SELECT
Le buffer contient :
03/09/2002
Page 0
Permet d'afficher le contenu du buffer. Permet d'afficher la ligne n du buffer. Permet d'afficher les lignes m n.
R[UN]
Permet d'excuter le contenu du buffer. La commande affiche la requte suivie du rsultat de la requte. Permet de spcifier la ligne courante. Permet de remplacer la ligne n avec text. Permet d'insrer une ligne contenant text avant la ligne 1.
mgr emp
Permet d'effacer la ligne courante du buffer. Permet d'effacer la ligne n. Permet d'effacer les lignes m n. Permet d'effacer le contenu du buffer.
Exemple :
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0
Permet de rcuprer le contenu du buffer qui a pralablement t sauvegard dans un fichier. L'extension pas dfaut est .sql.
Permet d'excuter le contenu d'un fichier. Permet d'excuter le contenu d'un fichier (quivalent START).
Permet d'invoquer l'diteur et sauver le contenu du buffer dans un fichier nomm afiedt.buf Permet d'diter le contenu d'un fichier l'aide d'un diteur de texte.
cet commande dite le fichier 'all_emp' dans le Bloc Note. SPO[OL] filename[.ext] | OFF|OUT] Permet de stocker les rsultats d'une requte dans un fichier. OFF ferme le fichier de spool. OUT ferme le fichier de spool et envoie les rsultats contenus dans le fichier l'imprimante.
EXIT
03/09/2002
Page 0
value peut tre une colonne, une constante ou une liste de valeurs. Exemple :
SQL> SELECT 2 FROM 3 WHERE ENAME ---------JAMES SMITH ADAMS MILLER ename, job, deptno emp job='CLERK';
4 rows selected
Cette requte affiche le nom, le job et le numro de dpartement des employs dont la fonction est "CLERK". Attention la comparaison de deux chanes de caractres est sensible la casse (CLERK est diffrent de Clerk ou encore clerk).
Cette requte affiche le nom, la fonction et le numro de dpartement des employs appartenant au dpartement numro 10. Colonne de type CHAR ou VARCHAR :
SQL> SELECT 2 FROM 3 WHERE ename, job, deptno emp job = 'ANALYST';
03/09/2002
Page 0
Cette requte affiche le nom, la fonction et le numro de dpartement des employs dont la fonction est "ANALYST". Colonne de type DATE :
SQL> SELECT 2 FROM 3 WHERE ename, job, deptno emp hiredate = 01-JAN-99';
Cette requte affiche le nom, la fonction et le numro de dpartement des employs embauchs le 1er janvier 1999. (DD-MON-YY est le format daffichage par dfaut dune date dans la base de donnes).
3.2
Ces oprateurs ne tiennent pas compte des valeurs nulles (NULL VALUE). Exemple 1 :
SQL> SELECT 2 FROM 3 WHERE ENAME -----------JONES BLAKE CLARK SCOTT KING FORD ename, sal emp sal > 2000 ; SAL ---------2975 2850 2450 3000 5000 3000
6 rows selected
Cette requte retourne la liste des employs dont le salaire est strictement suprieur $2000 par mois. Exemple 2 :
SQL> SELECT 2 FROM 3 WHERE ename, hiredate emp hiredate < '01-JUL-81' ;
6 rows selected
Cette requte retourne la liste des employs embauchs avant le 1er juillet 1981. Exemple 3 :
SQL> SELECT 2 FROM 3 WHERE DEPTNO -------20 30 40 deptno, loc dept loc <> 'NEW YORK' ;
3 rows selected
Cette requte affiche les dpartements qui ne sont pas localiss NEW YORK.
Les limites peuvent tre des nombres, des caractres, des dates. Dans le cas o il s'agirait de caractres ou de dates, les limites doivent tre places entre simples ctes. L'oprateur BETWEEN est inclusif (ces limites sont incluses dans la tranche de valeurs possibles). Le serveur Oracle traduit l'oprateur BETWEEN..AND comme la combinaison de deux conditions relies par l'oprateur AND : (a >= lower_limit) AND (a <= higher_limit) L'utilisation de l'oprateur BETWEEN..AND n'apporte aucun bnfices de performance. Exemple 1 :
SQL> SELECT 2 FROM 3 WHERE ENAME -----------WARD MARTIN TURNER ADAMS MILLER ename, sal emp sal BETWEEN 1000 AND 1500 ; SAL ---------1250 1250 1500 1100 1300
5 rows selected
Cette requte affiche les employs dont le salaire est situ dans la tranche $1000 $1500.
03/09/2002
Page 0
Exemple 2 :
SQL> SELECT ename 2 FROM emp 3 WHERE ename BETWEEN 'S' AND 'W' ; ENAME ----------------SMITH SCOTT TURNER 3 rows selected
Cette requte affiche les employs dont le nom est situ dans la tranche "S" "W". L'employ WARD n'apparat pas car "WA" est plus grand que "W". Exemple 3 :
SQL> SELECT 2 FROM 3 WHERE ENAME ---------ALLEN WARD JONES BLAKE CLARK ename, hiredate emp hiredate BETWEEN '01-JAN-81' AND '31-JUL-81' ;
5 rows selected.
Cette requte affiche les employs embauchs entre le 1er janvier 1981 et le 331 juillet 1981. La date peut tre crite sous diffrent format dans l'expression de l'oprateur BETWEEN (par exemple sous la forme 01-01-81).
3.2.3 L'oprateur IN
L'oprateur IN permet d'afficher des enregistrements appartenant une liste de valeurs. WHERE column_name IN (value1, value2, value3) ;
Les valeurs de la liste peuvent tre des nombres, des caractres, des dates. Dans le cas o il s'agirait de caractres ou de dates, les valeurs doivent tre places entre simples ctes. Exemple :
SQL> SELECT 2 FROM 3 WHERE EMPNO 7369 7788 7876 7902 empno, ename, mgr emp mgr IN (7902, 7566, 7788) ;
ENAME MGR ---------- ---------- --------SMITH 7902 SCOTT 7566 ADAMS 7788 FORD 7566
5 rows selected
03/09/2002
Page 0
Cette requte affiche les employs dont le numro de manager est 7902 ou 7566 ou 7788.
Le symbole _ reprsente un seul caractre quelconque. Le symbole % reprsente une srie de zros ou de caractres.. L'oprateur LIKE peut tre utilis comme un raccourci de plusieurs conditions BETWEEN..AND Exemple :
SQL> SELECT 2 FROM 3 WHERE ENAME ----------BLAKE CLARK ADAMS 3 rows selected ename emp ename LIKE __A%;
Cette requte affiche les employs dont le troisime caractre de leur nom est un A suivie d'une chane de caractres n. Le mot cl ESCAPE sert rechercher un caractre spcial, comme ' % ' ou ' _ ' . L'oprateur LIKE considre alors le caractre spcial comme un caractre quelconque. WHERE Exemples :
SQL> SELECT 2 FROM 3 WHERE ENAME ----------SGBD_LILI SGBD_HELYOS SGBD_WEAN SGBD-ORACLE 4 rows selected ename emp ename LIKE 'SGBD_%';
Cette requte affiche les noms commenant par la chane de caractres "SGBD" suivis d'un caractre quelconque. Dans ce cas, le caractre "_" est interprt comme un caractre quelconque et non comme sa propre signification. Voici la mme requte avec l'utilisation du mot cl ESCAPE afin d'afficher les noms commenant par la chane de caractres "SGBD_" :
SQL> SELECT
ename
03/09/2002 Page 0
2 3
FROM WHERE
column_name IS NULL ;
3.3
L'oprateur AND permet d'afficher les enregistrements qui vrifient toutes les conditions impliques dans l'expression. WHERE AND condition1 condition2;
L'oprateur AND retourne TRUE si les deux conditions de l'expression logique sont toutes les deux TRUE.
03/09/2002
Page 0
Exemple :
SQL> 2 3 4 SELECT FROM WHERE AND empno, ename, job, sal emp sal >= 1100 job = 'CLERK' ; ENAME --------------ADAMS MILLER JOB SAL --------- ---------CLERK 1100 CLERK 1300
2 rows selected.
Cette requte affiche les employs dont la fonction est CLERK et dont le salaire est suprieur ou gal $1100.
3.3.2 L'oprateur OR
L'oprateur OR permet d'afficher les enregistrements qui vrifient au moins une des conditions impliques dans l'expression. WHERE OR condition1 conditon2 ;
L'oprateur OR retourne TRUE si au moins une des deux conditions de l'expression logique est TRUE. Exemple :
SQL> 2 3 4 SELECT FROM WHERE OR empno, ename, job, sal emp sal >= 1100 job = 'CLERK' ; SAL
EMPNO ENAME JOB ------------ ------------ ------------- ---------7369 SMITH CLERK 800 7499 ALLEN SALESMAN 1600 7521 WARD SALESMAN 1250 7566 JONES MANAGER 2975 7654 MARTIN SALESMAN 1250 ... 14 rows selected.
Cette requte affiche les employs dont la fonction est CLERK ou dont le salaire est suprieur ou gal $1100.
03/09/2002
Page 0
WHERE
L'oprateur NOT retourne TRUE si la condition de l'expression logique est FALSE. Loprateur NOT ne peut tre utilis quavec les oprateurs de comparaison IN, LIKE, BETWEEN et IS NULL. Placement : WHERE WHERE WHERE WHERE Exemple :
SQL> SELECT 2 FROM 3 WHERE ename, comm emp comm IS NOT NULL ; COMM --------300 500 1400 0
column_name NOT IN list_values column_name NOT LIKE wirdcard column_name NOT BETWEEN limit AND limit column_name IS NOT NULL
2 rows selected.
03/09/2002
Page 0
3.4
La clause ORDER BY permet d'afficher les enregistrements slectionns dans lordre croissant ou dcroissant. SELECT FROM [WHERE [ORDER BY [DISTINCT] { * | {column [alias] | expr, }} table condition(s)]; {column | expr} [ ASC | DESC ] ;
ENAME JOB DEPTNO HIREDATE ---------- --------- --------- --------SMITH CLERK 20 17-DEC-80 ALLEN SALESMAN 30 20-FEB-81 ... 14 rows selected.
Les enregistrements peuvent tre tris sur une colonne qui na pas t slectionne dans la clause SELECT. SELECT FROM ORDER BY column1, column2 table column3 ;
Les valeurs nulles sont affiches en premier lors dun tri dcroissant. Exemple :
SQL> SELECT 2 FROM 3 ORDER BY ENAME ---------ADAMS SCOTT MILLER JAMES FORD KING MARTIN ... ename, job, deptno, hiredate emp hiredate DESC;
JOB DEPTNO HIREDATE --------- --------- --------CLERK 20 12-JAN-83 ANALYST 20 09-DEC-82 CLERK 10 23-JAN-82 CLERK 30 03-DEC-81 ANALYST 20 03-DEC-81 PRESIDENT 10 17-NOV-81 SALESMAN 30 28-SEP-81
03/09/2002
Page 0
column1 alias1, column2 alias2 table alias1 ; column1, column2, expression table expression ;
EMPNO ENAME ANNSAL --------- ---------- --------7369 SMITH 9600 7900 JAMES 11400 7876 ADAMS 13200 7654 MARTIN 15000 ... 14 rows selected.
Exemple 2 :
SQL> SELECT 2 FROM 3 ORDER BY ename "Employee's Name", sal emp "Employee's Name" ;
Employee's Name SAL --------------- ---------ADAMS 1100 BLAKE 2850 CLARK 2450 FORD 3000 JAMES 950 ... 14 rows selected.
Exemple 3 :
SQL> SELECT 2 FROM 3 ORDER BY ename, sal, sal*12 emp sal*12;
ENAME SAL SAL*12 ---------- ---------- ---------SMITH 800 9600 JAMES 950 11400 ADAMS 1100 13200 WARD 1250 15000 MARTIN 1250 15000 MILLER 1300 15600 ... 14 rows selected.
03/09/2002
Page 0
Exemple :
SQL> SELECT 2 FROM 3 ORDER BY ename "Employee's Name", sal emp 1 ;
Cette requte retourne le mme rsultat que l'exemple 2 : les enregistrements sont tris dans l'ordre croissant sur le nom des l'employs.
Column1 et column2 peuvent tre des noms de colonnes, des expressions, des alias ou des numros de colonnes. Exemple :
SQL> SELECT 2 FROM 3 ORDER BY ename, deptno, sal emp deptno, sal DESC;
ENAME DEPTNO SAL ---------- --------- --------KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 ... 14 rows selected.
Les enregistrements sont tris dans l'ordre croissant par rapport au numro de dpartement et, numro de dpartement identique, dans l'ordre dcroissant par rapport au salaire.
03/09/2002
Page 0
Figure 8 : Les fonctions SQL Il existe deux types de fonction SQL : - Single-row functions : Elles oprent sur des enregistrements seuls et produisent un rsultat par enregistrement. - Multiple-row functions : Elles oprent sur un groupe denregistrements et produisent un rsultat par groupe denregistrements. Elles sont aussi appeles fonctions de groupe.
Function_name(column | expr, [arg1,arg2 ] ) Un argument dune fonction single-row peut-tre : une constante, une variable dfini par lutilisateur, une colonne ou une expression. Elles peuvent : - retourner un type diffrent de son ou ses argument(s), - tre utilises dans les clauses SELECT, WHERE et ORDER BY, - simbriquer. Les fonctions single-row sont classes en cinq types (type de donnes en entre type(s) de donnes en sortie) : character function character character / number number function number number date function date date / number / character data type conversion function number varchar2 varchar2 number / date date varchar2 general function Substitution des valeurs nulles d'une colonne par une valeur choisie (NVL). Excution de requtes bases sur une condition IF-THEN-ELSE (DECODE).
4.2
Les fonctions oprant sur des caractres sont divises en deux groupes : - Les fonctions de conversion de la casse - Les fonctions de manipulation des donnes
03/09/2002
Page 0
Convertit la premire lettre de chaque mot d'une chane de caractres en majuscule et les autres lettres en minuscule. Convertit une chane de caractres en minuscule. Convertit une chane de caractres en majuscule.
Exemple 2 :
SQL> SELECT empno, ename, deptno 2 FROM emp 3 WHERE ename = 'blake'; no rows selected. SQL> SELECT 2 FROM 3 WHERE empno, ename, deptno emp ename = UPPER('blake');
03/09/2002
Page 0
La fonction TRIM est une nouvelle fonction intgre dans Oracle8i qui fait le travail de LTRIM et RTRIM la fois.
Fonctions CONCAT ('Bon', 'jour') SUBSTR ('Bonjour',1,3) LENGTH ('Bonjour') INSTR('Bonjour','j') LPAD(sal, 10,'*') RPAD(sal, 10,'*') TRIM ('S' FROM 'SSMITH') Exemple 2 :
SQL> SELECT 2 3 FROM 4 WHERE ENAME ---------MARTIN ALLEN TURNER WARD
ename, CONCAT (ename, job), LENGTH(ename), INSTR(ename, 'A') emp SUBSTR(job,1,5) = 'SALES';
03/09/2002
Page 0
4.3
Si n est positif, larrondi se fera aprs la virgule. Si n est ngatif larrondi se fera avant la virgule ( la dizaine prs par exemple). Par dfaut n vaut 0. Oracle possde un outil trs pratique : une table nomme DUAL contenant une seule colonne DUMMY et contenant un seul enregistrement ayant pour valeur X. Cette table peut servir a effectuer des calculs dans un ordre SELECT o la clause FROM ne contient aucune table dont on ai rellement besoin. Comme la clause FROM est obligatoire et qu'elle doit contenir au moins une table, c'est la table DUAL qui sera spcifie permettant ainsi de contourner le problme. Exemple :
SQL> SELECT 2 3 FROM ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) dual ;
Si n est positif, la troncation se fera aprs la virgule. Si n est ngatif la troncation se fera avant la virgule ( la dizaine prs par exemple). Par dfaut n vaut 0. Exemple :
SQL> SELECT 2 3 FROM TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-1) dual;
03/09/2002
Page 0
ENAME SAL COMM MOD(SAL,COMM) ---------- --------- --------- ------------MARTIN 1250 1400 1250 ALLEN 1600 300 100 TURNER 1500 0 1500 WARD 1250 500 250 4 rows selected.
4.4
SYSDATE
Le format interne la base (Internal format) est : century, year, month, day, hour, minutes, seconds Laffichage par dfaut est DD-MON-YY soit par exemple 14-JUI-80 La table DUAL peut tre utilise pour afficher la date du jour :
SQL> SELECT 2 FROM SYSDATE dual ;
Une colonne nomme SYSDATE s'affiche, contenant la date du jour au format par dfaut.
03/09/2002
Page 0
Exemple :
SQL> SELECT 2 FROM 3 WHERE ENAME ---------KING CLARK MILLER ename, (SYSDATE-hiredate)/7 WEEKS emp deptno = 10;
3 rows selected.
Exemple :
Fonctions MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') ADD_MONTHS ('11-JAN-94',6) NEXT_DAY ('01-SEP-95','FRIDAY') LAST_DAY('01-SEP-95') ROUND('25-JUL-95','MONTH') ROUND('25-JUL-95','YEAR') TRUNC('25-JUL-95','MONTH') TRUNC('25-JUL-95','YEAR') Rsultats 19.6774194 '11-JUL-94' '08-SEP-95' '30-SEP-95' '01-AUG-95' '01-JAN-96' '01-JUL-95' '01-JAN-95'
4.5
Il existe deux types de fonctions de conversion de types de donnes : - les fonctions de conversion explicite (effectues par l'utilisateur) .
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0
Figure 12 : Les fonctions de conversion de types de donnes Bien que la conversion implicite de type de donnes soit disponible, il est recommand d'effectuer des conversions de type de donnes explicites pour assurer la fiabilit des ordres SQL. Le serveur Oracle peut automatiquement convertir les types de donnes suivants :
Assignement De VARCHAR2 ou CHAR VARCHAR2 ou CHAR NUMBER DATE Evaluation d'expression De VARCHAR2 ou CHAR NUMBER VARCHAR2 ou CHAR DATE NUMBER DATE VARCHAR2 VARCHAR2
TO_CHAR(number | date [,format]) : convertit un nombre ou une date en une chane de caractres TO_NUMBER(char [format]) : convertit une chanes de caractres en un nombre TO_DATE(char [,format]) : convertit une chane de caractres en une date.
03/09/2002
Page 0
Le format doit tre entour de simples ctes. Le format est sensible la casse. Il doit inclure des lments de format de date valides. Les noms des jours et des mois en entre sont automatiquement "padded" avec des blancs. Pour liminer les blancs ou supprimer les zros, il faut utiliser l'lment "fill mode".
03/09/2002
Page 0
Exemple :
SQL> SELECT 2 3 FROM ename, TO_CHAR(hiredate, 'fmDD Month YYYY') HIREDATE emp;
ENAME HIREDATE ---------- ----------------KING 17 November 1981 BLAKE 1 May 1981 CLARK 9 June 1981 JONES 2 April 1981 MARTIN 28 September 1981 ALLEN 20 February 1981 ... 14 rows selected.
Le serveur Oracle affiche une chane de caractres compose de signes # la place du rsultat si la valeur fournit en paramtres excde le nombre de digits du format. Le serveur Oracle arrondi la valeur dcimale au nombre d'espaces dcimal du format. Exemple
SQL> SELECT 2 FROM 3 WHERE SALARY -------$3,000 1 row selected.Autres TO_CHAR(sal,'$99,999') SALARY emp ename = 'SCOTT';
donnes
TO_NUMBER(char [,format])
Convertit la chane de caractres char en un nombre selon le format spcifi par le paramtre optionnel format.
03/09/2002
Page 0
TO_DATE(char [,format])
Convertit la chane de caractres char reprsentant une date en une valeur de type Date selon le format spcifi par le paramtre optionnel format. Le format par dfaut est DD-MON-YY. Retourne le caractre ayant l'quivalent binaire de number comme une valeur VARCHAR2 dans un jeu de caractres de base de donnes. Convertit le type de donnes de la valeur value un autre type de donnes datatype.
CHR(number)
CAST(value AS datatype)
0 - 49 50 - 99
4.6
La fonction NVL permet de substituer (convertir) les valeurs nulles d'une colonne par une valeur choisie. NVL (expr1,expr2) :
expr1 : valeur source ou expression pouvant contenir une valeur nulle expr2 : valeur de substitution
expr1 et expr2 doivent tre du mme type de donnes. Conversion de types de donnes varis :
03/09/2002
Page 0
ename, sal, NVL(TO_CHAR(comm),no commission') comm emp; COMM ------------------pas de commission 300 500 pas de commission 1400 pas de commission pas de commission
ENAME SAL ---------- ---------SMITH 800 ALLEN 1600 WARD 1250 JONES 2975 MARTIN 1250 BLAKE 2850 CLARK 2450 ... 14 rows selected.
La fonction TO_CHAR convertit le type de la colonne COMM au type de donnes CHAR. La fonction NVL remplace les valeurs nulles de la colonne COMM par la chane de caractre "pas de commission".
Exemple 2 :
SQL> SELECT 2 FROM ename, sal, comm, (sal*12)+NVL(comm,0) salaire anuel emp;
ENAME SAL COMM SALAIRE ANNUEL ---------- --------- --------- -------------KING 5000 60000 BLAKE 2850 34200 CLARK 2450 29400 JONES 2975 35700 MARTIN 1250 1400 16400 ALLEN 1600 300 19500 ... 14 rows selected.
La fonction NVL remplace les valeurs nulles de la colonne COMM par le nombre 0 afin de pouvoir calculer le salaire annuel de ceux qui ne touchent pas de commission.
Cette requte affiche le salaire de l'employ multipli par une valeur qui dpend de sa fonction. Cette requte est quivalente l'ordre IF-THEN-ELSE suivant :
IF job = 'ANALYST' THEN revised_salary = sal * 1,1 ; ELSIF job = 'CLERK' THEN revised_salary = sal * 1,15 ; ELSIF job = 'MANAGER' THEN revised_salary = sal * 1,20 ; ELSE revised_sal = sal ;
SQL> SELECT job, sal, 2 DECODE(job,'ANALYST', 3 'CLERK', 4 'MANAGER', 5 6 REVISED_SALARY 7 FROM emp; JOB SAL REVISED_SALARY --------- --------- -------------PRESIDENT 5000 5000 MANAGER 2850 3420 MANAGER 2450 2940 ... 14 rows selected.
Exemple 2 :
SQL> SELECT 2 3 4 5 6 7 8 9 10 11 FROM 12 WHERE ename, sal, DECODE(TRUNC(sal/1000, 0), 0, 1, 2, 3, 4, 5, 6, emp deptno = 30;
ENAME SAL TAX_RATE ---------- ---------- ---------ALLEN 1600 ,09 WARD 1250 ,09 MARTIN 1250 ,09 BLAKE 2850 ,2 TURNER 1500 ,09 JAMES 950 0
Cette requte affiche te taux de la taxe affecte chaque employ du dpartement numro 30. Ce taux est calcul en fonction de la valeur tronque du salaire divis pas 1000.
6 rows selected.
La fonction TO_CHAR convertit en CHAR la valeur contenue dans la colonne JOB afin quel soit du mme type que le deuxime argument de la fonction NVL.
03/09/2002
Page 0