PRÉREQUIS :
LES FONDAMENTAUX DES BASES DE DONNÉES RELATIONNELLES
Adel DAHMANE
adeldahmane@episousse.com.tn
Table des matières
7. Les sous-requêtes..................................................................................................... 40
7.1 Notes de cours ........................................................................................................... 40
7.1.1 Définition d’une sous-requête.......................................................................... 40
7.1.2 Pourquoi utiliser les sous-requêtes ? ............................................................... 40
7.1.3 Types de sous-requêtes .................................................................................... 41
7.2 Requêtes .................................................................................................................... 43
Objectifs
Au terme de ce chapitre, l’étudiant devra :
➢ Réviser quelques concepts concernant les bases de données relationnelles.
➢ Définir le serveur de données Oracle.
➢ Expliquer le schéma de la base de données HR.
Une base de données informatique est un ensemble de données qui ont été stockées sur un
support informatique, et organisées et structurées de manière à pouvoir facilement consulter
et modifier leur contenu.
Une base de données seule ne suffit donc pas, il est nécessaire d'avoir également :
• un système permettant de gérer cette base.
• un langage pour transmettre des instructions à la base de données (par l'intermédiaire du
système de gestion).
0.1.2 SGBD
La plupart des SGBD sont basés sur un modèle Client-Serveur. C'est-à-dire que la base de
données se trouve sur un serveur, et pour interagir avec cette base de données, il faut utiliser
un logiciel "client" qui va interroger le serveur et transmettre la réponse que le serveur lui
aura donnée, ce langage est le SQL.
SQL (Structured Query Language ou Set Query Language) est la norme standard internationale
pour la gestion des données stockées dans les bases de données relationnelles. Le langage
SQL est un standard, c'est-à-dire que quel que soit le SGBD utilisé, on se servira du langage
SQL. Mais, il y a en fait quelques petites variantes d'un SGBD à l'autre, mais cela concerne
généralement les commandes les plus avancées.
Voici les 16 commandes SQL, séparées en groupes couramment utilisés :
• Data Manipulation Language (DML) : SELECT, INSERT, UPDATE, DELETE & MERGE
• Data Definition Language (DDL) : CREATE, ALTER, DROP, RENAME, TRUNCATE & COMMENT
• Data Control Language (DCL) : GRANT & REVOKE
• Transaction Control Language (TCL) : COMMIT, ROLLBACK & SAVEPOINT
Un serveur Oracle est composé d'une instance Oracle et d'une base de données Oracle.
L’accès à la base de données se fait à travers l’instance Oracle (voir figure 1.1).
Figure 1-1: Un serveur de données Oracle = instance Oracle + base de données [5].
L’instance Oracle est un ensemble de processus et de structures de mémoire. Elle existe dans
le CPU et dans la mémoire du nœud de serveur temporairement.
SGA (System Global Area) est une zone mémoire utilisée pour partager les informations entre
les différents processus Oracle.
Une instance peut être démarré ou arrêtée. Les utilisateurs d’une base de données établissent
des sessions sur l’instance, et l’instance gère ensuite tous les accès à la base de données. Il est
impossible dans l’environnement Oracle pour tout utilisateur d’avoir un contact direct avec la
base de données.
Pour Oracle, une instance ne gère qu’une seule base de données tandis que pour Microsoft
SQL Server, Sybase et autres, l’instance peut gérer plusieurs bases de données.
Oracle lie chaque objet (table, index, vue, …) au compte utilisateur qui l’a créé. On parle alors
de propriétaire de l’objet ou schéma. Un schéma est donc, un compte utilisateur qui possède
des tables, des indexes et autres objets. Un utilisateur est associé à un seul schéma.
Tout au long de ce support, il y a des exemples d'exécution du code SQL sur des tables de
données. Ces exemples utilisent des tables d’un schéma de démonstration fourni par Oracle :
le schéma HR. C’est un schéma composé de sept tables qui simulent une application de
ressources humaines simple. La figure 1.2 montre les colonnes de chaque table du schéma
HR.
Deux des relations représentées sur la figure 1.2 peuvent ne pas être immédiatement
compréhensibles. Tout d'abord, il existe une relation réflexive un à plusieurs entre
EMPLOYEES et EMPLOYEES. Cela signifie que de nombreux employés peuvent avoir un même
chef, mais le chef est également un employé. Cette relation est mise en œuvre par la colonne
manager_id dans EMPLOYEES qui représente l’EMPLOYEE_ID du chef.
Description du Schéma HR :
Commandes utiles :
• Se connecter en tant qu’administrateur par défaut (défini lors de l’installation) :
connect SYSTEM/SYSTEM ;
• Activer le schéma prédéfini Oracle HR :
alter user hr account unlock identified by hr ;
• Afficher l’utilisateur (login) connecté :
show user ;
• Afficher la liste des tables de l’utilisateur en cours :
select table_name from user_tables ;
select * from tab ;
• Créer un nouvel utilisateur :
create user login identified by password ;
• Accorder à un utilisateur les rôles connect et resource (regroupant plusieurs privilèges)
grant connect, resource to login ;
• Se connecter :
connect login/password ;
Exercice :
The OE (Order Entry) schema includes these tables:
■ CUSTOMERS
■ INVENTORIES
■ ORDERS
■ ORDER_ITEMS
■ PRODUCT_DESCRIPTIONS
■ PRODUCT_INFORMATION
■ WAREHOUSES
• A CUSTOMER can place many ORDERS, and an order can have many ORDER_ITEMS.
• Each item will be of one product, described by its PRODUCT_INFORMATION, and each product may
have several PRODUCT_DESCRIPTIONS, in different languages.
• There are a number of WAREHOUSES, each of which can store many products.
• One product may be stored in many warehouses.
• An INVENTORIES entry relates products to warehouses, showing how much of each product is in
each warehouse.
Sketch out this schema as an entity-relationship diagram, showing the many-to-one connections
between the tables and ensuring that there are no many-to-many connections.
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Écrire une requête de base avec les clauses : Select et From.
➢ Déterminer les valeurs à afficher.
La commande DESCRIBE donne des informations sur la table comme le nom de la table, le
propriétaire de la table, des détails sur les colonnes qui la composent et sa taille de stockage
physique sur le disque.
La syntaxe de cette commande :
Le mot clé DESCRIBE peut être raccourci à DESC. Si vous décrivez une table qui appartient au
schéma auquel vous avez connecté, la partie <SCHEMA> de la commande peut être omise.
La requête SELECT se base sur les concepts de la théorie des relations : projection, sélection
et jointure. Ce chapitre traite la projection, c’est-à-dire, limiter les colonnes affichées par la
requête SELECT.
1.2 REQUÊTES
i) Afficher les lignes suivantes à partir de la table JOBS en utilisant les colonnes JOB_ID
et JOB_TITLE:
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Écrire une requête avec les clauses : Select, From, Where et Order By.
➢ Appliquer les opérateurs de comparaison et les opérateurs logiques.
➢ Utiliser les variables de substitution.
Durée estimative : 1h
Ce chapitre discute le deuxième concept de la théorie des relations sur lequel se base la
requête SELECT, c’est la sélection. Elle consiste à réduire le nombre de lignes affichées par la
requête SELECT. Cette réduction se fait à l’aide de :
• La clause WHERE.
• Des opérateurs de comparaison : =, <=, BETWEEN, IN, ANY, ALL, LIKE et IS NULL.
• Des opérateurs logiques : AND, OR et NOT.
2.1.2 LE TRI
Pour trier le résultat de la requête SELECT, if faut utiliser la clause ORDER BY, c’est la dernière
clause de la requête SELECT :
Une variable de substitution permet d’utiliser une requête plusieurs fois. Elle stocke
temporairement une valeur en utilisant le caractère & ou &&. Elle peut être utilisée pour
substituer une valeur à tout élément de la requête SQL : nom d’une table, nom d’une colonne,
les conditions de WHERE, la clause ORDER BY.
2.2 REQUÊTES
Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :
a) Donner les noms des employés dont le salaire est égal à 10000.
b) Afficher les noms des employés dont le JOB_ID est égal à SA_REP.
c) Afficher les noms des employés dont la date d'embauche (hire_date) est égale à
07/06/02.
d) Afficher les noms des employés dont le salaire est inférieur ou égal à 2500.
e) Afficher les noms des employés dont le salaire est compris entre 2500 et 3000.
f) Donner les noms des employés dont le salaire est égal à 1000 ou 4000 ou 6000.
g) Afficher les pays (COUNTRIES) dont la cinquième lettre du nom est ‘i’.
h) Donner les noms des employés dont la valeur de commission_pct est nulle.
i) Obtenir les employés dont le prénom commence par ‘J’, le nom contient la lettre ‘o’, la
valeur de leur commission_pct est supérieure à 0.1 et qui ont été recruté après le 1 juin
1996.
j) Obtenir les employés dont le prénom commence par ‘B’ ou bien la valeur de leur
commission_pct est supérieure à 0.35.
k) Obtenir les employés dont le poste (job_id) est ni IT_PROG ni SA_REP ni ST_CLERK.
l) Afficher les employés dont le poste est égal à SA_MAN ou MK_MAN. Le résultat doit être
trié par ordre croissant selon la colonne commission_pct.
m) Obtenir le même résultat que la requête précédente mais trié dans l’ordre décroissant
selon la colonne commission_pct.
n) Obtenir le même résultat que la requête précédente mais les lignes contenant des valeurs
nulles dans la colonne de tri sont affichées à la fin.
o) Pour chaque employé afficher son nom, son salaire et le numéro de son département. Le
résultat doit être affiché par ordre croissant du numéro de département puis par ordre
décroissant du salaire.
r) Afficher le numéro et le nom de l’employé ainsi qu’une autre colonne spécifiée par
l’utilisateur (utilisée aussi comme colonne de tri). Le résultat doit satisfaire une condition
donnée par l’utilisateur (Utiliser uniquement la table EMPLOYEES).
3.Fonctions « Monoligne »
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Appliquer les fonctions mono-lignes.
➢ Utiliser les fonctions de gestion des chaînes de caractères.
➢ Utiliser les fonctions de gestion des dates.
➢ Utiliser les fonctions d’arrondissement.
Durée estimative : 1h
Fonction Résultat
Concat('Hello', 'World') HelloWorld
Substr('HelloWorld',1,5) Hello
Length('HelloWorld') 10
Instr('HelloWorld', 'W') 6
Lpad(salary,10,'*') *****24000
Fonction Résultat
Lower('Cours SQL') cours sql
Upper('Cours SQL') COURS SQL
Initcap('Cours SQL') Cours Sql
• ROUND
Effectue un arrondissement sur une valeur numérique.
ROUND(45.39) = 45
ROUND(45.8) = 46
ROUND(45.39, 1) = 45.4
ROUND(45.926, 2) = 45.93
ROUND(45.923, -1) = 50
ROUND(44.923, -1) = 40
ROUND(1666.923, -2)= 1700
• TRUNC
Tronquer une valeur numérique.
TRUNC (45.39) = 45
TRUNC (45.8) = 45
TRUNC (45.39, 1) = 45.3
TRUNC(45.926, 2) = 45.92
TRUNC(45.923, -1) = 40
TRUNC(1666.923, -3) = 1000
• MOD
Retourne le reste de la division
Le format d'affichage par défaut de la date est DD-MON-YY. Il existe plusieurs fonctions qui
opèrent sur les dates, telles que :
• SYSDATE
• MONTHS_BETWEEN (date_fin,date_debut)
Retourne le nombre de mois entre les deux dates. Le résultat peut être négatif.
MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') = 19.6774194
Retourne une date calculée par l’ajout d’un nombre de mois à une date donnée. Le nombre
de mois peut être négatif.
• LAST_DAY (date)
• ROUND et TRUNC :
Fonction Résultat
Round(SYSDATE,'MONTH') 01/08/03
Round(SYSDATE,'YEAR') 01/01/04
Trunc(SYSDATE,'MONTH') 01/07/03
Trunc(SYSDATE,'YEAR') 01/01/03
3.2 REQUÊTES
Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :
b) Obtenir le résultat suivant pour les employés dont le job_id se termine par REP :
…
33 lignes.
c) Pour chaque employé du département 60, afficher son nom et les huit premiers
caractères de son nom suivis du ‘_US’(en majuscule).
d) Pour chaque directeur commercial (SA_MAN), afficher son last_name, son salary et le
nombre de jours travaillés (sans et avec arrondissement à l’entier le plus proche).
f) Le département financier veut majorer les salaires de ses employés de 1.13123. Afficher
le résultat suivant :
h) Afficher pour chaque employé ayant comme job_id la valeur it_prog, son nom et le
nombre de jours travaillés dans son premier mois d’emploi.
4.Fonctions de conversion et
Expressions conditionnelles
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Effectuer les conversions des nombres, des dates et des chaînes de caractères.
➢ Manipuler les valeurs nulles.
➢ Utiliser les expressions conditionnelles.
Durée estimative : 4h
De A
VARCHAR2 ou CHAR NUMBER
VARCHAR2 ou CHAR DATE
NUMBER VARCHAR2 ou CHAR
DATE VARCHAR2 ou CHAR
Le serveur Oracle convertit la chaîne de caractères '11' en entier 11 puis retourne l’entier 1.
Cette requête convertit la chaîne de caractères '24-01-16' en date puis retourne 24/02/16.
Cette requête convertit le nombre 123456789 en chaîne de caractères puis retourne sa taille
qui est égale à 9.
Cette requête convertit la date système en chaîne de caractères puis retourne sa taille qui est
égale à 8.
Exemples
SELECT to_number('$1,000.55') FROM dual
• Fonction NVL
• Fonction NVL2
Exemples
SELECT nvl2(null, 1234, 5678) FROM dual
Retourne 5678.
• Fonction NULLIF
• Fonction COALESCE
• Fonction DECODE
Si expr1 est égale à comp1 alors la requête retourne iftrue1. Sinon si expr1 est égale à comp2
alors elle retourne iftrue2, et ainsi de suite. Si rien ne correspond elle retourne iffalse si elle
existe sinon null.
• FONCTION CASE
1ère version
2ème version
4.2 REQUÊTES
Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :
c) Pour tous les employés dont le nom commence par ‘E’, afficher leurs noms, leurs salaires,
leurs commission_pct et leurs commissions mensuelles = commission_pct*salary+1000.
d) Pour tous les employés dont le nom commence par ‘G’, afficher le résultat suivant.
e) Afficher les colonnes suivantes pour chaque employé ayant un prénom de longueur 4 et si
son email est égal à la concaténation de la première lettre de son prénom et son nom en
majuscule, alors afficher ’Match Found’ sinon afficher ‘Email does not match pattern ‘.
f) Pour chaque employé ayant depatment_id égal à 90, afficher son nom et son employee_id
ainsi que sa commission_pct. Si elle est nulle afficher son manager_id et s’il est nul afficher
’no commission and no manager’.
… 14 lignes
h) On veut majorer les salaires des employés selon leurs job_id comme suit :
Job_id Majoration
IT_PROG 0.1
ST_CLERK 0.15
SA_REP 0.2
Autres 0
Écrire de deux manières une requête qui affiche pour chaque employé son nom, son job_id,
son ancien salaire et son nouveau salaire.
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Générer de données agrégées à l’aide des fonctions de groupe : Min, Max,
Avg, Count et Sum.
➢ Écrire des requêtes avec les clauses : Group By & Having.
Durée estimative : 1,5h
Les fonctions de groupe ou fonctions agrégatives opèrent sur des groupes pour donner un
résultat pour chaque groupe. On ne peut pas utiliser une fonction de groupe dans la clause
WHERE.
Les fonctions de groupe sont : AVG, SUM, MIN, MAX, COUNT, STDDEV, et VARIANCE. La
syntaxe générale est :
Elle retourne 11. C’est le nombre de valeurs distinctes et non nulles de department_id.
Retourne 12. C’est le nombre de valeurs distinctes de department_id y compris les valeurs
nulles.
La clause HAVING ne peut être spécifiée que si la clause GROUP BY est présente. Elle est
évaluée après avoir effectué les regroupements et exécuté les fonctions de groupe.
Exemple
SELECT department_id, count (*)
FROM job_history
WHERE department_id in (50, 60, 80, 110)
GROUP BY department_id
HAVING count(*)>1
5.2 REQUÊTES
Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :
a) On veut afficher des informations sur les employés dont le job_id est SA_REP : le plus petit
salaire, le plus grand salaire, les dates de recrutement du premier employé et du dernier
employé.
c) Afficher pour chaque département, son numéro et la somme des commissions de ses
employés. On ne considère pas les commissions nulles.
d) Afficher pour chaque département, son numéro, ses job_id et la somme des commissions
des employés dans chaque job_id. On ne considère pas les commissions nulles.
e) Obtenir le nombre des employés qui ont quitté leur emploi, regroupés par l'année de
sortie. Leurs emplois (job_id) sont également nécessaires. Le résultat doit être classé par
ordre décroissant du nombre d'employés dans chaque groupe puis par ordre croissant de
l’année de sortie.
g) La même requête précédente mais on exclut les job_id qui contiennent ‘MAN’.
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Extraire des informations à partir de plusieurs tables.
➢ Distinguer entre les différents types de jointure.
Pour sélectionner des lignes provenant de plusieurs tables, il est nécessaire d'utiliser des
jointures dans la requête SQL. Il existe trois types de jointures :
• Jointures internes : utilisent les clauses NATURAL JOIN, USING et ON.
• Jointures externes : utilisent les clauses LEFT OUTER JOIN, RIGHT OUTER JOIN et FULL
OUTER JOIN.
• Jointure croisée : utilise la clause CROSS JOIN.
• NATURAL JOIN
La clause NATURAL JOIN est basée sur toutes les colonnes des deux tables ayant le
même nom et le même type.
• JOIN…USING
La clause JOIN…USING permet de spécifier explicitement une ou plusieurs colonnes
d’équi-jointure entre parenthèses après le mot-clé USING. Cette colonne doit avoir le
même nom dans les deux tables.
• JOIN ... ON
La clause JOIN ... ON permet de spécifier explicitement des colonnes de jointure,
indépendamment de leurs noms. C’est la jointure la plus générale et la plus utilisée.
• JOINTURES MULTIPLES
Il n'y a aucune restriction sur le nombre de tables qui peuvent être liées à l'aide des
jointures.
• AUTO-JOINTURE
C’est la jointure d’une table avec elle-même comme si c’était une autre table. Ce type
de requête n’est pas si commun mais très pratique dans le cas où on veut joindre des
enregistrements d'une table à d'autres enregistrements de cette même table. Pour ce
faire, il faut utiliser des alias.
• NON EQUI-JOINTURE
Contrairement à l'équi-jointure qui consiste à opérer une jointure avec une condition
d'égalité, la non équi-jointure utilise n'importe quelle condition de jointure entre deux
tables, exceptée la stricte égalité.
Une jointure externe permet de sélectionner les lignes ayant des correspondances entre les
deux tables jointes ainsi que les lignes n'ayant pas de correspondance dans la table à droite,
ou dans la table à gauche ou dans les deux tables jointes.
Cette requête retourne 106 lignes. C’est le nombre d’employés affectés aux différents
départements.
Cette requête retourne 107 lignes. C’est le nombre de tous les employés même ceux qui ne
sont pas affectés aux départements.
Cette requête retourne 122 lignes. C’est le nombre de tous les départements même ceux qui
ne correspondent pas à des employés.
Cette requête retourne 123 lignes. Elles contiennent les employés affectés aux départements
et ceux non affectés ainsi que les départements qui ne correspondent pas à des employés.
La jointure croisée génère un produit cartésien entre les tables. Pour éviter le produit
cartésien, il faut que le nombre de conditions de jointure soit supérieur ou égal à N, avec N
est le nombre de tables jointes.
6.2 REQUÊTES
Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :
a) Afficher les noms des pays qui appartiennent à la région nommée Americas.
b) Afficher les noms des directeurs ainsi que les noms de leurs départements comme suit :
e) Afficher les numéros des départements avec leurs localisations (location_id) et leurs villes
(city). On affiche aussi les localisations qui ne contiennent pas des départements.
7.Les sous-requêtes
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Écrire des sous-requêtes.
➢ Distinguer entre les différents types des sous-requêtes
Durée estimative : 3h
Une sous-requête est une requête imbriquée dans une instruction SELECT, INSERT, UPDATE
ou DELETE ou à l'intérieur d'une autre sous-requête. Une sous-requête peut renvoyer un
ensemble de lignes ou simplement une ligne. Une sous-requête scalaire est une requête qui
renvoie exactement une valeur : une seule ligne, avec une seule colonne. On peut utiliser une
sous-requête dans les clauses suivantes :
- SELECT : utilisée pour la projection de colonnes.
- FROM.
- WHERE.
- HAVING.
Il y a plusieurs situations où on aura besoin d’utiliser le résultat d'une requête dans une autre.
Exemple
Quels sont les noms des employés qui ont un salaire inférieur au salaire moyen ?
Cela peut être répondu par deux instructions, ou par une seule instruction avec une sous-
requête.
L'exemple suivant utilise deux instructions :
SELECT avg(salary) FROM employees
SELECT last_name FROM employees
WHERE salary < résultat de la requête précédente>
SELECT liste_select
FROM table
WHERE expr operateur (SELECT liste_select FROM table)
NB :
- Mettre les sous-requêtes entre parenthèses.
- Placez les sous-requêtes sur le côté droit de la condition de comparaison pour la lisibilité.
• SOUS-REQUETES MONOLIGNE
- Retournent une seule ligne
- Utilisent des opérateurs de comparaison mono-ligne : =, <, >, <=, >=, <>.
- La sous-requête (requête interne) s'exécute (une seule fois) avant la requête principale
(requête externe).
- Le résultat de la sous-requête est utilisé par la requête principale.
• SOUS-REQUETES MULTILIGNES
- Retournent plusieurs lignes.
- Utilisent des opérateurs de comparaison à multilignes.
- La sous-requête (requête interne) s'exécute (une seule fois) avant la requête
principale (requête externe).
- Le résultat de la sous-requête est utilisé par la requête principale.
Opérateur Signification
IN égal à n'importe quelle valeur dans une liste
NOT IN différente de n'importe quelle valeur dans une liste
ANY doit être précédé de =,<>,>, <, <=,> =. Renvoie des lignes
qui correspondent à n’importe quelle valeur d'une liste.
ALL doit être précédé de =,<>,>, <, <=,> =. Renvoie des lignes
qui correspondent à toutes les valeurs d'une liste.
• SOUS-REQUETES CORRELEES
Une sous-requête corrélée fait référence à des colonnes dans la requête principale,
donc son résultat dépend de la requête principale. Cela rend impossible l'évaluation
de la sous-requête avant d'évaluer la requête principale.
Exemple :
Considérez une requête qui affiche tous les employés dont le salaire est inférieur au
salaire moyen de leur département. Dans ce cas, la sous-requête doit être exécutée
pour chaque employé afin de déterminer le salaire moyen de son département Il est
nécessaire de passer le numéro de département de l'employé à la sous-requête.
7.2 REQUÊTES
Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :
a) Afficher les employés ayant le salaire minimal.
c) Quels sont les employés qui ont un salaire inférieur au salaire moyen de tous les
employés ?
d) Quels sont les employés qui ont un salaire inférieur au salaire moyen des employés de
leurs départements ?
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Décrire chaque instruction du langage de manipulation de données (DML)
➢ Insérer et Mettre à jour des lignes dans une table
➢ Supprimer des lignes d'une table
➢ Gérer les transactions de contrôle
Durée estimative : 3h
Une transaction consiste en une collection d'instructions LMD qui forment une unité de travail
logique.
Insérer toutes les lignes renvoyées par la sous-requête dans la table SALES_REPS.
UPDATE table
SET column= value [, column = value, ...]
[WHERE condition]
UPDATE employees
SET department_id = 50
WHERE employee_id = 113
8.2 REQUÊTES
Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :
d) Ajouter l’information suivante : l’employé Ahmed BEN AHMED ayant comme numéro 260
a commencé son travail comme IT_PROG le ‘01/10/2010’ dans le département 300. Qu’est-
ce-que vous remarquez ?
f) Ajouter dans la table EMP la contrainte de clé primaire pk_emp et la contrainte d’intégrité
référentielle fk_emp.
Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Créer une table avec ses colonnes et ses contraintes.
➢ Modifier la structure d’une table existante.
Durée estimative : 3h
Les noms des tables et des colonnes ne doivent pas dépasser 30 caractères. Les caractères
peuvent être des lettres, des chiffres, du trait de soulignement, du dollar ou du hash.
Chaque colonne doit avoir un type de données. Il y a plusieurs types de données, on peut
citer : VARCHAR2, CHAR, NUMBER, DATE. Une colonne peut avoir une valeur par défaut.
Supprimer chaque ligne d'une table, tout en laissant la définition de table intacte :
9.2 REQUÊTES
Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :