You are on page 1of 3

Travaux Pratiques N 2

Objectif : Administration du système

Vous allez créer votre propre compte utilisateur :


Connectez-vous en tant que : DBA
Créez ensuite votre compte utilisateur votre_nom par la commande :
SQL> CREATE USER votre_nom IDENTIFIED BY AZERTY DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
SQL> GRANT RESOURCE, CONNECT TO votre_nom IDENTIFIED BY
mot_passe;

Soit le schéma relationnel suivant :


CLIENT(Numcli : NUMBER (7) , Nom : VARCHAR(15) , Prénom : VARCHAR(15) ,
Tel : VARCHAR (12) , Adresse : VARCHAR(20) , Ville : VARCHAR(15) ,
Pays : VARCHAR (15)) ;
COMMANDE(Numcom : NUMBER (7) , Numcli : NUMBER (7) , Datecom : DATE ,
Datelivrai : DATE) ;
PRODUIT (Numprod : NUMBER (7) , Designation : VARCHAR (15) ,
Description : VARCHAR(100) , Prix : NUMBER (11,2) , QteStock : NUMBER (7)) ;
LIGNE_COMMANDE (Numprod : NUMBER (7) , Numcom : NUMBER(7),
Prix : NUMBER (11,2) , Qtecom : NUMBER(9) ,) ;

I) Création des tables


1)
a) Créer la table CLIENT (Numcli est la clé primaire ; Numcli, Nom et prénom ne doivent
pas être nuls).

SQL> CREATE TABLE CLIENT(


Numcli NUMBER(7) NOt NULL,
Nom VARCHAR(15) NOT NULL,
Prenom VARCHAR(15) NOT NULL,
Tel VARCHAR(12),
Adresse VARCHAR(20),
Ville VARCHAR(15),
Pays VARCHAR(15),
CONSTRAINT cle_pri_cli PRIMARY KEY (Numcli));

b) Créer la table PRODUIT (Numprod est la clé primaire ; Numprod et Designation ne


doivent pas être nuls).

SQL> CREATE TABLE PRODUIT(


Numprod NUMBER(7) NOT NULL,
Designation VARCHAR(15) NOT NULL,
Description VARCHAR(30),
Prix NUMBER(11,2),

ADJEOUA Haikreo L3TDSI JUIN 2018 1/3


QteStock NUMBER(7),
CONSTRAINT cle_pri_prod PRIMARY KEY (Numprod));

c) Créer la table COMMANDE (Numcom est la clé primaire et Numcli est une clé
étrangère).

SQL> CREATE TABLE COMMANDE(


Numcom NUMBER(7) NOT NULL,
Numcli NUMBER(7),
Datecom DATE,
Datelivrai DATE,
CONSTRAINT cle_pri_com PRIMARY KEY (Numcom),
CONSTRAINT cle_etr_com FOREIGN KEY (Numcli)
REFERENCES CLIENT(Numcli));

d) Créer la table LIGNE_COMMANDE (la clé primaire est composée des clés étrangères
suivantes : Numprod et Numcom).

CREATE TABLE LIGNE_COMMANDE (


Numprod NUMBER(7),
Prix NUMBER(11,2),
Qtecom NUMBER(9),
Numcom NUMBER(7),
CONSTRAINT cle_pri_lign PRIMARY KEY (Numprod,Numcom),
CONSTRAINT cle1_etr_lign FOREIGN KEY (Numprod)
REFERENCES PRODUIT(Numprod),
CONSTRAINT cle2_etr_lign FOREIGN KEY (Numcom)
REFERENCES COMMANDE(Numcom));

2) Ajouter les contraintes d’intégrité suivantes :

a) Pour la table CLIENT, le pays d’un client ne peut être que


'Mauritanie','Sénégal' ou 'Djibouti'.
SQL> ALTER TABLE CLIENT ADD CONSTRAINT Pays_client CHECK (Pays
IN ('Mauritanie','Sénégal','Djibouti'));
b) Pour la table COMMANDE, la Datecom doit toujours être inférieure ou égale
à Datelivrai.
SQL> ALTER TABLE COMMANDE ADD
CONSTRAINT dates_ok CHECK (Datecom<=Datelivrai) ;
c) Pour la table PRODUIT, la quantité stockée doit toujours être positive.
SQL>ALTER TABLE PRODUIT ADD
CONSTRAINT QteStock_ok CHECK (QteStock>=0);

3) Remplir les différentes tables (essayer de violer les contraintes d’intégrité). Puis faire
COMMIT pour valider la transaction.
Formule générale : INSERT INTO Nom_table VALUES (Valeur1,...,ValeurN) ;

Exemples
 Pour la table Client :
SQL> INSERT INTO CLIENT VALUES(1,'Moussa','DIEDHIOU','062 00 00 00','Dakar','almady','senegal');

 Pour la table Produit :


SQL> INSERT INTO PRODUIT VALUES(1,'R4','Renault4',60000,20);
 Pour la table Commande :
SQL> INSERT INTO COMMANDE VALUES(1,1,'01/01/2000','01/01/2001');

ADJEOUA Haikreo L3TDSI JUIN 2018 2/3


 Pour la table Ligne_commande :
INSERT INTO LIGNE_COMMANDE VALUES(1,60000,5,1);

Remarque : Pour valider les insertions (la transaction) utiliser la commande : COMMIT

4) Insérer le tuple (10,’Aminata’,’BA’,’061 00 00 00’, ‘sacre cœur 3,’Dakar’,’Senegal’) dans la


table CLIENT.
5)Annuler l’insertion précédente (faire ROLLBACK).
6)Ajouter 3 tuples dans la table CLIENT.
7)Valider l’insertion précédente (faire COMMIT).
8)Créer une table CLIENT_DAKAR qui contient les clients de Dakar (  2 méthodes )
SQL> CREATE TABLE CLIENT_ DAKAR AS SELECT * FROM CLIENT WHERE Ville = 'Dakar';

II) Mise à jour de la base de données


Ecrire les requêtes SQL qui permettent de :
1) Changer la ville du client ‘Aminata BA’ de ‘Dakar’ à ‘Podor’.
SQL> UPDATE CLIENT SET Ville='Podor' WHERE Nom='BA' and Prénom='Aminata';

2) Augmenter de 20% le prix des produits dont la quantité stockée est inférieure à 100.
3) Valider la transaction.
SQL> UPDATE PRODUIT SET Prix=Prix*1.2 WHERE QteStock<100;
SQL> COMMIT;

4) Supprimer le client n°10. Remarque ?


SQL> DELETE FROM CLIENT WHERE Numcli=10;

Remarque : Si le client N°1 possède des commandes, il y aura une erreur de violation de la contrainte d'intégrité
clé_étr_com de la table COMMANDE (Numcli est une clé étrangère de la table commande).

5) Supprimer toutes les commandes dont la date est inférieure à ‘01/05/14’. Remarque ?
SQL> DELETE FROM COMMANDE WHERE Datecom <'01/05/2014';

Remarque : Même chose que la question 4 (si une commande possède des lignes de commandes, il y
aura une erreur de violation de la contrainte clé2_étr_lign de la table LIGNE_COMMANDE).

III) Interrogation de la base de données


Ecrire les requêtes SQL qui permettent de lister :
1) tous les clients.
2) les noms et les numéros de téléphone des clients de .
3) tous les noms des clients de Casablanca dont le prénom est ‘Mohammed’.
4) tous les noms des clients dont le prénom est soit ‘Hamid’ soit ‘Mustapha’.
5) la désignation et le prix unitaire de tous les produits dont la quantité stockée est supérieure à
500.
6) toutes les commandes dont la date de commande est entre ‘01/01/15’ et ‘10/05/15’ classées
dans l’ordre croissant des numéros de commandes.
7) Les noms des clients dont le nom commence par ’M'.
8) les noms des clients qui n’ont pas de numéro de téléphone.
9) les noms des clients qui ont commandé au moins un produit de prix supérieur à 600DH.
10) les numéros des clients qui n’ont pas commandé le produit n°1.

ADJEOUA Haikreo L3TDSI JUIN 2018 3/3

You might also like