Vous êtes sur la page 1sur 60

THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY.

COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

D52771
Edition 1.0
Janvier 2008
D49996FR10

®
SQL (I)

Manuel du stagiaire - Volume III


Oracle Database 11g :
Les fondamentaux du langage

Oracle University and OMNIDATA. use only


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Auteur Copyright © 2007, Oracle. Tous droits réservés.

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

Oracle University and OMNIDATA. use only


Timothy Mcglue If this documentation is delivered to the United States Government or anyone using the
Alan Paulson documentation on behalf of the United States Government, the following notice is
applicable:
Bryan Roberts
Abhishek Singh U.S. GOVERNMENT RIGHTS
Lori Tritz The U.S. Government’s rights to use, modify, reproduce, release, perform, display,
Michael Versaci or disclose these training materials are restricted by the terms of the applicable Oracle
license agreement and/or the applicable U.S. Government contract.
Lex van der Werff
Marques
Concepteurs graphique
Oracle est une marque déposée d'Oracle Corporation et/ou de ses filiales. Tout autre
Satish Bettegowda nom de produit ou de société peut être une marque de son propriétaire.
Samir Mozumdar

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

Oracle University and OMNIDATA. use only


Contenu du chapitre I-8
Oracle Database 11g : Domaines ciblés I-9
Oracle Database 11g I-10
Oracle Fusion Middleware I-12
Oracle Enterprise Manager Grid Control 10g I-13
Oracle BI Publisher I-14
Contenu du chapitre I-15
Systèmes de gestion de base de données relationnelle et relationnelle objet I-16
Stocker des données sur différents supports I-17
Concept de base de données relationnelle I-18
Définition d'une base de données relationnelle I-19
Modèles de données I-20
Modèle entité/relation (ER) I-21
Conventions de modélisation entité/relation I-23
Lier plusieurs tables I-25
Base de données relationnelle : Terminologie I-27
Contenu du chapitre I-29
Utiliser le langage SQL pour interroger une base de données I-30
Instructions SQL I-31
Environnements de développement pour le langage SQL I-32
Contenu du chapitre I-33
Oracle SQL Developer : Présentation I-34
Oracle SQL Developer : Caractéristiques I-35
Interface d'Oracle SQL Developer I-36
Créer une connexion de base de données I-37
Consulter les objets de base de données I-40
Utiliser SQL Worksheet I-41
Exécuter des instructions SQL I-44
Formater le code SQL I-45
Enregistrer des instructions SQL I-46

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

Lancer SQL*Plus à partir d'Oracle SQL Developer I-48


Instructions SQL dans SQL*Plus I-49
Contenu du chapitre I-50
Schéma Human Resources (HR) I-51
Tables utilisées dans le cours I-52
Contenu du chapitre I-53
Documentation relative à Oracle Database 11g I-54
Ressources supplémentaires I-55
Synthèse I-56
Présentation de l'exercice I I-57

1 Extraire des données à l'aide de l'instruction SQL SELECT


Objectifs 1-2

Oracle University and OMNIDATA. use only


Contenu du chapitre 1-3
Fonctionnalités des instructions SQL SELECT 1-4
Instruction SELECT de base 1-5
Sélectionner toutes les colonnes 1-6
Sélectionner des colonnes spécifiques 1-7
Ecrire des instructions SQL 1-8
En-têtes de colonne par défaut 1-9
Contenu du chapitre 1-10
Expressions arithmétiques 1-11
Utiliser des opérateurs arithmétiques 1-12
Priorité des opérateurs 1-13
Définir une valeur NULL 1-14
Valeurs NULL dans les expressions arithmétiques 1-15
Contenu du chapitre 1-16
Définir un alias de colonne 1-17
Utiliser des alias de colonne 1-18
Contenu du chapitre 1-19
Opérateur de concaténation 1-20
Chaînes de caractères littérales 1-21
Utiliser des chaînes de caractères littérales 1-22
Opérateur de délimitation (q) alternatif 1-23
Lignes en double 1-24
Contenu du chapitre 1-25
Afficher la structure d'une table 1-26
Utiliser la commande DESCRIBE 1-27
Synthèse 1-28
Présentation de l'exercice 1 1-29

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

Oracle University and OMNIDATA. use only


Définir des conditions à l'aide des opérateurs logiques 2-15
Utiliser l'opérateur AND 2-16
Utiliser l'opérateur OR 2-17
Utiliser l'opérateur NOT 2-18
Contenu du chapitre 2-19
Règles de priorité 2-20
Contenu du chapitre 2-22
Utiliser la clause ORDER BY 2-23
Tri 2-24
Contenu du chapitre 2-26
Variables de substitution 2-27
Utiliser une variable de substitution avec esperluette simple 2-29
Chaînes de caractères et dates avec variables de substitution 2-31
Indiquer des noms de colonne, des expressions et du texte 2-32
Utiliser une variable de substitution avec esperluette double 2-33
Contenu du chapitre 2-34
Utiliser la commande DEFINE 2-35
Utiliser la commande VERIFY 2-36
Synthèse 2-37
Présentation de l'exercice 2 2-38

3 Utiliser des fonctions monolignes pour personnaliser les résultats


Objectifs 3-2
Contenu du chapitre 3-3
Fonctions SQL 3-4
Deux types de fonction SQL 3-5
Fonctions monolignes 3-6
Contenu du chapitre 3-8
Fonctions de type caractère 3-9

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

Utiliser les fonctions de conversion de casse 3-12


Fonctions de manipulation de caractères 3-13
Utiliser les fonctions de manipulation de caractères 3-14
Contenu du chapitre 3-15
Fonctions numériques 3-16
Utiliser la fonction ROUND 3-17
Utiliser la fonction TRUNC 3-18
Utiliser la fonction MOD 3-19
Contenu du chapitre 3-20
Utiliser des dates 3-21
Format de date RR 3-22
Utiliser la fonction SYSDATE 3-24

Oracle University and OMNIDATA. use only


Opérations arithmétique avec des dates 3-25
Utiliser des opérateurs arithmétiques avec des dates 3-26
Contenu du chapitre 3-27
Fonctions de manipulation de dates 3-28
Utiliser les fonctions de type date 3-29
Utiliser les fonctions ROUND et TRUNC avec des dates 3-30
Synthèse 3-31
Présentation de l'exercice 3 3-32

4 Utiliser des fonctions de conversion et des expressions conditionnelles


Objectifs 4-2
Contenu du chapitre 4-3
Fonctions de conversion 4-4
Conversion implicite de types de données 4-5
Conversion explicite de types de données 4-7
Contenu du chapitre 4-10
Utiliser la fonction TO_CHAR avec des dates 4-11
Eléments du modèle de format de date 4-12
Utiliser la fonction TO_CHAR avec des dates 4-16
Utiliser la fonction TO_CHAR avec des nombres 4-17
Utiliser les fonctions TO_NUMBER et TO_DATE 4-20
Utiliser les fonctions TO_CHAR et TO_DATE avec le format de date RR 4-22
Contenu du chapitre 4-23
Fonctions d'imbrication 4-24
Contenu du chapitre 4-26
Fonctions générales 4-27
Fonction NVL 4-28
Utiliser la fonction NVL 4-29
Utiliser la fonction NVL2 4-30
Utiliser la fonction NULLIF 4-31

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

Contenu du chapitre 4-35


Expressions conditionnelles 4-36
Expression CASE 4-37
Utiliser l'expression CASE 4-38
Fonction DECODE 4-39
Utiliser la fonction DECODE 4-40
Synthèse 4-42
Présentation de l'exercice 4 4-43

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

Oracle University and OMNIDATA. use only


Fonctions de groupe : Présentation 5-4
Types de fonctions de groupe 5-5
Fonctions de groupe : Syntaxe 5-6
Utiliser les fonctions AVG et SUM 5-7
Utiliser les fonctions MIN et MAX 5-8
Utiliser la fonction COUNT 5-9
Utiliser le mot-clé DISTINCT 5-10
Fonctions de groupe et valeurs NULL 5-11
Contenu du chapitre 5-12
Créer des groupes de données 5-13
Créer des groupes de données : Syntaxe de la clause GROUP BY 5-14
Utiliser la clause GROUP BY 5-15
Procéder à un regroupement sur la base de plusieurs colonnes 5-17
Utiliser la clause GROUP BY sur plusieurs colonnes 5-18
Interrogations non autorisées avec les fonctions de groupe 5-19
Interrogations non autorisées avec les fonctions de groupe 5-20
Restreindre les résultats d'un groupe 5-21
Restreindre les résultats d'un groupe avec la clause HAVING 5-22
Utiliser la clause HAVING 5-23
Contenu du chapitre 5-25
Imbriquer des fonctions de groupe 5-26
Synthèse 5-27
Présentation de l'exercice 5 5-28

6 Afficher des données provenant de plusieurs tables


Objectifs 6-2
Contenu du chapitre 6-3
Obtenir des données à partir de plusieurs tables 6-4
Types de jointure 6-5
Joindre des tables à l'aide de la syntaxe SQL:1999 6-6

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

Contenu du chapitre 6-8


Créer des jointures naturelles 6-9
Extraire des enregistrements avec des jointures naturelles 6-10
Créer des jointures à l'aide de la clause USING 6-11
Joindre des noms de colonne 6-12
Extraire des enregistrements avec la clause USING 6-13
Utiliser des alias de table avec la clause USING 6-14
Créer des jointures avec la clause ON 6-15
Extraire des enregistrements avec la clause ON 6-16
Créer des jointures à trois liens avec la clause ON 6-17
Appliquer des conditions supplémentaires à une jointure 6-18
Contenu du chapitre 6-19

Oracle University and OMNIDATA. use only


Joindre une table à elle-même 6-20
Auto-jointures à l'aide de la clause ON 6-21
Contenu du chapitre 6-22
Non-équijointures 6-23
Extraire des enregistrements à l'aide de non-équijointures 6-24
Contenu du chapitre 6-25
Renvoyer des enregistrements sans correspondance directe à l'aide
de jointures externes 6-26
Comparaison entre les jointures INNER et OUTER 6-27
LEFT OUTER JOIN 6-28
RIGHT OUTER JOIN 6-29
FULL OUTER JOIN 6-30
Contenu du chapitre 6-31
Produit cartésien 6-32
Générer un produit cartésien 6-33
Créer des jointures croisées 6-34
Synthèse 6-35
Présentation de l'exercice 6 6-36

7 Utiliser des sous-interrogations pour résoudre des interrogations


Objectifs 7-2
Contenu du chapitre 7-3
Utiliser une sous-interrogation
pour résoudre un problème 7-4
Syntaxe des sous-interrogations 7-5
Utiliser une sous-interrogation 7-6
Règles d'utilisation des sous-interrogations 7-7
Types de sous-interrogation 7-8
Contenu du chapitre 7-9
Sous-interrogations monolignes 7-10

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

Utiliser des fonctions de groupe dans une sous-interrogation 7-12


Clause HAVING avec des sous-interrogations 7-13
Qu'est-ce qui est incorrect dans cette instruction ? 7-14
L'interrogation interne ne renvoie aucune ligne 7-15
Contenu du chapitre 7-16
Sous-interrogations multilignes 7-17
Utiliser l'opérateur ANY dans des sous-interrogations multilignes 7-18
Utiliser l'opérateur ALL dans des sous-interrogations multilignes 7-19
Contenu du chapitre 7-20
Valeurs NULL dans une sous-interrogation 7-21
Synthèse 7-23
Présentation de l'exercice 7 7-24

Oracle University and OMNIDATA. use only


8 Utiliser des opérateurs ensemblistes
Objectifs 8-2
Contenu du chapitre 8-3
Opérateurs ensemblistes (SET) 8-4
Règles relatives aux opérateurs ensemblistes 8-5
Le serveur Oracle et les opérateurs ensemblistes 8-6
Contenu du chapitre 8-7
Tables utilisées dans le chapitre 8-8
Contenu du chapitre 8-12
Opérateur UNION 8-13
Utiliser l'opérateur UNION 8-14
Opérateur UNION ALL 8-16
Utiliser l'opérateur UNION ALL 8-17
Contenu du chapitre 8-18
Opérateur INTERSECT 8-19
Utiliser l'opérateur INTERSECT 8-20
Contenu du chapitre 8-21
Opérateur MINUS 8-22
Utiliser l'opérateur MINUS 8-23
Contenu du chapitre 8-24
Assurer la correspondence des instructions SELECT 8-25
Assurer la correspondance des instructions SELECT : Exemple 8-26
Contenu du chapitre 8-27
Utiliser la clause ORDER BY dans des opérations ensemblistes 8-28
Synthèse 8-29
Présentation de l'exercice 8 8-30

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

Oracle University and OMNIDATA. use only


Syntaxe de l'instruction UPDATE 9-15
Mettre à jour des lignes d'une table 9-16
Mettre à jour deux colonnes avec une sous-interrogation 9-17
Mettre à jour des lignes sur la base d'une autre table 9-18
Contenu du chapitre 9-19
Supprimer une ligne d'une table 9-20
Instruction DELETE 9-21
Supprimer des lignes d'une table 9-22
Supprimer des lignes sur la base d'une autre table 9-23
Instruction TRUNCATE 9-24
Contenu du chapitre 9-25
Transactions de base de données 9-26
Transactions de base de données : Début et fin 9-27
Avantages des instructions COMMIT et ROLLBACK 9-28
Instructions explicites de contrôle des transactions 9-29
Annuler des modifications jusqu'à un marqueur 9-30
Traitement implicite des transactions 9-31
Etat des données avant exécution de l'instruction COMMIT ou ROLLBACK 9-33
Etat des données après exécution de l'instruction COMMIT 9-34
Valider les données 9-35
Etat des données après exécution de l'instruction ROLLBACK 9-36
Etat des données après exécution de l'instruction ROLLBACK : Exemple 9-37
Annulation au niveau instruction 9-38
Contenu du chapitre 9-39
Cohérence en lecture 9-40
Implémenter la cohérence en lecture 9-41
Contenu du chapitre 9-42
Clause FOR UPDATE dans une instruction SELECT 9-43
Clause FOR UPDATE : Exemples 9-44

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

Présentation de l'exercice 9 9-47

10 Utiliser des instructions LDD pour créer et gérer des tables


Objectifs 10-2
Contenu du chapitre 10-3
Objets de base de données 10-4
Règles d'appellation 10-5
Contenu du chapitre 10-6
Instruction CREATE TABLE 10-7
Référencer les tables d'un autre utilisateur 10-8
Option DEFAULT 10-9
Créer des tables 10-10
Contenu du chapitre 10-11

Oracle University and OMNIDATA. use only


Types de données 10-12
Types de données date-heure 10-14
Contenu du chapitre 10-16
Inclure des contraintes 10-17
Règles relatives aux contraintes 10-18
Définir des contraintes 10-19
Contrainte NOT NULL 10-21
Contrainte UNIQUE 10-22
Contrainte PRIMARY KEY 10-24
Contrainte FOREIGN KEY 10-25
Contrainte FOREIGN KEY : Mots-clés 10-27
Contrainte CHECK 10-28
CREATE TABLE : Exemple 10-29
Violation de contraintes 10-30
Contenu du chapitre 10-32
Créer une table à l'aide d'une sous-interrogation 10-33
Contenu du chapitre 10-35
Instruction ALTER TABLE 10-36
Tables en lecture seule 10-37
Contenu du chapitre 10-38
Supprimer une table 10-39
Synthèse 10-40
Présentation de l'exercice 10 10-41

11 Créer d'autres objets de schéma


Objectifs 11 -2
Contenu du chapitre 11 -3
Objets de base de données 11 -4
Vue : Présentation 11 -5

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

Vues simples et vues complexes 11 -7


Créer une vue 11 -8
Extraire des données d'une vue 11 -11
Modifier une vue 11 -12
Créer une vue complexe 11 -13
Règles relatives à l'exécution d'opérations LMD sur une vue 11 -14
Utiliser la clause WITH CHECK OPTION 11 -17
Empêcher les opérations LMD 11 -18
Supprimer une vue 11 -20
Présentation de l'exercice 11 : Première partie 11 -21
Contenu du chapitre 11 -22
Séquences 11 -23
Instruction CREATE SEQUENCE : Syntaxe 11 -25

Oracle University and OMNIDATA. use only


Créer une séquence 11 -26
Pseudo-colonnes NEXTVAL et CURRVAL 11 -27
Utiliser une séquence 11 -29
Mettre en mémoire cache les valeurs d'une séquence 11 -30
Modifier une séquence 11 -31
Règles de modification d'une séquence 11 -32
Contenu du chapitre 11 -33
Index 11 -34
Modes de création d'un index 11 -36
Créer un index 11 -37
Règles de création d'un index 11 -38
Supprimer un index 11 -39
Contenu du chapitre 11 -40
Synonymes 11 -41
Créer un synonyme pour un objet 11 -42
Créer et supprimer des synonymes 11 -43
Synthèse 11 -44
Présentation de l'exercice 11 : Deuxième partie 11 -45

Annexe A - Solutions des exercices


Annexe B - Description des tables
Annexe C - Syntaxe de jointure Oracle
Annexe D - Utiliser SQL*Plus
Annexe E - Effectuer des opérations LMD et LDD à l'aide de l'interface
graphique SQL Developer
Index
Exercices supplémentaires
Solutions des exercices supplémentaires

xii
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Préface

Oracle University and OMNIDATA. use only


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and OMNIDATA. use only


Profil
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

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.

Oracle University and OMNIDATA. use only

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)

Oracle University and OMNIDATA. use only


• Guides d'installation et guides de l'utilisateur
• Fichiers readme
• Articles du groupe IOUG (International Oracle User's Group)
• Oracle Magazine

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,

Oracle University and OMNIDATA. use only


mots de passe
Initiale Déclencheur et Attribuez un déclencheur When-Validate- en
majuscule boutons Item au bloc ORD.
Cliquez sur Cancel.
Italiques Manuels, titres de Pour en savoir plus, voir
cours et de Oracle SQL Reference
manuels, Manual
locutions et
mots mis en évidence N'enregistrez pas les modifications dans la
base de données.
Guillemets Titres de chapitre Ce sujet est traité dans le chapitre 3,
cités en référence "Gérer les objets."
au sein d'un cours

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

Conventions typographiques concernant le texte


Convention Elément Exemple
Majuscules Commandes et SELECT employee_id
fonctions FROM employees;
Minuscules Variables CREATE ROLE role;
italiques
Initiale Déclencheurs Trigger level: S_ITEM.QUANTITY
en majuscule Oracle Forms item
Trigger name: When-Validate-Item
. . .

Oracle University and OMNIDATA. use only


Minuscules Noms de colonne, . . .
noms de table, OG_ACTIVATE_LAYER
noms de fichier, (OG_GET_LAYER ('prod_pie_layer'))
objets PL/SQL . . .

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

________________________
________________________

Exercices complémentaires

Oracle University and OMNIDATA. use only


Exercices complémentaires
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Vous pouvez effectuer les exercices complémentaires ci-après après avoir vu les sujets
suivants : instruction SQL SELECT de base, commandes SQL Developer de base et fonctions
SQL.

1. Le département des ressources humaines a besoin des données concernant tous les
commis aux stock embauchés après 1997.

2. Le département des ressources humaines a besoin d'un état des employés qui perçoivent
une commission. Affichez le nom, le poste, le salaire et la commission de ces employés.
Triez les données par ordre décroissant de salaire.

Oracle University and OMNIDATA. use only

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 2
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

3. Pour des raisons de budgétisation, le département des ressources humaines a besoin d'un
état sur les augmentations prévues. L'état doit afficher les employés qui ne perçoivent pas
de commission, mais bénéficient d'une augmentation de salaire de 10 % (arrondissez).

Oracle University and OMNIDATA. use only

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 3
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

4. Créez un état présentant les employés et leur ancienneté. Affichez le nom de tous les
employés, ainsi que le nombre d'années et le nombre de mois complets depuis leur
embauche. Triez l'état en fonction de l'ancienneté. L'employé présentant la plus grande
ancienneté doit apparaître au début de la liste.

Oracle University and OMNIDATA. use only


5. Affichez les employés dont le nom commence par les lettres "J", "K", "L" ou "M".

6. Créez un état affichant tous les employés, et indiquant par Yes ou No s'ils perçoivent une
commission. Dans l'interrogation, utilisez l'expression DECODE.
Remarque : Les résultats continuent sur la page suivante.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 4
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

6. (suite)
Exercices complémentaires (suite)

Exercices complémentaires - 5
Oracle Database 11g : Les fondamentaux du langage SQL (I)
Oracle University and OMNIDATA. use only
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Vous pouvez effectuer les exercices complémentaires ci-après après avoir vu les sujets
suivants : instruction SQL SELECT de base, commandes SQL Developer de base, fonctions
SQL, jointures et fonctions de groupe.

7. Créez un état affichant le nom de département, l'ID de lieu, le nom, l'intitulé de poste et le
salaire des employés qui travaillent dans un lieu spécifique. Invitez l'utilisateur à indiquer
le lieu. Par exemple, si l'utilisateur saisit 1800, les résultats sont les suivants :

8. Cherchez le nombre d'employés dont le nom se termine par la lettre "n". Créez deux
solutions possibles.

Oracle University and OMNIDATA. use only


9. Créez un état affichant le nom, le lieu et le nombre d'employés pour chaque département.
Vérifiez que l'état inclut également les départements sans employés.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 6
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

10. Le département des ressources humaines a besoin de connaître les intitulés de poste des
départements 10 et 20. Créez un état affichant les ID de poste de ces départements.

11. Créez un état affichant les postes trouvés dans les départements Administration et
Executive. Affichez aussi le nombre d'employés occupant ces postes. Affichez en premier
le poste occupé par le plus grand nombre d'employés.

Oracle University and OMNIDATA. use only

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 7
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Vous pouvez effectuer les exercices complémentaires ci-après après avoir vu les sujets
suivants : instruction SQL SELECT de base, commandes SQL Developer de base, fonctions
SQL, jointures, fonctions de groupe et sous-interrogations.

12. Affichez tous les employés qui ont été embauchés au cours de la première moitié du mois
(avant le 16 du mois).

Oracle University and OMNIDATA. use only


13. Créez un état affichant les informations suivantes concernant tous les employés : nom,
salaire et salaire exprimé en milliers de dollars.

Remarque : Les résultats continuent sur la page suivante.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 8
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

13. (suite)

Oracle University and OMNIDATA. use only


14. Affichez tous les employés dont le manager perçoit un salaire supérieur à 15 000 $.
Affichez les données suivantes : nom d'employé, nom du manager, salaire du manager et
niveau de salaire du manager.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 9
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

15. Affichez le numéro du département, le nom, le nombre d'employés et le salaire moyen de


tous les départements, ainsi que le nom, le salaire et le poste de tous les employés de
chaque département.

Oracle University and OMNIDATA. use only


16. Créez un état affichant l'ID de département et le salaire le plus bas du département
présentant le salaire moyen le plus élevé.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 10
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

17. Créez un état affichant les départements qui ne comptent aucun commercial. Incluez dans
le résultat l'ID de département, le nom de département, l'ID de manager et le lieu.

18. Créez les états statistiques ci-après pour le département des ressources humaines. Incluez
l'ID de département, le nom de département et le nombre d'employés pour chaque

Oracle University and OMNIDATA. use only


département qui correspond aux critères suivants :

a. Département qui compte moins de trois employés :

b. Département qui comporte le nombre le plus élevé d'employés :

c. Département qui comporte le nombre le plus bas d'employés :

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 11
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

19. Créez un état affichant l'ID d'employé, le nom, le salaire, l'ID de département et le salaire
moyen du département pour tous les employés.

Oracle University and OMNIDATA. use only


20. Affichez tous les employés qui ont été embauchés le jour de la semaine présentant le
nombre le plus élevé d'embauches.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 12
Exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

21. Créez une liste d'anniversaires basée sur la date d'embauche des employés.
Triez les anniversaires par ordre croissant.

Oracle University and OMNIDATA. use only


Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 13
Exercices complémentaires : Etude de cas
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Dans cette étude de cas, vous allez construire un ensemble de tables de base de données pour
une application de gestion de vidéo club. Après avoir créé les tables, vous allez insérer,
mettre à jour et supprimer des enregistrements dans la base de données du vidéo club, et
générer un état. La base de données ne contient que les tables essentielles.

Voici un diagramme des entités et attributs de l'application :

TITLE
for #* id
RESERVATION * title
#* res date the subject * description
of o rating
set up for o category
o release date

Oracle University and OMNIDATA. use only


available as

responsible a copy
for
TITLE_COPY
MEMBER #* id
#* id * status
* last name
o first name the subject of
responsible
o address for made against
o city
o phone RENTAL
* join date created #* book date
for o act ret date
o exp ret date

Remarque : Pour construire les tables, vous pouvez exécuter les commandes du script
buildtab.sql dans SQL Developer. Pour les supprimer, vous pouvez exécuter les
commandes du script dropvid.sql dans SQL Developer. Vous pouvez ensuite
exécuter les commandes du script buildvid.sql dans SQL Developer pour créer et
remplir les tables. Les trois scripts SQL figurent dans le dossier D:\labs\sql1\labs.
• Si vous utilisez le script buildtab.sql pour construire les tables, commencez à
l'étape 4.
• Si vous utilisez le script dropvid.sql pour supprimer les tables, commencez à
l'étape 1.
• Si vous utilisez le script buildvid.sql pour construire et remplir les tables,
commencez à l'étape 6(b).

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 14
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

1. Créez les tables en vous conformant aux indications des tableaux ci-après. Choisissez les
types de données appropriés et veillez à indiquer les contraintes d'intégrité.

a. Nom de la table : MEMBER


Nom de la MEMBER_ LAST_ FIRST_NAME ADDRESS CITY PHONE JOIN_
colonne ID NAME DATE
Type de PK
clé
Null/ NN,U NN NN
Unique
Valeur Date
par système
défaut
Type de NUMBER VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 DATE
données
Longueur 10 25 25 100 30 15

Oracle University and OMNIDATA. use only


b. Nom de la table : TITLE

N om d e la T I T L E_ I D TITLE D E S CR I P T I O N RA T I N G CATEGORY RELEASE_


colonn e DATE
T yp e d e PK
clé
N ull/ N N ,U NN NN
U n iq ue
CHECK G, PG , R, DRAM A,
N C 17, N R COM EDY,
A C T IO N ,
C H IL D ,
S C IF I,
DOCUM EN
TARY
T yp e d e N U M B ER V A R C HA R 2 V A R CH A R 2 VA R C H A R 2 VARCHAR2 DATE
d on nées
L on gu eu r 10 60 400 4 20

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 15
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

c. Nom de la table : TITLE_COPY

Nom de la COPY_ID TITLE_ID STATUS


colonne
Type de clé PK PK,FK
Null/Unique NN,U NN,U NN
CHECK AVAILABLE,
DESTROYED,
RENTED,
RESERVED
Table de clé TITLE
étrangère
Colonne de clé TITLE_ID
étrangère

Oracle University and OMNIDATA. use only


Type de NUMBER NUMBER VARCHAR2
données
Longueur 10 10 15

d. Nom de la table : RENTAL

Nom de la BOOK_ MEMBER_ COPY_ ACT_RET_ EXP_RET_ TITLE_


colonne DATE ID ID DATE DATE ID
Type de clé PK PK,FK1 PK,FK2 PK,FK2
Valeur par Date Date système
défaut système + 2 jours
Table MEMBER TITLE_ TITLE_
de clé COPY COPY
étrangère
Colonne de MEMBER_I COPY_ TITLE_ID
clé D ID
étrangère
Type de DATE NUMBER NUMBER DATE DATE NUMBER
données
Longueur 10 10 10

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 16
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

e. Nom de la table : RESERVATION


Nom de la RES_ MEMBER_ TITLE_
colonne DATE ID ID
Type de clé PK PK,FK1 PK,FK2
Null/Unique NN,U NN,U NN
Table de clé MEMBER TITLE
étrangère
Colonne de clé MEMBER_ID TITLE_ID
étrangère
Type de DATE NUMBER NUMBER
données
Longueur 10 10

Oracle University and OMNIDATA. use only


2. Vérifiez dans le navigateur de connexions de SQL Developer que les tables ont été créées
correctement.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 17
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

3. Créez des séquences permettant d'identifier de façon unique chaque ligne de la table
MEMBER et de la table TITLE.

a. Numéro de membre pour la table MEMBER : Commencez par 101 et n'autorisez pas la
mise en mémoire cache des valeurs. Nommez la séquence MEMBER_ID_SEQ.

b. Numéro de titre pour la table TITLE : Commencez par 92 et n'autorisez pas la mise
en mémoire cache des valeurs. Nommez la séquence TITLE_ID_SEQ.

c. Vérifiez l'existence des séquences dans le navigateur de connexions de SQL


Developer.

Oracle University and OMNIDATA. use only


4. Ajoutez des données aux tables. Créez un script pour chaque jeu de données à ajouter.

a. Ajoutez des titres de film à la table TITLE. Ecrivez un script permettant d'entrer les
informations relatives à un film.
Enregistrez les instructions dans un script nommé lab_apcs_4a.sql. Utilisez les
séquences pour identifier chaque titre de façon unique. Entrez les dates de sortie au
format DD-MON-YYYY. N'oubliez pas que les apostrophes doivent être gérées de
façon spéciale dans un champ de type caractère. Vérifiez vos ajouts.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 18
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Title Description Rating Category Release_date


Willie and All of Willie’s friends make a G CHILD 05-OCT-1995
Christmas Too Christmas list for Santa, but
Willie has yet to add his own
wish list.
Alien Again Yet another installation of R SCIFI 19-MAY-1995
science fiction history. Can
the heroine save the planet
from the alien life form?
The Glob A meteor crashes near a small NR SCIFI 12-AUG-1995
American town and unleashes
carnivorous goo in this classic.
My Day Off With a little luck and a lot of PG COMEDY 12-JUL-1995
ingenuity, a teenager skips
school for a day in New York.

Oracle University and OMNIDATA. use only


Miracles on Ice A six-year-old has doubts PG DRAMA 12-SEP-1995
about Santa Claus, but she
discovers that miracles really
do exist.
Soda Gang After discovering a cache of NR ACTION 01-JUN-1995
drugs, a young couple find
themselves pitted against a
vicious gang.

b. Ajoutez des données à la table MEMBER. Enregistrez les instructions d'insertion dans
un script nommé lab_apcs_4b.sql. Exécutez les commandes du script. Veillez à
utiliser la séquence pour ajouter les numéros de membre.
First_
Name Last_Name Address City Phone Join_Date
Carmen Velasquez 283 King Seattle 206-899-6666 08-MAR-1990
Street
LaDoris Ngao 5 Modrany Bratislava 586-355-8882 08-MAR-1990

Midori Nagayama 68 Via Sao Paolo 254-852-5764 17-JUN-1991


Centrale
Mark Quick-to-See 6921 King Lagos 63-559-7777 07-APR-1990
Way
Audry Ropeburn 86 Chu Street Hong Kong 41-559-87 18-JAN-1991

Molly Urguhart 3035 Laurier Quebec 418-542-9988 18-JAN-1991

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 19
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

c. Ajoutez les exemplaires de film suivants dans la table TITLE_COPY :


Remarque : Les numéros TITLE_ID doivent être à disposition pour cet exercice.
Title Copy_Id Status Title Copy_Id

Willie and 1 AVAILABLE Willie and Christmas 1


Christmas Too Too
Alien Again 1 AVAILABLE Alien Again 1

2 RENTED 2

The Glob 1 AVAILABLE The Glob 1

My Day Off 1 AVAILABLE My Day Off 1

Oracle University and OMNIDATA. use only


2 AVAILABLE 2

3 RENTED 3

Miracles on Ice 1 AVAILABLE Miracles on Ice 1

Soda Gang 1 AVAILABLE Soda Gang 1

d. Ajoutez les locations suivantes à la table RENTAL :


Remarque : Le numéro de titre peut différer selon le numéro de séquence.
Title_ Id Copy_ Member_Id
Id Book_date Exp_Ret_Date
92 1 101 3 days ago 1 day ago

93 2 101 1 day ago 1 day from now

95 3 102 2 days ago Today

97 1 106 4 days ago 2 days ago

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 20
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

5. Créez une vue nommée TITLE_AVAIL affichant le titre des films, la disponibilité de
chaque exemplaire, ainsi que la date de retour prévue si le statut est Rented. Interrogez
toutes les lignes de la vue. Triez les résultats par titre.
Remarque : Les résultats obtenus peuvent varier.

Oracle University and OMNIDATA. use only


6. Modifiez les données des tables.

a. Ajoutez un nouveau film. Son titre (Title) est "Interstellar Wars", sa valeur Rating est
PG et il est classé dans la catégorie (Category) SCIFI. Sa date de sortie (Release_date)
est 07-JUL-77 et sa description, "Futuristic interstellar action movie. Can the rebels
save the humans from the evil empire?" Veillez à ajouter un enregistrement du film
pour deux exemplaires.

b. Entrez deux réservations. L'une est pour Carmen Velasquez, qui souhaite louer
"Interstellar Wars". L'autre est pour Mark Quick-to-See, qui souhaite louer "Soda
Gang".

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 21
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

7. Apportez une modification à l'une des tables.

a. Exécutez le script lab_apcs_7a.sql situé dans le dossier


D:\labs\sql1\labs pour ajouter une colonne PRICE à la table TITLE afin
d'enregistrer le prix d'achat de la vidéo. Vérifiez vos modifications.

Oracle University and OMNIDATA. use only


Title Price
Willie and Christmas Too 25
Alien Again 35
The Glob 35
My Day Off 35
Miracles on Ice 30
Soda Gang 35
Interstellar Wars 29

b. Créez un script nommé lab_apcs_7b.sql qui contient des instructions UPDATE


mettant à jour chaque vidéo avec un prix selon la liste précédente. Exécutez les
commandes du script.
Remarque : Les numéros TITLE_ID doivent être disponibles pour cet exercice.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 22
Exercices complémentaires : Etude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

8. Créez un état qui contient l'historique de location de vidéos de chaque client. Veillez à
inclure le nom du client, les films loués, les dates de location et la durée des locations.
Totalisez le nombre de locations pour tous les clients pour la période de référence.
Enregistrez les commandes générant l'état dans un fichier script nommé
lab_apcs_8.sql.
Remarque : Les résultats obtenus peuvent varier.

Oracle University and OMNIDATA. use only

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Exercices complémentaires - 23
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and OMNIDATA. use only


THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

_____________________
_____________________

complémentaires
Solutions des exercices

Oracle University and OMNIDATA. use only


Solutions des exercices complémentaires
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Vous pouvez effectuer les exercices supplémentaires ci-après après avoir vu les sujets
suivants : instruction SQL SELECT de base, commandes SQL Developer de base et fonctions
SQL.

1. Le département des ressources humaines a besoin des données concernant tous les
commis aux stock embauchés après 1997.
SELECT *
FROM employees
WHERE job_id = 'ST_CLERK'
AND hire_date > '31-DEC-1997';

2. Le département des ressources humaines a besoin d'un état des employés qui perçoivent
une commission. Affichez le nom, le poste, le salaire et la commission de ces employés.
Triez les données par ordre décroissant de salaire.

Oracle University and OMNIDATA. use only


SELECT last_name, job_id, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC;

3. Pour des raisons de budgétisation, le département des ressources humaines a besoin d'un
état sur les augmentations prévues. L'état doit afficher les employés qui ne perçoivent pas
de commission, mais bénéficient d'une augmentation de salaire de 10 % (arrondissez).
SELECT 'The salary of '||last_name||' after a 10% raise is '
|| ROUND(salary*1.10) "New salary"
FROM employees
WHERE commission_pct IS NULL;

4. Créez un état présentant les employés et leur ancienneté. Affichez le nom de tous les
employés, ainsi que le nombre d'années et le nombre de mois complets depuis leur
embauche. Triez l'état en fonction de l'ancienneté. L'employé présentant la plus grande
ancienneté doit apparaître au début de la liste.
SELECT last_name,
TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date) / 12) YEARS,
TRUNC(MOD(MONTHS_BETWEEN(SYSDATE, hire_date), 12)) MONTHS
FROM employees
ORDER BY years DESC, MONTHS desc;

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 2
Solutions des exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

5. Affichez les employés dont le nom commence par les lettres "J", "K", "L" ou "M".
SELECT last_name
FROM employees
WHERE SUBSTR(last_name, 1,1) IN ('J', 'K', 'L', 'M');

6. Créez un état affichant tous les employés, et indiquant par Yes ou No s'ils perçoivent une
commission. Dans l'interrogation, utilisez l'expression DECODE.
SELECT last_name, salary,
decode(commission_pct, NULL, 'No', 'Yes') commission
FROM employees;

Oracle University and OMNIDATA. use only

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 3
Solutions des exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Vous pouvez effectuer les exercices complémentaires ci-après après avoir vu les sujets
suivants : instruction SQL SELECT de base, commandes SQL Developer de base, fonctions
SQL, jointures et fonctions de groupe.
7. Créez un état affichant le nom de département, l'ID de lieu, le nom, l'intitulé de poste et le
salaire des employés qui travaillent dans un lieu spécifique. Invitez l'utilisateur à indiquer
le lieu.
a. A l'invite, indiquez la valeur 1800 pour location_id.
SELECT d.department_name, d.location_id, e.last_name, e.job_id,
e.salary
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.location_id = &location_id;

8. Cherchez le nombre d'employés dont le nom se termine par la lettre "n". Créez deux

Oracle University and OMNIDATA. use only


solutions possibles.
SELECT COUNT(*)
FROM employees
WHERE last_name LIKE '%n';
--or
SELECT COUNT(*)
FROM employees
WHERE SUBSTR(last_name, -1) = 'n';

9. Créez un état affichant le nom, le lieu et le nombre d'employés pour chaque département.
Vérifiez que l'état inclut également les départements sans employés.
SELECT d.department_id, d.department_name,
d.location_id, COUNT(e.employee_id)
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id
GROUP BY d.department_id, d.department_name, d.location_id;

10. Le département des ressources humaines a besoin de connaître les intitulés de poste des
départements 10 et 20. Créez un état affichant les ID de poste de ces départements.
SELECT DISTINCT job_id
FROM employees
WHERE department_id IN (10, 20);

11. Créez un état affichant les postes trouvés dans les départements Administration et
Executive. Affichez aussi le nombre d'employés occupant ces postes. Affichez en premier
le poste occupé par le plus grand nombre d'employés.
SELECT e.job_id, count(e.job_id) FREQUENCY
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_name IN ('Administration', 'Executive')
GROUP BY e.job_id
ORDER BY FREQUENCY DESC;

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 4
Solutions des exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Vous pouvez effectuer les exercices complémentaires ci-après après avoir vu les sujets
suivants : instruction SQL SELECT de base, commandes SQL Developer de base, fonctions
SQL, jointures, fonctions de groupe et sous-interrogations.

12. Affichez tous les employés qui ont été embauchés au cours de la première moitié du mois
(avant le 16 du mois).
SELECT last_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'DD') < 16;

13. Créez un état affichant les informations suivantes concernant tous les employés : nom,
salaire et salaire exprimé en milliers de dollars.
SELECT last_name, salary, TRUNC(salary, -3)/1000 Thousands
FROM employees;

Oracle University and OMNIDATA. use only


14. Affichez tous les employés dont le manager perçoit un salaire supérieur à 15 000 $.
Affichez les données suivantes : nom d'employé, nom du manager, salaire du manager et
niveau de salaire du manager.
SELECT e.last_name, m.last_name manager, m.salary, j.grade_level
FROM employees e JOIN employees m
ON e.manager_id = m.employee_id
JOIN job_grades j
ON m.salary BETWEEN j.lowest_sal AND j.highest_sal
AND m.salary > 15000;

15. Affichez le numéro du département, le nom, le nombre d'employés et le salaire moyen de


tous les départements, ainsi que le nom, le salaire et le poste de tous les employés de
chaque département.
SELECT d.department_id, d.department_name,
count(e1.employee_id) employees,
NVL(TO_CHAR(AVG(e1.salary), '99999.99'), 'No average' )
avg_sal,
e2.last_name, e2.salary, e2.job_id
FROM departments d RIGHT OUTER JOIN employees e1
ON d.department_id = e1.department_id
RIGHT OUTER JOIN employees e2
ON d.department_id = e2.department_id
GROUP BY d.department_id, d.department_name, e2.last_name, e2.salary,
e2.job_id
ORDER BY d.department_id, employees;

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 5
Solutions des exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

16. Créez un état affichant l'ID de département et le salaire le plus bas du département
présentant le salaire moyen le plus élevé.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id);

17. Créez un état affichant les départements qui ne comptent aucun commercial. Incluez dans
le résultat l'ID de département, le nom de département et le lieu.
SELECT *
FROM departments
WHERE department_id NOT IN(SELECT department_id

Oracle University and OMNIDATA. use only


FROM employees
WHERE job_id = 'SA_REP'
AND department_id IS NOT NULL);

18. Créez les états statistiques ci-après pour le département des ressources humaines. Incluez
l'ID de département, le nom de département et le nombre d'employés pour chaque
département qui correspond aux critères suivants :

a. Département qui compte moins de trois employés :


SELECT d.department_id, d.department_name, COUNT(*)
FROM departments d JOIN employees e
ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) < 3;

b. Département qui comporte le nombre le plus élevé d'employés :


SELECT d.department_id, d.department_name, COUNT(*)
FROM departments d JOIN employees e
ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM employees
GROUP BY department_id);

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 6
Solutions des exercices complémentaires (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

c. Département qui comporte le nombre le plus bas d'employés :


SELECT d.department_id, d.department_name, COUNT(*)
FROM departments d JOIN employees e
ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) = (SELECT MIN(COUNT(*))
FROM employees
GROUP BY department_id);

19. Créez un état affichant l'ID d'employé, le nom, le salaire, l'ID de département et le salaire
moyen du département pour tous les employés.
SELECT e.employee_id, e.last_name, e.department_id, e.salary,
AVG(s.salary)
FROM employees e JOIN employees s

Oracle University and OMNIDATA. use only


ON e.department_id = s.department_id
GROUP BY e.employee_id, e.last_name, e.department_id, e.salary;

20. Affichez tous les employés qui ont été embauchés le jour de la semaine présentant le
nombre le plus élevé d'embauches.
SELECT last_name, TO_CHAR(hire_date, 'DAY') day
FROM employees
WHERE TO_CHAR(hire_date, 'Day') =
(SELECT TO_CHAR(hire_date, 'Day')
FROM employees
GROUP BY TO_CHAR(hire_date, 'Day')
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM employees
GROUP BY TO_CHAR(hire_date, 'Day')));

21. Créez une liste d'anniversaires basée sur la date d'embauche des employés. Triez les
anniversaires par ordre croissant.
SELECT last_name, TO_CHAR(hire_date, 'Month DD') BIRTHDAY
FROM employees
ORDER BY TO_CHAR(hire_date, 'DDD');

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 7
Exercices complémentaires : Solutions de l'étude de cas
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

1. Créez les tables en vous conformant aux indications des tableaux ci-après. Choisissez les
types de données appropriés et veillez à indiquer les contraintes d'intégrité.

a. Nom de la table : MEMBER


CREATE TABLE member
(member_id NUMBER(10)
CONSTRAINT member_member_id_pk PRIMARY KEY,
last_name VARCHAR2(25)
CONSTRAINT member_last_name_nn NOT NULL,
first_name VARCHAR2(25),
address VARCHAR2(100),
city VARCHAR2(30),
phone VARCHAR2(15),
join_date DATE DEFAULT SYSDATE
CONSTRAINT member_join_date_nn NOT NULL);

Oracle University and OMNIDATA. use only


b. Nom de la table : TITLE
CREATE TABLE title
(title_id NUMBER(10)
CONSTRAINT title_title_id_pk PRIMARY KEY,
title VARCHAR2(60)
CONSTRAINT title_title_nn NOT NULL,
description VARCHAR2(400)
CONSTRAINT title_description_nn NOT NULL,
rating VARCHAR2(4)
CONSTRAINT title_rating_ck CHECK
(rating IN ('G', 'PG', 'R', 'NC17', 'NR')),
category VARCHAR2(20)
CONSTRAINT title_category_ck CHECK
(category IN ('DRAMA', 'COMEDY', 'ACTION',
'CHILD', 'SCIFI', 'DOCUMENTARY')),
release_date DATE);

c. Nom de la table : TITLE_COPY


CREATE TABLE title_copy
(copy_id NUMBER(10),
title_id NUMBER(10)
CONSTRAINT title_copy_title_if_fk REFERENCES title(title_id),
status VARCHAR2(15)
CONSTRAINT title_copy_status_nn NOT NULL
CONSTRAINT title_copy_status_ck CHECK (status IN
('AVAILABLE', 'DESTROYED','RENTED', 'RESERVED')),
CONSTRAINT title_copy_copy_id_title_id_pk
PRIMARY KEY (copy_id, title_id));

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 8
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

d. Nom de la table : RENTAL


CREATE TABLE rental
(book_date DATE DEFAULT SYSDATE,
member_id NUMBER(10)
CONSTRAINT rental_member_id_fk REFERENCES member(member_id),
copy_id NUMBER(10),
act_ret_date DATE,
exp_ret_date DATE DEFAULT SYSDATE + 2,
title_id NUMBER(10),
CONSTRAINT rental_book_date_copy_title_pk
PRIMARY KEY (book_date, member_id, copy_id,title_id),
CONSTRAINT rental_copy_id_title_id_fk
FOREIGN KEY (copy_id, title_id)
REFERENCES title_copy(copy_id, title_id));

Oracle University and OMNIDATA. use only


e. Nom de la table : RESERVATION
CREATE TABLE reservation
(res_date DATE,
member_id NUMBER(10)
CONSTRAINT reservation_member_id REFERENCES member(member_id),
title_id NUMBER(10)
CONSTRAINT reservation_title_id REFERENCES title(title_id),
CONSTRAINT reservation_resdate_mem_tit_pk PRIMARY KEY
(res_date, member_id, title_id));

2. Vérifiez dans le navigateur de connexions de SQL Developer que les tables ont été créées
correctement.

a. Dans le navigateur de connexions, développez Connections > myconnection > Tables.

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 9
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

3. Créez des séquences permettant d'identifier de façon unique chaque ligne de la table
MEMBER et de la table TITLE.

a. Numéro de membre pour la table MEMBER : Commencez par 101 et n'autorisez pas la
mise en mémoire cache des valeurs. Nommez la séquence MEMBER_ID_SEQ.
CREATE SEQUENCE member_id_seq
START WITH 101
NOCACHE;

b. Numéro de titre pour la table TITLE : commencez par 92 et n'autorisez pas la mise en
mémoire cache des valeurs. Nommez la séquence TITLE_ID_SEQ.
CREATE SEQUENCE title_id_seq
START WITH 92

Oracle University and OMNIDATA. use only


NOCACHE;

c. Vérifiez l'existence des séquences dans le navigateur de connexions de SQL


Developer.

a. Dans le navigateur de connexions, développez Sequences (en supposant que le


noeud myconnection est développé).

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 10
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

4. Ajoutez des données aux tables. Créez un script pour chaque jeu de données à ajouter.
a. Ajoutez des titres de film à la table TITLE. Ecrivez un script permettant d'entrer les
informations relatives à un film.
Enregistrez les instructions dans un script nommé lab_apcs_4a.sql. Utilisez les
séquences pour identifier chaque titre de façon unique. Entrez les dates de sortie au
format DD-MON-YYYY. N'oubliez pas que les apostrophes doivent être gérées de
façon spéciale dans un champ de type caractère. Vérifiez vos ajouts.
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Willie and Christmas Too',
'All of Willie''s friends make a Christmas list for
Santa, but Willie has yet to add his own wish list.',
'G', 'CHILD', TO_DATE('05-OCT-1995','DD-MON-YYYY'))
/

Oracle University and OMNIDATA. use only


INSERT INTO title(title_id , title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Alien Again', 'Yet another
installment of science fiction history. Can the
heroine save the planet from the alien life form?',
'R', 'SCIFI', TO_DATE( '19-MAY-1995','DD-MON-YYYY'))
/
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'The Glob', 'A meteor crashes
near a small American town and unleashes carnivorous
goo in this classic.', 'NR', 'SCIFI',
TO_DATE( '12-AUG-1995','DD-MON-YYYY'))
/
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'My Day Off', 'With a little
luck and a lot ingenuity, a teenager skips school for
a day in New York.', 'PG', 'COMEDY',
TO_DATE( '12-JUL-1995','DD-MON-YYYY'))
/
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Miracles on Ice', 'A six-year-old has
doubts about Santa Claus, but she discovers that miracles really do
exist.', 'PG', 'DRAMA',
TO_DATE('12-SEP-1995','DD-MON-YYYY'))

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 11
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

/
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Soda Gang', 'After discovering a
cache of drugs, a young couple find themselves pitted against a vicious
gang.', 'NR', 'ACTION', TO_DATE('01-JUN-1995','DD-MON-YYYY'))
/

...
COMMIT
/
SELECT title
FROM title;

Oracle University and OMNIDATA. use only

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 12
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

b. Ajoutez des données à la table MEMBER. Placez les instructions d'insertion dans un
script nommé lab_apcs_4b.sql. Exécutez les commandes du script. Veillez à
utiliser la séquence pour ajouter les numéros de membre.
SET VERIFY OFF
INSERT INTO member(member_id, first_name, last_name,
address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Carmen', 'Velasquez',
'283 King Street', 'Seattle', '206-899-6666', TO_DATE('08-MAR-
1990',
'DD-MM-YYYY'))
/
INSERT INTO member(member_id, first_name, last_name,
address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'LaDoris', 'Ngao',
'5 Modrany', 'Bratislava', '586-355-8882', TO_DATE('08-MAR-

Oracle University and OMNIDATA. use only


1990',
'DD-MM-YYYY'))
/
INSERT INTO member(member_id, first_name, last_name,
address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Midori', 'Nagayama',
'68 Via Centrale', 'Sao Paolo', '254-852-5764', TO_DATE('17-
JUN-1991',
'DD-MM-YYYY'))
/
INSERT INTO member(member_id, first_name, last_name,
address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Mark', 'Quick-to-See',
'6921 King Way', 'Lagos', '63-559-7777', TO_DATE('07-APR-1990',
'DD-MM-YYYY'))
/
INSERT INTO member(member_id, first_name, last_name,
address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Audry', 'Ropeburn',
'86 Chu Street', 'Hong Kong', '41-559-87', TO_DATE('18-JAN-
1991',
'DD-MM-YYYY'))
/
INSERT INTO member(member_id, first_name, last_name,
address, city, phone, join_date)
VALUES (member_id_seq.NEXTVAL, 'Molly', 'Urguhart',
'3035 Laurier', 'Quebec', '418-542-9988', TO_DATE('18-JAN-
1991',
'DD-MM-YYYY'));
/
COMMIT
SET VERIFY ON

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 13
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

c. Ajoutez les exemplaires de film suivants dans la table TITLE_COPY :


Remarque : Les numéros TITLE_ID doivent être à disposition pour cet exercice.
INSERT INTO title_copy(copy_id, title_id, status)
VALUES (1, 92, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id, status)
VALUES (1, 93, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id, status)
VALUES (2, 93, 'RENTED')
/
INSERT INTO title_copy(copy_id, title_id, status)
VALUES (1, 94, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id, status)

Oracle University and OMNIDATA. use only


VALUES (1, 95, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id,status)
VALUES (2, 95, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id,status)
VALUES (3, 95, 'RENTED')
/
INSERT INTO title_copy(copy_id, title_id,status)
VALUES (1, 96, 'AVAILABLE')
/
INSERT INTO title_copy(copy_id, title_id,status)
VALUES (1, 97, 'AVAILABLE')


Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 14
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

d. Ajoutez les locations suivantes à la table RENTAL :


Remarque : L'ID de titre peut différer selon le numéro de séquence.
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (92, 1, 101, sysdate-3, sysdate-1, sysdate-2)
/
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (93, 2, 101, sysdate-1, sysdate-1, NULL)
/
INSERT INTO rental(title_id, copy_id, member_id,
book_date, exp_ret_date, act_ret_date)
VALUES (95, 3, 102, sysdate-2, sysdate, NULL)
/
INSERT INTO rental(title_id, copy_id, member_id,

Oracle University and OMNIDATA. use only


book_date, exp_ret_date,act_ret_date)
VALUES (97, 1, 106, sysdate-4, sysdate-2, sysdate-2)
/
COMMIT
/

5. Créez une vue nommée TITLE_AVAIL affichant le titre des films, la disponibilité de
chaque exemplaire, ainsi que la date de retour prévue si le statut est Rented. Interrogez
toutes les lignes de la vue. Triez les résultats par titre.

Remarque : Les résultats obtenus peuvent varier.


CREATE VIEW title_avail AS
SELECT t.title, c.copy_id, c.status, r.exp_ret_date
FROM title t JOIN title_copy c
ON t.title_id = c.title_id
FULL OUTER JOIN rental r
ON c.copy_id = r.copy_id
AND c.title_id = r.title_id;

SELECT *
FROM title_avail
ORDER BY title, copy_id;

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 15
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

6. Modifiez les données des tables.

a. Ajoutez un nouveau film. Son titre (Title) est "Interstellar Wars", sa valeur Rating est
PG et il est classé dans la catégorie (Category) SCIFI. Sa date de sortie (Release_date)
est 07-JUL-77 et sa description, "Futuristic interstellar action movie. Can the rebels
save the humans from the evil empire?" Veillez à ajouter un enregistrement du film
pour deux exemplaires.
INSERT INTO title(title_id, title, description, rating,
category, release_date)
VALUES (title_id_seq.NEXTVAL, 'Interstellar Wars',
'Futuristic interstellar action movie. Can the
rebels save the humans from the evil empire?',
'PG', 'SCIFI', '07-JUL-77')
/
INSERT INTO title_copy (copy_id, title_id, status)

Oracle University and OMNIDATA. use only


VALUES (1, 98, 'AVAILABLE')
/
INSERT INTO title_copy (copy_id, title_id, status)
VALUES (2, 98, 'AVAILABLE')
/

b. Entrez deux réservations. L'une est pour Carmen Velasquez, qui souhaite louer
"Interstellar Wars". L'autre est pour Mark Quick-to-See, qui souhaite louer "Soda
Gang".
INSERT INTO reservation (res_date, member_id, title_id)
VALUES (SYSDATE, 101, 98)
/
INSERT INTO reservation (res_date, member_id, title_id)
VALUES (SYSDATE, 104, 97)
/

7. Apportez une modification à l'une des tables.

a. Exécutez le script lab_apcs_7a.sql situé dans le dossier


D:\labs\sql1\labs pour ajouter une colonne PRICE à la table TITLE afin
d'enregistrer le prix d'achat de la vidéo. Vérifiez vos modifications.
ALTER TABLE title
ADD (price NUMBER(8,2));

DESCRIBE title

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 16
Exercices complémentaires : Solutions de l'étude de cas (suite)
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

b. Créez un script nommé lab_apcs_7b.sql qui contient des instructions UPDATE


mettant à jour chaque vidéo avec un prix selon la liste fournie. Exécutez les
commandes du script.
Remarque : Les numéros TITLE_ID doivent être disponibles pour cet exercice.
SET ECHO OFF
SET VERIFY OFF
UPDATE title
SET price = &price
WHERE title_id = &title_id;
SET VERIFY OFF
SET ECHO OFF

8. Créez un état qui contient l'historique de location de vidéos de chaque client. Veillez à
inclure le nom du client, les films loués, les dates de location et la durée des locations.

Oracle University and OMNIDATA. use only


Totalisez le nombre de locations pour tous les clients pour la période de référence.
Enregistrez les commandes générant l'état dans un fichier script nommé
lab_apcs_8.sql.
Remarque : Les résultats obtenus peuvent varier.
SELECT m.first_name||' '||m.last_name MEMBER, t.title,
r.book_date, r.act_ret_date - r.book_date DURATION
FROM member m
JOIN rental r
ON r.member_id = m.member_id
JOIN title t
ON r.title_id = t.title_id
ORDER BY member;

Oracle Database 11g : Les fondamentaux du langage SQL (I)


Solutions des exercices complémentaires - 17
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED

Oracle University and OMNIDATA. use only

Vous aimerez peut-être aussi