Vous êtes sur la page 1sur 38

Compte Rendu:

I. TP1:
On considère les relations suivantes d'une base de données :
Auteur (codeAuteur, nom, prénom, nationalité).
Livre (codeLivre, titre, nbPages, année, prix).
Membre (codeMembre, nom, prénom, dateInscription).
Possède (codeLivre, codeAuteur).
Prêt (codePrêt, codeMembre, codeLivre, datePrêt, dateRetour).

Q1- Lancement de SQL*plus :

Q2- Connexion au serveur de la base Oracle :

Q3- Création d’un utilisateur :


create user TP1ELHABTI identified by fatiha quota 10M on system;
Q4- Donner a TP1ELHABTI les droits create session et create table :
grant create session, create table to TP1ELHABTI;

Q5-

Q6- Connexion a TP1ELHABTI :

Q7-Diagramme de classe :
Q8- Création des tables :
Table Auteur :
create table auteur (
codeAuteur int constraint pk_auteur primary key,
nom VARCHAR (20),
prenom VARCHAR(20),
nationalite VARCHAR (20)) ;

Table Livre :
create table livre (
codeLivre int constraint pk_livre primary key,
titre VARCHAR (20),
nbPages number(4),
annee number(4),
prix number (4)) ;
Table Membre :
create table membre(
codeMembre int constraint pk_membre primary key,
nom VARCHAR(20),
prenom VARCHAR(20),
dateInscription DATE));

Table Possède :
create table possede(
codeAuteur int constraint fk_auteur references auteur(codeAuteur),
codeLivre int constraint fk_livre references livre(codeLivre),
constraint pk_possede primary key(codeAuteur,codeLivre));
Table Prêt :
create table pret(
codePret int constraint pk_pret primary key,
codeLivre int constraint fk_pret_livre references livre(codeLivre),
codeMembre int constraint fk_pret_membre references
membre(codeMembre),
datePret DATE,
dateRetour date);

Q9-Verification de la création des tables :


Select object_name, object_type from user_objects;
On peut utiliser desc nomTable pour vérifier la création de chacune des tables.

select table_name, constraint_name, constraint_type from user_constraints order by 1;


Q10- Création des index :
Création de l’index sur la clé primaire de la table prêt :
create index id_pret on pret(codePrêt);

Création de l’index sur une des clés étrangères de la table prêt :


create index id_livre on pret(codeLivre);

Remarque : On ne peut pas créer un index sur une clé primaire d’une, puisqu’elle est indexe par
défaut.

Q11-Augmenter la taille de la colonne nom de la table membre :


alter table membre Modify nom varchar(28) ;
Q12-Ajouter le champ email à la table membre :
alter table membre add email varchar(20);

Q13-Ajouter la colonne adresse à la table membre :


alter table membre add adresse varchar(20);

Q14- Supprimer les contraintes de la table prêt :


Q15- Modification de la table prêt :
codeMembre est une clé étrangère :

codeLivre est une clé étrangère :

Q16-Ajout de la contrainte de la clé primaire à la table prêt :

Q17-Ajout d’une clé étrangère a la table livre :


Q18- Suppression de la table possède :

Q19- Ajouter une contrainte à la table livre qui assure que titre de livre est une
valeur bien déterminée :

Q20- Ajoute les champs langue et NbreExemplaires à la table livre :

Q21- Ajouter la contrainte qui assure l'unicité du nom et prénom du membre :

Q22-Creation des index :


Nom et prenom de l’auteur :
Nom et prenom du membre :

➔Le PRIMARY KEY, UNIQUE sont indexes par défaut.

Titre du livre :

Q23- Suppression de l’index déjà crée sur la table auteur :

Q24- Ajouter la contrainte qui spécifie que dateRetour est >= datePret :

Q25-Affichage des contraintes en utilisant la vue user_constraints :


II. TP2:
LDD:
Q1-Creation de l’utilisateur Etud :

Q2- Accorder à cet utilisateur les privilèges ' all privileges' :

Q3-Diagramme de classe :
Q4-Construction des tables :
La table Etudiant :
create table etudiant(
codeEtudiant int constraint pk_etudiant primary key,
nom VARCHAR(20),
prenom VARCHAR(20),
dateNaissance DATE,
ville VARCHAR(10));

La table Cours :
create table cours(
codeCours int constraint pk_cours primary key,
nom VARCHAR(20),
nbHeurs number(2));
La table Enseignant :
create table enseignant(
codeEnseignant int constraint pk_enseignant primary key,
nom VARCHAR(20),
prenom VARCHAR(20),
specialite VARCHAR(20));

La table Résultat :
create table resultat(
codeEtudiant int constraint fk_resultat_etudiant references
etudiant(codeEtudiant),
codeCours int constraint fk_resultat_cours references cours(codeCours),
constraint pk_resultat primary key(codeEtudiant,codeCours),
note number(5,2));
La table Charge :
create table charge(
codeEnseignant int constraint fk_charge_enseignant references
enseignant(codeEnseignant),
codeCours int constraint fk_charge_cours references cours(codeCours),
constraint pk_charge primary key(codeEnseignant,codeCours));

LMD:
Q5-Insertion des données :
Table Etudiant :
Table Cours :

Table Enseignant :
Table Résultat :

Table Charge :
Q6-Faite des mises à jour :
Augmenter de 5% chaque note de chaque étudiant :
Changer le nom du cours 2 par 'SGBD' :

Supprimer le cours n° 5 :

LID :
Q7-Affichage des tables :
Q8-Affichage du nom et de la ville des étudiants :
Q9- Affichage du nom et de la ville des étudiants ordonnées par nom :

Q10- Affichage du nom et de la ville des étudiants agadir et tiznit :

Q11- Affichage du nom et de la ville des étudiants agadir, tiznit et taroudant


ordonnes par ville et par nom :
Q12- Affichage du nom et l’âge des étudiants ordonnés par ville et par âge
descendant :

Q13- Affichage du nom et l’âge des étudiants compris ente 17 et 20 ordonnés


par âge descendant :
select nom, (extract(year from sysdate)- extract (year from dateNaissance))as
age from Etudiant where (extract(year from sysdate) - extract (year from
dateNaissance)) between 17 and 20 order by age desc;

Q14-Affichage du nom et la ville des étudiants venants de Casa, Taroudant ou


Safi :

Q15-Liste des étudiants dont le nom contient ‘Ben’ ou ‘oui’ :


III. TP3:
Q1-Afficher le nom, le prénom et la date de naissance (le nom du jour, celui
du mois et l'année) des étudiants :

Q2-Calcul l’âge moyen des étudiants :


 select avg (cast(((extract(year from sysdate)*365.25+extract(month from
sysdate)*(365.25/12)+extract(day from sysdate))-(extract(year from
dateNaissance)*365.25+extract(month from dateNaissance)*(365.25/12)+extract(day
from dateNaissance)))/365.25 AS DECIMAL(4,2))) as moyenne from Etudiant ;

 select sum((sysdate-dateNaissance)/365)/8 as moyenne from etudiant;

Q3-Afficher le nombre d'étudiants de l'établissement et le moyen de leurs


âges:
Q4-Afficher le nombre d'étudiants de l'établissement, le minimum, le
maximum et la moyenne de leurs âges :
select count(codeEtudiant) as nbreetud , avg((sysdate-dateNaissance)/365) as moyenne ,
max((sysdate-dateNaissance)/365) as max , min((sysdate-dateNaissance)/365) as min from
etudiant;
select count(codeEtudiant) as nbreetud , avg((sysdate-dateNaissance)/365) as moyenne ,
max(dateNaissance) as max , min(dateNaissance) as min from etudiant;

Q5-Lister par ville le nombre d’étudiants :

Q6-Donner pour chaque étudiant la moyenne, le maximum et le minimum de


notes :
Q7-Donner pour chaque étudiant des villes Agadir et Tiznit la moyenne, le
maximum et le minimum de notes :
select nom,ville,avg(note)as Moyenne,max(note)as Max_note,min(note) as Min_note from
Resultat natural join Etudiant where ville=any('agadir','tiznit') group by
codeEtudiant,nom,ville;

Q8-Lister le nom des étudiants ayant la moyenne comprise entre 12 et 16 :


select nom,prenom,avg(note)as Moyenne from Resultat natural join Etudiant group by
codeEtudiant,nom,prenom having avg(note) between 12 and 16;

Q9-Lister, ordonnés par moyenne de notes, le nom des étudiants ayant la


moyenne comprise entre 12 et 16 :
select nom,prenom,avg(note)as Moyenne from Resultat natural join Etudiant group by
codeEtudiant,nom,prenom having avg(note) between 12 and 16 order by moyenne;

Q10-Donner la liste de noms des enseignants dont le nom contient 'i' à la fin :
On préférera que la première lettre du nom soit en majuscule et les autres
lettres soient en minuscules :
Q11-Donner le nom des enseignants qui assure plus de deux cours :

Q12- Afficher le nom et la spécialité des enseignants dont la spécialité est


connue :

Q13-Lister les noms des enseignants ayant la même spécialite :

Q14-Lister les noms des enseignants qui font le même cours :


select nom,codeCours from Enseignant natural join (select
e1.codeEnseignant,e1.codeCours from charge e1,charge e2 where
e1.codeCours=e2.codeCours and e1.codeEnseignant<>e2.codeEnseignant);
Q15-Creation de la table etudiants :

select * from Etudiant natural full join Etudiants order by codeEtudiant;

Q16-Faire l'union de ETUDIANT et de ETUDIANTS pour la ville agadir :


Q17-Faire l'union de : ( les étudiants de la ville casa de ETUDIANT) et (les
étudiants de la ville agadir de ETUDIANTS) :

Q18-Donner le nom la moyenne le minimum et le maximum de notes de


chaque étudiant :
select nom,avg(note) as Moyenne,min(note) as Min, max(note) as Max from Resultat
natural join (select * from Etudiant natural full join Etudiants order by codeEtudiant)
group by codeEtudiant,nom;

Q19- Donner le nom la moyenne le minimum et le maximum de notes de


chaque étudiant de la ville Agadir :
select nom,avg(note) as Moyenne,min(note) as Min, max(note) as Max from Resultat
natural join (select * from Etudiant natural full join Etudiants order by codeEtudiant)
where ville = ‘agdir’ group by codeEtudiant,nom;

Q20-Donner le nom la moyenne le minimum et le maximum de notes de


chaque étudiant dont la moyenne est supérieure à 11 :
select nom,avg(note) as Moyenne,min(note) as Min, max(note) as Max from Resultat
natural join (select * from Etudiant natural full join Etudiants order by codeEtudiant)
group by codeEtudiant,nom having avg(note) >= 11;
Q21-Donner le nom la moyenne le minimum et le maximum de notes de
chaque étudiant de la ville Agadir et dont la moyenne est supérieure à 12 :
select nom,avg(note) as Moyenne,min(note) as Min, max(note) as Max from Resultat
natural join (select * from Etudiant natural full join Etudiants order by codeEtudiant)
where ville='agadir' group by codeEtudiant,nom having avg(note) >= 12;

Q22- Afficher les enseignants qui assurent tous les cours sauf le cours de
réseaux :
select codeEnseignant,nom from Enseignant where codeEnseignant not in (select
codeEnseignant from cours natural join charge where nom = 'Reseau');

Q23- Vérifier que les enseignants ayant une charge, figurent bien dans la table
enseignant :

Q24-Creation de la vue :
create view vueetud as select codeEtudiant,nom,avg(note) as Moyenne from Etudiant
natural join Resultat where ville ='agadir' group by codeEtudiant,nom;

Q25-Utilisation de la vue cree :


IV. TP4:
LDD:
Q1-Construction de l’utilisateur tp4 :

Q2-Digramme de classe et creation des tables :


LMD :
Q3-Remplissage des tables :
LID :
Q4- Donner en capitale le nom et la ville de toutes les usines :

Q5- Donner le numéro, le nom et la ville de toutes les usines dont le nom
contient plast :

Q6- Donner les numéros des fournisseurs qui approvisionnent l'usine n°1 :

Q7- Donner le nom des fournisseurs qui approvisionnent l'usine n°1 en


produit n°1 :

Q8- Donner les numéros des fournisseurs qui approvisionnent les usines n°1
ou n°2 :
Q9- Donner les numéros des usines qui ne reçoivent aucun produit du
fournisseur n°1 :

Q10- Donner les numéros des usines qui s'approvisionnent chez le fournisseur
n°3 :

Q11- Donner les numéros des fournisseurs qui fournissent au moins un


produit fourni par le fournisseur n°1 :

Q13- Chercher pour chaque fournisseur le nom et le nombre d'usines qu'il


approvisionne. L'affichage sera ordonn‚ par nombre d'usine :

Q14- Chercher le nom des fournisseurs qui approvisionne plus de 4 usines :


Q15- Trouver le nom des produits fournis à plus de 4 usines d'Agadir :
select NomP as Nom_Produit ,NP as Num_Produit,count(NP) as Num_Usine_Agadir from
Produit join Livraison using (NP) join (select NU from Usine where ville ='agadir') using
(NU) group by NP,NomP having count(NP)>=4;

Q16- Afficher pour chaque produit le nom (seule l'initiale en majuscule) et la


quantité totale fournie aux usines :

Q17- Chercheré ordonnée par nom, les fournisseurs qui approvisionnent


toutes les usines :
select NomF as nom_Fournisseur from Fournisseur where exists(select NP from Produit
where not exists(select NU from Usine where not exists (select * from Livraison where
Fournisseur.NF = Livraison.NF and Usine.NU = Livraison.NU)));
V. TP5:

Q1-Creation de l’utilisateur :

Q2-Creation des tables :


Q3-Affichage des contraintes :

Q4-Insertion des donnees :


Q5-Construction de l’utilisateur TP :

Q6- Accorder à partir du compte de TP5, à l'utilisateur TP, le droit de lire le


nom et le prenom des employes ayant un salaire > 10000 :

Q7- Vérifier si l'utilisateur TP5 peut exercer les droits accordés à la question
précédente :
Q8- Retirer de TP les droits accordés à la question 7 :

Q9- Construction de la vue :

Q10-

Vous aimerez peut-être aussi