Vous êtes sur la page 1sur 48

Cours Oracle - 1Z0-001

Module N 1 Ordres SELECT Basiques

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

ORDRES SELECT BASIQUES - v 1.1

Table des matires


1 CONCEPTS DUNE BASE DE DONNEE RELATIONNELLE ___________________________ 0 1.1 Principes Relationnels ___________________________________________________ 0 1.1.1 Concepts dune base de donnes relationnelle ___________________________ 0 1.1.2 Terminologie dune base de donnes relationnelle_________________________ 0 Conception dune base de donnes_________________________________________ 1.2.1 Cycle de dveloppement dun systme dinformation _______________________ 1.2.2 Les composants du modle Entit-Relation ______________________________ 1.2.3 Les conventions du modle Entit-Relation ______________________________ ORDBMS (Objet Relationship Database Management System) __________________ 1.3.1 Dfinition d'un ORDBMS_____________________________________________ 1.3.2 Interactions avec le serveur Oracle_____________________________________ 1.3.3 Les types d'ordres SQL______________________________________________ Ordres SELECT _________________________________________________________ 2.1.1 Les capacits d'un ordre SELECT _____________________________________ 2.1.2 Ecriture d'un ordre SELECT __________________________________________ 2.1.3 Slectionner des colonnes et des enregistrements_________________________ 2.1.4 Les expressions arithmtiques ________________________________________ Personnaliser les requtes ________________________________________________ 2.2.1 Alias de colonne ___________________________________________________ 2.2.2 Oprateur de concatnation __________________________________________ 2.2.3 Chane de caractres littrale _________________________________________ 2.2.4 Elimination des doublons ____________________________________________ Interaction avec SQL*Plus ________________________________________________ 2.3.1 Caractristiques de SQL et SQL*Plus___________________________________ 2.3.2 Se connecter SQL*Plus ____________________________________________ 2.3.3 La commande DESCRIBE de SQL*Plus_________________________________ 2.3.4 Les commandes d'dition de SQL*Plus _________________________________ 2.3.5 Les commandes SQL*Plus manipulant les fichiers_________________________ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1.2

1.3

ECRITURE D'ORDRES SQL BASIQUES __________________________________________ 0 2.1

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

Laboratoire Oracle SUPINFO www.labo-oracle.com

Page 0

ORDRES SELECT BASIQUES - v 1.1

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

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

1 CONCEPTS DUNE BASE DE DONNEE RELATIONNELLE


1.1 Principes Relationnels
1.1.1 Concepts dune base de donnes relationnelle
Toute organisation a besoin d'informations. Exemples : - Une bibliothque maintient une liste de membres, de livres... - Une socit maintient des informations sur ses salaris, ses dpartements Ces informations sont appeles des donnes. Elles peuvent tre stockes sur diffrents types de support et format comme : des fiches papiers, des tableaux Excel...ou des bases de donnes.

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

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

Figure 3 : Base de donnes relationnelle

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

1.1.2 Terminologie dune base de donnes relationnelle


Une base de donnes relationnelle contient une ou plusieurs tables (ou relations) bidimensionnelles qui correspondent au moyen de stockage le plus basique. Une table contiendra des informations qui pourront tre retrouves tout moment. Structure gnrale d'une table : Un ligne, un enregistrement ou un tuple (row) : Ensemble de caractristiques dfinissant une occurrence de l'objet table. (Correspond dans table EMP aux informations relatives un employ). L'ordre des lignes stockes dans la table est sans importance car un ordre de tri peut tre spcifi lors d'une requte SQL. Une colonne (column) : Ensemble de donnes relatives une information caractristique (dans la table EMP, tous les employs ont un nom, un salaire...). Une colonne peut contenir une cl primaire, une cl trangre ou des valeurs simples. Une cl primaire (Primary Key PK) : Sous-ensemble minimal dattributs dune table permettant didentifier un enregistrement de manire unique. Cette valeur ne peut donc pas tre nulle ou double. (En rgle gnrale, cette valeur nest pas modifie par lutilisateur). Une cl trangre (Foreign Key FK) : Sous-ensemble dattributs rfrenant la cl dune autre table. Une cl trangre traduit une relation entre deux tables. Un champ (field) : Intersection d'une ligne avec une colonne. Un champ ne peut contenir qu'une seule valeur . Sa valeur peut tre nulle (elle ne contiendra aucune valeur). Les valeurs dune cl trangre correspondent aux valeurs d'une cl primaire dans une autre colonne dune table. Les colonnes qui ne sont ni cl primaire ni cl trangre contiennent des valeurs qui ne font pas rfrence des valeurs dune autre colonne dune table.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

Figure 4 : Structure gnrale des tables

1.2

Conception dune base de donnes


1.2.1 Cycle de dveloppement dun systme dinformation

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

Laboratoire Oracle SUPINFO www.labo-oracle.com

ORDRES SELECT BASIQUES - v 1.1

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.

1.2.2 Les composants du modle Entit-Relation


La reprsentation visuelle contribue dans une large mesure ltablissement dun dialogue constructif entre tous les partenaires qui collaborent pour concevoir ensemble un systme dinformation. Le modle ER est une description du systme dinformation utilisant un formalisme de reprsentation prcis, simple et rigoureux, pour la description des donnes. Ce formalisme est normalis au plan international par lISO (International Standard Organisation) sous le nom de : modle Entit Relation . Les modles sont utiliss pour communiquer, classer par catgories, dcrire, spcifier, enquter, laborer, analyser, imiter. Le but est de produire un modle qui s'adapte toutes ces utilisations, qui peut tre compris par les utilisateurs finaux et qui contient suffisamment de dtails pour permettre au dveloppeur de construire la base de donnes. Le modle entit-relation (Entity Relationship ER) est utilis couramment par les concepteurs de base de donnes pendant la phase de stratgie et analyse.

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 :

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

1.2.3 Les conventions du modle Entit-Relation


Une entit est reprsente par un rectangle avec les bords arrondis. Le nom de cette entit doit tre singulier, unique et not en majuscule. Les synonymes ou raccourcis du nom de lentit apparatront en majuscule dans des parenthses. Un attribut est reprsent par un nom singulier en minuscule. Un attribut obligatoire sera prcd du caractre " * " et ne pourra pas contenir une valeur nulle. Un attribut optionnel sera prcd du caractre " o ". Un attribut unique (unique identifier UID) est un attribut qui distingue de manire unique chaque occurrence de l'entit. On dsigne ce UID en le faisant prcd du caractre " # ". Si on doit rajouter un second UID le fera prcd des caractres " (#) ". Exemple : EMPLOYEE (EMP) # numro * nom prnom adresse o e-mail

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.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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

1.3 ORDBMS (Objet Relationship Database Management System)


1.3.1 Dfinition d'un ORDBMS
Un ORDBMS est un systme de gestion pour les bases de donnes relationnelle-objet. Diffrence entre RDBMS et ORDBMS : Un ORDBMS permet de reprsenter l'information sous forme objet et permet aux objets de stocker des donnes et des processus. Points communs entre DBDMS et ORDBMS : Ils administrent le stockage et la dfinition des donnes. Ils contrlent l'accs aux donnes. Ils fournissent un ensemble de tables, vues et autres objets de la base de donnes qui permettent une lecture seule sur la base de donnes. Oracle 8I est une base de donnes relationnelle objet, elle possde donc un ORDBMS.

1.3.2 Interactions avec le serveur Oracle


Interaction avec SQL: SQL (Structured Query Langage) est un langage proche de l'anglais qui permet des utilisateurs sans notions de dveloppement de rcuprer les donnes dont ils ont besoin.
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

1.3.3 Les types d'ordres SQL


Il existe cinq types dordre SQL : Data Retrieval Langage (DRL) : Ensemble de commandes qui permettent de rcuprer les donnes contenues dans une ou plusieurs table de la base. (Exemple : lordre SELECT ) Data Manipulation Langage (DML) : Ensemble de commandes qui permettent de modifier les donnes de la base. (Exemple : les ordres INSERT, DELETE, UPDATE) Data Definition Langage (DDL) : Ensemble de commandes qui permettent de modifier la structure de la base. (Exemple : les ordres CREATE, DROP, ALTER, RENAME) Transaction Control Statement (TCS) : Est un ensemble de commandes qui permettent d'administrer les changement effectus par les commandes DML. (Exemple : les commandes COMMIT, ROLLBACK, SAVEPOINT) Data Control Language (DCL) : Est un ensemble de commandes qui permettent de contrler les accs utilisateur la base de donnes. (Exemple : les ordres GRANT, REVOKE)

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

2 ECRITURE D'ORDRES SQL BASIQUES


2.1 Ordres SELECT
2.1.1 Les capacits d'un ordre SELECT
L'ordre SELECT sert extraire des donnes de la base de donnes. SELECT FROM what where ;

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.

2.1.2 Ecriture d'un ordre SELECT


Un ordre SELECT sert extraire des donnes stockes dans des colonnes issues de tables de la base de donnes :
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

2.1.3 Slectionner des colonnes et des enregistrements


Exemple :
SQL> SELECT 2 FROM DEPTNO --------10 20 30 40 * dept; LOC ------------NEW YORK DALLAS CHICAGO BOSTON

DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS

Toutes les colonnes de la table DEPT sont slectionnes et affiches. Exemple :


SQL> SELECT 2 FROM DEPTNO --------10 20 30 40 deptno, loc dept;

LOC ------------NEW YORK DALLAS CHICAGO BOSTON

4 rows selected.

Les colonnes DEPTNO et DNAME de la table DEPT sont slectionnes et affiches.

2.1.4 Les expressions arithmtiques


Les oprateurs arithmtiques peuvent tre utiliss pour effectuer des oprations sur les dates ou les nombres. Les oprateurs arithmtiques disponibles sous Oracle sont les suivants :

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

Oprateur + * /

Description Additionner Soustraire Multiplier Diviser

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 :

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

SQL> SELECT 2 FROM

ename, job, sal, comm emp;

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';

ENAME 12*SAL+COMM ---------- ----------KING 1 row selected.Personnaliser

les requtes

2.2.1 Alias de colonne


Un alias de colonne est une chane de caractre qui se substitut au nom de la colonne pour le traitement et l'affichage de la colonne. SELECT FROM column1 alias1, column2 alias2 table ;

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 ;

column1 AS alias1, column2 AS alais2 table;

La requte ci-dessus est quivalente celle qui suit :


SQL> SELECT 2 FROM ename AS 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

ORDRES SELECT BASIQUES - v 1.1

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;

La casse des l'alias est respecte et il s'affichera comme suit :


Employee's Name Annual Salary ---------------- -------------...

2.2.2 Oprateur de concatnation


La combinaison de caractres " || " est utilise pour concatner des colonnes ou des chanes de caractres d'autres colonnes. Exemple :
SQL> SELECT 2 FROM ename||deptno "Password" emp ;

Password --------------SMITH20 ALLEN30 WARD30 JONES20 MARTIN30 BLAKE30 CLARK10 ... 14 rows selected

2.2.3 Chane de caractres littrale


Des chanes de caractres peuvent tre ajoutes dans une clause SELECT. Ces chanes sont constantes et s'affichent pour chaque ligne du rsultat. Elles peuvent tre du type caractre, nombre ou date. Les chanes de type caractres et date doivent tre inclues entre simple ctes. Une chane de caractre place dans un ordre SELECT doit tre mise entre simples ctes. Exemple 1 :
SQL> SELECT 2 FROM ENAME ename, ' travaille dans le dpartement' , deptno emp; 'TRAVAILLEDANSLEDPARTEMENT'
03/09/2002

DEPTNO
Page 0

Laboratoire Oracle SUPINFO www.labo-oracle.com

ORDRES SELECT BASIQUES - v 1.1

----------------------------------------- -----------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.

2.2.4 Elimination des doublons


Le mot-cl DISCTINCT limine les doublons dans le rsultat de la requte lors de l'affichage. Un doublon est un enregistrement qui se rpte plusieurs fois. Le mot-cl DISTINCT est utilis dans la clause SELECT comme suit : SELECT FROM [DISTINCT] { * | {column [alias] | expr, }} table ;

Exemple sans l'utilisation du mot cl DISTINCT :


SQL> SELECT 2 FROM deptno emp;

DEPTNO --------10 30 10 20 ... 14 rows selected

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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

Interaction avec SQL*Plus


2.3.1 Caractristiques de SQL et SQL*Plus

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 :

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

2.3.2 Se connecter SQL*Plus


Pour se logger au serveur, il suffit de saisir son nom d'utilisateur (loggin), son mot de passe (password) et la chane d'hte (nom de service) dans la boite de dialogue qui s'ouvre automatiquement au lancement de SQL*PLUS.

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]

2.3.3 La commande DESCRIBE de SQL*Plus


La commande DESCRIBE (ou DESC) est une commande propre SQL*Plus qui affiche la structure de la table passe en argument. DESCRIBE table_name ; Exemple :
SQL> DESCRIBE dept Type -----------NUMBER(2) VARCHAR2(14) VARCHAR2(13)

Name Null? ----------------- -------DEPTNO NOT NULL DNAME LOC

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

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

2.3.4 Les commandes d'dition de SQL*Plus


Les commandes d'dition de SQL*Plus permettent de manipuler le contenu du buffer. A[PPEND] text Exemple :
SQL> SELECT ename, deptno,

Permet de rajouter la dernire ligne du buffer la chane de caractres text.

Le buffer contient : SELECT


SQL> A job

ename, deptno,

Le buffer contient : SELECT

ename, deptno, job

C[HANGE] / old / new C[HANGE] / old / Exemple :


SQL> SELECT

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.

ename, deptno, job

Le buffer contient : SELECT


SQL> C/job/sal

ename, deptno, job

Le buffer contient : SELECT


SQL> C/, sal

ename, deptno, sal

Le buffer contient :

SELECT

ename, deptno

I[NPUT] I[NPUT] text Exemple :


SQL> SELECT

Permet d'insrer une nouvelle ligne dans le buffer. Permet d'insrer une nouvelle ligne contenant la chane de caractres text dans le buffer.

ename, deptno, sal

Le buffer contient :
SQL> I FROM emp

SELECT

ename, deptno, sal

Le buffer contient :

SELECT FROM emp

ename, deptno, sal

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

L[IST] L[IST] n L[IST] m n Exemple :


SQL> L 1 SELECT 2* FROM

Permet d'afficher le contenu du buffer. Permet d'afficher la ligne n du buffer. Permet d'afficher les lignes m n.

ename, deptno, sal emp

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.

n n text 0 text Exemple :


SQL> 1 1 SELECT SQL> 1 SELECT

ename, deptno, sal mgr

Le buffer contient : SELECT FROM DEL DEL n DEL m n CL[EAR BUFF[ER]

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.

2.3.5 Les commandes SQL*Plus manipulant les fichiers


Les commandes SQL*Plus manipulant les fichiers permettent de sauver, charger, excuter des fichiers script. SAV[E] filename[.ext] [RE[PLACE] | APP[END]] Permet de sauvegarder le contenu du buffer dans un fichier. APPEND spcifie que le contenu du buffer doit tre ajout au contenu d'un fichier existant. REPLACE spcifie que le fichier existant sera cras.

Exemple :
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0

ORDRES SELECT BASIQUES - v 1.1

SQL> SAV all_emp

GET filename[.ext] Exemple :


SQL> GET all_emp

Permet de rcuprer le contenu du buffer qui a pralablement t sauvegard dans un fichier. L'extension pas dfaut est .sql.

STA[RT] filename[.ext] @filename[.ext] Exemple :


SQL> STA all_emp SQL> @all_emp

Permet d'excuter le contenu d'un fichier. Permet d'excuter le contenu d'un fichier (quivalent START).

ED[IT] ED[IT] [filename[.ext]] Exemple :


SQL> ED all_emp

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

Permet de se dconnecter et de fermer SQL*Plus automatiquement aprs.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

3 RESTREINDRE ET EXTRAIRE DES DONNEES


3.1 Restreindre des enregistrements
3.1.1 La clause WHERE
La clause WHERE restreint la requte aux enregistrements qui respectent sa ou ses conditions. La clause WHERE correspond une slection : elle restreint les enregistrements (ou lignes). SELECT FROM [WHERE [DISTINCT] { * | column [alias], expr, } table column_name operator value ];

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';

JOB DEPTNO --------- --------CLERK 30 CLERK 20 CLERK 20 CLERK 10

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).

3.1.2 Les rgles de conduite de la clause WHERE


Les chanes de caractres sont sensibles la casse. Les dates sont sensibles au format. Les chanes de caractres et les dates doivent tre placs entre simples ctes. Exemples d'utilisation de la clause WHERE avec diffrents types de donnes : Colonne de type NUMBER :
SQL> SELECT 2 FROM 3 WHERE ename, job, deptno emp deptno = 10;

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';

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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

Les oprateurs de comparaison


3.2.1 Expressions de comparaison

Les oprateurs de comparaison disponibles sous Oracle sont les suivants :


Oprateur = < <= > <= <> Significations Egal Infrieur Infrieur ou gal Suprieur Suprieur ou gal Diffrent de

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' ;

ENAME HIREDATE -------- ---------SMITH 17/12/80 ALLEN 20/02/81 WARD 22/02/81


Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0

ORDRES SELECT BASIQUES - v 1.1

JONES BLAKE CLARK

02/04/81 01/05/81 09/06/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' ;

LOC -----------DALLAS CHICAGO BOSTON

3 rows selected

Cette requte affiche les dpartements qui ne sont pas localiss NEW YORK.

3.2.2 Loprateur BETWEEN


L'oprateur BETWEEN..AND permet d'afficher des enregistrements bass sur une tranche de valeurs WHERE column_name BETWEEN lower_limit AND higher_limit ;

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.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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' ;

HIREDATE -------20/02/81 22/02/81 02/04/81 01/05/81 09/06/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

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

Cette requte affiche les employs dont le numro de manager est 7902 ou 7566 ou 7788.

3.2.4 L'oprateur LIKE


L'oprateur LIKE permet de faire des recherches de caractres spcifiques dans une chane de caractres donnes. WHERE column_name LIKE value including wildcards ;

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_%';

column_name LIKE value1value2 ESCAPE caractre d'chappement' ;

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

Laboratoire Oracle SUPINFO www.labo-oracle.com

ORDRES SELECT BASIQUES - v 1.1

2 3

FROM WHERE

emp ename LIKE SGBD\_% ESCAPE '\' ;

ENAME ----------SGBD_LILI SGBD_HELYOS SGBD_WEAN 3 row selected

3.2.5 L'oprateur IS NULL


L'oprateur IS NULL permet d'afficher les enregistrements dont certains champs contiennent des valeurs nulle. Une valeur nulle signifie que la valeur n'est pas disponible, non assigne, inconnue ou inapplicable. WHERE Exemple :
SQL> SELECT 2 FROM 3 WHERE ename, mgr emp mgr IS NULL ; MGR -------------

column_name IS NULL ;

ENAME ---------------KING 1 row selected

Cette requte affiche les employs qui ne possdent pas de manager.

3.3

Les oprateurs logiques


3.3.1 L'oprateur AND

L'oprateur AND permet d'afficher les enregistrements qui vrifient toutes les conditions impliques dans l'expression. WHERE AND condition1 condition2;

Rsultats d'une combinaison de deux conditions AND :


AND TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL

L'oprateur AND retourne TRUE si les deux conditions de l'expression logique sont toutes les deux TRUE.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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

EMPNO -------------7876 7934

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 ;

Rsultats d'une combinaison de deux conditions OR :


OR TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL

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.

3.3.3 L'oprateur NOT


L'oprateur NOT permet d'afficher les enregistrements qui ne vrifient pas la condition implique dans l'expression.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

WHERE

column_name NOT comparison_operator value;

Rsultats d'une combinaison de deux conditions NOT :


NOT TRUE TRUE FALSE FALSE TRUE NULL NULL

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

ENAME -------------------ALLEN WARD MARTIN TURNER 4 rows selected.

Cette requte affiche la liste des employs touchant une commission.

3.3.4 Ordres d'valuation des oprateurs


Ordre d'valuation des oprateurs : Evaluer en premier : oprateurs de comparaison Evaluer en second : oprateurs logiques (dans cet ordre NOT, AND, OR) Les conditions entre parenthses sont values en premier. Exemple :
SQL> 2 3 4 5 SELECT FROM WHERE OR AND ename, job, sal emp (job='SALESMAN' job='PRESIDENT') sal>1500;

ENAME ---------KING ALLEN

JOB SAL --------- --------PRESIDENT 5000 SALESMAN 1600

2 rows selected.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

3.4

Ordonner les enregistrements


3.4.1 La Clause ORDER BY

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 ] ;

Lordre par dfaut est croissant. Exemple :


SQL> SELECT 2 FROM 3 ORDER BY ename, job, deptno, hiredate emp hiredate;

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 ;

3.4.2 Trier dans lordre dcroissant


Le mot-cl DESC permet d'afficher les enregistrements slectionns dans lordre dcroissant. ORDER BY {column | expr} DESC ;

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

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

3.4.3 Trier sur un alias de colonne ou une expression


Les enregistrements peuvent tre tris sur un alias de colonne ou une expression. SELECT FROM ORDER BY SELECT FROM ORDER BY Exemple1 :
SQL> SELECT 2 FROM 3 ORDER BY empno, ename, sal*12 annsal emp annsal;

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;

Les enregistrements peuvent tre tris sur un numro de colonne.

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.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

3.4.4 Trier sur plusieurs colonnes


Les enregistrements peuvent tre tris sur plusieurs colonnes. ORDER BY ORDER BY column1, column2 ; column1 [DESC | ASC], column2 [DESC | ASC];

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.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

4 LES FONCTIONS SINGLE-ROW


4.1 Les fonctions SQL
4.1.1 Les types de fonctions SQL
Une fonction SQL est un programme qui effectue une opration sur des donnes. Les fonctions SQL peuvent tre utilises pour formater des dates et des nombres pour laffichage, et pour convertir des types de donnes de colonne. Une fonction SQL peut accepter un plusieurs arguments mais ne retourne toujours quune seule valeur.

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.

Figure 9 : Les types de fonctions SQL

4.1.2 Les fonctions SQL single-row


Les fonctions single-row sont utilises pour manipuler des donnes.
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0

ORDRES SELECT BASIQUES - v 1.1

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).

Figure 10 : Classement des fonctions single-row

4.2

Les fonctions oprant sur les caractres

Les fonctions oprant sur des caractres sont divises en deux groupes : - Les fonctions de conversion de la casse - Les fonctions de manipulation des donnes

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

Figure 11 : Les fonctions oprant sur les caractres

4.2.1 Les fonctions de conversion de casse


Les fonctions de conversion de la casse permettent d'afficher ou d'utiliser les donnes dans une casse diffrente de celle qu'elles possdent dans la table. INITCAP(column | expr) LOWER(column | expr) UPPER(column | expr) Exemple 1 :
Fonctions INITCAP('Cours de SQL') LOWER('Cours de SQL') UPPER ('Cours de SQL') Rsultats Cours De Sql cours de sql COURS DE SQL

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');

EMPNO ENAME DEPTNO --------- ---------- --------7698 BLAKE 30 1 row selected.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

4.2.2 Les fonctions de manipulation de caractres


LENGTH(column | expr) SUBSTR(column | expr, m [,n]) INSTR(column | expr, c) LPAD(column | expr, n, string) RPAD(column | expr, n, string) CONCAT(column1 | expr1, Column2 | expr2) TRIM(leading | trailing | both, trim_character FROM trim_source) Permet de rcuprer le nombre de caractres d'une chane. LENGTH retourne une valeur de type NUMBER. Permet d'extraire une chane de caractres de la chane de caractre column (ou issue de expr) sur une longueur n partir de la position m. Permet de rcuprer la position de la premire occurrence du caractre c dans la chane de caractres column ou issue de expr. Permet de placer n caractres de type string gauche de la valeur de column (ou expr). Permet de placer n caractres de type string droite de la valeur de column (ou expr). Permet de concatner la valeur de la premire chane la valeur de la seconde chane. (quivalent l'oprateur "||"). Permet de couper les caractres trim_character en entte (leading), en fin (trailing) ou les deux (both) d'une chane de caractre trim_source.

La fonction TRIM est une nouvelle fonction intgre dans Oracle8i qui fait le travail de LTRIM et RTRIM la fois.

4.2.3 Utilisation des fonctions SQL manipulant les caractres


Exemple 1 :

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

Rsultats Bonjour Bon 7 4 ******5000 5000****** MITH

ename, CONCAT (ename, job), LENGTH(ename), INSTR(ename, 'A') emp SUBSTR(job,1,5) = 'SALES';

CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A') ------------------- ------------- ---------------MARTINSALESMAN 6 2 ALLENSALESMAN 5 1 TURNERSALESMAN 6 0 WARDSALESMAN 4 2

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

4.3

Les fonctions oprant sur les nombres


4.3.1 La fonction ROUND

ROUND(column | expr [,n])

Permet d'arrondir une valeur column ou issue de expr n dcimales prs.

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 ;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1) --------------- -------------- ----------------45.92 46 50 1 row selected.

La fonction ROUND peut-tre utilis avec des dates.

4.3.2 La fonction TRUNC


TRUNC(column | expr [,n]) Permet de tronquer une valeur column ou issue de expr n dcimales prs.

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;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1) --------------- ------------- --------------45.92 45 40 1 row selected.

La fonction ROUND peut tre utilise avec des dates.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

4.3.3 La fonction MOD


MOD(m,n) Exemple :
SQL> SELECT 2 FROM 3 WHERE ename, sal, comm, MOD(sal, comm) emp job = 'SALESMAN';

Permet de retourner le reste de la valeur de m divis par n.

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

Les fonctions oprant sur les dates


4.4.1 La fonction SYSDATE

SYSDATE

Permet de retourner la date et lheure courante.

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.

4.4.2 Oprations arithmtiques sur les dates


Les oprateurs arithmtiques peuvent tre utiliss pour effectuer des calculs arithmtiques sur les dates. Oprations possibles sur les dates :
Opration date + number date - number date - date date + number/24 Rsultat date date nombre de jours date Description ajoute un nombre de jours une date soustrait un nombre de jours une date soustrait une date une autre date ajoute un nombre d'heures une date

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

Exemple :
SQL> SELECT 2 FROM 3 WHERE ENAME ---------KING CLARK MILLER ename, (SYSDATE-hiredate)/7 WEEKS emp deptno = 10;

WEEKS --------830.93709 853.93709 821.36566

3 rows selected.

4.4.3 Les fonctions oprant sur les dates


Voici les principales fonctions oprant sur des dates : Retourne le nombre de mois sparant deux dates. Le rsultat peut-tre positif ou ngatif. Si date1 est plus vieille que date2, le MONTHS_BETWEEN(date1,date2) rsultat est positif. Si date1 est plus rcente que date2, le rsultat est ngatif. ADD_MONTHS(date,n) NEXT_DAY(date, 'day of week') LAST_DAY(date) ROUND(date [,format]) TRUNC(date [,format]) Ajoute n mois une date. n doit tre un entier positif ou ngatif. Trouve la date du prochain jour de la semaine (day of week) suivant date. La valeur de day of week doit tre un nombre reprsentant le jour ou une chane de caractres. Trouve la date du dernier jour du mois qui contient date. Retourne date arrondie l'unit spcifi par format. Si le format est omis, date est arrondie au jour le plus prs. Retourne date tronque l'unit spcifi par format. Si le format est omis, date est tronque au jour le plus prs.

format peut avoir les valeurs : DAY, MONTH ou WEEK.

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

Fonctions de conversions de types de donnes

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

ORDRES SELECT BASIQUES - v 1.1

les fonctions de conversion implicite (effectues par le serveur Oracle).

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

4.5.1 Conversion explicite de types de donnes


Voici les trois principales fonctions de conversion explicite de types de donnes :
-

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.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

Figure 13 : Conversion explicite de types de donnes

4.5.2 La fonction TO_CHAR avec des dates


Voici les diffrents formats de conversion de la fonction TO_CHAR avec des dates : YYYY YEAR MM MONTH DY DAY WW ou W DDD DD D J Q MON RM CC fmDAY AM ou PM HH ou HH12 ou HH24 MI SS SSSS TH SP SPTH ou THSP
anne sur quatre chiffres anne crite en toutes lettres le mois sur deux caractres le mois en toutes lettres le jour de la semaine en trois lettres le jour de la semaine en toutes lettres semaine de lanne ou du mois jour de lanne jour du mois jour de la semaine le nombre de jour depuis le 31 dcembre 4713 BC quart de lanne le mois sur trois caractres numro romain du mois sicle supprime les espaces indicateur de mridien heure du jour minutes (0-59) secondes (0-59) secondes (0-86399) nombre ordinal nombre crit en toutes lettres nombre ordinal crit en toutes lettres

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".

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

4.5.3 La fonction TO_CHAR avec des nombres


Voici les diffrents formats de conversion de la fonction TO_CHAR avec des nombres :
ELEMENT 9 0 $ . , L L L MI PR EEEE V B EXAMPLE 999999 99999 $999999 99999.99 999,999 L999999 L999999 L999999 999999MI 999999PR 99.999EEE 9999V99 B9999.99 RESULT 1234 1234 $1234 1234.00 1,234 FF1234 DM1234 $1234 1234<1234> 1.234E+03 123400 1234 MEANING

francs Deutche marks dollars

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';

fonctions de conversion de types de

donnes

TO_NUMBER(char [,format])

Convertit la chane de caractres char en un nombre selon le format spcifi par le paramtre optionnel format.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

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)

4.5.5 Le format Date RR


Pour compter une diffrence sur les sicles, il faut utiliser le format de date RR plutt que YY pour formater l'anne des dates. Exemples : La date '01/02/01' au format RR sera interprte comme tant en 2001 alors qu'au format YY, elle sera interprte comme tant en 1901. Current Year 1995 1995 2001 2001 Utilisation du format RR : Si l'anne spcifie sur deux chiffres est : 0 - 49 50 - 99 La date retourne est du sicle La date retourne est dans le sicle courant. prcdant le sicle courant. La date retourne est dans le sicle La date retourne est du sicle prcdant le sicle courant. courant. Specified Date RR Format 27-oct-95 1995 27-oct-17 2017 27-oct-17 2017 27-oct-95 1995 YY Format 1995 1917 2017 2095

Si l'anne courante sur deux chiffres est :

0 - 49 50 - 99

4.6

Les fonctions gnrales


4.6.1 La fonction NVL

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 :

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0

ORDRES SELECT BASIQUES - v 1.1

Datatype NUMBER DATE CHAR ou VARCHAR2 Exemple :


SQL> SELECT 2 FROM

Exemple de conversion NVL(number_column,9) NVL(date_column,'01-JAN-95') NVL(character_column,'unavailable')

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.

4.6.2 La fonction DECODE


La fonction DECODE peut faire le travail dun ordre IF-THEN-ELSE ou d'un ordre CASE. DECODE (column_name | expr , search1 [, search2, result2, ] [ search3, result3, ] [,] [resultat par dfaut] ) La fonction DECODE dcode l'expression aprs l'avoir compar chaque valeur search. Si l'expression est la mme que search, la valeur result est retourne. Si la valeur par dfaut est omis et qu'aucune valeur search ne correspond l'expression, une valeur nulle est retourne. Exemple 1 :
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0

ORDRES SELECT BASIQUES - v 1.1

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.

SAL*1.1, SAL*1.15, SAL*1.20, SAL)

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;

0.00, 0.09, 0.20, 0.30, 0.40, 0.42, 0.44, 0.45) TAX_RATE

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.

4.6.3 Les fonctions imbriques


Les fonctions single-row peuvent tre imbriques sur plusieurs niveaux. Les fonctions imbriques sont values de lintrieur vers lextrieur. F3 ( F2 ( F1 (col,arg1), arg2), arg3) Ordre dvaluation : F1, F2 puis F3 Exemple :
Laboratoire Oracle SUPINFO www.labo-oracle.com 03/09/2002 Page 0

ORDRES SELECT BASIQUES - v 1.1

SQL> SELECT 2 3 FROM 4 WHERE

ename, NVL(TO_CHAR(mgr),'No Manager') emp mgr IS NULL;

ENAME NVL(TO_CHAR(MGR),'NOMANAGER') ---------- ----------------------------KING No Manager 1 row 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.

Laboratoire Oracle SUPINFO www.labo-oracle.com

03/09/2002

Page 0