0% ont trouvé ce document utile (0 vote)
142 vues61 pages

Cours SQLPLUS Oracle

Transféré par

bassakim78
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
142 vues61 pages

Cours SQLPLUS Oracle

Transféré par

bassakim78
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 61

Dev’IT Centre : Cours de Base de Données Oracle/SQL

COURS DE BASES DE DONNEES ORACLE/SQL

Proposé et présenté par :


Amadou Bobo DIALLO
Consultant / Formateur en Informatique
Spécialiste des Systèmes d’information

E-mail : [email protected]

ABD © 2011-2021

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 1


Dev’IT Centre : Cours de Base de Données Oracle/SQL

INTRODUCTION

A l’heure de la collecte et de l’exploitation systématique de données aux moyens d’outils


logiciels, pour le bon fonctionnement de l’entreprise et l’instauration d’un cadre de performance
et de compétitivité, il apparaît clairement que l’information constitue un enjeu majeur pour les
entreprises, en ce qu’elle est à la fois le fondement et l’aboutissement de tout système.

En effet, les technologies de l’information se trouvent aujourd’hui au coeur du fonctionnement de


bien d’organisations qui ont compris que celles-ci constituaient à en point douter un atout majeur
dans l’atteinte de leurs objectifs respectifs.

Ainsi, au nombre d’innombrables domaines qui composent ces technologies de l’information,


figurent en bonne place les systèmes d’information dont les plus prisés sont les systèmes
d'information de gestion, qui emploient des techniques de gestion. Car du point de vue de la
valeur financière du patrimoine informatique, les systèmes d'information de gestion sont
largement majoritaires. Ceux-ci se caractérisent le plus souvent par la mise en place des bases de
données devant répondre aux besoins de l’entreprise en termes de stockage des informations,
d’exploitation des informations en temps voulu, mais aussi et surtout de garantir la sécurité des
informations stockées en se prémunissant des éventuelles intrusions malveillantes.

L’histoire des bases de données a fortement évoluée depuis lors. En effet, des bases de données
entre autres dites hiérarchiques aux bases de données réseaux, nous sommes aujourd’hui à l’ère de
bases de données relationnelles (SGBDR) et des bases de données objets (SGBDO). Les bases de
données relationnelles restent les plus mises en oeuvre à l’heure actuelle.

Toutefois, l’intérêt d’une base de données réside dans sa capacité à interagir avec les utilisateurs
qui la sollicite. Mais cette interaction ne peut se faire que par l’intermédiaire d’un langage
spécifique et approprié : le SQL (Structured Query Language) qui est le langage d’interrogation
des bases de données par excellence. Il existe un SQL normalisé dit standard et commun à tous les
systèmes de gestion de bases de données (SGBD). Mais bien de SGBD à l’instar d’Oracle, en plus
du SQL standard possède quelques spécificités supplémentaires.

L’objet du présent document est en effet d’étudier l’essentiel du SQL du SGBD du Server Oracle.
Le document s’accentuera essentiellement sur les points suivants :
 Concepts fondamentaux : Principes relationnels et concepts Oracle
 L’Ordre SELECT Basique
 Sélection et Tri des Lignes Retournées par un SELECT
 Fonction Mono-Ligne
 Affichage des Données Issues de Plusieurs Tables
 Fonctions de Groupe
 Opérateurs Ensemblistes
 Sous-Interrogation
 Manipulation des Données
 Création et Gestion de Tables et Objets d’une Base de Données Oracle

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 2


Dev’IT Centre : Cours de Base de Données Oracle/SQL

NB : L’essentiel du contenu de ce document est la compilation des publications des divers auteurs
ayant abordé ces différents points. Toutefois, certaines modifications ont été apportées et les
exercices illustratifs ont été adaptés au contexte de l’exécution du cours.

Le cours mettra, bien entendu, l’accent sur les aspects pratiques pour asseoir une meilleure
maîtrise du langage SQL.

Certains autres aspects non évoqués dans le document seront éventuellement abordés au fil du
déroulement du cours.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 3


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 1 : Concepts fondamentaux : Principes relationnels et concepts Oracle

Objectifs : Ce chapitre est entièrement dédié aux principes de base des systèmes de bases de
données relationnelles (SGBDR). Aussi, après ce chapitre, vous devriez pouvoir discuter des
aspects théoriques et physiques d’une base de données relationnelle.

Quelques définitions de terminologies

Données :
Une donnée n’est rien d’autre qu’une information élémentaire quelconque.

Base de données :
Une base de données (BD) représente l'ensemble (cohérent, intégré, partagé) des informations
nécessaires au fonctionnement d'une entreprise, ensemble dont la gestion est assurée par un
logiciel appelé système de gestion de bases de données (SGBD).

On entend ici par entreprise toute collectivité d'individus travaillant en coordination à la


réalisation d'un objectif commun.

Exemples de base de données: celle qui permet la gestion des personnels, étudiants, cours,
inscriptions, ... d'une université ou école, celle du système de réservation de places d'avion des
compagnies d'aviation, celles qui permettent la gestion des comptes des clients des sociétés
bancaires, etc.

Base de Données Relationnelle :


Une base de données relationnelle stocke l’information au moyen de relations ou tables à deux
dimensions.

Banque de données :
Une base de données est développée au sein d'une entreprise, pour son propre fonctionnement.
Inversement, une banque de données est un ensemble de données, propres à un domaine
d'application, que des "producteurs" réunissent pour ensuite en commercialiser l'usage vers le
public extérieur. Exemple: les banques de données juridiques, économiques, médicales, des
brevets, des propriétés des matériaux, ... . La constitution et l'exploitation des banques de données
font appel à des techniques spécifiques (télématique, par exemple), différentes des techniques
bases de données, seules étudiées dans ce cours.

Fichiers :
Dans une entreprise, il convient de faire appel à l'approche base de données lorsque les données à
gérer sont de natures diverses (exemple : étudiants, cours, enseignants, salles, ...) et possèdent de
nombreux liens entre elles (exemple : un étudiant suit un cours, un cours est assuré par un
enseignant, ...). A contrario, il existe des cas où les données à gérer, bien que importantes en
volume, sont homogènes : les abonnés d'une revue, le personnel d'une entreprise, les produits
vendus par un magasin ... . Dans ces cas, on parlera de fichier (le fichier des abonnés, ...) et l'on
utilisera un système de gestion de fichiers (SGF), moins complexe qu'un SGBD.
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 4
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Tout système d'exploitation d'un ordinateur contient un SGF spécifique. Toutefois, pour les
applications, on fait plutôt appel à des progiciels du commerce (exemple: dBase, Filemaker, ...),
d'un usage plus simple et offrant des fonctionnalités plus élaborées.

Il est à noter que l'implantation physique d'une base de données sur les mémoires secondaires se
fait via la notion de fichier. Le choix de ceux-ci, toutefois, reste de la compétence du SGBD et est
invisible à l'utilisateur. Le cours abordera les techniques de gestion de fichiers lorsque nous
traiterons des aspects internes de réalisation d'un SGBD.

Système de Gestion de Bases de Données (SGBD) :


Un Système de Gestion de Bases de Données (SGBD) est un logiciel de haut niveau qui permet de
manipuler les informations stockées dans une base de données.

Système d’Information (SI) :


Un système d'information (noté SI) représente l'ensemble des éléments participant à la gestion,
au stockage, au traitement, au transport et à la diffusion de l'information au sein d'une
organisation.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 5


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Stratégie et Analyse

• Etude et analyse des besoins. Consultation des utilisateurs et responsables en vue d'identifier les
besoins en informations. Intégration des divers rapports d'entreprise et comptes-rendus de
mission, ainsi que des éventuelles spécifications futures du système.
• Création de plusieurs modèles du système. Transformation des spécifications écrites en une
représentation graphique des besoins et règles d'information de gestion. Révision et confirmation
de certains éléments du modèle avec les analystes et les experts.

Design (Conception)

Définition de la base de données à partir du schéma conceptuel des données développé au cours
de la phase précédente.

Réalisation et Documentation

• Génération des commandes de création des tables et des objets de la base de données.
• Développement de la documentation utilisateur, des textes d'aide et des manuels destinés à
faciliter l’utilisation et le maniement du système.

Mise en œuvre

Passage en production impliquant les tests d'acceptation utilisateur, la conversion des données
existantes et les opérations parallèles. Ajout des modifications nécessaires.
Formation des utilisateurs finaux.

Production et Maintenance
Livraison du système aux utilisateurs et mise en oeuvre. Contrôle des performances et
amélioration du système.
Maintenance du système.

Le Modèle Relationnel

C’est le Dr. E. F. Codd qui, en juin 1970, a présenté pour la première fois les principes du modèle
relationnel pour les bases de données dans un article intitulé "A Relational Model of Data for
Large Shared Data Banks".

A cette époque, les modèles les plus utilisés étaient les modèles hiérarchiques et réseau, voire de
simples structures séquentielles. Les systèmes de gestion de bases de données relationnelles
(SGBDR) furent rapidement adoptés en raison, notamment, de leur simplicité d’utilisation et de la
flexibilité de leur structure. En outre, plusieurs fournisseurs novateurs, tels que Oracle, ont
complété les SGBDR en leur adjoignant une série de puissants outils de développement
d'applications et produits utilisateur, offrant ainsi une solution complète.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 6


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Composants du Modèle Relationnel

• Collections d’objets appelés encore relations pour stocker les données


• Ensemble d’opérateurs agissant sur les relations afin de produire d’autres relations
• Des règles d'intégrité pour garantir l’exactitude et la cohérence des données

Modèles de Données

Toute conception repose sur un modèle. Ainsi, les ingénieurs automobile commencent par
concevoir un modèle de voiture, afin d’en vérifier tous les détails avant de lancer la production.
De la même manière, les concepteurs de systèmes développent des modèles pour tester les
nouvelles idées et améliorer la conception des bases de données.

Rôle des Modèles

Les modèles facilitent l’explication et la compréhension des concepts. On peut les utiliser pour :
• Communiquer
• Classifier
• Décrire
• Spécifier
• Rechercher
• Evoluer
• Analyser
• Imiter

L’objectif est de produire un modèle adapté au maximum de ces usages, compréhensible par un
utilisateur final et suffisamment précis pour permettre au développeur de créer un système de base
de données.

Modélisation ER (Entité-Relation)

Dans un système réel, les données sont divisées en catégories discrètes ou entités. Un modèle ER
est la représentation des diverses entités qui existent au sein d’une société et de leurs
interrelations. Un modèle ER est issu de règles de gestion ou de compte-rendu d'interview et est
conçu au cours de la phase d’analyse du cycle de vie du système. Dans les modèles ER,
l’information nécessaire à une société est séparée des activités de cette société. En effet, même si
l'activité change, le type d’information, lui, a tendance à ne pas varier. Ainsi les structures de
données tendent elles aussi à être constantes.

Avantages de la Modélisation ER

• Documente l’information dans un format clair et précis.


• Offre une idée précise de l'étendue des besoins d'information.
• Fournit une représentation graphique simple pour la conception de la base de données.
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 7
Dev’IT Centre : Cours de Base de Données Oracle/SQL

• Offre un cadre efficace pour l'intégration de plusieurs applications.

Les Composants Clés

• Entité : Elément d'une organisation, concret ou abstrait, identifiable, porteur d'informations et


important pour l'activité considérée. Exemple : les départements, les employés, les commandes
d'une société.
• Attribut : élément qui décrit ou qualifie une entité. Par exemple, pour l’entité EMPLOYE, les
attributs peuvent être le matricule, le nom, l’intitulé du poste, la date d’embauche et le numéro de
département, etc., de l'employé. Chaque attribut est optionnel ou obligatoire.
• Lien : association entre entités ayant un nom et caractérisée par son caractère obligatoire ou
optionnel et son degré. Exemple : employés et départements, commandes et articles.

Terminologie des Bases de Données Relationnelles

Une base de données relationnelle peut contenir une ou plusieurs tables. La table est la structure
de stockage élémentaire d'un SGBDR. Elle contient toutes les données nécessaires relatives à des
éléments du monde réel, par exemple, des employés, des factures, des clients.

La diapositive ci-dessus montre le contenu de la table ou relation EMP. Les numéros désignent
les éléments suivants :

1. Une ligne unique ou tuple indiquant toutes les données concernant un employé particulier.
Chaque ligne de la table doit être identifiée par une clé primaire, ce qui permet d'éviter les
doublons. L'ordre des lignes n'a pas d'importance ; il peut être spécifié lors de l'extraction des
données.
2. Cette colonne ou attribut contenant le matricule des employés, est la clé primaire. Le matricule
identifie un employé unique dans la table EMP. La colonne clé primaire doit obligatoirement être
renseignée.

3. Cette colonne ne contient pas de valeur clé. Dans une table, une colonne représente un type de
données ; ici, il s'agit des intitulés de postes de tous les employés. L'ordre des colonnes n'a pas
d'importance pour le stockage des données ; il peut être spécifié lors de l'extraction des données.

4. Cette colonne contenant le numéro du département fait également office de clé étrangère. Une
clé étrangère est une colonne qui définit la manière dont les tables sont liées entre elles. Elle fait
référence à une clé primaire ou à une clé unique d'une autre table.
Dans l'exemple, DEPTNO identifie de façon unique un département de la table DEPT.

5. Un champ se situe à l'intersection d'une ligne et d'une colonne. Il ne peut contenir qu'une seule
valeur.

6. Un champ peut ne contenir aucune valeur. On parle alors de valeur NULL. Dans la table EMP,
seules les lignes des employés ayant le statut de vendeur contiennent une valeur dans le champ
COMM (commission).
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 8
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Remarque : les valeurs NULL sont traitées plus en détails dans les chapitres suivants.

Liaison de Plusieurs Tables

Chaque table contient des données qui décrivent une et une seule entité. La table EMP, par
exemple, contient des données sur les employés. Un format de table permet immédiatement de
visualiser, comprendre et utiliser l'information.

Les données concernant chaque entité distincte étant stockées dans différentes tables, il peut être
nécessaire de combiner deux ou plusieurs tables afin de répondre à une question particulière.
Supposons, par exemple, que vous vouliez savoir où se situe le département d'un employé. Vous
avez besoin pour cela des données de la table EMP (contenant des informations sur les employés)
et de la table DEPT (contenant des informations sur les départements). Un SGBDR permet de lier
les données de deux tables au moyen de la clé étrangère. La clé étrangère est une colonne ou un
ensemble de colonnes faisant référence à une clé primaire de la même table ou d'une autre table.
La possibilité de relier les données d'une table à celles d'une autre table permet d'organiser
l'information en unités séparées et faciles à gérer. Ainsi, vous pouvez séparer de façon logique les
données concernant les employés de celles concernant les départements, en les stockant dans des
tables différentes.

Règles concernant les Clés Primaires et Etrangères

• La clé primaire ne doit comporter aucun doublon.


• La clé primaire ne peut généralement pas être modifiée.
• Les clés étrangères sont basées sur des valeurs des données. Ce sont des pointeurs purement
logiques et non physiques.
• Une valeur de clé étrangère doit renvoyer à une valeur de clé primaire ou unique existante, ou
bien à une valeur NULL.

Propriétés des Bases de Données Relationnelles

Dans une base de données relationnelle, il est inutile d'indiquer le chemin d'accès aux tables ni de
connaître l'agencement physique des données.

Pour accéder à la base de données, vous exécutez un ordre du langage SQL (Structured Query
Language) qui est le langage standard ANSI des bases de données relationnelles. Il comprend un
grand nombre d'opérateurs qui permettent de partitionner et combiner les relations. La base de
données peut être modifiée au moyen d'ordres SQL.

Système de Gestion de Base de Données Relationnelle (SGBDR)

Oracle offre un SGBDR flexible, Oracle Server. Ce système permet de stocker et gérer des
données, avec tous les avantages que procure une structure relationnelle combinée à PL/SQL,
moteur permettant de stocker et d'exécuter des unités de programme. Oracle Server permet aux
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 9
Dev’IT Centre : Cours de Base de Données Oracle/SQL

utilisateurs des accès optimisés aux données. Il inclut des fonctions de sécurité qui contrôlent les
accès à la base de données et son utilisation. Il comprend aussi des mécanismes de verrouillage
qui assurent la cohérence et la protection des données.

Les applications Oracle peuvent être exécutées sur le même ordinateur qu'Oracle Server. Mais il
est également possible d'exécuter les applications sur un ordinateur local et Oracle Server sur un
autre système (architecture client-serveur). Un tel environnement client-serveur peut faire appel à
de nombreuses ressources de traitement. Par exemple, une application de réservation de billets
d'avion peut tourner sur un PC client, avec accès aux données de vol gérées par un système Oracle
Server sur ordinateur central.

Communication avec un SGBDR

SQL :

SQL permet de communiquer avec le serveur et présente plusieurs avantages. Il est :


• Efficace
• Facile à apprendre et à utiliser
• Complet sur le plan fonctionnel. SQL permet de définir, d'extraire et de manipuler des données
des tables.

Les différents langages SQL et leurs verbes


 Langage d’Interrogation des Données (LID) : SELECT
 Langage de Manipulation des Données (LMD) : INSERT, UPDATE, DELETE,
MERGE (avec Oracle server 9i)
 Langage de Description des Données (LDD) : CREATE, ALTER, DROP,
TRUNCATE, RENAME
 Langage de Contrôle des Données (LCD) : GRANT, REVOKE
 Commande de Contrôle de Transactions (CCT) : COMMIT, ROLLBACK,
SAVEPOINT

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 10


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 2 : L’Ordre SELECT Basique

Possibilités de l'ordre SQL SELECT

Un ordre SELECT permet d'extraire des informations d'une base de données. L'utilisation d'un
ordre SELECT offre les possibilités suivantes :

 Sélection : SQL permet de choisir dans une table, les lignes que l'on souhaite ramener au
moyen d'une requête. Divers critères de sélection sont disponibles à cet effet.
 Projection : SQL permet de choisir dans une table, les colonnes que l'on souhaite ramener
au moyen d'une requête. Vous pouvez déterminer autant de colonnes que vous le
souhaitez.
 Jointure : SQL permet de joindre des données stockées dans différentes tables, en créant
un lien par le biais d'une colonne commune à chacune des tables. Les jointures seront
décrites en détail dans la suite de ce cours.

Ordre SELECT Elémentaire

Dans sa forme la plus simple, l'ordre SELECT comprend :

 Une clause SELECT précisant les colonnes à afficher


 Une clause FROM spécifiant la table qui contient les colonnes indiquées dans la clause
SELECT

Syntaxe : SELECT * | {[DISTINCT] column | expression [alias], …}


FROM table;

SELECT : liste d'une ou plusieurs colonnes


DISTINCT : suppression des doublons
* : sélection de toutes les colonnes
Column : sélection de la colonne désignée
Alias : attribue des en-têtes différents aux colonnes sélectionnées
FROM table : spécifie la table qui contient les colonnes

Remarque : nous utiliserons les termes mot-clé, clause et ordre tout au long de ce cours.

• Un mot-clé est un élément SQL individuel.


Exemple : SELECT et FROM sont des mots-clés.
• Une clause est une partie d'un ordre SQL.
Exemple : SELECT empno, ename, ... est une clause.
• Un ordre est la combinaison de deux clauses ou plus.
Exemple : SELECT * FROM emp est un ordre SQL.

Ecriture des Ordres SQL

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 11


Dev’IT Centre : Cours de Base de Données Oracle/SQL

En suivant les règles et indications simples ci-dessous, vous pourrez créer des ordres corrects,
simples à lire et à éditer.
• Sauf indication contraire, les ordres SQL peuvent être écrits indifféremment en majuscules ou en
minuscules.
• Les ordres SQL peuvent être saisis sur plusieurs lignes.
• Les mots-clés ne doivent pas être scindés sur deux lignes différentes, ni abrégés.
• Les clauses se placent généralement sur des lignes distinctes pour en faciliter la lecture et
l'édition.
• L'utilisation de tabulations et d'indentations permet une meilleure lisibilité.
• Généralement, les mots-clés sont saisis en majuscules, et tous les autres termes, tels que les
noms de tables et de colonnes, sont saisis en minuscules.
• Dans le SQL*Plus, un ordre SQL est saisi au prompt SQL, et les lignes qui suivent sont
numérotées. C'est ce qu'on appelle le buffer SQL. Il ne peut y avoir qu'un seul ordre courant à la
fois dans le buffer.

Exécution d'Ordres SQL

• Placer un point-virgule (;) à la fin de la dernière clause.


• Placer un slash (/) seul sur la dernière ligne du buffer.
• Placer un slash (/) au prompt SQL.
• Entrer la commande RUN SQL*Plus au prompt SQL.

Sélection de Toutes les Colonnes et de Toutes les Lignes

Pour afficher toutes les colonnes d'une table, placez un astérisque à la suite du mot-clé
SELECT (*).
Exemple : SELECT * FROM dept ;

Vous pouvez également afficher toutes les colonnes de la table en les énumérant toutes à la suite
du mot-clé SELECT. Par exemple, l'ordre SQL suivant affiche toutes les colonnes et toutes les
lignes de la table DEPT au même titre la requête définie dans l’exemple précédent :

SELECT deptno, dname, loc


FROM dept ;
Sélection de Colonnes Spécifiques et de Toutes les Lignes

L'ordre SELECT peut être utilisé pour afficher des colonnes spécifiques de la table. Pour cela,
indiquez les noms de colonnes séparés par des virgules. L'exemple ci-dessus affiche tous les
numéros de département de la table DEPT, ainsi que leur localisation.
Dans la clause SELECT, indiquez les colonnes dans l'ordre où vous souhaitez qu'elles vous soient
rapportées.

Exemple : SELECT loc, dname


FROM dept ;
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 12
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Valeurs par Défaut des En-têtes de Colonnes

Les en-têtes de colonnes, comme les données, alphanumériques et dates sont justifiées à gauche.
Les en-têtes de colonnes, comme les données, numériques sont justifiées à droite.

SELECT ename, hiredate, sal


FROM emp;

ENAME HIREDATE SAL


---------- --------- ---------
KING 17-NOV-81 5000
BLAKE 01-MAY-81 2850
CLARK 09-JUN-81 2450
JONES 02-APR-81 2975
MARTIN 28-SEP-81 1250
ALLEN 20-FEB-81 1600
...
14 rows selected.

Opérateurs Arithmétiques

Le tableau suivant présente les opérateurs arithmétiques disponibles dans SQL.


Opérateur Description
+ Addition
- Soustraction
/ Division
* Multiplication

Utilisation des Opérateurs Arithmétiques

L'exemple suivant utilise l'opérateur d'addition pour calculer l'augmentation de salaire de 300 pour
tous les employés, puis affiche une nouvelle colonne SAL+300.

SELECT ename, sal, sal + 300


FROM emp ;
ENAME SAL SAL+300
---------- ---------- ----------
SMITH 800 1100
ALLEN 1600 1900
WARD 1250 1550
JONES 2975 3275
….
A noter que la colonne SAL+300 qui résulte de ce calcul n'est pas une nouvelle colonne de la
table EMP ; elle n'est que l'affichage d'un résultat. Par défaut, le nom d'une nouvelle colonne est
issu du calcul dont elle provient : dans ce cas précis, sal+300.
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 13
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Les Valeurs NULL

Lorsqu'il manque une valeur dans une colonne sur une ligne, la valeur est dite NULL.
Une valeur NULL est une valeur non disponible, non affectée, inconnue ou inapplicable. Une
valeur NULL est différente du zéro ou de l'espace. Le zéro est un chiffre et l'espace est un
caractère.

Quel que soit le type de données d'une colonne, celle-ci peut contenir des valeurs NULL, excepté
lorsque cette colonne a été définie comme NOT NULL ou comme CLE PRIMAIRE lors de sa
création.

Dans la colonne COMM de la table EMP, vous pouvez remarquer que seul un employé occupant
le poste de vendeur est habilité à toucher une commission. Ainsi, pour les non vendeurs COMM
contient NULL. Turner, vendeur, n'a pas touché de commission : la valeur de sa commission est 0
et par conséquent non NULL.

Lorsqu'une valeur NULL est utilisée dans une expression arithmétique, le résultat de cette
expression est NULL. Si vous essayez de diviser par zéro, vous obtenez une erreur. En revanche,
si vous divisez un nombre par NULL, le résultat sera NULL ou inconnu.

Dans l'exemple ci-dessous, l'employé SMITH ne fait pas partie de la catégorie SALESMAN et ne
touche donc pas de commission. La valeur de la colonne COMM dans l'expression arithmétique
étant NULL, le résultat est donc NULL.

SELECT ename, job, sal, comm


FROM emp;

ENAME JOB SAL COMM


---------- ----------------- ---------- ----------
SMITH CLERK 800
ALLEN SALESMAN 1600 300
WARD SALESMAN 1250 500

Les Alias de Colonnes

Lors de l'affichage des résultats d'une requête, SQL*Plus prend le nom de la colonne sélectionnée
comme en-tête de colonne. La plupart du temps, cet en-tête n'est pas explicite et par conséquent
est difficile à comprendre. L'alias de colonne permet de modifier l'en-tête d'une colonne.

On spécifie l'alias à la suite de la colonne dans la liste SELECT en utilisant le caractère espace
comme séparateur. Par défaut, les en-têtes de colonne sont en majuscules. Si l'alias contient des
espaces ou des caractères spéciaux (tels que # ou $), ou si la différence entre majuscules et
minuscules est importante, placez l'alias entre guillemets (" ").
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 14
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Exemple1 :

SELECT ename AS nom, job AS fonction, sal AS salaire


FROM emp ;

NOM FONCTION SALAIRE


---------- -------------- ------------
SMITH CLERK 800
ALLEN SALESMAN 1600
WARD SALESMAN 1250

Exemple2:
SELECT ename “Nom”, job AS “Fonction”, sal AS “Salaire”
FROM emp ;

Nom Fonction Salaire


---------- -------------- ------------
SMITH CLERK 800
ALLEN SALESMAN 1600
WARD SALESMAN 1250

Exemple3:
SELECT ename “Nom”, job AS “Fonction”, sal AS “Salaire”, sal * 12 AS “Salaire Annuel”
FROM emp ;

Nom Fonction Salaire Salaire Annuel


---------- -------------- ------------ ------------------
SMITH CLERK 800 9600
ALLEN SALESMAN 1600 19200
WARD SALESMAN 1250 15000

Remarque: Le mot-clé optionnel AS a été placé avant l'alias de colonne. L'utilisation ou non de
ce mot-clé ne modifie pas le résultat de la requête.

L'Opérateur de Concaténation

L'opérateur de concaténation représenté par deux barres verticales (||) permet de concaténer des
colonnes à d'autres colonnes, à des expressions arithmétiques ou à des valeurs constantes afin de
créer une expression caractère. Les colonnes situées de part et d'autre de l'opérateur se combinent
pour donner une colonne unique lors de la restitution des données.

Exemple 1:
SELECT ename||job “Employes”
FROM emp;
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 15
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Employes
--------------------------
SMITHCLERK
ALLENSALESMAN
WARDSALESMAN

Exemple 2:
SELECT ename||’ ‘||job “Employes”
FROM emp ;

Employes
--------------------------
SMITH CLERK
ALLENS ALESMAN
WARD SALESMAN

Chaînes de Caractères Littérales

Un littéral est un caractère, une expression, ou un nombre quelconque inclus dans la liste
SELECT, et qui n'est ni un nom de colonne ni un alias de colonne. Il apparaît sur chaque ligne
ramenée. Des chaînes de texte littérales en format libre peuvent être intégrées au résultat de la
requête. Elles sont traitées comme les colonnes dans une liste SELECT.
Les littéraux date et alphanumérique doivent être inclus entre simples quotes (' '), mais pas les
littéraux numériques.

Exemple :
SELECT ename||’ excerce la fonction de ‘||job “Fonction Employés”
FROM emp ;

Fonction Employés
-------------------------------------------------------
SMITH excerce la fonction de CLERK
ALLEN excerce la fonction de SALESMAN
JONES excerce la fonction de MANAGER

Doublons

Par défaut, l'instruction SELECT retourne un résultat sans éliminer les doublons. L'exemple ci-
après affiche la totalité des numéros de département de la table EMP. Vous pouvez remarquer que
certains numéros de département apparaissent plusieurs fois.

SELECT deptno
FROM emp ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 16


Dev’IT Centre : Cours de Base de Données Oracle/SQL

DEPTNO
-----------
20
30
30
20

Elimination des doublons

Pour éliminer les doublons du résultat d'une requête, ajoutez le mot-clé DISTINCT à la clause
SELECT, directement à la suite du mot-clé SELECT.
Exemple :
SELECT DISTINCT deptno
FROM emp ;

DEPTNO
-----------
10
20
30

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 17


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 3 : Sélection et Tri des Lignes Retournées par un SELECT

Objectifs : Lors d’une recherche de données dans une base de données, il est parfois nécessaire
de restreindre le nombre de lignes retournées ou de préciser l’ordre d’affichage de ces lignes. Ce
chapitre explique quelles clauses SQL utiliser à cet effet.

Restriction du Nombre de Lignes d'une Sélection

On peut limiter le nombre de lignes ramenées par la requête au moyen de la clause WHERE.
La clause WHERE permet de spécifier une condition à satisfaire.

Exemple1:

SELECT empno, ename, job, sal, deptno


FROM emp
WHERE deptno=10 ;

EMPNO ENAME JOB SAL DEPTNO


---------- ---------- ---------------- ---------- -----------
7782 CLARK MANAGER 2450 10
7839 KING PRESIDENT 5000 10
7934 MILLER CLERK 1300 10

Exemple 2:

SELECT ename, job, deptno


FROM emp
WHERE job=’MANAGER’;

ENAME JOB DEPTNO


---------- ---------------- ------------
JONES MANAGER 20
BLAKE MANAGER 30
CLARK MANAGER 10

Dans l’exemple 2 ci-dessus, l’ordre SELECT recherche le nom, le poste et le numéro de


département de tous les employés dont le poste (job) est MANAGER.
A noter que le poste MANAGER a été indiqué en majuscules pour garantir la correspondance
avec la colonne "job" de la table EMP. En effet, la recherche tient compte des majuscules et
minuscules.

Chaînes de Caractères et Dates

Dans la clause WHERE, les chaînes alphanumériques et les dates doivent être incluses entre
simples quottes (''), mais pas les constantes numériques.
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 18
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Toutes les recherches de caractères tiennent compte des majuscules et des minuscules. Dans
l'exemple ci-dessous, aucune ligne n'est ramenée car, dans la table EMP, toutes les données sont
stockées en lettres majuscules.

SELECT ename, empno, job, deptno


FROM emp
WHERE job=’clerk’;

Oracle stocke les dates dans un certain format numérique interne, représentant le siècle, l'année, le
mois, le jour, les heures, les minutes et les secondes. Le format de date par défaut est
DD-MON-YY.

Opérateurs de Comparaison

Opérateur Description
= Egal à
> Supérieur à
>= Supérieur ou égal à
< Inférieur à
<= Inférieur ou égal à
<> ou != Différent de

Ces opérateurs de comparaison s'utilisent dans les conditions qui comparent deux expressions.
Exemples :

SELECT * FROM emp


WHERE job=’SALESMAN’;

SELECT empno, ename, job, sal


FROM emp
WHERE sal > 3000

SELECT empno, ename, job, sal


FROM emp
WHERE job <>’PRESIDENT’;

Autres opérateurs de comparaison

Opérateur Description
BETWEEN…AND… Compris entre…et… (bornes)
IN (liste) Correspond à une valeur de liste
LIKE Ressemblance partielle des chaînes de
caractères
IS NULL Correspond à une valeur NULL

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 19


Dev’IT Centre : Cours de Base de Données Oracle/SQL

L'Opérateur BETWEEN :

L'opérateur BETWEEN permet d'afficher des lignes en fonction d'un intervalle de valeurs.
Vous spécifiez un intervalle comprenant une limite inférieure et une limite supérieure.

Exemple:

SELECT ename, job, sal


FROM emp
WHERE sal BETWEEN 1000 and 2000;

L'Opérateur IN :

Pour comparer une expression avec une liste de valeurs, utilisez l'opérateur IN.

Exemple :
SELECT empno, ename, job, sal
FROM emp
WHERE ename IN (‘SMITH’,’JONES’,’ALLEN’);

L'Opérateur LIKE :

Vous ne connaissez pas toujours les valeurs exactes à rechercher. Vous pouvez sélectionner des
lignes correspondant à une suite de caractères au moyen de l'opérateur LIKE. L'opération ainsi
exécutée est appelée recherche générique. Deux symboles sont utilisables pour construire la
chaîne de recherche :

Symbole Description
% Représente zéro caractère ou une séquence quelconque de caractères
_ Représente un caractère quelconque

L'ordre SELECT ci-dessous ramène tous les employés dont le nom commence par "J" (il s'agit
bien du J majuscule). Les noms commençant par "j" ne seront pas sélectionnés.

SELECT * FROM emp


WHERE ename LIKE ‘J%’ ;

L'opérateur LIKE peut s'utiliser comme raccourci dans certaines comparaisons BETWEEN.
L'exemple suivant affiche le nom et la date d'embauche de tous les employés ayant rejoint la
société entre Janvier 1981 et Décembre 1981.

SELECT * FROM emp


WHERE hiredate LIKE ‘%81’ ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 20


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Combinaison de Caractères Génériques

Les symboles % et _ peuvent être combinés de manière quelconque avec des caractères littéraux.
L'exemple de la diapositive affiche le nom des employés dont la deuxième lettre est un "L".

SELECT ename, job


FROM emp
WHERE ename LIKE ‘_L%’ ;

L'Opérateur IS NULL :

L'opérateur IS NULL teste les valeurs NULL. Une valeur NULL est indisponible, non attribuée,
inconnue ou inapplicable. Il est donc impossible de tester une valeur NULL à l'aide de l'opérateur
(=) puisqu'elle ne peut répondre à aucune condition d'égalité ou d'inégalité.

L'exemple ci-dessous recherche le nom et le manager de tous les employés n'ayant pas de
manager.

SELECT ename, mgr


FROM emp
WHERE mgr IS NULL ;

Opérateurs Logiques

Un opérateur logique combine le résultat de deux conditions pour produire un résultat unique ou
inverse le résultat d'une condition unique. SQL inclut trois opérateurs logiques :

Opérateur Description
AND Retourne TRUE si les deux conditions sont VRAIES
OR Retourne TRUE si au moins l’une des conditions est VRAIE
NOT Ramène la valeur TRUE si la condition qui suit l’opérateur
est fausse

Tous les exemples que vous avez vus jusqu'ici ne spécifiaient qu'une seule condition dans la
clause WHERE. En utilisant les opérateurs AND et OR, vous pouvez inclure plusieurs conditions
dans une même clause WHERE.

L'Opérateur AND :

Dans l'exemple suivant, les deux conditions doivent être vraies pour qu'un enregistrement soit
sélectionné. Ainsi, tout employé dont le poste est MANAGER et qui gagne plus de $2000 sera
sélectionné.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 21


Dev’IT Centre : Cours de Base de Données Oracle/SQL

SELECT ename, job, sal


FROM emp
WHERE job =’MANAGER’
AND sal >= 2000;

Toutes les recherches de caractères font la distinction entre les majuscules et les minuscules.
Aucune ligne n'est ramenée si le mot CLERK n'est pas entièrement en majuscules. Les chaînes de
caractères doivent obligatoirement être incluses entre simples quottes.

L'Opérateur OR :

Dans l'exemple suivant, l'une ou l'autre des deux conditions doit être vraie pour qu'un
enregistrement quelconque soit sélectionné. Ainsi, tout employé dont le poste est MANAGER ou
qui gagne plus de $2000 est sélectionné

SELECT ename, job, sal


FROM emp
WHERE job =’MANAGER’
OR sal >= 2000;

L'Opérateur NOT :

L'exemple ci-dessous affiche le nom et le poste de tous les employés dont l'intitulé du poste n'est
pas MANAGER ni ANALYST.

SELECT ename, job


FROM emp
WHERE job NOT IN (‘MANAGER’,’ANALYST’);

Remarque : l'opérateur NOT peut également s'utiliser avec d'autres opérateurs SQL comme
BETWEEN, LIKE et NULL.
Exemples :

... WHERE sal NOT BETWEEN 1000 AND 1500


... WHERE ename NOT LIKE ’%A%’
... WHERE comm IS NOT NULL

La Clause ORDER BY

Les lignes trouvées par une requête sont ramenées dans un ordre quelconque.
La clause ORDER BY sert à trier les lignes. Si vous l'utilisez, vous devez la placer en dernier
dans l'ordre SELECT. Vous pouvez spécifier une expression ou un alias sur lesquels le tri sera
effectué.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 22


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Syntaxe

SELECT expr
FROM table
[WHERE condition (s)]
[ORDER BY {column, expr} [ASC|DESC]];

Où : ORDER BY précise l'ordre d'affichage des lignes trouvées.


ASC classe les lignes en ordre croissant. C'est l'ordre par défaut.
DESC classe les lignes en ordre décroissant.

Si la clause ORDER BY n'est pas utilisée, l'ordre de tri est indéfini et il peut arriver qu’Oracle
n'extraie pas deux fois de suite les lignes d'une même requête dans un ordre identique. Pour
afficher les lignes dans un ordre spécifique, il faut spécifier une clause ORDER BY.

Classement des Données par Défaut

L'ordre de tri par défaut est croissant :


• Les valeurs numériques sont affichées à partir des plus petites, par exemple de 1 à 999.
• Les dates sont affichées à partir de la plus ancienne ; par exemple, le 01-JAN-92 sera placé avant
le 01-JAN-95.
• Les valeurs caractères sont affichées par ordre alphabétique, par exemple A en premier et Z en
dernier.
• Les valeurs NULL sont affichées en dernier dans le cas d'un ordre croissant et en premier dans le
cas d'un ordre décroissant.

Exemple :

SELECT ename, job, deptno, hiredate


FROM emp
ORDER BY hiredate;

Inversion de l'Ordre par Défaut

Pour inverser l'ordre d'affichage des lignes, spécifiez le mot-clé DESC après le nom de colonne
dans la clause ORDER BY. Dans l'exemple ci-dessus, les résultats sont triés à partir du dernier
salarié embauché.

Exemple :

SELECT ename, job, deptno, hiredate


FROM emp
ORDER BY hiredate DESC;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 23


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Tri sur Plusieurs Colonnes

Vous pouvez trier les résultats d'une requête sur plusieurs colonnes, à concurrence du nombre de
colonnes présentes dans la table concernée.

Dans la clause ORDER BY, spécifiez les noms de colonnes en les séparant par une virgule.
Pour inverser l'ordre de tri d'une colonne, faites suivre son nom du mot-clé DESC. Vous pouvez
faire un tri sur des colonnes non incluses dans la clause SELECT.

Exemple :
Affichez le nom et le salaire de tous les employés et classez le résultat par numéro de département
croissant, puis par salaire décroissant.

SELECT ename, deptno, sal


FROM emp
ORDER BY deptno, sal DESC;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 24


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 4 : Fonction Mono-Ligne

Objectifs : Les fonctions rendent l'instruction SELECT plus puissante en permettant de manipuler
des valeurs de données. Ce chapitre est le premier de deux consacrés aux fonctions.
Il explique en particulier les fonctions caractère, numériques et date, ainsi que les fonctions qui
convertissent des données d'un certain type en un autre type, par exemple, des données de type
caractère en données numériques.

Fonctions SQL

Les fonctions représentent une caractéristique très puissante de SQL et sont utilisées pour :
o Effectuer des calculs sur des données
o Transformer des données
o Effectuer des calculs sur des groupes de lignes
o Formater des dates et des nombres pour l'affichage
o Convertir des types de données de colonnes

Les fonctions SQL acceptent les arguments et ramènent des valeurs.

Remarque: la plupart des fonctions SQL décrites dans ce chapitre sont spécifiques au SQL
d'Oracle.

Il existe deux types de fonctions :


 Les fonctions mono-ligne
 Les fonctions multi-ligne

NB : Dans le cadre de ce cours, nous nous limiterons uniquement aux fonctions mono-ligne.

Fonctions Mono-Ligne

Ces fonctions agissent sur une seule ligne à la fois et ramènent un seul résultat. Il existe plusieurs
types de fonctions mono-ligne. Ce chapitre décrit les quatre suivantes :
 Caractère
 Numérique
 Date
 Conversion

Les fonctions mono-ligne sont utilisées pour manipuler des éléments de données. Elles acceptent
un ou plusieurs arguments et ramènent une seule valeur par ligne issue de la requête. Un argument
peut être l'un des éléments suivants :
• Une valeur constante utilisateur
• Une variable
• Un nom de colonne
• Une expression

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 25


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Caractéristiques des Fonctions Mono-Ligne


• Acceptent un ou plusieurs arguments.
• Agissent sur chacune des lignes issues de la requête.
• Ramènent un résultat par ligne.
• Peuvent ramener une valeur d'un type différent de celui mentionné.
• S'utilisent dans les clauses SELECT, WHERE, et ORDER BY.
• Peuvent être imbriquées.

Syntaxe : nom_fonction (colonne | expression, [arg1, arg2, …] )

nom_fonction nom de la fonction


colonne nom d'une colonne de la base de données
expression chaîne de caractères ou expression calculée
arg1, arg2 argument utilisé dans la fonction

Ce chapitre présente les fonctions mono-ligne suivantes :


 Fonctions caractère : elles acceptent des caractères en entrée et peuvent ramener des
valeurs caractère ou numériques.
 Fonctions numériques : elles acceptent des nombres en entrée et ramènent des valeurs
numériques.
 Fonctions date : elles opèrent sur des valeurs de type date et ramènent des valeurs de type
date. Seule la fonction MONTHS_BETWEEN ramène une valeur numérique.
 Fonctions de conversion : elles convertissent une valeur d'un certain type dans un autre
type.
 Fonction NVL

Fonctions caractère

Les fonctions mono-ligne caractère acceptent des données caractère en entrée et ramènent des
données caractère ou numériques. Les fonctions caractère se divisent en deux groupes :
 Les fonctions de conversion majuscules/minuscules
 Les fonctions de manipulation des caractères

Fonction Modification
LOWER(column|expression) Convertit les caractères alphabétiques en minuscules.
UPPER(column|expression) Convertit les caractères alphabétiques en majuscules.
Convertit l’initiale de chaque mot en majuscule et les caractères suivants en
INITCAP(column|expression) minuscules.
CONCAT(column1|expression1, Concatène la première chaîne de caractère à la seconde. Equivaut à l’opérateur
column2|expression2) de concaténation (||).
SUBSTR(column|expression,m[,n]) Extrait une partie de la chaîne de caractères en commençant au caractère situé à
la position m et sur une longueur de n caractères.
Si m est une valeur négative, le décompte s’effectue dans le sens inverse (à
partir du dernier caractère de la chaîne).
Si n est omis, tous les caractères jusqu’à la fin de la chaîne sont ramenés.
LENGTH(column|expression) Ramène le nombre de caractères d'une chaîne de caractères.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 26


Dev’IT Centre : Cours de Base de Données Oracle/SQL

INSTR(column|expression,m) Ramène une valeur égale à la position du caractère m.


LPAD(column|expression, n, ‘string’) Complète une chaîne de caractère sur la gauche avec la chaîne 'string' pour
parvenir à une longueur totale de n caractères.
RPAD(column|expression, n, ‘string’) Complète une chaîne de caractère sur la droite avec la chaîne 'string' pour
parvenir à une longueur totale de n caractères.

Remarque : Cette liste n’est pas exhaustive

Fonctions de Conversion Majuscules/Minuscules

LOWER, UPPER, et INITCAP sont les trois fonctions qui modifient la casse.
• LOWER : Convertit tous les caractères d'une chaîne en minuscules
• UPPER : Convertit tous les caractères d'une chaîne en majuscules
• INITCAP : Convertit la première lettre de chaque mot en majuscule et les lettres suivantes en
minuscules

Exemples :

SELECT LOWER ('NOUS SOMMES LE: ')||sysdate "Date du jour"


FROM dual;

SELECT empno, ename, job, sal


FROM emp
WHERE LOWER (ename) = ’jones’;

SELECT empno, INITCAP (ename), job, sal


FROM emp;

SELECT UPPER ('nous sommes le: ')||sysdate "Date du jour"


FROM DUAL;

Remarque : La table DUAL est une table factice. Nous y reviendrons ultérieurement

Fonctions de Manipulation des Caractères

CONCAT, SUBSTR, LENGTH, INSTR et LPAD sont les cinq fonctions de manipulation des
caractères étudiées dans ce chapitre.

 CONCAT : Concatène des valeurs. Le nombre de paramètres avec CONCAT est limité à
deux.
 SUBSTR : Extrait une chaîne de longueur déterminée.
 LENGTH : Fournit la valeur numérique correspondant au nombre de caractères d'une
chaîne.
 INSTR : Fournit la valeur numérique correspondant à la position d'un caractère.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 27


Dev’IT Centre : Cours de Base de Données Oracle/SQL

 LPAD : Ajoute des caractères de remplissage à la gauche d'une valeur alphanumérique qui
sera ainsi cadrée à droite.

Remarque : la fonction de manipulation des caractères RPAD ajoute des caractères de


remplissage à la droite d'une valeur alphanumérique qui sera ainsi cadrée à gauche.

Exemple :

SELECT ename, CONCAT (ename, job), LENGTH (ename), INSTR (ename,'A')


FROM emp
WHERE SUBSTR (job,1,5)='SALES';

SELECT LPAD(sal, 10, '*')


FROM emp;

SELECT RPAD(sal, 10, '*')


FROM emp;

Fonctions numériques

Les fonctions numériques utilisent et ramènent des valeurs numériques. Cette section décrit
quelques-unes de ces fonctions.

Fonction Modification
ROUND(column|expression, n) Arrondit la valeur de la colonne ou de l’expression à une précision
de 10-n.
Si n est positif, le nombre sera arrondi à n décimales.
Si n est omis, il n’y aura pas de décimale.
Si n est négatif, l'arrondi portera sur la partie du nombre
située à gauche de la virgule (dizaine, centaine...)
TRUNC(column|expression,n) Tronque la valeur de la colonne ou de l’expression à une précision
de 10-n.
Si n est positif, le nombre sera tronqué à n décimales.
Si n est omis, il n’y aura pas de décimale.
Si n est négatif, ce sera la partie du nombre située à gauche
de la virgule (dizaine, centaine...) qui sera tronquée.
MOD(m,n) Ramène le reste de la division de m par n.

Remarque : Cette liste de fonctions numériques n'est pas exhaustive.

Exemples :

SELECT ROUND (75.927, 2), ROUND (75.927, 0), ROUND (75.927, -1)
FROM DUAL;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 28


Dev’IT Centre : Cours de Base de Données Oracle/SQL

SELECT TRUNC (75.927, 2), TRUNC (75.927, 0), TRUNC (75.927, -1)
FROM DUAL;

SELECT MOD (23, 10)


FROM DUAL;

Format de Date Oracle


Oracle stocke les dates dans un format numérique interne représentant le siècle, l'année, le mois,
le jour, les heures, les minutes et les secondes.

Le format d'entrée et d'affichage par défaut des dates est DD-MON-YY. Les dates valides pour
Oracle sont comprises entre le 1er janvier 4712 av.J.-C. et le 31 décembre 9999 apr.J.-C.

SYSDATE
SYSDATE est une fonction date qui permet d'obtenir la date et l'heure courante. SYSDATE
s'utilise de la même façon qu'un nom de colonne quelconque. Il est usuel d'interroger la table
"factice" DUAL.

DUAL
La table DUAL appartient à l'utilisateur SYS, mais tous les utilisateurs peuvent y accéder. Elle
contient une seule colonne, DUMMY, et une seule ligne contenant la valeur X. La table DUAL
est utile lorsque vous souhaitez ramener une valeur une seule fois, par exemple, la valeur d'une
constante, d'une pseudo-colonne ou d'une expression qui ne dépend pas d'une table de données
utilisateur.

Exemple
Afficher la date courante au moyen de la table DUAL.

SELECT SYSDATE
FROM DUAL ;

Opérations Arithmétiques sur les Dates

Comme la base de données stocke les dates en tant que données numériques, il est possible
d'effectuer des calculs tels que l'addition ou la soustraction au moyen d'opérateurs arithmétiques.
Il est possible d'ajouter et soustraire des constantes numériques aussi bien que des dates.
Les opérations possibles sont les suivantes :

Opération Résultat Description


date + nombre de jours Date Ajoute un certain nombre de jours à une date
date - nombre de jours Date Soustrait un certain nombre de jours d’une date
date - date Nombre de jours Soustrait une date d’une autre
date + (nombre d'heures)/24 Date Ajoute un certain nombre d’heures à une date

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 29


Dev’IT Centre : Cours de Base de Données Oracle/SQL

L'exemple suivant affiche le nom et le nombre de semaines d'ancienneté de tous les employés du
département 20. La date courante (SYSDATE) est soustraite de la date d'embauche de l'employé,
puis le résultat est divisé par 7 pour obtenir le nombre de semaines d'ancienneté.

SELECT ename, (SYSDATE – hiredate)/7


FROM emp
WHERE deptno = 20;

Remarque : SYSDATE est une fonction SQL qui donne l'heure et la date courantes. Vos résultats
peuvent donc être différents de ceux de l'exemple.

Fonctions Date

Les fonctions date s'appliquent aux données de type DATE. Toutes les fonctions date ramènent
une valeur de type DATE, à l'exception de MONTHS_BETWEEN qui ramène une valeur
numérique.
 MONTHS_BETWEEN(date1, date2) : Donne le nombre de mois situés entre une date
(date1) et une autre date (date2). Le résultat peut être positif ou négatif. Si date1 est
postérieure à date2, le résultat est positif ; si date1 est antérieure à date2, le résultat est
négatif. La partie non entière du résultat représente une portion de mois.
 ADD_MONTHS(date, n) : Ajoute un nombre n de mois à une date. n doit être un nombre
entier et peut être négatif.
 NEXT_DAY(date, ‘char’) : Fournit la date de la première occurrence du jour spécifié
(‘char’) après la date fournie. char peut être, soit un numéro de jour de semaine, soit une
chaîne de caractères.
 LAST_DAY(date) : Indique la date du dernier jour du mois auquel appartient la date
indiquée.

Cette liste des fonctions date n'est pas exhaustive. Les modèles de format sont expliqués dans la
suite de ce chapitre. Le mois ou l'année sont des exemples de modèles de format.

Exemples :

SELECT MONTHS_BETWEEN ('31/12/08', '01/01/08')


FROM DUAL ;

SELECT ADD_MONTHS ('01/01/08', 6)


FROM DUAL ;

SELECT NEXT_DAY ('01/01/08', 6) ou SELECT NEXT_DAY ('01/01/08', ‘jeudi’)


FROM DUAL ; FROM DUAL ;

SELECT LAST_DAY ('01/01/08')


FROM DUAL ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 30


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Conversion de Types de Données Implicite

Pour les affectations, Oracle Server peut convertir automatiquement les types de données
suivants:

 VARCHAR2 ou CHAR vers NUMBER


 VARCHAR2 ou CHAR vers DATE
 NUMBER vers VARCHAR2
 DATE vers VARCHAR2

L'affectation réussit si Oracle Server parvient à convertir le type de données de la valeur à affecter
dans le type de données de la cible de l'affectation.

SQL offre trois fonctions pour convertir une valeur d'un certain type de données dans autre type :

Fonction Résultat
TO_CHAR(number|date,[‘fmt’]) Convertit un nombre ou une date en une chaîne de
caractères de type VARCHAR2 et de format fmt.
TO_NUMBER(char) Convertit une chaîne de caractères en un nombre.
TO_DATE(char,[‘fmt’]) Convertit une chaîne de caractères représentant une date
au format fmt en une date Oracle. Lorsque fmt est omis,
le format est DD-MON-YY.

Exemples :

SELECT TO_CHAR (SYSDATE,'DD/MM/YYYY')


FROM DUAL ;

SELECT TO_NUMBER ('10000') + 5000


FROM DUAL;

SELECT TO_DATE ('310108','DD/MM/YY')


FROM DUAL;

Modèles de Format de Date:

YYYY ou RRRR Année exprimée en 4 chiffres


YEAR Année exprimée en toutes lettres
MM Mois exprimé avec 2 chiffres
MONTH Mois exprimée en toutes lettres
DY 3 premières lettres du nom du jour
DAY Jour exprimé en toutes lettres

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 31


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Formats Horaires

Utilisez les formats suivants pour afficher des informations et littéraux de type heure, et pour
transformer des valeurs numériques en caractères.

Elément Description
AM ou PM Respectivement, matin ou après-midi
A.M. ou P.M. Respectivement, matin ou après-midi avec points
HH ou HH12 ou HH24 Heure du jour ou heure (1 à 12) ou heure (0 à 23)
MI Minutes (0 à 59)
SS Secondes (0 à 59)
SSSSS Secondes après minuit (0 à 86399)

La fonction NVL
Pour transformer une valeur NULL en une valeur réelle, on utilise la fonction NVL.

Syntaxe

NVL (expr1, expr2)

Où : expr1 est l'expression ou la valeur source susceptible de contenir valeur NULL


expr2 est la valeur de remplacement pour la valeur NULL

La fonction NVL permet de convertir n'importe quel type de données, mais toutefois, la valeur de
remplacement doit être de même type que la valeur de l'expression expr1.

Conversions NVL pour Divers Types de Données

Type de données Exemple de conversion


NUMBER NVL(number_column,9)
DATE NVL(date_column, ‘01-JAN-95’)
CHAR ou VARCHAR2 NVL(character_column, ‘Unavailable’)

Exemple :
Afficher le salaire annuel de tous les employés

SELECT ename, job, sal, comm, (sal * 12) + NVL (comm, 0) "Salaire Annuel + commission"
FROM emp;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 32


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 5 : Affichage des Données Issues de Plusieurs Tables

Objectifs : Au cours de ce chapitre, vous allez étudier les différentes façons d'obtenir des données
de plusieurs tables.

On a parfois besoin d'obtenir des données de plusieurs tables. Dans l'exemple ci-dessus, l'état
affiche les données de deux tables différentes.
 EMPNO appartient à la table EMP.
 DEPTNO appartient aux tables EMP et DEPT.
 LOC appartient à la table DEPT.

Pour obtenir cet état, il faut relier les tables EMP et DEPT et accéder aux données de ces deux
tables.

Définition des Jointures

Pour obtenir des données appartenant à différentes tables de la base de données, vous devez
utiliser une condition de jointure. Les lignes d'une table peuvent être reliées aux lignes d'une autre
table en fonction de valeurs communes existant dans des colonnes se correspondant, en général la
colonne clé primaire et la colonne clé étrangère.

Pour afficher les données issues de deux ou plusieurs tables, écrivez une condition de jointure
simple dans la clause WHERE.

Syntaxe :

SELECT table.colonne1, table.colonne2


FROM table1, table2
WHERE table.colonne1 = table.colonne2;

table.colonne : indique la table et la colonne d'où sont extraites les données


table1.colonne1 = table2.colonne2 : représente la condition qui joint (ou lie) les tables entre-elles.

Conseils
 Lorque vous écrivez un ordre SELECT pour joindre des tables, il est recommandé, par
souci de clarté et de facilité d'accès, de placer le nom de la table avant le nom de la
colonne.
 Lorsque le même nom de colonne apparaît dans plusieurs tables, il doit obligatoirement
être préfixé par le nom de la table.

Produit Cartésien
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 33
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Lorsqu'une condition de jointure est incorrecte ou tout simplement omise, on obtient un produit
cartésien dans lequel sont affichées toutes les combinaisons de lignes. Toutes les lignes de la
première table sont jointes à toutes les lignes de la seconde.
Un produit cartésien fournit en général un nombre important de lignes, donnant un résultat
rarement exploitable. C'est pourquoi il faut toujours inclure une condition de jointure correcte
dans une clause WHERE, à moins que vous n'ayez réellement besoin de combiner toutes les
lignes de toutes les tables.

L'omission d'une condition de jointure génère un produit cartésien. L'exemple suivant affiche le
nom d'employé et le nom de département des tables EMP et DEPT. Comme aucune clause
WHERE n'a été spécifiée, toutes les lignes (14) de la table EMP ont été jointes à l'ensemble des
lignes (4) de la table DEPT, donnant ainsi un résultat de 56 lignes.

SELECT ename, dname


FROM emp, dept;

Types de Jointures

Il existe deux principaux types de conditions de jointure :


 Les équijointures
 Les non-équijointures
Les autres méthodes de jointures sont les suivantes :
 Jointures externes
 Autojointures

Equijointures

Pour déterminer le département auquel appartient un employé, vous devez comparer les valeurs de
la colonne DEPTNO de la table EMP avec les valeurs de la colonne DEPTNO de la table DEPT.
La relation établie entre les tables EMP et DEPT est une équijointure : les valeurs de la colonne
DEPTNO appartenant aux deux tables doivent être identiques. Ce type de relation fait souvent
appel aux clés primaires et étrangères.

Exemple :
SELECT emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc
FROM emp, dept
WHERE emp.deptno = dept.deptno;

Dans l'exemple ci-dessus :


 La clause SELECT spécifie les noms des colonnes à extraire :
– colonnes ename (nom des employés), empno (matricule des employés) et deptno
(numéro de département) dans la table EMP
– colonnes deptno (numéro de département) et loc (localisation) dans la table DEPT

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 34


Dev’IT Centre : Cours de Base de Données Oracle/SQL

La clause FROM spécifie les deux tables de la base de données auxquelles on souhaite
accéder :
– la table EMP
– la table DEPT
 La clause WHERE spécifie la façon dont les deux tables sont jointes :
EMP.DEPTNO=DEPT.DEPTNO

La colonne DEPTNO étant commune aux deux tables, vous devez la préfixer du nom de la table
d'appartenance afin d'éviter toute ambiguïté.

Remarque : les équijointures sont aussi appelées jointures simples ou jointures internes.

Alias de Table

La qualification des noms de colonne à l'aide des noms de table peut prendre beaucoup de temps,
en particulier si les noms de table sont longs. Vous pouvez substituer des alias de table aux noms
de table. De la même manière qu'un alias de colonne renomme une colonne, un alias de table
donne un nouveau nom à une table. Les alias de table permettent ainsi de réduire le volume du
code SQL et donc, de gagner de la place en mémoire.
Notez la manière dont les alias de table sont identifiés dans la clause FROM de l'exemple. Le nom
de la table spécifié en entier est suivi d'un espace puis de l'alias de table. E est l'alias de la table
EMP, et D l'alias de la table DEPT.

Conseils

 Bien qu'un alias de table puisse compter jusqu'à 30 caractères, il est préférable qu'il soit le
plus court possible.
 Lorsqu'un alias de table est substitué à un nom de table dans la clause FROM, cette
substitution doit s'opérer dans la totalité de l'ordre SELECT.
 Choisissez de préférence des alias "parlants".
 Un alias de table ne s'applique que dans l'ordre SELECT courant.

Exemple :

SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc


FROM emp e, dept d
WHERE e.deptno = d.deptno;

Non-Equijointures

La relation entre la table EMP et la table SALGRADE (schéma de SCOTT) est une non-
équijointure car aucune colonne de la table EMP ne correspond directement à une colonne de la
table SALGRADE. La relation existant entre les deux tables est la suivante: les valeurs de la
colonne SAL de la table EMP sont comprises entre celles des colonnes LOSAL et HISAL de la

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 35


Dev’IT Centre : Cours de Base de Données Oracle/SQL

table SALGRADE. Il faut donc utiliser un autre opérateur que le signe égal (=) pour effectuer une
jointure.

L'exemple ci-dessous crée une non-équijointure pour évaluer l'échelon de salaire d'un employé. Le
salaire est obligatoirement compris entre deux valeurs délimitant une tranche salariale.
Il est important de noter que tous les employés n'apparaissent qu'une seule fois dans la liste
lorsque la requête est exécutée, et ce pour deux raisons :
 Aucune ligne de la table des échelons de salaire ne déborde sur une autre. Autrement dit,
le salaire d'un employé se situe nécessairement entre la valeur minimale et la valeur
maximale d'une des lignes de la table.
 Tous les salaires des employés entrent dans les limites prévues par la table des échelons de
salaire. Aucun employé ne peut gagner moins que le salaire minimal de la colonne
LOSAL ni plus que le salaire maximal de la colonne HISAL.

SELECT e.ename, e.sal, s.grade


FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal and s.hisal;

Remarque : il serait possible d'utiliser d'autres opérateurs tels que <= et >=, mais BETWEEN est
le plus simple. Avec BETWEEN, n'oubliez pas de spécifier d'abord la valeur la plus basse puis la
valeur la plus haute. Dans l'exemple, des alias de table ont été spécifiés pour améliorer les
performances et non à cause d’un possible ambiguïté.

Affichage d'Enregistrements sans Lien Direct, au moyen de Jointures Externes

Lorsqu'une ligne ne satisfait pas à une condition de jointure, elle n'apparaît pas dans le résultat de
la requête. Par exemple, quand on fait l'équijointure entre les tables EMP et DEPT, le département
OPERATIONS n'apparaît pas car personne ne travaille dans ce département.

SELECT e.ename, e.deptno, d.dname


FROM emp e, dept d
WHERE e.deptno = d.deptno;

Syntaxe d’une jointure externe:

SELECT table.colonne1, table.colonne2


FROM table1, table2
WHERE table.colonne1 (+) = table.colonne2;

Ou

SELECT table.colonne1, table.colonne2


FROM table1, table2
WHERE table.colonne1 = table.colonne2 (+);
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 36
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Il est néanmoins possible de ramener la ou les lignes manquantes en plaçant un opérateur de


jointure externe dans la condition de jointure. Cet opérateur se présente sous la forme d'un signe
plus inclus entre parenthèses, et se place du "côté" de la jointure où l'information est incomplète.
Il crée une ou plusieurs lignes NULL, auxquelles une ou plusieurs lignes de la table complète
peuvent être liées.

Syntaxe :
table1.colonne = condition qui joint (ou lie) les tables entre-elles.
table2.colonne (+) symbole de jointure externe ; se place d'un côté ou de l'autre de la condition de
la clause WHERE, jamais des deux côtés. Placez le symbole de jointure externe après le nom de
la colonne appartenant à la table où manquent les lignes correspondantes.

Exemple :

SELECT e.ename, d.dname, d.deptno


FROM emp e, dept d
WHERE e.deptno (+) = d.deptno
ORDER BY e.deptno ;

L'exemple ci-dessus affiche les numéros et les noms de tous les départements. Le département
OPERATIONS, qui ne comprend aucun employé, est également affiché.

Restrictions Applicables aux Jointures Externes

 L'opérateur de jointure externe ne peut être placé que d'un seul côté de l'expression, à
savoir le côté où l'information manque. Il permet de ramener les lignes d'une table n'ayant
pas de jointure directe avec l'autre table.
 Une condition comportant une jointure externe ne peut pas utiliser l'opérateur IN ni être
liée à une autre condition par l'opérateur OR.

Autojointure : Liaison d'une Table à Elle-même

Il se peut que vous ayez besoin de relier une table à elle-même. Ici, pour retrouver le nom du
manager de chaque employé, il faut que la table EMP soit reliée à elle-même. Par exemple, pour
retrouver le nom du manager de l'employé Blake, vous devez :

 Trouver Blake dans la table EMP en cherchant dans la colonne ENAME


 Trouver le matricule du manager de Blake en cherchant dans la colonne MGR.
 Trouver le nom du manager dont le matricule est 7839 dans la colonne EMPNO, puis
regarder le nom correspondant dans la colonne ENAME. Le matricule 7839 appartient à
King, donc King est le manager de Blake.

Dans ce processus, vous utilisez la même table deux fois : la première, pour rechercher le nom de
Blake dans la colonne ENAME et la valeur correspondante dans la colonne MRG ; la seconde,

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 37


Dev’IT Centre : Cours de Base de Données Oracle/SQL

pour rechercher le matricule 7839 dans la colonne EMPNO et le nom correspondant (King) dans
la colonne ENAME.

L'exemple suivant relie la table EMP à elle-même. Afin de simuler l'existence de deux tables dans
la clause FROM, on a mis deux alias, SUBORDONNE et SUPERIEUR, pour la même table
EMP.
Dans cet exemple, la clause WHERE contient une jointure dont la signification est "lorsque le
matricule du manager d'un employé correspond au matricule du manager".

SELECT subordonne.ename||' a pour supérieur ' ||superieur.ename


FROM emp subordonne, emp superieur
WHERE subordonne.mgr = superieur.empno ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 38


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 6 : Fonctions de Groupe

Objectifs : Ce chapitre poursuit l'étude des fonctions. Il explique comment effectuer des calculs
statistiques, tels que les moyennes, sur des groupes de lignes. Il présente les différentes manières
de grouper les lignes d'une table en sous-ensembles et comment spécifier des critères de recherche
sur ces groupes de lignes.

Contrairement aux fonctions mono-ligne, les fonctions de groupe agissent sur des groupes de
lignes et donnent un résultat par groupe. Un groupe peut être une table entière ou un ensemble de
lignes d'une table

Types de fonctions de groupe :

Chaque fonction accepte un argument. La table suivante présente les différentes options de
syntaxe possibles.

Conseils pour l'Utilisation des Fonctions de Groupe

 Avec DISTINCT, la fonction ne prend en compte que les valeurs distinctes ; avec ALL,
elle tient compte de toutes les valeurs y compris les doublons. La valeur par défaut est
ALL, par conséquent il n'est pas nécessaire de la spécifier.
 Si expr est spécifié, les différents types de données possibles pour les arguments sont
CHAR, VARCHAR2, NUMBER ou DATE.
 Toutes les fonctions de groupe, à l'exception de COUNT(*), ignorent les valeurs NULL.
Pour substituer une valeur à une valeur NULL, utilisez la fonction NVL.

Fonctions de Groupe : AVG, SUM, MIN et MAX

Vous pouvez utiliser les fonctions AVG, SUM, MIN et MAX avec des colonnes de données
numériques. L'exemple ci-dessous affiche la moyenne, le maximum, le minimum et la somme des
salaires mensuels pour tous les commerciaux.

SELECT AVG(sal), MAX(sal), MIN(sal), SUM(sal)


FROM e mp
WHERE LOWER (job) = 'salesman' ;

NB: AVG et SUM s’utilisent avec des données numériques. MIN et MAX s’utilisent avec
tous types de données.

Fonction Description
AVG([DISTINCT|ALL]n) Valeur moyenne de n, en ignorant les valeurs NULL
COUNT({*|[DISTINCT|ALL]expr}) Nombre de lignes, où expr est différent de NULL. Le caractère *
comptabilise toutes les lignes sélectionnées y compris les doublons et
les lignes NULL
MAX([DISTINCT|ALL]expr) Valeur maximale de expr, en ignorant les valeurs NULL

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 39


Dev’IT Centre : Cours de Base de Données Oracle/SQL

MIN([DISTINCT|ALL]expr) Valeur minimale de expr, en ignorant les valeurs NULL


STDDEV([DISTINCT|ALL]x) Ecart standard de n, en ignorant les valeurs NULL
SUM([DISTINCT|ALL]n) Somme des valeurs de n, en ignorant les valeurs NULL
VARIANCE([DISTINCT|ALL]x) Variance de n, en ignorant les valeurs NULL

Fonction COUNT

La fonction COUNT se présente sous deux formats :


 COUNT(*)
 COUNT(expr).

COUNT(*) ramène le nombre de lignes d'une table, y compris les lignes en double et celles
contenant des valeurs NULL.

A l'opposé, COUNT(expr) ramène le nombre de lignes pour lesquelles la colonne identifiée par
expr est non NULL.

L'exemple ci-dessous affiche le nombre d'employés du département 20.

SELECT COUNT(*)
FROM emp
WHERE deptno = 20;

L'exemple ci-après affiche le nombre d'employés du département 30 qui touchent une


commission. Notez que le nombre total de lignes affiché est 4, car deux employés du département
30 ne sont pas habilités à toucher de commission et présentent par conséquent une valeur NULL
dans la colonne COMM.

SELECT COUNT(comm)
FROM emp
WHERE deptno = 30 ;

Fonctions de Groupe et Valeurs Null

Toutes les fonctions de groupe, à l'exception de COUNT (*), ignorent les valeurs NULL des
colonnes. Dans l'exemple ci-dessous, la moyenne est calculée uniquement sur les lignes pour
lesquelles la colonne COMM est renseignée. Le calcul de la moyenne s'effectue en divisant le
total des commissions versées à tous les employés par le nombre d'employés touchant une
commission (4).

SELECT AVG(comm)
FROM emp ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 40


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Utilisation de la fonction NVL avec les fonctions de groupe

La fonction NVL force les fonctions de groupe à prendre en compte les valeurs NULL. Dans
l'exemple ci-dessous, la moyenne est calculée sur toutes les lignes de la table y compris celles
dont la colonne COMM contient des valeurs NULL. Le calcul de la moyenne s'effectue en
divisant le total des commissions de tous les employés par le nombre total d'employés de
l'entreprise (14).

SELECT AVG (NVL(comm, 0))


FROM emp ;

Groupes de Données

Jusqu'ici, la table a été prise en compte par les fonctions de groupe, comme un seul groupe
d'informations. Mais il est parfois nécessaire de diviser les informations d'une table en groupes
plus petits. Pour cela, il faut utiliser la clause GROUP BY.

La Clause GROUP BY

Vous pouvez utiliser la clause GROUP BY pour diviser une table en groupes de lignes. Vous
pouvez alors utiliser les fonctions de groupe pour effectuer des calculs statistiques sur chaque
groupe.

Syntaxe :

SELECT colonne, fonction_groupe


FROM table
[WHERE condition]
[GROUPE BY expression_groupe_by]
[ORDER BY colonne]

expression_groupe_by : spécifie les colonnes dont les valeurs déterminent les différents groupes.

Conseils
 Lorsque vous intégrez une fonction de groupe dans une clause SELECT, vous ne pouvez
pas en même temps sélectionner des résultats individuels, à moins que la colonne
individuelle ne soit mentionnée dans la clause GROUP BY. Si vous omettez de spécifier
un de ces colonnes, un message d'erreur s'affichera.
 Avec la clause WHERE, vous pouvez exclure des lignes avant de créer des groupes.
 Vous devez inclure les "colonne" de la liste SELECT dans la clause GROUP BY.
 Vous ne pouvez pas utiliser l'alias de colonne dans la clause GROUP BY.
 Par défaut, les lignes sont triées dans l'ordre croissant des colonnes incluses dans la liste
GROUP BY. Vous pouvez changer cet ordre en utilisant la clause ORDER BY.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 41


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Exemple :

SELECT deptno, AVG (sal)


FROM emp
GROUP BY deptno ;

Lorsque vous utilisez la clause GROUP BY, pensez à inclure dans cette clause toutes les colonnes
de la liste SELECT qui ne figurent pas dans les fonctions de groupe. L'exemple ci-dessus affiche
le numéro et le salaire moyen de chaque département. Voici comment est évalué l'ordre SELECT
ci-dessus, qui contient une clause GROUP BY :
 La clause SELECT indique les colonnes à extraire :
- Colonne numéro de département de la table EMP
- La moyenne de tous les salaires du groupe que vous avez spécifié dans la clause
GROUP BY
 La clause FROM indique les tables de la base de données auxquelles il faut accéder : la
table EMP.
 La clause WHERE indique les lignes à extraire. Comme il n'y a pas de clause WHERE,
toutes les lignes seront extraites.
 La clause GROUP BY spécifie la manière dont les lignes doivent être groupées. Ici, elles
sont groupées par numéro de département pour permettre à la fonction AVG, appliquée à
la colonne des salaires (sal), de calculer la moyenne des salaires de chaque département.

Erreurs d'utilisation des Fonctions de Groupe dans une Requête

Chaque fois que vous mélangez des éléments individuels (DEPTNO) et des fonctions de groupe
(COUNT) dans le même ordre SELECT, vous devez obligatoirement inclure une clause GROUP
BY qui spécifie les éléments individuels (ici, DEPTNO). Si la clause GROUP BY est absente,
vous verrez apparaître le message d'erreur " La fonction de groupe ne porte pas sur un groupe
simple ", la colonne incorrecte étant indiquée par un astérisque (*).

L'erreur dans l’exemple ci-dessous peut être corrigée en ajoutant la clause GROUP BY.

SELECT deptno,COUNT(ename)
FROM emp ;

Cette requête affiche l’erreur suivante: La fonction de groupe ne porte pas sur un groupe
simple

Requête corrigée :

SELECT deptno,COUNT(ename)
FROM emp
GROUP BY deptno;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 42


Dev’IT Centre : Cours de Base de Données Oracle/SQL

La Clause HAVING

Utilisez la clause HAVING pour indiquer les groupes que vous souhaitez afficher.

Syntaxe :

SELECT colonne, fonction_groupe


FROM table
[WHERE condition]
[GROUPE BY expression_groupe_by]
[HAVING groupe_condition]
[ORDER BY colonne]

groupe_condition : limite les groupes de lignes ramenés aux groupes pour lesquels la condition
spécifiée est VRAIE

Oracle Server opère de la manière suivante avec la clause HAVING :

 Les lignes sont groupées.


 La fonction de groupe s'applique au groupe.
 Les groupes qui correspondent aux critères de la clause HAVING sont affichés.

Il est possible de placer la clause HAVING avant la clause GROUP BY ; néanmoins, pour des
raisons de logique, il est recommandé de placer la clause GROUP BY en tête. Les groupes sont
formés puis les fonctions de groupe calculées avant que la clause HAVING ne soit appliquée aux
groupes de la liste SELECT.

L'exemple ci-dessous affiche le salaire maximum et le numéro de département dont le salaire


maximum est supérieur à 2900.

Vous pouvez utiliser la clause GROUP BY sans utiliser de fonction de groupe dans la liste
SELECT.

Si vous souhaitez, pour restreindre les lignes retournées, vous baser sur le résultat d'une fonction
de groupe, vous devez utiliser une clause HAVING plus une clause GROUP BY.

SELECT deptno, MAX(sal)


FROM emp
GROUP BY deptno
HAVING MAX(sal)> 2900 ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 43


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 7 : Opérateurs Ensemblistes

Objectifs : Au cours de ce chapitre, vous allez apprendre à écrire des requêtes avec des opérateurs
ensemblistes.

Présentation

Les opérateurs ensemblistes combinent les résultats de deux ou plusieurs requêtes en un seul
résultat. Une requête composée est une requête contenant des opérateurs ensemblistes.

L'opérateur Ramène
INTERSECT Toutes les lignes communes aux deux requêtes.
INTERSECT combine les deux requêtes et ramène les
lignes du premier ordre SELECT identiques aux
lignes du second ordre SELECT
UNION Toutes les lignes distinctes ramenées par les deux
requêtes.
UNION ALL Toutes les lignes sélectionnées par les deux requêtes,
y compris les doublons.
MINUS Toutes les lignes sélectionnées par le premier ordre
SELECT moins les lignes sélectionnées dans le
second ordre SELECT.
.
Tous les opérateurs ensemblistes ont la même priorité. Si un ordre SQL en contient plusieurs, la
base de données les évalue de gauche à droite ou de haut en bas, si aucune parenthèse n'indique
explicitement un autre ordre.

L'Opérateur UNION

Cet opérateur combine le résultat de deux requêtes. Il permet de ramener toutes les lignes issues
de plusieurs requêtes et d'éliminer les doublons.

Règle :
 Le nombre de colonnes et les types de données des colonnes doivent être identiques dans
les deux ordres SELECT. En revanche, les noms de colonnes peuvent être différents.
 L'opérateur UNION intervient sur toutes les colonnes sélectionnées. Par exemple, si vous
modifiez la requête de la page suivante pour sélectionner uniquement les noms des
employés et leur poste, ALLEN n'apparaîtra qu'une seule fois dans les résultats.
 Les colonnes NULL sont ignorées lors du contrôle des doublons. Par exemple, si la
colonne DEPTNO correspondant à ALLEN contenait une valeur NULL dans le premier
ordre SELECT (si DEPTNO n'était pas une colonne NOT NULL) à la place de la valeur
30 comme dans le second ordre SELECT, ALLEN n'apparaîtrait qu'une seule fois dans les
résultats.
 L'opérateur IN a une priorité plus élevée que l'opérateur UNION.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 44


Dev’IT Centre : Cours de Base de Données Oracle/SQL

 Les requêtes incluant l'opérateur UNION dans la clause WHERE doivent comprendre le
même nombre de colonnes et des colonnes du même type que celles de la clause
SELECT.
 Par défaut, les données sont affichées par ordre ascendant.

Exemple :

SELECT deptno from dept


UNION
SELECT deptno from emp ;

L'Opérateur UNION ALL

Cet opérateur permet de ramener toutes les lignes issues de plusieurs requêtes.

Règle :
 Contrairement à l'opérateur UNION, les doublons ne sont pas éliminés et le résultat n'est
pas trié par défaut.
 Il n'est pas possible d'utiliser le mot-clé DISTINCT.

Remarque : Les règles relatives aux opérateurs UNION et UNION ALL sont les mêmes, excepté
les deux points ci-dessus.

Exemple :

SELECT deptno from dept


UNION ALL
SELECT deptno from emp ;

L'Opérateur INTERSECT

Cet opérateur permet de ramener toutes les lignes communes aux deux requêtes.
 Le nombre de colonnes et les types de données des deux colonnes doivent être identiques
dans les deux ordres SELECT. En revanche, les noms de colonnes peuvent être différents.
 L'inversion de l'ordre des tables interrogées ne modifie pas le résultat.
 Comme l'opérateur UNION, l'opérateur INTERSECT ignore les colonnes NULL.
 Les requêtes incluant l'opérateur INTERSECT dans la clause WHERE doivent
comprendre le même nombre et des colonnes du même type que celles de la clause
SELECT.

Exemple :
SELECT deptno from dept
INTERSECT
SELECT deptno from emp ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 45


Dev’IT Centre : Cours de Base de Données Oracle/SQL

L'opérateur MINUS

Cet opérateur ramène les lignes retournées par la première requête, qui ne le sont pas par la
seconde (premier ordre SELECT moins le second).
 Le nombre de colonnes et les types de données des colonnes doivent être identiques dans
les deux ordres SELECT. En revanche, les noms de colonnes peuvent être différents.
 Toutes les colonnes incluses dans la clause WHERE doivent également être incluses dans
la clause SELECT pour que la requête de l'opérateur MINUS puisse être exécutée.
 Les requêtes incluant l'opérateur MINUS dans la clause WHERE doivent comprendre le
même nombre de colonnes et des colonnes du même type que celles de la clause
SELECT.

Exemple :

SELECT deptno from dept


MINUS
SELECT deptno from emp ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 46


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 8 : Sous-Interrogation

Objectifs : Au cours de ce chapitre, vous allez étudier des aspects plus complexes de l'ordre
SELECT. Il est possible d'inclure des sous-interrogations dans la clause WHERE de tout ordre
SQL pour obtenir les valeurs de différentes inconnues. Ce chapitre traite des sous-interrogations
mono-ligne et multi-ligne.

Utilisation d'une Sous-Interrogation pour Résoudre un Problème

Supposons que vous souhaitiez écrire une requête pour trouver qui gagne plus que l'employé
Jones.

Pour résoudre ce problème, deux requêtes sont nécessaires : une qui trouve le salaire de Jones, et
l'autre qui trouve quel employé a un salaire supérieur.

A cet effet, vous pouvez combiner deux requêtes, en en plaçant l'une à l'intérieur de l'autre. La
requête interne, ou sous-interrogation, ramène une valeur utilisée par la requête externe, ou
principale. Utiliser une sous-interrogation revient à exécuter deux requêtes successives en utilisant
le résultat de la première comme valeur de recherche de la seconde.

Une sous-interrogation est un ordre SELECT imbriqué dans une clause d'un autre ordre SELECT.
Les sous-interrogations vous permettent de construire des ordres puissants à partir d'instructions
toutes simples. Elles s’avèrent très utiles pour sélectionner des lignes d'une table lorsqu'une
condition dépend des données de la table elle-même.

Vous pouvez placer une sous-interrogation dans les clauses SQL suivantes :
 WHERE
 HAVING
 FROM

Syntaxe :
operator est un opérateur de comparaison tel que >, = ou IN.

Remarque : les opérateurs de comparaison se classent en deux catégories : les opérateurs mono-
ligne (>, =, >=, <, <>, <=) et les opérateurs multi-ligne (IN, ANY, ALL).
Une sous-interrogation est souvent désignée sous le nom "d'ordre SELECT imbriqué", "sous-
ordre SELECT", ou encore "ordre SELECT interne". Elle est exécutée en premier, et son résultat
sert à évaluer la condition définie dans l'interrogation principale ou externe.

Exemple :

La requête suivante affiche tous les employés dont le salaire est supérieur à celui de lemployé
7566. La requête externe prend le résultat de la requête interne et l'utilise pour afficher tous les
employés qui gagnent plus que cette somme.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 47


Dev’IT Centre : Cours de Base de Données Oracle/SQL

SELECT ename
FROM emp
WHERE sal > (SELECT sal
FROM emp
WHERE empno = 7566);

Convention d'Utilisation des sous-interrogations

 Une sous-interrogation doit être incluse entre parenthèses.


 Une sous-interrogation doit être placée à droite de l'opérateur de comparaison.
 Les sous-interrogations ne doivent pas contenir de clause ORDER BY. Il ne peut y avoir
qu'une seule clause ORDER BY par ordre SELECT. Si vous en spécifiez une, elle doit
obligatoirement figurer en dernier dans l'ordre SELECT principal.
 Deux catégories d'opérateurs de comparaison sont utilisées dans les sous-interrogations :
les opérateurs mono-ligne et les opérateurs multi-ligne.

Types de sous-interrogations

 Sous-interrogation mono-ligne : ordre SELECT interne qui ne ramène qu'une seule ligne
 Sous-interrogation multi-ligne : ordre SELECT interne qui ramène plusieurs lignes
 Sous-interrogation multi-colonne : ordre SELECT interne qui ramène plusieurs colonnes

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 48


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 9 : Manipulation des Données

Objectifs :

Dans ce chapitre, vous allez apprendre à insérer des lignes dans une table, mettre à jour des lignes
existantes et supprimer des lignes d'une table.

Langage de Manipulation des Données

Le langage de manipulation des données (LMD) joue un rôle central dans SQL. Chaque fois que
vous ajoutez, modifiez ou supprimez des données dans la base de données, vous exécutez un ordre
du LMD. Un ensemble d'ordres du LMD groupé en une unité de travail logique constitue ce qu'on
appelle une transaction.

Considérons une base de données d’opérations bancaires. Quand un client de la banque transfère
de l’argent d’un compte d’épargne vers un compte courant, la transaction doit donner lieu à trois
opérations différentes : débit du compte d’épargne, crédit du compte courant, et enregistrer la
transaction dans le journal des transactions. Oracle Server doit garantir que l’ensemble des trois
ordres SQL sont exécutés pour maintenir la balance des comptes équilibrée. Quand quelque chose
empêche la bonne exécution de l’un des ordres de la transaction, les autres ordres de la même
transaction doivent être annulés.

Ajout d'une Nouvelle Ligne dans une Table

Pour ajouter de nouvelles lignes dans une table, utilisez l'ordre INSERT.

Syntaxe :

INSERT INTO table [(colonne [, colonne…])]


VALUES (value [, value…]) ;

Table : nom de la table


Colonne : nom de la colonne dans la table à remplir
Value : valeur qui figurera dans la colonne

Remarque : lorsque cet ordre est utilisé avec la clause VALUES, il n'insère qu'une seule ligne à
la fois.

Exemple :

INSERT INTO dept (deptno, dname, loc)


VALUES (50, 'MAINTENANCE', 'DAKAR');

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 49


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Méthodes d'Insertion de Valeurs NULL

Méthode Description
Implicite Omettez la colonne dans la liste
Explicite Spécifiez le mot-clé NULL dans la liste VALUES

Vous pouvez aussi spécifier une chaîne vide (' ') dans la liste VALUES, mais
uniquement pour les chaînes de caractères et les dates

Assurez-vous que la colonne cible admet les valeurs NULL en vérifiant l'état NULL? Au moyen
de la commande SQL*Plus DESCRIBE.

Exemple : describe dept ou desc dept

Méthode implicite : Ne pas spécifier la colonne dans la liste.

Exemple: INSERT INTO dept (deptno, dname)


VALUES (60, 'FORMATION');

Méthode explicite : Spécifier le mot-clé NULL.

Exemple: INSERT INTO dept (deptno, dname)


VALUES (70, 'FORMATION', NULL);

Insertion de Valeurs Spéciales au Moyen de Fonctions SQL

Vous pouvez utiliser les pseudo-colonnes pour entrer des valeurs spéciales dans une table.
L'exemple ci-dessous enregistre des informations sur l'employé FALL dans la table EMP.
Dans la colonne HIREDATE, il insère la date et l'heure courantes issues de la fonction SYSDATE.
Lorsque vous insérez des lignes dans une table, vous pouvez aussi utiliser la fonction USER qui
renvoie le nom de l'utilisateur courant.

INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (7196, 'FALL', 'SALESMAN', 7782, SYSDATE, 2000, NULL, 10);

Vérification des Ajouts

SELECT empno, ename, job, hiredate, comm


FROM emp
WHERE empno = 7196;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 50


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Modification de Lignes : l’Ordre UPDATE

Vous pouvez modifier des lignes existantes au moyen de l'ordre UPDATE.


Syntaxe :

UPDATE table
SET colonne = valeur [, colonne = valeur]
[WHERE condition] ;

table est le nom de la table


colonne est le nom de la colonne à modifier dans la table
valeur est la nouvelle valeur qui figurera dans la colonne, ou une sous-interrogation fournissant
cette valeur.
Condition identifie les lignes à mettre à jour. Se compose de noms de colonne, d'expressions, de
constantes, de sous-interrogations et d'opérateurs de comparaison.

Exemple:

UPDATE emp
SET deptno = 20
WHERE empno = 7782;

Dans cet exemple, la clause WHERE permet de modifier une ou plusieurs lignes spécifiques.
Ici une seule ligne est affectée par la modification.
Par contre, si l’on omet la clause WHERE, toutes les lignes sont modifiées tel que le montre
l’exemple suivant :

UPDATE emp
SET comm = NULL ;

Remarque : de manière générale, utilisez la clé primaire pour identifier une ligne unique.
L’utilisation d'autres colonnes comme critère de sélection risque de provoquer la modification de
plusieurs lignes par inadvertance. Par exemple, il est dangereux d’utiliser le nom d'employé pour
désigner une seule ligne de la table EMP car plusieurs personnes peuvent porter le même nom.

Suppression d'une Ligne d'une Table : l’Ordre DELETE

Syntaxe :

DELETE [FROM] table


[WHERE condition] ;

table nom de la table


condition identifie les lignes à supprimer. Se compose de noms de colonnes, d'expressions, de
constantes, de sous-requêtes et d'opérateurs de comparaison.
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 51
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Exemple :

DELETE FROM dept


WHERE dname = 'FORMATION' ;

Dans cet exemple, la clause WHERE permet de supprimer une ou plusieurs lignes spécifiques.
Par contre, si l’on omet la clause WHERE, toutes les lignes sont supprimées tel que le montre
l’exemple suivant :

DELETE FROM dept ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 52


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Chapitre 10 : Création et Gestion de Tables et Objets d’une Base de Données Oracle

Objectifs : Dans ce chapitre, vous allez étudier les principaux objets d'une base de données et les
relations qu'ils entretiennent. Vous apprendrez également à créer, modifier et supprimer ces
objets.

Objets d'une Base de Données

Une base de données Oracle peut contenir de nombreuses structures de données. Chaque structure
doit être prédéfinie lors de la conception de la base de données pour pouvoir être créée durant la
phase de construction de la base.

 Table : stocke les données


 Vue : sous-groupes de données issues d'une ou de plusieurs tables
 Séquence : génère des valeurs de clés primaires
 Index : améliore les performances de certaines requêtes
 Synonyme : permet de renommer des objets

Structures des Tables Oracle

 Vous avez la possibilité de créer des tables à tout moment, y compris lorsque la base de
données est déjà en cours d'utilisation.
 Vous n'avez pas à spécifier de taille pour les tables. La taille est en fait définie en fonction
de l'espace total alloué à la base de données. Il est important, néanmoins, d'estimer
l'espace qu'occupera une table avec le temps.
 La structure des tables peut être modifiée en ligne.

Règles de Dénomination

Nommez les tables et colonnes de votre base de données en suivant les règles de dénomination
applicables à tous les objets d'une base de données Oracle.
 Les noms de table et de colonnes doivent commencer par une lettre et peuvent comprendre
de 1 à 30 caractères.
 Les noms ne doivent pas contenir d'autres caractères que les caractères A à Z, a à z, 0 à 9,
_ (trait de soulignement), $ et # (caractères autorisés, mais déconseillés).
 Les noms ne doivent pas être utilisés pour nommer plusieurs objets appartenant au même
utilisateur Oracle Server.
 Ces noms ne doivent pas être des mots réservés Oracle Server.

Conseils
o Utilisez des noms parlants.
o Utilisez une dénomination uniforme pour des entités identiques appartenant à des
tables différentes. Par exemple, la colonne numéro du département s'appelle
DEPTNO dans la table EMP et dans la table DEPT.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 53


Dev’IT Centre : Cours de Base de Données Oracle/SQL

L'Ordre CREATE TABLE


Créez des tables pour stocker des données en utilisant l'ordre SQL CREATE TABLE.

Syntaxe :
CREATE TABLE [schema.] table
(column Datatype [ DEFAULT expr] ;

Schema nom du propriétaire


table nom de la table
DEFAULT expr spécifie une valeur par défaut à utiliser en cas d'omission d'une valeur dans
l'ordre INSERT
Column nom de la colonne
Datatype type de données et longueur de la colonne

Exemple :
CREATE TABLE etudiant
(matricule VARCHAR2(8) NOT NULL,
nom VARCHAR2(30) NOT NULL,
prenom VARCHAR2(30));

Pour voir la structure de la table créée, utiliser la commande DESCRIBE comme suit :
DESCRIBE etudiant ou DESC etudiant

Noter ici qu’avec la commande DESCRIBE, la spécification du point virgule est facultative à la
fin de la commande

NB: la création d'une table fait appel à un ordre du LDD, une validation automatique à lieu lors de
son exécution. Donc point besoin de taper la commande de validation COMMIT.

Type de Données

Type de données Description


Données caractères de longueur variable. Spécifiez obligatoirement une
VARCHAR2(size) longueur (size) maximum. La longueur minimum est 1, la longueur
maximum est 4000.
Données caractères de longueur fixe d’un nombre d’octets égal à size. La
CHAR(size) longueur (size) minimum et par défaut est 1, la longueur maximum est
2000.
Nombre de précision p et d’échelle s ; la précision est le nombre total de
NUMBER(p,s) chiffres allant de 1 à 38, et l’échelle est le nombre de chiffres à droite de la
virgule allant de -84 à 127.
Valeurs de date et d’heure allant du 1er janvier 4712 av. J.C. au 31
DATE
décembre 9999 apr. J.C.
LONG Données caractères de longueur variable, jusqu’à 2 giga-octets.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 54


Dev’IT Centre : Cours de Base de Données Oracle/SQL

CLOB Données caractères mono-octet, jusqu’à 4 giga-octets.


Données binaires, de longueur size. La longueur maximum est 2000.
RAW(size)
Spécifiez obligatoirement une longueur maximum.
LONG RAW Données binaires, de longueur variable ; jusqu’à 2 giga-octets.
BLOB Données binaires, jusqu’à 4 giga-octets.
BFILE Données binaires, stockées dans un fichier externe ; jusqu’à 4 giga-octets.

Ordre ALTER TABLE

Après avoir créé vos tables, il peut arriver que vous devriez en modifier la structure pour ajouter
une colonne oubliée ou que vous décidiez de changer une définition de colonne. Cela est possible
grâce à l'ordre ALTER TABLE.

Vous pouvez ajouter des colonnes à une table en utilisant l'ordre ALTER TABLE avec la clause
ADD ou alors modifier des colonnes existantes d'une table au moyen de l'ordre ALTER TABLE
avec la clause MODIFY.

Syntaxe :

Pour l’ajout des colonnes :


ALTER TABLE table
ADD (column Datatype [ DEFAULT expr]
[, column Datatype ] …) ;

Pour la modification des colonnes:


ALTER TABLE table
MODIFY (column Datatype [ DEFAULT expr]
[, column Datatype ] …) ;

Exemples :

ALTER TABLE etudiant


ADD (date_naissance DATE) ;

ALTER TABLE etudiant


MODIFY (prenom VARCHAR2(50)) ;

Suppression d’une colonne

Vous pouvez supprimer une colonne en utilisant la commande ALTER TABLE avec l’option
DROP COLUMN. Cette fonctionnalité n’existe que depuis Oracle 8i.
 La colonne à supprimer peut contenir ou non des données.
 La clause DROP COLUMN n’est applicable que sur une colonne.
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 55
Dev’IT Centre : Cours de Base de Données Oracle/SQL

 La table doit avoir, après suppression au moins une colonne.


 Cette opération est irréversible.

Syntaxe :
ALTER TABLE table
DROP COLUMN column;

Exemple:
ALTER TABLE etudiant
DROP COLUMN prenom;

Renommer une table

Syntaxe :
RENAME old_name TO new_name;

Où : old_name est l'ancien nom de la table, de la vue, de la séquence ou du synonyme


new_name est le nouveau nom de la table, de la vue, de la séquence ou du synonyme

Exemple :
RENAME etudiant TO etudiants ;

Vider une Table

TRUNCATE TABLE est un autre ordre LDD, qui permet de supprimer toutes les lignes d'une
table tout en libérant l'espace utilisé pour stocker cette table. L'ordre TRUNCATE TABLE ne
peut être annulé.

Syntaxe :
TRUNCATE TABLE table;

Où : table est le nom de la table

NB : Vous devez être propriétaire de la table ou disposer du privilège système DELETE


TABLE pour tronquer une table.
L'ordre DELETE supprime aussi les lignes d'une table, mais il ne libère pas l'espace de stockage.

Exemples :
TRUNCATE TABLE etudiants ;
Ou
DELETE FROM etudiants ;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 56


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Suppression de Tables

L'ordre DROP TABLE supprime la définition d'une table Oracle. Lorsque vous supprimez une
table, la base de données perd toutes les données de la table ainsi que tous les index associés.

Syntaxe :
DROP TABLE table;

Exemple :
DROP TABLE etudiant ;

Conseils
 Toutes les données de la table sont supprimées.
 Les vues, synonymes ne sont pas supprimés mais ne sont plus utilisables.
 Toute transaction en instance est validée.
 Seul le créateur de la table ou un utilisateur ayant le privilège DROP ANY TABLE
peut supprimer une table.

Une fois exécuté, l'ordre DROP TABLE est irréversible. Oracle9i Server ne demande pas
confirmation lorsque vous lancez cet ordre. Si vous êtes le propriétaire de la table ou disposez
d'un niveau de privilège élevé, la table sera immédiatement supprimée. Tous les ordres du LDD
effectuent une validation qui rend la transaction permanente.

Les Vues

Définition :

Une vue est une table logique basée sur une table ou une autre vue. Elle affiche des données qui
ne lui sont pas propres, mais c’est comme une fenêtre par laquelle il est possible de visualiser ou
de modifier des données venant des tables. Les tables sur lesquelles une vue est basée sont
appelées tables de base.

Avantages d'une Vue

• Limite l'accès à la base de données en affichant une sélection de celle-ci.


• Permet aux utilisateurs de créer des requêtes simples pour extraire les résultats de requêtes
complexes. Par exemple, vous pouvez extraire des informations de plusieurs tables sans savoir
écrire un ordre de jointure.
• Garantit l'indépendance des données pour des utilisateurs et des programmes d'application
contextuels. Une vue peut être utilisée pour extraire les données de plusieurs tables.
• Permet à des groupes d'utilisateurs d'accéder aux données en fonction de leurs critères
particuliers.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 57


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Vues Simples et Vues Complexes

On distingue les vues simples et les vues complexes. La différence principale entre ces deux types
de vues est liée aux opérations LMD (insertion, mise à jour et suppression).

• Une vue simple :


– Est dérivée des données d'une seule table
– Ne contient ni fonctions ni groupes de données
– Permet d'exécuter des opérations du LMD

• Une vue complexe :


– Est dérivée des données de plusieurs tables
– Contient des fonctions ou des groupes de données
– Ne permet pas toujours d'exécuter des opérations du LMD

Création d’une vue

Syntaxe :
CREATE VIEW nom_vue
AS
requete
[WITH CHECK OPTION [CONSTRAINT contrainte]]
[WITH READ ONLY];

Nom_view nom de la vue.


Requete ordre SELECT complet. Vous pouvez utiliser des alias de colonnes dans la liste
SELECT.
WITH CHECK OPTION n'autorise l'insertion et la mise à jour que pour les lignes auxquelles la
vue peut accéder.
Constrainte nom attribué à la contrainte CHECK OPTION.
WITH READ ONLY garantit qu'aucune opération LMD ne peut être exécutée dans la vue.

Exemple :
CREATE VIEW empvue20
AS SELECT empno, ename, job
FROM emp
WHERE deptno = 20;

Tapez la commande DESCRIBE empvue20 pour voir la structure de la vue créée.

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 58


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Suppression d'une Vue

L'ordre DROP VIEW permet de supprimer une vue. La définition de la vue est ainsi supprimée de
la base de données. La suppression d'une vue n'a aucun effet sur les tables sur lesquelles la vue est
basée. En revanche, les vues ou autres applications basées sur des vues supprimées ne sont plus
valides.

Syntaxe :
DROP VIEW nom_vue ;

Exemple : DROP VIEW empvue20 ;

Les Séquences

Définition :

A l'aide d'un générateur de séquences, vous pouvez créer automatiquement des numéros de
séquence pour les lignes des tables. Une séquence est un objet de base de données créé par un
utilisateur et qui peut être partagé entre plusieurs utilisateurs.
En général, les séquences permettent de créer une valeur de clé primaire propre à chaque ligne. La
séquence est générée puis incrémentée (ou décrémentée) par une routine interne d'Oracle. Vous
pouvez ainsi gagner du temps, car le code applicatif utilisé pour écrire une routine de génération
de séquences est considérablement réduit.
Les numéros de séquence sont stockés et générés indépendamment des tables. Vous pouvez donc
utiliser la même séquence pour plusieurs tables.

Création d’une séquence

Syntaxe :
CREATE SEQUENCE nom_sequence
[START WITH valeur]
[INCREMENT BY valeur] ;

nom_sequence représente le nom du générateur de numéros séquentiels.


INCREMENT BY valeur définit l'intervalle entre les numéros de séquence, où n est un entier. Si
cette clause est omise, le pas d’incrémentation est 1.
START WITH valeur indique le premier numéro de séquence à générer. Si cette clause est
omise, la séquence commence par le numéro 1.

Exemple :
CREATE SEQUENCE seq_deptno
INCEMENT BY 10
START WITH 90;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 59


Dev’IT Centre : Cours de Base de Données Oracle/SQL

Utilisation d'une Séquence

Une fois votre séquence créée, vous pouvez générer des numéros séquentiels pour vos tables.
Référencez les valeurs de votre séquence à l'aide des pseudocolonnes NEXTVAL et CURRVAL.

Pseudocolonnes NEXTVAL et CURRVAL


La pseudocolonne NEXTVAL permet d'extraire des numéros successifs à partir de la séquence
indiquée. Vous devez désigner NEXTVAL avec le nom de la séquence. Lorsque vous référencez
sequence.NEXTVAL, un nouveau numéro de séquence est généré et CURRVAL reçoit le numéro
de séquence actuel.

La pseudocolonne CURRVAL fait référence au numéro de séquence que l'utilisateur vient de


générer. NEXTVAL doit générer un numéro de séquence dans la session actuelle de l'utilisateur
pour que CURRVAL puisse être référencée. Vous devez désigner CURRVAL avec le nom de la
séquence. Lorsque vous référencez sequence.CURRVAL, la dernière valeur retournée pour cette
session utilisateur s'affiche.

Exemple :
INSERT INTO dept (deptno, dname, loc)
VALUES (seq_deptno.NEXTVAL, 'MARKETING','PARIS');

Suppression d'une Séquence

Syntaxe :
DROP SEQUENCE nom_sequence ;

Exemple :
DROP SEQUENCE seq_deptno ;

Les Index

Définition :
Un index Oracle Server est un objet de schéma qui permet d'accélérer l'extraction de lignes par le
biais d'un pointeur. Il est possible de créer des index explicitement ou automatiquement.
Si la colonne ne comporte pas d'index, la table entière est balayée.
Un index offre un accès direct et rapide aux lignes d'une table. Il a pour but de réduire les E/S sur
disque grâce à un chemin d'accès indexé qui identifie rapidement l'emplacement des données.

Création d’un Index


Créez un index sur une ou plusieurs colonnes à l'aide de l'ordre CREATE INDEX.

Syntaxe :
CREATE INDEX nom_index
ON TABLE (column [, column]…) ;
Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 60
Dev’IT Centre : Cours de Base de Données Oracle/SQL

Exemple :
On souhaite réduire le temps d’accès d’une requête à la colonne ENAME de la table EMP à l’aide
de l’Index créé ci-après :

CREATE INDEX emp_empno_idx


ON emp (ename) ;
Suppression d'un Index

Syntaxe :
DROP INDEX nom_index ;

Exemple :
DROP INDEX emp_empno_idx;

Les Synonymes

Les synonymes ne sont rien d’autre qu’une autre appellation d’objets déjà existant qui facilitent
l’accès aux objets à partir desquels ils sont créés.

Création d’un synonyme

Syntaxe:
CREATE [PUBLIC] SYNONYM nom_synonyme
FOR objet ;

PUBLIC crée un synonyme accessible à tous les utilisateurs


nom_synonym représente le nom du synonyme à créer
object identifie l'objet pour lequel le synonyme est créé

Exemple :
CREATE SYNONYM sy_emp
FOR emp ;

Suppression d'un Synonyme

Syntaxe :
DROP SYNONYM nom_synonyme ;

Exemple : DROP SYNONYM sy_emp;

Amadou Bobo DIALLO Développement et Administration des SI sous Oracle 61

Vous aimerez peut-être aussi