Académique Documents
Professionnel Documents
Culture Documents
D52770
Edition 1.0
Janvier 2008
D49996FR10
®
SQL (I)
Auteur
Avertissement
Puja Singh
Cette documentation contient des informations qui sont la propriété d'Oracle Corporation
Révisions et et sont protégées par les lois relatives aux droits d'auteur et à la propriété intellectuelle.
contributions techniques Vous ne pouvez copier et imprimer ce document qu'à des fins d'utilisation personnelle
lors de la participation à une formation dispensée par Oracle. Le document ne peut être
Claire Bennett modifié ou altéré en aucune manière. A l'exception des cas où l'utilisation faite du
document s'inscrit dans le respect des lois relatives aux droits d'auteur, vous ne pouvez
Tom Best pas utiliser, partager, télécharger, copier, imprimer, afficher, exécuter, reproduire, publier,
Purjanti Chang breveter, diffuser, transmettre ou distribuer ce document, en partie ou en totalité, sans
Ken Cooper l'autorisation expresse d'Oracle.
László Czinkóczki
Les informations fournies dans ce document sont susceptibles de modification sans
Burt Demchick préavis. Par ailleurs, Oracle Corporation ne garantit pas qu'elles soient exemptes
Mark Fleming d'erreurs et vous invite, le cas échéant, à lui en faire part par écrit à l'adresse suivante :
Gerlinde Frenzen Oracle University, 500 Oracle Parkway, Redwood Shores, California 94065 USA.
Nancy Greenberg
Restrictions applicables au gouvernement américain :
Chaitanya Koratamaddi Restricted Rights Notice
Wendy Lo
Rédacteurs
Amitha Narayan
Vijayalakshmi Narasimhan
Editeur
Sujatha Nagendra
Table des matières
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Préface
I Introduction
Objectifs du cours I-2
Contenu du chapitre I-3
Objectifs du cours I-4
Contenu du cours I-5
Annexes du cours I-7
iii
Exécuter des fichiers script I-47
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
iv
2 Restreindre et trier les données
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Objectifs 2-2
Contenu du chapitre 2-3
Limiter les lignes par sélection 2-4
Limiter les lignes sélectionnées 2-5
Utiliser la clause WHERE 2-6
Chaînes de caractères et dates 2-7
Opérateurs de comparaison 2-8
Utiliser des opérateurs de comparaison 2-9
Indication d'une plage à l'aide de l'opérateur BETWEEN 2-10
Condition d'appartenance à l'aide de l'opérateur IN 2-11
Correspondance avec un modèle à l'aide de l'opérateur LIKE 2-12
Combiner des caractères génériques 2-13
Utiliser les conditions NULL 2-14
v
Fonctions de conversion de casse 3-11
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
vi
Utiliser la fonction COALESCE 4-32
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
5 Créer un état avec des données agrégées à l'aide des fonctions de groupe
Objectifs 5-2
Contenu du chapitre 5-3
Fonctions de groupe : Présentation 5-4
vii
Qualifier les noms de colonne ambigus 6-7
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
viii
Exécuter des sous-interrogations monolignes 7-11
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
ix
9 Manipuler des données
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Objectifs 9-2
Contenu du chapitre 9-3
Langage de manipulation de données 9-4
Ajouter une nouvelle ligne à une table 9-5
Syntaxe de l'instruction INSERT 9-6
Insérer de nouvelles lignes 9-7
Insérer des lignes comprenant des valeurs NULL 9-8
Insérer des valeurs spéciales 9-9
Insérer des valeurs de date et d'heure spécifiques 9-10
Créer un script 9-11
Copier des lignes depuis une autre table 9-12
Contenu du chapitre 9-13
Modifier des données dans une table 9-14
x
Synthèse 9-46
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
xi
Avantages des vues 11 -6
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
xii
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Préface
Avant de commencer
Avant de commencer ce cours, vous devez savoir utiliser une interface graphique. Le prérequis
pour ce cours est de maîtriser les techniques et les concepts de traitement des données.
Organisation du cours
OracleAS 11g : Les fondamentaux du langage SQL (I) est un cours en salle comprenant un exposé
théorique et des exercices pratiques. Les démonstrations en ligne et les sessions d'exercices
permettent de renforcer les concepts et les techniques présentés.
Préface - 3
Documentation
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Documentation Oracle
Titre Référence
Oracle® Database Reference 11g Release 1 (11.1) B28320-01
Oracle® Database SQL Language Reference 11g B28286-01
Release 1 (11.1)
Oracle® Database Concepts 11g Release 1 (11.1) B28318-01
Oracle® Database SQL Developer User's Guide E10406-01
Release 1.2
Autre documentation
• System release bulletins (Bulletins techniques)
Préface - 4
Conventions typographiques
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Les deux listes suivantes de conventions typographiques sont utilisées pour du texte ou du code.
Conventions typographiques concernant le texte
Convention Elément Exemple
Majuscules Commandes, Utilisez la commande SELECT pour
fonctions, visualiser les informations stockées dans la
noms de colonne, colonne LAST_NAME de la table
noms de table, EMPLOYEES.
objets PL/SQL,
schémas
Minuscules, Noms de fichier, où : rôle correspond au nom du en
italiques Variables rôle à définir.
noms d'utilisateur,
Préface - 5
Conventions typographiques (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
SELECT last_name
FROM employees;
Gras Texte devant être CREATE USER scott
saisi par un IDENTIFIED BY tiger;
utilisateur
Préface - 6
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Objectifs
Dans ce chapitre, vous allez apprendre à utiliser les instructions LMD (Langage de
manipulation de données) pour insérer des lignes dans une table, et mettre à jour ou
supprimer des lignes existantes dans une table. Vous allez également apprendre à contrôler
les transactions avec les instructions COMMIT, SAVEPOINT et ROLLBACK.
Nouvelle
DEPARTMENTS ligne
Créer un script
Vous pouvez enregistrer des commandes comprenant des variables de substitution dans un
fichier, puis exécuter ce fichier. L'exemple de la diapositive ci-dessus enregistre des
informations concernant un département dans la table DEPARTMENTS.
Lorsque vous exécutez le fichier script, vous êtes invité à saisir une valeur pour chacune
des variables avec esperluette (&) d'interprétation. Après avoir saisi la valeur appropriée,
cliquez sur le bouton OK. Les valeurs que vous indiquez sont utilisées dans l'instruction.
Vous pouvez ainsi exécuter indéfiniment le même fichier script, en fournissant un jeu de
valeurs différent à chaque fois.
EMPLOYEES
UPDATE employees
SET department_id = 50
WHERE employee_id = 113;
…
Par exemple, un employé qui occupait le poste SA_REP occupe désormais le poste
IT_PROG. Son JOB_ID doit donc être mis à jour et la valeur NULL doit être attribuée au
champ de commission.
UPDATE employees
SET job_id = 'IT_PROG', commission_pct = NULL
WHERE employee_id = 114;
Remarque : La table COPY_EMP contient les mêmes données que la table EMPLOYEES.
une sous-interrogation
Mettez à jour le poste et le salaire de l'employé 113 de sorte
qu'ils correspondent à ceux de l'employé 205.
UPDATE employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 113;
DEPARTMENTS
Toutefois, si vous omettez la clause WHERE, toutes les lignes de la table sont supprimées.
Le deuxième exemple de la diapositive supprime toutes les lignes de la table COPY_EMP
car aucune clause WHERE n'a été indiquée.
Exemple :
Supprimez les lignes identifiées dans la clause WHERE.
DELETE FROM employees WHERE employee_id = 114;
• Exemple :
Instruction TRUNCATE
La méthode la plus efficace pour vider une table consiste à utiliser l'instruction
TRUNCATE.
Vous pouvez recourir à cette instruction pour supprimer rapidement toutes les lignes d'une
table ou d'un cluster. Il est plus rapide de supprimer des lignes avec l'instruction
TRUNCATE qu'avec l'instruction DELETE pour les raisons suivantes :
• TRUNCATE est une instruction LDD (langage de définition de données) qui ne génère
aucune donnée d'annulation (rollback). Les données d'annulation seront traitées
ultérieurement dans ce chapitre.
• Le fait de vider une table n'active pas les déclencheurs (triggers) de suppression de la
table.
Si la table est le parent d'une contrainte d'intégrité référentielle, vous ne pouvez pas la
vider. Vous devez désactiver la contrainte avant d'exécuter l'instruction TRUNCATE. La
désactivation des contraintes sera traitée dans un autre chapitre.
des transactions
Temps COMMIT
Transaction
DELETE
SAVEPOINT A
INSERT
SAVEPOINT B
INSERT
ROLLBACK ROLLBACK ROLLBACK
to SAVEPOINT B to SAVEPOINT A
INSERT...
ROLLBACK TO update_done;
COMMIT ou ROLLBACK
• L'état antérieur des données peut être récupéré.
• L'utilisateur actuel peut visualiser les résultats des
opérations LMD à l'aide de l'instruction SELECT.
• Les autres utilisateurs ne peuvent pas afficher les résultats
des instructions LMD exécutées par l'utilisateur actuel.
• Les lignes affectées sont verrouillées. Les autres utilisateurs
ne peuvent donc pas modifier les données de ces lignes.
de l'instruction COMMIT
• Les modifications apportées aux données sont enregistrées
dans la base.
• L'état antérieur des données est écrasé.
• Tous les utilisateurs peuvent visualiser les résultats.
• Les verrous externes des lignes affectées sont libérés.
Ces lignes peuvent alors être manipulées par les autres
utilisateurs.
• Tous les savepoints sont effacés.
UPDATE employees
SET department_id = 80
WHERE employee_id = 206;
COMMIT;
de l'instruction ROLLBACK
Annulez toutes les modifications en attente à l'aide de
l'instruction ROLLBACK :
• Les modifications apportées aux données sont annulées.
• L'état antérieur des données est restauré.
• Les verrous externes des lignes affectées sont libérés.
ROLLBACK : Exemple
ROLLBACK;
Rollback complete.
COMMIT;
Commit complete.
Cohérence en lecture
Les utilisateurs accèdent à la base de données de deux façons :
• Via des opérations de lecture (instruction SELECT).
• Via des opérations d'écriture (instructions INSERT, UPDATE, DELETE).
La cohérence en lecture est nécessaire pour garantir les points suivants :
• Les utilisateurs qui lisent et écrivent des données dans la base disposent d'une vue
cohérente des données.
• Les utilisateurs qui lisent des données dans la base ne voient pas les données qui sont
en cours de modification.
• Les modifications apportées à la base de données le sont de façon cohérente.
• Les modifications apportées par un utilisateur qui écrit n'entrent pas en conflit avec les
modifications apportées par un autre utilisateur et n'entraînent pas de perturbation.
L'objectif de la cohérence en lecture est de garantir que chaque utilisateur voie les données
telles qu'elles étaient lors de la dernière validation (commit), avant qu'une opération LMD
soit lancée.
Remarque : Le même utilisateur peut ouvrir différentes sessions. Chaque session préserve
la cohérence en lecture comme décrit ci-dessus, même s'il s'agit à chaque fois du même
utilisateur.
Utilisateur A
Segments
d'annulation
Données
modifiées
Synthèse
Ce chapitre vous a permis d'apprendre à manipuler les données d'une base Oracle à l'aide
des instructions INSERT, UPDATE, DELETE et TRUNCATE, et à contrôler les
modifications de données à l'aide des instructions COMMIT, SAVEPOINT et ROLLBACK. Il
vous a également appris à utiliser la clause FOR UPDATE de l'instruction SELECT pour
verrouiller des lignes afin de les réserver à votre usage exclusif.
Rappelez-vous que le serveur Oracle garantit à tout moment une vue cohérente des
données.
Présentation de l'exercice 9
Dans cet exercice, vous allez ajouter des lignes à la table MY_EMPLOYEE, mettre à jour et
supprimer des données dans cette même table, et contrôler vos transactions. Pour
commencer, vous allez exécuter un script permettant de créer la table MY_EMPLOYEE.
Exercice 9
Le département des ressources humaines a besoin d'instructions SQL permettant d'insérer,
de mettre à jour et de supprimer des données relatives aux employés. Vous allez tester ces
instructions sur la table MY_EMPLOYEE avant de les livrer.
Remarque : Pour exécuter une interrogation comprenant des instructions LMD, utilisez
l'icône Run Script (ou appuyez sur [F5]). Vous pouvez ainsi voir les messages renvoyés
dans l'onglet Script Output. Pour les interrogations SELECT, continuez à utiliser l'icône
Execute Statement ou à appuyer sur [F9] pour obtenir le résultat mis en forme dans l'onglet
Results.
Insérez des données dans la table MY_EMPLOYEE.
1. Exécutez l'instruction du script lab_09_01.sql pour générer la table
MY_EMPLOYEE utilisée dans cet exercice.
2. Affichez la structure de cette table afin d'identifier les noms de colonne.
Exercice 9 (suite)
5. Vérifiez les ajouts effectués dans la table.
Exercice 9 (suite)
15. Validez (commit) toutes les modifications en attente.
Contrôlez les transactions de données appliquées à la table MY_EMPLOYEE.
16. Insérez dans la table la dernière ligne du tableau de données fourni à l'étape 3, à l'aide
des instructions du script créé à l'étape 6. Exécutez ces instructions.
17. Vérifiez les ajouts effectués dans la table.
24. Modifiez le script lab_09_06.sql de sorte que la valeur USERID soit générée
automatiquement par concaténation de la première lettre du prénom et des sept
premiers caractères du nom. La valeur USERID doit être générée en minuscules. Ainsi,
le script n'invitera pas à saisir cette valeur. Enregistrez le script sous le nom
lab_09_24.sql.
25. Exécutez le script lab_09_24.sql afin d'insérer l'enregistrement suivant :
26. Vérifiez que la nouvelle ligne a été ajoutée avec le USERID correct.
Objectifs
Ce chapitre présente les instructions LDD (langage de définition de données). Il explique
comment créer, modifier et supprimer des tables simples. Il décrit les types de données
disponibles dans le langage LDD, ainsi que le concept de schéma. Il traite de l'utilisation
des contraintes. Enfin, il explique les messages d'exception générés suite à la violation de
contraintes pendant des opérations LMD.
Objet Description
Table Unité élémentaire de stockage, constituée de lignes
Vue Représente de façon logique des sous-ensembles
de données issus d'une ou de plusieurs tables
Séquence Génère des valeurs numériques
Index Améliore les performances de certaines interrogations
Règles d'appellation
Vous devez nommer les colonnes et les tables en respectant les règles standard
d'appellation des objets de base de données Oracle :
• Les noms de table et de colonne doivent commencer par une lettre et comporter entre
1 et 30 caractères.
• Ils admettent uniquement 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 identiques au nom d'un autre objet appartenant au même
utilisateur du serveur Oracle.
• Les noms ne doivent pas être des mots réservés au serveur Oracle.
- Vous pouvez indiquer le nom d'un objet entre guillemets, auquel cas vous devez
utiliser les guillemets chaque fois que vous faites référence à cet objet. Les
identificateurs entre guillemets peuvent être des mots réservés, mais cela n'est pas
recommandé.
Règles d'appellation
Attribuez des noms descriptifs aux tables et aux autres objets de base de données.
Remarque : Pour les noms standard, il n'y a pas de distinction entre majuscules et
minuscules. Par exemple, EMPLOYEES est traité comme eMPloyees ou eMpLOYEES.
En revanche, la distinction est effectuée pour les identificateurs entre guillemets.
Pour plus d'informations, reportez-vous à la section Schema Object Names and Qualifiers
du manuel Oracle Database SQL Language Reference 11g, Release 1 (11.1).
• Vous indiquez :
– le nom de la table
– le nom, le type de données et la taille des colonnes
Option DEFAULT
Lorsque vous définissez une table, vous pouvez indiquer qu'une colonne doit se voir
attribuer une valeur par défaut, à l'aide de l'option DEFAULT. Cette option empêche
l'introduction de valeurs NULL dans la colonne lors de l'insertion de lignes qui ne
contiennent pas de valeur pour la colonne. La valeur par défaut peut être un littéral, une
expression ou une fonction SQL (par exemple SYSDATE ou USER), mais il ne peut pas
s'agir du nom d'une autre colonne ou d'une pseudo-colonne (par exemple NEXTVAL ou
CURRVAL). L'expression par défaut doit présenter le même type de données que la
colonne.
Considérons les exemples suivants :
INSERT INTO hire_dates values(45, NULL);
L'instruction ci-dessus insérera la valeur NULL à la place de la valeur par défaut.
• Créez la table :
CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
create_date DATE DEFAULT SYSDATE);
Types de données
Lorsque vous identifiez une colonne pour une table, vous devez lui attribuer un type de
données. Vous avez le choix entre les types suivants :
Contraintes
Le serveur Oracle utilise des contraintes pour empêcher la saisie de données non valides
dans les tables.
Vous pouvez y recourir pour effectuer les opérations suivantes :
• Appliquer les règles concernant les données d'une table chaque fois qu'une ligne est
insérée, mise à jour ou supprimée dans cette table. Pour que l'opération réussisse, la
contrainte doit être satisfaite.
• Empêcher la suppression d'une table dotée de dépendances.
• Fournir des règles aux outils Oracle tels qu'Oracle Developer.
Contraintes d'intégrité des données
C ontrainte D escription
NOT NULL Indique que la colonne ne peut pas contenir de valeurs N U LL.
• Syntaxe :
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
Contrainte UNIQUE
EMPLOYEES
…
INSERT INTO
Contrainte UNIQUE
Une contrainte d'intégrité de clé UNIQUE impose l'unicité de chaque valeur d'une colonne
ou d'un ensemble de colonnes (colonnes de clé). Cela veut dire qu'il ne peut pas exister de
valeurs en double pour ces colonnes dans deux lignes de la table. La colonne figurant dans
la définition de la contrainte de clé UNIQUE est appelée clé unique. Si la contrainte
UNIQUE comprend plusieurs colonnes, ce groupe de colonnes est appelé clé unique
composée.
Les contraintes UNIQUE permettent la saisie de valeurs NULL, sauf si vous définissez
également des contraintes NOT NULL pour les mêmes colonnes. En fait, les lignes peuvent
inclure des valeurs NULL pour les colonnes sans contrainte NOT NULL, car les valeurs
NULL ne sont pas considérées comme égales à quelque chose. La présence d'une valeur
NULL dans une colonne (ou dans toutes les colonnes d'une clé UNIQUE composée)
n'enfreint pas une contrainte UNIQUE.
Remarque : En raison du mécanisme de recherche des contraintes UNIQUE portant sur
plusieurs colonnes, vous ne pouvez pas avoir de valeurs identiques dans les colonnes non
NULL d'une contrainte de clé UNIQUE composée partiellement NULL.
Non autorisé
Non autorisé
(50 existe déjà)
DEPARTMENTS
PRIMARY
KEY
…
EMPLOYEES
FOREIGN
KEY
Contrainte CHECK
La contrainte CHECK définit une condition à laquelle chaque ligne doit satisfaire.
Cette condition peut utiliser les mêmes structures que les conditions d'une interrogation,
avec les exceptions suivantes :
• Références aux pseudo-colonnes CURRVAL, NEXTVAL, LEVEL et ROWNUM.
• Appels de fonctions SYSDATE, UID, USER et USERENV.
• Interrogations faisant référence à d'autres valeurs dans d'autres lignes.
Une colonne peut comporter plusieurs contraintes CHECK dans sa définition. Il est possible
de définir un nombre illimité de contraintes CHECK sur une colonne.
Les contraintes CHECK peuvent être définies au niveau colonne ou au niveau table.
CREATE TABLE employees
(...
salary NUMBER(8,2) CONSTRAINT emp_salary_min
CHECK (salary > 0),
...
UPDATE employees
SET department_id = 55
WHERE department_id = 110;
Violation de contraintes
Lorsque des contraintes appliquées à des colonnes sont enfreintes, une erreur est renvoyée.
C'est le cas, par exemple, si vous tentez de mettre à jour un enregistrement dont la valeur
est liée à une contrainte d'intégrité.
Dans l'exemple de la diapositive ci-dessus, le département 55 n'existe pas dans la table
parent DEPARTMENTS. L'erreur de violation ORA-02291 "parent key not found" est
générée.
Vous ne pouvez pas supprimer une ligne qui contient une clé
primaire utilisée comme clé étrangère dans une autre table.
Synthèse
Ce chapitre vous a permis de découvrir les instructions suivantes :
CREATE TABLE
• Elle permet de créer une table et de lui associer des contraintes.
• Vous pouvez créer une table à partir d'une autre table à l'aide d'une sous-interrogation.
DROP TABLE
• Elle permet de supprimer les lignes et la structure d'une table.
• Une fois exécutée, elle ne peut plus être annulée.
Présentation de l'exercice 10
Dans cet exercice, vous allez créer de nouvelles tables à l'aide de l'instruction CREATE
TABLE. Vous allez ensuite vérifier leur ajout à la base de données. Vous allez également
apprendre à attribuer le statut READ ONLY à une table, puis à lui attribuer de nouveau le
statut READ/WRITE.
Remarque : Pour exécuter dans SQL Developer une interrogation comprenant des
instructions LDD ou LMD, cliquez sur l'icône Run Script (ou appuyez sur [F5]). Vous
pouvez ainsi voir les messages renvoyés dans l'onglet Script Output. Pour les interrogations
SELECT, continuez à utiliser l'icône Execute Statement ou à appuyer sur [F9] pour obtenir
le résultat mis en forme dans l'onglet Results.
Exercice 10
1. Créez la table DEPT conformément aux indications du tableau ci-après. Enregistrez
l'instruction dans un script nommé lab_10_01.sql, puis exécutez ce script pour
créer la table. Vérifiez que la table a bien été créée.
Nom de la colonne ID NAME
Type de clé Clé primaire
NULL/Unique
Table de clé étrangère
Colonne de clé étrangère
Type de données NUMBER VARCHAR2
Longueur 7 25
Exercice 10 (suite)
4. Créez la table EMPLOYEES2 en utilisant la structure de la table EMPLOYEES.
Incluez uniquement les colonnes EMPLOYEE_ID, FIRST_NAME, LAST_NAME,
SALARY et DEPARTMENT_ID. Intitulez les colonnes de la nouvelle table
respectivement ID, FIRST_NAME, LAST_NAME, SALARY et DEPT_ID.
5. Placez la table EMPLOYEES2 en mode lecture seule.
6. Essayez d'insérer la ligne suivante dans la table EMPLOYEES2 :
ID FIRST_NAME LAST_NAME SALARY DEPT_ID
34 Grant Marcie 5678 10
Objectifs
Ce chapitre traite des vues, des séquences, des synonymes et des index. Il décrit les
principes de base de la création et de l'utilisation des vues, des séquences et des index.
Objet Description
Table EMPLOYEES
Vue : Présentation
Vous pouvez afficher des sous-ensembles ou des combinaisons logiques de données en
créant des vues des tables. Une vue est une table logique basée sur une table ou sur une
autre vue. Elle ne contient aucune donnée propre, mais s'apparente à une fenêtre par
l'intermédiaire de laquelle les données des tables peuvent être consultées ou modifiées. Les
tables sur lesquelles une vue est basée sont appelées tables de base. Une vue est stockée en
tant qu'instruction SELECT dans le dictionnaire de données.
Simplifier les
Limiter l'accès interrogations
aux données complexes
Règles
• La sous-interrogation qui définit une vue peut contenir une syntaxe SELECT
complexe, incluant des jointures, des groupes et des sous-interrogations.
• Si vous ne précisez pas de nom de contrainte pour une vue créée avec l'option WITH
CHECK OPTION, le système attribue à la contrainte un nom par défaut de la forme
SYS_Cn.
• Vous pouvez utiliser l'option OR REPLACE pour changer la définition d'une vue. Cela
vous évite de supprimer la vue, de la recréer, puis d'accorder à nouveau les privilèges
objet.
SELECT *
FROM salvu50;
Remarque : Aucune ligne n'est mise à jour car, si l'ID de département en cours était
remplacé par l'ID 10, la vue n'afficherait plus les employés concernés. Par conséquent, avec
la clause WITH CHECK OPTION, la vue ne peut afficher que les employés du
département 20 et l'ID de département de ces employés ne peut pas être modifié par
l'intermédiaire de la vue.
Objet Description
Séquences
Une séquence est un objet de base de données qui crée des valeurs entières. Vous pouvez
créer des séquences, puis les utiliser pour générer des numéros.
Une séquence :
• peut automatiquement générer des numéros uniques
• est un objet partageable
• peut être utilisée pour créer une valeur de clé primaire
• remplace du code applicatif
• permet un accès plus rapide à ses valeurs lorsqu'elle
est mise en mémoire cache
1 3 5 7 9
Séquences (suite)
Une séquence est un objet de base de données créé par un utilisateur, qui peut être partagé
par plusieurs utilisateurs pour générer des nombres entiers.
Vous pouvez définir une séquence pour générer des valeurs uniques, ou pour recycler des
numéros afin de les réutiliser.
Les séquences sont généralement utilisées pour générer des valeurs de clé primaire,
lesquelles doivent être uniques pour chaque ligne. Une séquence est générée et incrémentée
(ou décrémentée) par un sous-programme Oracle interne. Cet objet permet de gagner du
temps, en réduisant la quantité de code applicatif nécessaire à l'écriture d'un sous-
programme de génération de séquence.
Les numéros de séquence sont stockés et générés indépendamment des tables. Ainsi, la
même séquence peut être utilisée pour plusieurs tables.
A présent, supposons que vous souhaitiez embaucher des employés pour le nouveau
département. L'instruction INSERT à exécuter pour les nouveaux employés peut inclure le
code suivant :
INSERT INTO employees (employee_id, department_id, ...)
VALUES (employees_seq.NEXTVAL, dept_deptid_seq .CURRVAL, ...);
Remarque : Dans l'exemple précédent, il est supposé qu'une séquence nommée
EMPLOYEES_SEQ a été créée pour générer de nouveaux numéros d'employé.
d'une séquence
• La mise en mémoire cache des valeurs d'une séquence
permet un accès plus rapide à ces valeurs.
• La présence de trous dans une séquence peut être due à :
– une annulation
– une défaillance du système
– l'utilisation de cette séquence dans une autre table
Objet Description
Index
Les index sont des objets de base de données que vous pouvez créer pour améliorer les
performances de certaines interrogations. Des index peuvent aussi être créés
automatiquement par le serveur lorsque vous créez une contrainte PRIMARY KEY ou
UNIQUE.
Un index :
• est un objet de schéma
• peut être utilisé par le serveur Oracle pour accélérer
l'extraction de lignes à l'aide d'un pointeur
• permet de réduire les E/S disque en fournissant
une méthode d'accès permettant de localiser rapidement
les données
• est indépendant de la table qu'il indexe
Index (suite)
Dans le serveur Oracle, un index est un objet de schéma permettant d'accélérer l'extraction
de lignes à l'aide d'un pointeur. Les index peuvent être créés de manière explicite ou
automatique. Si la colonne ne comporte pas d'index, un balayage complet de table (full
table scan) est effectué.
Un index permet un accès direct et rapide aux lignes d'une table. Il réduit les entrées-sorties
(E/S) disque grâce à un chemin indexé permettant de localiser rapidement les données. Un
index est utilisé et géré automatiquement par le serveur Oracle. Une fois l'index créé,
aucune activité directe n'est requise de la part de l'utilisateur.
Les index sont logiquement et physiquement indépendants de la table qu'ils indexent. Cela
signifie qu'ils peuvent être créés ou supprimés à tout moment, sans aucune incidence sur les
tables de base ou sur les autres index.
Remarque : Lorsque vous supprimez une table, les index correspondants sont également
supprimés.
Pour plus d'informations, reportez-vous à la section "Schema Objects: Indexes" du manuel
Oracle Database Concepts 11g, Release 1 (11.1).
Créer un index
Créez un index sur une ou plusieurs colonnes à l'aide de l'instruction CREATE INDEX.
Dans la syntaxe :
• index Est le nom de l'index.
• table Est le nom de la table.
• column Est le nom de la colonne à indexer dans la table.
Précisez UNIQUE pour indiquer que la valeur de la colonne (ou des colonnes) sur laquelle
est basé l'index doit être unique. Précisez BITMAP pour indiquer qu'il faut créer un index
avec un bitmap pour chaque clé distincte au lieu d'indexer chaque ligne séparément. Les
index bitmap stockent en tant que bitmap les rowid associés à une valeur de clé.
Pour plus d'informations, reportez-vous à la section "CREATE INDEX" du manuel Oracle
Database SQL Language Reference 11g, Release 1 (11.1).
Supprimer un index
Vous ne pouvez pas modifier un index directement. Vous devez le supprimer, puis le
recréer.
Pour supprimer la définition d'un index dans le dictionnaire de données, exécutez
l'instruction DROP INDEX. Pour supprimer un index, vous devez en être le propriétaire ou
disposer du privilège DROP ANY INDEX.
Dans la syntaxe, index correspond au nom de l'index.
Remarque : Si vous supprimez une table, les index et les contraintes sont
automatiquement supprimés, mais les vues et les séquences sont conservées.
Objet Description
Synonymes
Les synonymes sont des objets de base de données qui permettent d'appeler une table par
un autre nom. Vous pouvez les utiliser pour définir les noms de votre choix.
• Supprimez un synonyme :
DROP SYNONYM d_sum;
Supprimer un synonyme
Pour supprimer un synonyme, utilisez l'instruction DROP SYNONYM. Seul l'administrateur
de la base de données peut supprimer un synonyme public.
DROP PUBLIC SYNONYM dept;
Pour plus d'informations, reportez-vous à la section "DROP SYNONYM" du manuel Oracle
Database SQL Language Reference 11g, Release 1 (11.1).
Synthèse
Ce chapitre vous a présenté les vues, les séquences, les index et les synonymes.
Exercice 11
Première partie
1. Le département des ressources humaines souhaite masquer certaines des données de
la table EMPLOYEES. Il souhaite obtenir une vue nommée EMPLOYEES_VU,
comprenant les ID et les noms d'employé ainsi que les ID de département de la table
EMPLOYEES. L'en-tête EMPLOYEE doit être attribué à la colonne contenant les noms
d'employé.
2. Vérifiez que la vue fonctionne. Affichez le contenu de la vue EMPLOYEES_VU.
Exercice 11 (suite)
4. Le département 50 a besoin d'accéder aux données concernant ses employés. Créez une
vue nommée DEPT50 contenant l'ID d'employé, le nom et l'ID de département de tous
les employés du département 50. Vous devez intituler les colonnes de la vue EMPNO,
EMPLOYEE et DEPTNO. Pour des raisons de sécurité, n'autorisez pas le transfert d'un
employé vers un autre département par l'intermédiaire de la vue.
5. Affichez la structure et le contenu de la vue DEPT50.
Exercice 11 (suite)
Deuxième partie
7. Vous avez besoin d'une séquence pouvant être utilisée avec la colonne PRIMARY KEY de la
table DEPT. La séquence doit commencer à 200 et présenter une valeur maximum de 1 000.
La séquence doit croître par incréments de 10. Nommez-la DEPT_ID_SEQ.
8. Pour tester la séquence, écrivez un script permettant d'insérer deux lignes dans la table DEPT.
Nommez le script lab_11_08.sql. Veillez à utiliser la séquence que vous avez créée pour
la colonne ID. Ajoutez deux départements : Education et Administration. Vérifiez vos ajouts.
Exécutez les commandes enregistrées dans le script.
9. Créez un index non unique sur la colonne NAME de la table DEPT.
10. Créez un synonyme pour la table EMPLOYEES. Nommez-le EMP.
____________________
____________________
Solutions des exercices
A
Remarque : Lorsque vous lancez SQL Developer pour la première fois, vous devez
D:\app\Administrator\product\11.1.0\client_1\jdevstudio\jdk\bin
3. Pour créer une connexion de base de données, cliquez avec le bouton droit de la souris sur
Connections dans le navigateur de connexions (Connections Navigator). Dans le menu,
sélectionnez New Connection. La boîte de dialogue New/Select Database Connection
apparaît.
c. Password : oraxx
d. Hostname : Entrez le nom d'hôte de l'ordinateur sur lequel est exécuté votre serveur de
base de données.
e. Port : 1521
f. SID : ORCL
7. Dans le navigateur de connexions, visualisez les objets à votre disposition sous le noeud
Tables. Vérifiez que les tables suivantes sont présentes :
COUNTRIES
LOCATIONS
REGIONS
10. Ouvrez une nouvelle feuille de calcul SQL Worksheet. Examinez les icônes de raccourci
disponibles pour cette feuille de calcul.
1. Pour ouvrir une nouvelle feuille de calcul, sélectionnez SQL Worksheet dans le
menu Tools.
2. Vous pouvez aussi cliquer avec le bouton droit de la souris sur myconnection
et sélectionner Open SQL Worksheet.
3. Affichez les icônes de raccourci dans la feuille SQL Worksheet. Recherchez plus
précisément les icônes Execute Statement et Run Script.
SELECT
Première partie
Testez vos connaissances :
Vrai/Faux
Deuxième partie
Entrez vos instructions SQL dans une feuille de calcul SQL Worksheet. Pour
enregistrer un script dans SQL Developer, sélectionnez Save As dans le menu File,
ou cliquez avec le bouton droit de la souris dans la feuille de calcul et sélectionnez
Save file pour enregistrer votre instruction SQL sous la forme d'un script nommé
lab_<lessonno>_<stepno>.sql. Pour modifier un script existant,
sélectionnez File > Open pour l'ouvrir, modifiez-le, puis enregistrez-le sous un autre
nom à l'aide de l'option Save As.
Pour exécuter l'interrogation, cliquez sur l'icône Execute Statement (ou appuyez
sur [F9]) dans la feuille de calcul SQL Worksheet. Pour les instructions LMD et LDD,
cliquez sur l'icône Run Script (ou appuyez sur [F5]).
Après avoir exécuté un script enregistré, vous ne pouvez pas lancer l'interrogation
suivante dans la même feuille de calcul. Ouvrez une nouvelle feuille.
Oracle Database 11g : Les fondamentaux du langage SQL (I) A - 5
Solutions de l'exercice 1 : Extraire des données à l'aide de l'instruction SQL
SELECT (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Vous avez été embauché en tant que programmeur SQL par la société Acme Corporation.
Votre première tâche consiste à créer des états à partir des données des tables du département
des ressources humaines.
7. Le département des ressources humaines a besoin d'une interrogation affichant tous les ID
de poste uniques de la table EMPLOYEES.
SELECT DISTINCT job_id
FROM employees;
Troisième partie
8. Le département des ressources humaines souhaite des en-têtes de colonne plus descriptifs
pour son état sur les employés. Copiez l'instruction enregistrée dans lab_01_05.sql
dans une nouvelle feuille de calcul SQL Worksheet. Nommez les en-têtes de colonne
respectivement Emp #, Employee, Job et Hire Date. Exécutez à nouveau votre
interrogation.
SELECT employee_id "Emp #", last_name "Employee",
job_id "Job", hire_date "Hire Date"
FROM employees;
9. Le département des ressources humaines a demandé un état listant tous les employés avec
Pour mettre en pratique vos connaissances de façon plus approfondie, effectuez l'exercice
suivant :
10. Pour vous familiariser avec le contenu de la table EMPLOYEES, créez une interrogation
affichant toutes les données de cette table. Séparez les colonnes de résultat par une
virgule. Intitulez la colonne THE_OUTPUT.
SELECT employee_id || ',' || first_name || ',' || last_name
|| ',' || email || ',' || phone_number || ','|| job_id
|| ',' || manager_id || ',' || hire_date || ','
|| salary || ',' || commission_pct || ',' || department_id
THE_OUTPUT
FROM employees;
Le département des ressources humaines a besoin de votre aide pour créer des interrogations.
1. Pour des raisons budgétaires, ce département a besoin d'un état affichant le nom et le
salaire des employés qui gagnent plus de 12 000 $. Enregistrez votre instruction SQL
dans le fichier lab_02_01.sql. Exécutez votre interrogation.
SELECT last_name, salary
FROM employees
WHERE salary > 12000;
2. Ouvrez une nouvelle feuille de calcul SQL Worksheet. Créez un état affichant le nom et
le numéro de département correspondant à l'ID d'employé 176.
SELECT last_name, department_id
FROM employees
WHERE employee_id = 176;
4. Créez un état affichant le nom, l'ID de poste et la date d'embauche des employés nommés
Matos et Taylor. Triez les données par ordre croissant en fonction de la date d'embauche.
SELECT last_name, job_id, hire_date
FROM employees
WHERE last_name IN ('Matos', 'Taylor')
ORDER BY hire_date;
6. Modifiez le fichier lab_02_03.sql pour afficher le nom et le salaire des employés qui
gagnent entre 5 000 $ et 12 000 $, et travaillent dans le département 20 ou 50. Intitulez
respectivement les colonnes Employee et Monthly Salary. Enregistrez le fichier
lab_02_03.sql sous le nom lab_02_06.sql. Exécutez l'instruction figurant dans
lab_02_06.sql.
SELECT last_name "Employee", salary "Monthly Salary"
FROM employees
WHERE salary BETWEEN 5000 AND 12000
AND department_id IN (20, 50);
7. Le département des ressources humaines a besoin d'un état affichant le nom et la date
d'embauche de tous les employés embauchés en 1994.
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE '%94';
9. Créez un état affichant le nom, le salaire et la commission de tous les employés qui
perçoivent des commissions. Triez les données par ordre décroissant en fonction du
salaire et des commissions. Utilisez la position numérique de la colonne dans la clause
ORDER BY.
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY 2 DESC, 3 DESC;
10. Les membres du département des ressources humaines souhaitent davantage de souplesse
dans les interrogations que vous écrivez. Ils voudraient un état affichant le nom et le
salaire des employés qui gagnent plus qu'un montant saisi par l'utilisateur en réponse à
une invite. (Vous pouvez utiliser l'interrogation créée dans l'exercice 1 et la modifier.)
Enregistrez cette interrogation dans le fichier lab_02_10.sql.
a. Lorsque vous êtes invité à saisir une valeur, indiquez 12000. Cliquez sur OK.
SELECT last_name, salary
FROM employees
WHERE salary > &sal_amt;
11. Le département des ressources humaines souhaite exécuter des états sur la base d'un
manager. Créez une interrogation invitant l'utilisateur à indiquer un ID de manager, et
générant l'ID d'employé, le nom, le salaire et le département des employés de ce manager.
Le département des ressources humaines souhaite pouvoir trier l'état en fonction d'une
colonne sélectionnée. Vous pouvez tester les données avec les valeurs suivantes :
12. Affichez le nom de tous les employés dont le nom comprend la lettre "a" en troisième
position.
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';
13. Affichez le nom de tous les employés dont le nom comporte un "a" et un "e".
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%'
AND last_name LIKE '%e%';
Pour mettre en pratique vos connaissances de façon plus approfondie, effectuez les exercices
suivants :
14. Affichez le nom, le poste et le salaire de tous les employés dont le poste est vendeur ou
commis aux stocks, et dont le salaire n'est pas égal à 2 500 $, 3 500 $ ou 7 000 $.
SELECT last_name, job_id, salary
FROM employees
WHERE job_id IN ('SA_REP', 'ST_CLERK')
AND salary NOT IN (2500, 3500, 7000);
15. Modifiez lab_02_06.sql pour afficher le nom, le salaire et la commission de tous les
employés dont la commission est de 20 %. Enregistrez le fichier lab_02_06.sql sous
le nom lab_02_15.sql. Exécutez l'instruction figurant dans lab_02_15.sql.
SELECT last_name "Employee", salary "Monthly Salary",
commission_pct
FROM employees
WHERE commission_pct = .20;
Remarque : Si votre base de données est distante et située dans un autre fuseau horaire,
le résultat sera la date correspondant au système d'exploitation sur lequel réside la base de
données.
5. Ecrivez une interrogation permettant d'afficher le nom (la première lettre en majuscule et
toutes les autres lettres en minuscules) et la longueur du nom de tous les employés dont le
nom commence par les lettres "J", "A" ou "M". Attribuez à chaque colonne un libellé
approprié. Triez les résultats en fonction du nom des employés.
SELECT INITCAP(last_name) "Name",
LENGTH(last_name) "Length"
FROM employees
WHERE last_name LIKE 'J%'
OR last_name LIKE 'M%'
OR last_name LIKE 'A%'
ORDER BY last_name ;
Réécrivez l'interrogation de sorte que l'utilisateur soit invité à saisir la lettre par laquelle
le nom doit commencer. Par exemple, si l'utilisateur saisit H (en majuscule) à l'invite, le
résultat doit afficher tous les employés dont le nom commence par la lettre "H".
SELECT INITCAP(last_name) "Name",
LENGTH(last_name) "Length"
FROM employees
WHERE last_name LIKE '&start_letter%'
ORDER BY last_name;
Modifiez l'interrogation de sorte que la casse de la lettre saisie n'affecte pas le résultat. La
lettre saisie doit être convertie en majuscule avant traitement par l'interrogation SELECT.
7. Créez une interrogation permettant d'afficher le nom et le salaire de tous les employés.
Formatez le salaire de sorte qu'il contienne 15 caractères et soit complété à gauche par le
symbole $. Intitulez la colonne SALARY.
SELECT last_name,
LPAD(salary, 15, '$') SALARY
FROM employees;
8. Créez une interrogation permettant d'afficher les huit premiers caractères du nom des
employés, ainsi que le montant de leur salaire avec des astérisques. Chaque astérisque
représente un millier de dollars. Triez les données par salaire décroissant. Intitulez la
colonne EMPLOYEES_AND_THEIR_SALARIES.
SELECT rpad(last_name, 8)||' '||
rpad(' ', salary/1000+1, '*')
EMPLOYEES_AND_THEIR_SALARIES
FROM employees
ORDER BY salary DESC;
1. Créez un état qui produit les éléments suivants pour chaque employé :
<employee last name> earns <salary> monthly but wants <3
times salary.>. Intitulez la colonne Dream Salaries.
SELECT last_name || ' earns '
|| TO_CHAR(salary, 'fm$99,999.00')
|| ' monthly but wants '
|| TO_CHAR(salary * 3, 'fm$99,999.00')
|| '.' "Dream Salaries"
FROM employees;
5. A l'aide de la fonction DECODE, écrivez une interrogation qui affiche le niveau de tous les
employés sur la base de la valeur de la colonne JOB_ID, à l'aide des données suivantes :
Poste Niveau
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
Autre 0
SELECT job_id, decode (job_id,
3. La clause WHERE restreint les lignes avant inclusion dans un calcul de groupe.
Vrai/Faux
Le département des ressources humaines a besoin des états suivants :
4. Déterminez le salaire le plus élevé, le salaire le plus bas, le salaire cumulé et le salaire
moyen pour tous les employés. Intitulez respectivement les colonnes Maximum,
8. Trouvez la différence entre le salaire le plus élevé et le salaire le plus bas. Intitulez la
colonne DIFFERENCE.
SELECT MAX(salary) - MIN(salary) DIFFERENCE
FROM employees;
Pour mettre en pratique vos connaissances de façon plus approfondie, effectuez les exercices
suivants :
10. Créez une interrogation permettant d'afficher le nombre total d'employés et, pour ce total,
le nombre d'employés embauchés en 1995, 1996, 1997 et 1998. Créez les en-têtes de
colonne appropriés.
SELECT COUNT(*) total,
SUM(DECODE(TO_CHAR(hire_date, 'YYYY'),1995,1,0))"1995",
SUM(DECODE(TO_CHAR(hire_date, 'YYYY'),1996,1,0))"1996",
SUM(DECODE(TO_CHAR(hire_date, 'YYYY'),1997,1,0))"1997",
SUM(DECODE(TO_CHAR(hire_date, 'YYYY'),1998,1,0))"1998"
FROM employees;
11. Créez une interrogation de matrice permettant d'afficher le poste, le salaire correspondant
à ce poste sur la base du numéro de département et le salaire total correspondant à ce
poste, pour les départements 20, 50, 80 et 90, en intitulant chaque colonne de façon
appropriée.
SELECT job_id "Job",
SUM(DECODE(department_id , 20, salary)) "Dept 20",
SUM(DECODE(department_id , 50, salary)) "Dept 50",
SUM(DECODE(department_id , 80, salary)) "Dept 80",
SUM(DECODE(department_id , 90, salary)) "Dept 90",
SUM(salary) "Total"
FROM employees
GROUP BY job_id;
2. Le département des ressources humaines a besoin d'un état de tous les employés. Ecrivez
une interrogation permettant d'afficher le nom, ainsi que le numéro et le nom de
département pour tous les employés.
SELECT last_name, department_id, department_name
FROM employees
JOIN departments
3. Le département des ressources humaines a besoin d'un état des employés de Toronto.
Affichez le nom, le poste, ainsi que le numéro et le nom de département, pour tous les
employés qui travaillent à Toronto.
SELECT e.last_name, e.job_id, e.department_id, d.department_name
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
JOIN locations l
ON (d.location_id = l.location_id)
WHERE LOWER(l.city) = 'toronto';
4. Créez un état permettant d'afficher le nom et l'ID des employés, ainsi que le nom et l'ID
de leur manager. Intitulez respectivement les colonnes Employee, Emp#, Manager et
Mgr#. Enregistrez l'instruction SQL sous le nom lab_06_04.sql. Exécutez
l'interrogation.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w join employees m
ON (w.manager_id = m.employee_id);
5. Modifiez lab_06_04.sql pour afficher tous les employés, y compris 'employé King
qui n'a pas de manager. Triez les résultats sur la base du numéro d'employé. Enregistrez
l'instruction SQL dans le fichier lab_06_05.sql. Exécutez l'instruction figurant dans
lab_06_05.sql.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w
LEFT OUTER JOIN employees m
ON (w.manager_id = m.employee_id)
ORDER BY 2;
6. Créez pour le département des ressources humaines un état affichant le nom et l'ID de
département de tous les employés qui travaillent dans le même département qu'un
employé donné. Attribuez à chaque colonne un libellé approprié. Enregistrez le script
dans le fichier lab_06_06.sql. Exécutez l'interrogation.
SELECT e.department_id department, e.last_name employee,
c.last_name colleague
FROM employees e JOIN employees c
ON (e.department_id = c.department_id)
WHERE e.employee_id <> c.employee_id
ORDER BY e.department_id, e.last_name, c.last_name;
7. Le département des ressources humaines a besoin d'un état sur les niveaux de poste et les
salaires. Pour vous familiariser avec la table JOB_GRADES, affichez d'abord sa structure.
Pour mettre en pratique vos connaissances de façon plus approfondie, effectuez les exercices
suivants :
8. Le département des ressources humaines souhaite déterminer le nom de tous les employés
embauchés après Davies. Créez une interrogation permettant d'afficher le nom et la date
d'embauche de tous les employés embauchés après l'employé Davies.
SELECT e.last_name, e.hire_date
FROM employees e JOIN employees davies
ON (davies.last_name = 'Davies')
WHERE davies.hire_date < e.hire_date;
3. Ecrivez une interrogation qui affiche le numéro d'employé et le nom de tous les employés
qui travaillent dans un département comprenant un employé dont le nom contient la lettre
"u". Enregistrez l'instruction SQL sous le nom lab_07_03.sql. Exécutez votre
interrogation.
SELECT employee_id, last_name
FROM employees
WHERE department_id IN (SELECT department_id
FROM employees
WHERE last_name like '%u%');
4. Le département des ressources humaines a besoin d'un état qui affiche le nom, le numéro de
département et l'ID de poste de tous les employés dont l'ID de lieu de département est 1700.
SELECT last_name, department_id, job_id
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id = 1700);
5. Créez pour les ressources humaines un état affichant le nom et le salaire de tous les
employés dont le manager est King.
SELECT last_name, salary
FROM employees
WHERE manager_id = (SELECT employee_id
FROM employees
WHERE last_name = 'King');
6. Créez pour les ressources humaines un état affichant l'ID de département, le nom et l'ID
de poste de tous les employés du département Executive.
SELECT department_id, last_name, job_id
FROM employees
WHERE department_id IN (SELECT department_id
1. Le département des ressources humaines a besoin de la liste des ID des départements qui
ne contiennent pas l'ID de poste ST_CLERK. Utilisez les opérateurs ensemblistes pour
créer cet état.
SELECT department_id
FROM departments
MINUS
SELECT department_id
FROM employees
WHERE job_id = 'ST_CLERK';
2. Le département des ressources humaines a besoin de la liste des pays dans lesquels il
n'existe aucun département. Affichez l'ID et le nom des pays. Utilisez les opérateurs
ensemblistes pour créer cet état.
SELECT country_id,country_name
3. Produisez la liste des postes des départements 10, 50 et 20, dans cet ordre. Affichez l'ID
de poste et l'ID de département à l'aide des opérateurs ensemblistes.
SELECT distinct job_id, department_id
FROM employees
WHERE department_id = 10
UNION ALL
SELECT DISTINCT job_id, department_id
FROM employees
WHERE department_id = 50
UNION ALL
SELECT DISTINCT job_id, department_id
FROM employees
WHERE department_id = 20
4. Créez un état répertoriant l'ID d'employé et l'ID de poste des employés dont l'intitulé de
poste actuel est identique à l'intitulé de poste initial lors de leur embauche par l'entreprise.
(Ces employés ont changé de poste, puis sont revenus à leur poste d'origine.)
SELECT employee_id,job_id
FROM employees
INTERSECT
SELECT employee_id,job_id
FROM job_history;
5. Le département des ressources humaines a besoin d'un état avec les spécifications
suivantes :
• Nom et ID de département de tous les employés de la table EMPLOYEES, qu'ils
appartiennent ou non à un département
Remarque : Pour exécuter une interrogation comprenant des instructions LMD, utilisez
l'icône Run Script (ou appuyez sur [F5]). Vous pouvez ainsi voir les messages renvoyés dans
l'onglet Script Output. Pour les interrogations SELECT, continuez à utiliser l'icône Execute
Statement ou à appuyer sur [F9] pour obtenir le résultat mis en forme dans l'onglet Results.
a. Dans le menu File, sélectionnez Open. Dans la boîte de dialogue Open, accédez au
b. Une fois l'instruction ouverte dans une feuille SQL Worksheet, cliquez sur l'icône
Run Script pour exécuter le script. Vous obtenez le message Create Table
succeeeded dans l'onglet Script Output.
7. Insérez dans la table les deux lignes suivantes du tableau de données fourni à l'étape 3 en
exécutant l'instruction INSERT du script que vous avez créé.
INSERT INTO my_employee
VALUES (&p_id, '&p_last_name', '&p_first_name',
'&p_userid', &p_salary);
11. Remplacez par 1 000 $ le salaire de tous les employés qui ont un salaire inférieur à 900 $.
UPDATE my_employee
SET salary = 1000
WHERE salary < 900;
16. Insérez dans la table la dernière ligne du tableau de données fourni à l'étape 3, à l'aide des
instructions du script créé à l'étape 6. Exécutez ces instructions.
INSERT INTO my_employee
VALUES (&p_id, '&p_last_name', '&p_first_name',
'&p_userid', &p_salary);
21. Annulez l'opération DELETE la plus récente, mais pas l'opération INSERT précédente.
ROLLBACK TO step_17;
24. Modifiez le script lab_09_06.sql de sorte que la valeur USERID soit générée
automatiquement par concaténation de la première lettre du prénom et des sept premiers
caractères du nom. La valeur USERID doit être générée en minuscules. Ainsi, le script
n'invitera pas à saisir cette valeur. Enregistrez le script sous le nom lab_09_24.sql.
SET ECHO OFF
SET VERIFY OFF
INSERT INTO my_employee
VALUES (&p_id, '&&p_last_name', '&&p_first_name',
lower(substr('&p_first_name', 1, 1) ||
substr('&p_last_name', 1, 7)), &p_salary);
SET VERIFY ON
SET ECHO ON
UNDEFINE p_first_name
UNDEFINE p_last_name
26. Vérifiez que la nouvelle ligne a été ajoutée avec le USERID correct.
SELECT *
FROM my_employee
WHERE ID='6';
Remarque : Pour exécuter une interrogation comprenant des instructions LDD et LMD,
cliquez sur l'icône Run Script (ou appuyez sur [F5]). Vous pouvez ainsi voir les messages
renvoyés dans l'onglet Script Output. Pour les interrogations SELECT, continuez à utiliser
l'icône Execute Statement ou à appuyer sur [F9] pour obtenir le résultat mis en forme dans
l'onglet Results.
a. Pour vérifier que la table a été créée et pour afficher sa structure, exécutez la
commande suivante :
DESCRIBE emp
a. Remarque : Vous pouvez supprimer une table qui est en mode READ ONLY.
Pour le vérifier, attribuez à nouveau le statut READ ONLY à la table, puis
exécutez la commande DROP TABLE. La table EMPLOYEES2 est supprimée.
DROP TABLE employees2;
4. Le département 50 a besoin d'accéder aux données concernant ses employés. Créez une
vue nommée DEPT50 contenant l'ID d'employé, le nom et l'ID de département de tous les
employés du département 50. Vous devez intituler les colonnes de la vue EMPNO,
EMPLOYEE et DEPTNO. Pour des raisons de sécurité, n'autorisez pas le transfert d'un
employé vers un autre département par l'intermédiaire de la vue.
CREATE VIEW dept50 AS
SELECT *
FROM dept50;
L'erreur est due au fait que la vue DEPT50 a été créée avec la contrainte WITH CHECK
OPTION. La colonne DEPTNO de la vue est ainsi protégée contre toute modification.
7. Vous avez besoin d'une séquence pouvant être utilisée avec la colonne PRIMARY KEY
de la table DEPT. La séquence doit commencer à 200 et présenter une valeur maximum
de 1 000. Elle doit croître par incréments de 10. Intitulez la séquence DEPT_ID_SEQ.
8. Pour tester la séquence, écrivez un script permettant d'insérer deux lignes dans la table
DEPT. Nommez le script lab_11_08.sql. Veillez à utiliser la séquence que vous avez
créée pour la colonne ID. Ajoutez deux départements : Education et Administration.
Vérifiez vos ajouts. Exécutez les commandes dans le script.
2. Le département des ressources humaines a besoin d'un état de tous les employés. Ecrivez
une interrogation permettant d'afficher le nom, ainsi que le numéro et le nom de
département pour tous les employés. Exécutez l'interrogation.
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id;
4. Créez un état permettant d'afficher le nom et l'ID des employés, ainsi que le nom et l'ID
de leur manager. Intitulez respectivement les colonnes Employee, Emp#, Manager et
Mgr#. Enregistrez l'instruction SQL sous le nom lab_c_04.sql.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w, employees m
WHERE w.manager_id = m.employee_id;
5. Modifiez lab_c_04.sql pour afficher tous les employés, y compris l'employé King
qui n'a pas de manager. Triez les résultats sur la base du numéro d'employé. Enregistrez
l'instruction SQL sous le nom lab_c_05.sql. Exécutez l'interrogation figurant dans
lab_c_05.sql.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w, employees m
WHERE w.manager_id = m.employee_id (+);
6. Créez pour le département des ressources humaines un état affichant le nom et l'ID de
département de tous les employés qui travaillent dans le même département qu'un
employé donné. Attribuez à chaque colonne un libellé approprié. Enregistrez le script
sous le nom lab_c_06.sql.
SELECT e1.department_id department, e1.last_name employee,
e2.last_name colleague
FROM employees e1, employees e2
WHERE e1.department_id = e2.department_id
AND e1.employee_id <> e2.employee_id
ORDER BY e1.department_id, e1.last_name, e2.last_name;
7. Le département des ressources humaines a besoin d'un état sur les niveaux de poste et les
salaires. Pour vous familiariser avec la table JOB_GRADES, affichez d'abord sa structure.
Créez ensuite une interrogation affichant le nom, le poste, le nom de département, le
Pour mettre en pratique vos connaissances de façon plus approfondie, effectuez les exercices
suivants :
8. Le département des ressources humaines souhaite déterminer le nom de tous les employés
embauchés après Davies. Créez une interrogation permettant d'afficher le nom et la date
d'embauche de tous les employés embauchés après l'employé Davies.
SELECT e.last_name, e.hire_date
FROM employees e , employees davies
WHERE davies.last_name = 'Davies'
AND davies.hire_date < e.hire_date;
Description du schéma
Description globale
Les exemples de schémas Oracle Database utilisés dans le cadre du cours correspondent à
une entreprise qui gère les commandes de différents produits à un niveau international.
L'entreprise compte trois départements :
• Human Resources : Assure le suivi des informations concernant les employés et les
sites de l'entreprise.
• Order Entry : Gère les stocks des produits de l'entreprise, ainsi que les ventes à
travers différents canaux de distribution.
• Sales History : Assure le suivi des statistiques commerciales afin de faciliter la prise
de décisions.
Chacun de ces départements est représenté par un schéma. Dans le cadre du cours, vous
avez accès à tous les objets de tous les schémas. Toutefois, les exemples, les
démonstrations et les exercices utilisent essentiellement le schéma Human Resources
Diagramme entité/relation HR
DEPARTMENTS LOCATIONS
department_name street_address
manager_id postal_code
location_id city
state_province
country_id
JOB_HISTORY
employee_id
end_date EMPLOYEES
job_id first_name
department_id last_name
email COUNTRIES
phone_number country_name
DESCRIBE countries
DESCRIBE departments
. . .
DESCRIBE employees
DESCRIBE job_history
DESCRIBE jobs
DESCRIBE locations
DESCRIBE regions
Objectifs
Dans ce chapitre, vous allez apprendre à obtenir des données à partir de plusieurs tables.
Une jointure permet d'afficher les informations de plusieurs tables. Vous pouvez donc
joindre plusieurs tables pour en afficher les informations.
Remarque : Pour plus d'informations sur les jointures, reportez-vous à la section "SQL
Queries and Subqueries: Joins" du manuel Oracle Database SQL Language Reference 11g,
Release 1 (11.1).
EMPLOYEES DEPARTMENTS
Produit cartésien
Lorsqu'une condition de jointure n'est pas valide ou est complètement omise, un produit
cartésien est formé et toutes les combinaisons de lignes sont affichées. En d'autres termes,
toutes les lignes de la première table sont jointes à toutes les lignes de la deuxième.
Le produit cartésien génère souvent un grand nombre de lignes et le résultat est rarement
utile. Vous devez donc toujours inclure une condition de jointure valide sauf dans le cas
spécifique où vous avez besoin de combiner toutes les lignes de toutes les tables.
Toutefois, les produits cartésiens sont utiles pour certains tests lorsque vous avez besoin de
générer un grand nombre de lignes pour simuler une certaine quantité de données.
Produit cartésien :
• Equijointure
• Non-équijointure
• Jointure externe
• Auto-jointure
Types de jointure
Pour joindre des tables, vous pouvez utiliser la syntaxe de jointure Oracle.
Remarque : Avant la version Oracle9i, la syntaxe de jointure était propriétaire. Du point
de vue des performances, la syntaxe de jointure conforme à la norme SQL:1999 n'est pas
supérieure à la syntaxe propriétaire d'Oracle.
Oracle ne dispose pas de syntaxe équivalente pour la prise en charge totale de la jointure
FULL OUTER JOIN de la syntaxe SQL:1999.
de la syntaxe Oracle
Utilisez une jointure pour effectuer une interrogation
de données à partir de plusieurs tables :
EMPLOYEES DEPARTMENTS
Clé étrangère
Equijointures
Pour déterminer le nom du département d'un employé, vous comparez la valeur figurant
dans la colonne DEPARTMENT_ID de la table EMPLOYEES avec les valeurs
DEPARTMENT_ID de la table DEPARTMENTS. La relation entre les tables EMPLOYEES
et DEPARTMENTS est une équijointure, ce qui signifie que les valeurs figurant dans la
colonne DEPARTMENT_ID doivent être identiques dans les deux tables. Ce type de
jointure implique souvent des clés primaires et étrangères.
Remarque : Les équijointures sont aussi appelées jointures simples ou jointures internes.
d'équijointures
d'équijointures : Exemple
EMPLOYEES JOB_GRADES
Non-équijointures
Une non-équijointure est une condition de jointure contenant autre chose qu'un opérateur
d'égalité.
La relation entre les tables EMPLOYEES et JOB_GRADES est un exemple de non-
équijointure. La plage de valeurs de la colonne SALARY de la table EMPLOYEES est
comprise entre les valeurs des colonnes LOWEST_SAL et HIGHEST_SAL de la table
JOB_GRADES. Chaque employé peut donc se voir attribuer un niveau en fonction de son
salaire. La relation est obtenue à l'aide d'un opérateur autre que l'opérateur d'égalité (=).
à l'aide de non-équijointures
Auto-jointure : Exemple
L'exemple de la diapositive ci-dessus joint la table EMPLOYEES à elle-même. Pour simuler
deux tables dans la clause FROM, il existe deux alias, à savoir worker et manager, pour la
même table EMPLOYEES.
Dans cet exemple, la clause WHERE contient la jointure qui signifie "où le numéro du
manager d'un employé correspond au numéro d'employé du manager".
Synthèse
Il existe plusieurs façons de joindre des tables.
Types de jointure
• Produits cartésiens
• Equijointures
• Non-équijointures
• Jointures externes
• Auto-jointures
Produit cartésien
Un produit cartésien entraîne l'affichage de toutes les combinaisons de lignes. Il est généré
lorsque la clause WHERE est omise.
Alias de table
• Les alias de table accélèrent l'accès à la base de données.
• Les alias de table peuvent contribuer à raccourcir le code SQL, ce qui permet
d'économiser la mémoire.
Présentation de l'exercice C
Dans cet exercice, vous allez expérimenter l'extraction de données à partir de plusieurs
tables à l'aide de la syntaxe de jointure Oracle.
Exercice C
1. Ecrivez pour le département des ressources humaines une interrogation produisant
l'adresse de tous les départements. Utilisez les tables LOCATIONS et COUNTRIES.
Affichez dans les résultats l'ID de lieu, la rue, la ville, le département et le pays.
Exécutez l'interrogation.
2. Le département des ressources humaines a besoin d'un état de tous les employés.
Exercice C (suite)
3. Le département des ressources humaines a besoin d'un état des employés de Toronto.
Affichez le nom, le poste, ainsi que le numéro et le nom de département, pour tous les
employés qui travaillent à Toronto.
4. Créez un état permettant d'afficher le nom et l'ID des employés, ainsi que le nom et
l'ID de leur manager. Intitulez respectivement les colonnes Employee, Emp#,
Manager et Mgr#. Enregistrez l'instruction SQL sous le nom lab_c_04.sql.
Exercice C (suite)
5. Modifiez lab_c_04.sql pour afficher tous les employés, y compris l'employé
King qui n'a pas de manager. Triez les résultats sur la base du numéro d'employé.
Enregistrez l'instruction SQL sous le nom lab_c_05.sql. Exécutez l'interrogation
figurant dans lab_c_05.sql.
6. Créez pour le département des ressources humaines un état affichant le nom et l'ID de
département de tous les employés qui travaillent dans le même département qu'un
employé donné. Attribuez à chaque colonne un libellé approprié. Enregistrez le script
sous le nom lab_c_06.sql.
…
Oracle Database 11g : Les fondamentaux du langage SQL (I) C - 26
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Exercice C (suite)
7. Le département des ressources humaines a besoin d'un état sur les niveaux de poste et les
salaires. Pour vous familiariser avec la table JOB_GRADES, affichez d'abord sa
structure. Créez ensuite une interrogation affichant le nom, le poste, le nom de
département, le salaire et le niveau de tous les employés.
Exercice C (suite)
Pour mettre en pratique vos connaissances de façon plus approfondie, effectuez les
exercices suivants :
8. Le département des ressources humaines souhaite déterminer le nom de tous les
employés embauchés après Davies. Créez une interrogation permettant d'afficher le
nom et la date d'embauche de tous les employés embauchés après l'employé Davies.
Utiliser SQL*Plus
Objectifs
Cette annexe montre comment créer des instructions SELECT réutilisables plusieurs fois.
Elle explique également comment utiliser les commandes SQL*Plus pour exécuter des
instructions SQL. Enfin, elle présente la mise en forme d'une sortie à l'aide de commandes
SQL*Plus, l'édition de commandes SQL et l'enregistrement de scripts dans SQL*Plus.
Instructions SQL
Serveur
SQL*Plus
Résultats d'interrogation
Tampon
SQL et SQL*Plus
SQL est un langage de commande qui permet de communiquer avec le serveur Oracle à
partir de n'importe quel outil ou application. Oracle SQL contient de nombreuses
extensions. Lorsque vous entrez une instruction SQL, elle est stockée dans une région de la
mémoire appelée tampon SQL (SQL Buffer) jusqu'à ce que vous entriez une nouvelle
instruction SQL. SQL*Plus est un outil Oracle qui reconnaît les instructions SQL et les
soumet à Oracle9i Server en vue de leur exécution. Il possède son propre langage de
commande.
Caractéristiques du langage SQL
• Il peut être utilisé par de nombreux utilisateurs, y compris ceux qui ne possèdent que
peu ou pas d'expérience en programmation.
• Ce n'est pas un langage procédural.
• Il réduit le temps nécessaire à la création et à la gestion des systèmes.
• Il s'agit d'un langage proche de l'anglais.
Caractéristiques de l'environnement SQL*Plus
• Il accepte la saisie ad hoc d'instructions.
• Il accepte en entrée des instructions SQL stockées dans un fichier.
• Il fournit un éditeur de ligne permettant la modification d'instructions SQL.
• Il contrôle les paramètres d'environnement.
• Il met en forme les résultats des interrogations de manière à générer des états de base.
• Il permet d'accéder à des bases de données locales et distantes.
SQL SQL*Plus
Il s'agit d'un langage permettant de Il reconnaît les instructions SQL et les
communiquer avec le serveur Oracle pour envoie au serveur.
accéder aux données.
Il est basé sur la norme SQL définie par Il s'agit de l'interface propriétaire d'Oracle
l'ANSI (American National Standards qui permet l'exécution d'instructions SQL.
Institute).
Il manipule les données et les définitions de Il ne permet pas la manipulation de valeurs
table dans la base de données. dans la base de données.
Les instructions SQL sont placées dans le Les commandes sont saisies une ligne à la
tampon SQL sur une ou plusieurs lignes. fois et ne sont pas stockées dans le tampon
SQL.
Il n'offre pas de caractère de suite. Le tiret (–) est utilisé en tant que caractère de
suite si la commande excède une ligne.
Les mots-clés ne peuvent pas être abrégés. Les mots-clés peuvent être abrégés.
Il utilise un caractère de fin pour exécuter Il ne requiert pas de caractère de fin pour
les commandes immédiatement. exécuter les commandes immédiatement.
Il utilise des fonctions pour la mise en forme Il utilise des commandes pour la mise en
des données. forme des données.
• Se connecter à SQL*Plus
• Afficher la structure d'une table
• Editer des instructions SQL
• Exécuter du code SQL à partir de SQL*Plus
• Sauvegarder des instructions SQL dans des fichiers
et ajouter des instructions SQL à la fin de ces fichiers
• Exécuter des fichiers sauvegardés
• Charger les commandes d'un fichier dans le tampon
SQL*Plus
SQL*Plus est un environnement dans lequel vous pouvez effectuer les opérations suivantes :
• Exécuter des instructions SQL pour extraire, modifier, ajouter ou supprimer des données
dans la base.
• Mettre en forme les résultats des interrogations, effectuer des calculs sur ces résultats,
les stocker et générer des états.
• Créer des fichiers script afin d'enregistrer des instructions SQL pour une utilisation
ultérieure.
Les commandes SQL* Plus se répartissent dans les catégories principales suivantes :
Catégorie Fonction
Environnement Définition du comportement général des instructions SQL pour la
session.
Mise en forme Mise en forme des résultats des interrogations.
Manipulation de Sauvegarde, chargement et exécution de fichiers script.
fichiers
Exécution Envoi des instructions SQL du tampon SQL au serveur Oracle.
Edition Modification des instructions SQL dans le tampon.
Interaction Création de variables et transmission à des instructions SQL,
affichage des valeurs des variables et affichage des messages à
l'écran.
Divers Connexion à la base de données, manipulation de
l'environnement SQL*Plus et affichage des définitions de
colonne.
Oracle Database 11g : Les fondamentaux du langage SQL (I) D - 5
Se connecter à SQL*Plus
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
sqlplus [username[/password[@database]]]
Se connecter à SQL*Plus
Le mode d'appel de SQL*Plus dépend du type de système d'exploration ou
d'environnement Windows utilisé.
Pour vous connecter à partir d'un environnement Windows :
1. Sélectionnez Start > Programs > Oracle > Application Development > SQL*Plus.
2. Entrez le nom utilisateur, le mot de passe et le nom de base de données.
Pour vous connecter à partir d'un environnement de ligne de commande :
1. Connectez-vous à votre ordinateur.
2. Entrez la commande sqlplus comme indiqué dans la diapositive ci-dessus.
Dans la syntaxe :
username Votre nom utilisateur de base de données
password Votre mot de passe de base de données (il est visible dans ce cas)
@database Chaîne de connexion de base de données
Remarque : Pour préserver la confidentialité de votre mot de passe, ne le saisissez pas à
l'invite du système d'exploitation. Entrez uniquement votre nom utilisateur. Entrez votre
mot de passe à l'invite de saisie du mot de passe.
SQL*Plus
DESC[RIBE] tablename
DESCRIBE departments
• A[PPEND] text
• C[HANGE] / old / new
• C[HANGE] / text /
• CL[EAR] BUFF[ER]
• DEL
• DEL n
• DEL m n
Indications
• Si vous appuyez sur [Entrée] avant de terminer une commande, SQL*Plus affiche un
numéro de ligne.
• Vous indiquez la fin de la saisie dans le tampon SQL en entrant l'un des caractères de
fin (point-virgule ou barre oblique) ou en appuyant deux fois sur [Entrée]. L'invite
SQL apparaît alors.
• I[NPUT]
• I[NPUT] text
• L[IST]
• L[IST] n
• L[IST] m n
• R[UN]
• n
• n text
LIST
1 SELECT last_name
2* FROM employees
1
1* SELECT last_name
A , job_id
LIST
1 SELECT last_name, job_id
2* FROM employees
LIST
1* SELECT * from employees
c/employees/departments
1* SELECT * from departments
de fichiers
• SAVE filename
• GET filename
• START filename
• @ filename
• EDIT filename
• SPOOL filename
• EXIT
LIST
1 SELECT last_name, manager_id, department_id
2* FROM employees
SAVE my_query
Created file my_query
START my_query
EDIT my_query
Option Description
Synthèse
SQL*Plus est un environnement d'exécution qui permet d'envoyer des commandes SQL au
serveur de base de données, ou encore d'éditer et de sauvegarder des commandes SQL.
Vous pouvez exécuter des commandes à partir de l'invite SQL ou d'un fichier script.
Objectifs
Cette annexe présente l'outil graphique SQL Developer. Elle explique comment utiliser
l'interface graphique SQL Developer pour les tâches de développement de base de données.
Cette annexe complète le chapitre "Introduction". Il est supposé que vous avez créé une
connexion de base de données et que vous êtes prêt à naviguer au sein des objets dans
l'interface SQL Developer.
Cochez la case
Advanced pour obtenir
toutes les options de
définition de table.
1 2
Validation et annulation
Après avoir inséré de nouvelles lignes ou mis à jour des lignes existantes, vous pouvez
enregistrer les modifications ou les annuler.
1. Pour enregistrer les modifications, cliquez sur l'icône Commit Changes. La transaction
en cours prend alors fin et toutes les modifications réalisées dans cette transaction
deviennent définitives.
2. Pour annuler les modifications, cliquez sur l'icône Rollback Changes. Tout le travail
réalisé dans la transaction en cours est annulé.
2
1
1 4
Créer un synonyme
Les synonymes permettent d'attribuer un autre nom aux tables, aux vues, aux séquences ou
à d'autres synonymes. Le navigateur de connexions comporte un noeud Synonyms pour
tous les synonymes (publics et privés) appartenant à l'utilisateur associé à la connexion
considérée, et un noeud Public Synonyms pour tous les synonymes publics définis pour la
base de données associée à la connexion.
Pour créer un synonyme, procédez comme suit :
1. Dans le navigateur de connexions, cliquez avec le bouton droit de la souris sur
Synonyms. Sélectionnez New Synonym.
2. Dans la boîte de dialogue Create Database Synonym, cochez la case Public si vous
souhaitez que le synonyme soit accessible à tous les utilisateurs. Les synonymes privés
ne sont accessibles qu'au sein de leur schéma.
3. Entrez le nom du synonyme.
4. Dans l'onglet Properties, sélectionnez le schéma qui contient l'objet pour lequel le
synonyme est défini. Vous pouvez entrer directement le nom de l'objet (si l'option
Name based est sélectionnée) ou vous pouvez sélectionner l'option Object based pour
obtenir la liste déroulante de tous les objets du schéma. Sélectionnez l'objet dans la
liste. Cliquez sur OK.
Remarque : Les synonymes publics sont ajoutés sous un autre noeud du navigateur de
connexions. Il s'agit du noeud Public Synonyms. Pour supprimer un synonyme, cliquez
simplement dessus avec le bouton droit de la souris et sélectionnez Drop dans le menu.
Insérer
un snippet
Modifier
Synthèse
SQL Developer est un outil graphique gratuit conçu pour simplifier les tâches de
développement d'une base de données. Il permet de consulter, de créer et de modifier des
objets de base de données. Les options des menus contextuels et l'interface graphique vous
permettent de réaliser les mêmes tâches de développement de base de données qu'avec des
instructions SQL.
Index
A
Alias i-38
ALL i-2, i-12, i-16, i-35, i-46, i-49, i-51, i-57
AND i-11, i-13, i-14, i-17, i-22, i-30, i-31, i-32, i-34, i-36,
i-40, i-41, i-48, i-49, i-57, i-58
Attributs i-22, i-23, i-24
B
Base de données i-2, i-4, i-10, i-11, i-13, i-16, i-17, i-18,
i-19, i-20, i-22, i-27, i-28, i-30, i-34, i-35, i-36, i-37, i-38,
i-39, i-40, i-41, i-42, i-48, i-49, i-56, i-57, i-58
Base de données relationnelle i-2, i-16, i-18, i-19, i-27, i-28,
F
Fonctions de conversion i-5
Fonctions de groupe i-5
I
icône i-41, i-42, i-43, i-44, i-47, i-49, i-58, i-59
Identificateur unique i-23, i-24
IN i-1, i-2, i-3, i-4, i-5, i-6, i-7, i-8, i-9, i-10,
i-11, i-12, i-13, i-14, i-15, i-16, i-17, i-18, i-19, i-20, i-21,
i-22, i-23, i-24, i-25, i-26, i-27, i-28, i-29, i-30, i-31, i-32,
i-33, i-34, i-35, i-36, i-37, i-38, i-39, i-40, i-41, i-42, i-43,
i-44, i-45, i-46, i-47, i-48, i-49, i-50, i-51, i-52, i-53, i-55,
O
OLTP i-11, i-16
ON i-1, i-2, i-3, i-4, i-5, i-6, i-7, i-8, i-9, i-10,
i-11, i-12, i-13, i-14, i-15, i-16, i-17, i-18, i-19, i-20, i-21,
i-22, i-23, i-24, i-25, i-26, i-27, i-28, i-29, i-30, i-31, i-32,
i-33, i-34, i-35, i-36, i-37, i-38, i-39, i-40, i-41, i-42, i-43,
i-44, i-45, i-46, i-47, i-48, i-49, i-50, i-51, i-52, i-53, i-54,
i-55, i-56, i-57, i-58, i-59
option i-36, i-41, i-44, i-48
opérateur i-5, i-18
Opérateurs ensemblistes i-5
S
Synonyme i-23, i-24
Sélection i-4, i-36, i-38, i-40, i-41, i-45, i-46, i-47, i-48,
i-58
T
table i-3, i-4, i-5, i-6, i-7, i-8, i-15, i-19, i-20, i-25,
i-26, i-27, i-28, i-29, i-30, i-33, i-40, i-48, i-50, i-51, i-52,
i-53, i-57, i-59
Transactions i-11, i-31
Tri i-4, i-5, i-9, i-11, i-13, i-14, i-16, i-22, i-23, i-24,
i-27, i-31, i-46, i-48, i-51, i-59