TP-BDD-Labs1-2 - Copy
TP-BDD-Labs1-2 - Copy
TP-BDD-Labs1-2 - Copy
Objectifs : à l’issue de ce TP, vous seriez en mesure de créer, manipuler et consulter des bases de
données relationnelles en utilisant le langage SQL. Plus précisément vous seriez en mesure de :
- Créer, modifier et supprimer des tables via le langage de définitions de données SQL.
- Insérer, mettre à jour et effacer des enregistrements de bases de données en utilisant le langage de
manipulation de données SQL.
1
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
commandes SQL peuvent être classées en groupes en fonction de leurs natures comme on peut le voir dans
Tableau 1:
Table 1 les groupes des commandes SQL
CREATE
ALTER
Langage de définition de données (LDD) DROP
RENAME
TRUNCATE
INSERT
UPDATE
Langage de manipulation de données (LMD) DELETE
MERGE
2
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
Dans cette partie, nous nous intéressons aux commandes SQL qui constituent le LDD (CREATE, ALTER,
DROP, RENAME, TRUNCATE), en les appliquant sur l’objet de base de données: table.
1. Création de tables
Une table est une structure tabulaire dont les colonnes représentent des attributs, et les lignes représentent
des tuples. Les attributs sont contrôlés par des règles appelées contraintes d’intégrités. Une contrainte
d’intégrité peut être une contrainte de colonne lorsqu’elle fait partie de la définition d’une colonne ou une
contrainte d’intégrité de table quand elle concerne un ensemble de colonnes de la table.
SYNTAXE DE BASE
CREATE TABLE nom_table (
nom_colonne1 type_std|nom_domaine contrainte_col,
nom_colonne2 type_std|nom_domaine contrainte_col,
……
nom_colonneN type_standard | nom_domaine contrainte_colonne
[liste_contrainte_tab]
);
type_std = NUMBER[(précision, échelle)]|DECIMAL[(précision, échelle)]|
INTEGER|FLOAT|CHAR[(nbMaxChar)]|VARCHAR|VARCHAR2(Oracle8)|LONG|DATE|…
contrainte_col = [CONSTRAINT nom_contrainte] type_contrainte_col
type_contrainte_col = PRIMARY KEY|NOT NULL|CHECK(condition)|UNIQUE|
DEFAULT valeur|REFERENCES nom_table (liste_colonne)
liste_contrainte_tab = PRIMARY KEY(liste_col)|UNIQUE(liste_col)| FOREIGN
KEY (liste_col)| CHECK(condition)|REFERENCES nom_table(liste_col)
TIPS
Voir ‘Chapter 5 : SQL Data Types’ du « SQL Tutorial » pour les types de données standard et ‘Chapter 5 : SQL
Constraints’ pour se familiariser avec les contraintes SQL
Activite2.a : créer les tables client, commande, article et ligne-com comme suit :
3
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
La structure des tables ainsi crée pourra être consulté en utilisant la clause DESC:
DESC table_name;
Une nouvelle table peut être créée à partir d’une table existante en combinant l'instruction CREATE TABLE
et la commande SELECT. Lorsque une table est créé de cette, la nouvelle table sera remplie en utilisant les
valeurs existantes dans l'ancienne.
Activité 2.b : créer la table client2 à partir de la table client on utilisant les instructions suivantes (la
commande SELECT sera étudier on détails dans la Partie 4 de ce TP)
CREATE TABLE client2 (nom, adr1, adr2)
AS SELECT nom, adresse, codepost||’,’||ville
FROM client;
4
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
Activité 2.d : Modifier la structure de table client en appliquant les instructions suivantes une à une. Utiliser
la commande DESC pour afficher la structure de la table modifiée après chaque opération.
ALTER TABLE client
ADD remarque VARCHAR2(80);
MODIFY ville VARCHAR2(30);
DISABLE / ENABLE CONSTRAINT nn_nom;
DROP CONSTRAINT nn_nom CASCADE;
N.B : l’option CASCADE permet de supprimer toutes les clés étrangères qui se réfèrent à la clé primaire.
4. suppression des lignes d’une table
La commande SQL TRUNCATE TABLE est utilisée pour supprimer toutes les données d'une table
existante. Sa syntaxe de base est comme suit :
SYNTAXE DE BASE
TRUNCATE TABLE [schéma.]table[{DROP|REUSE} STORAGE]
DROP STORAGE permet de libérer l’espace des lignes supprimées et REUSE STORAGE permet de
maintenir l’espace des lignes supprimées.
Activité 2.e : Essayer d’effacer toutes les lignes de la table article en utilisant la commande ci-dessous
(jusqu’ici, la table article est vide, on revient sur cette commande dans la Partie 03).
TRUNCATE TABLE article REUSE STORAGE;
5
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
Activité 3.a : Utiliser la syntaxe d’insertion ci-dessus pour insérer quelques lignes dans les tables de notre
base de données comme dans cet exemple :
INSERT INTO client VALUES (1, ‘Omar’, 45, ‘Rue 5 juillet’, 16000, ’Alger’,
02863499);
INSERT INTO client (idclient, nom, adresse, codepost, ville, tel)
VALUES (2, ‘Nacer’ , ‘35’, ‘Rue 5 juillet’, 31000, ‘Oran’, NULL);
…
Les données peuvent être aussi insérer dans une table à partir d’une autre, en utilisant les commandes
INSERT INTO et SELECT comme suit :
SYNTAXE DE BASE
INSERT INTO first_table_name [(col1, col2, ... colN)]
SELECT col1, col2, ...colN
FROM second_table_name
[WHERE condition];);
2. Modification de données
La requête SQL UPDATE est utilisée pour modifier les enregistrements existants dans une table. Vous
pouvez utiliser la clause WHERE avec la requête UPDATE pour mettre à jour les lignes sélectionnées, sinon
toutes les lignes seraient affectées.
6
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
SYNTAXE DE BASE
UPDATE table_name
SET col1 = val1, col2 = val2...., colN = valN
[WHERE condition];
Activité 3.b : en utilisant la syntaxe de base ci-dessus, modifiez des enregistrements de notre base de données.
Vous pouvez s’inspirer de l’exemple suivant :
UPDATE client SET adresse = ‘52, Rue BDD’ ;
UPDATE client SET ville = ’New City’
WHERE idclient = 1 ;
UPDATE client SET (adresse, ville, codepost, tel) = (SELECT adr, ville,
code, tel FROM client_priv WHERE idc = 2)
WHERE idclient = 2 ;
N.B : C’est la 3eme fois qu’on tombe sur la commande SELECT, elle est si fréquente, elle semble très
importante, elle sera étudier on détails dans la partie suivante de ce TP.
3. Suppression de données
La requête SQL DELETE est utilisée pour supprimer les enregistrements existants d'une table. La clause
WHERE est utiliser avec la requête DELETE pour supprimer les lignes sélectionnées, sinon tous les
enregistrements seraient supprimés.
SYNTAXE DE BASE
DELETE FROM table_name
[WHERE condition];
Activité 3.c : Utiliser la commande DELETE pour supprimer quelques enregistrements dans les tables de
notre base de données comme dans l’exemple suivant. Quelle est la différence entre DELETE et la
commande TRUNCATE vue dans le LDD (Partie 02 de ce TP). Utiliser TRUNCATE pour effacer toutes
les lignes de la table article.
DELETE FROM commande; {effacer toutes les lignes de la table commande}
DELETE FROM commande
WHERE numcom = 4; {effacer toutes les lignes de la commande n°4}
7
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
Activité 1.a : Consulter les données insérées dans les tables de notre base de données en utilisant la
consultation simple avec SELECT. Ci-dessous sont deux exemples :
SELECT * FROM client;
SELECT nom, tel FROM client;
…
N.B : (1) un nom d’attribut peut être qualifié par le nom d’une relation (ex. client.nom). Un nom d’attribut
non qualifié (ex. tel) référence la relation la plus interne qui a un attribut de ce nom-là. (2) On peut renommer
localement une relation dans la clause FROM (ex. FROM client c). La relation client s'appelle alors c
pour le SELECT correspondant à ce FROM uniquement.
Activité 1.b : Reprendre les consultations simples de l’Activité 1.a, en utilisant les deux règles ci-dessus.
2. Consultation avec qualification
La qualification se fait à l’aide de la clause WHERE suivie d’une ou plusieurs conditions. Ces dernières sont
groupées en trois familles :
les opérateurs de comparaison.
les conditions de jointure
les conditions de sous-requêtes
SYNTAXE DE BASE
SELECT *|col1, col2, colN FROM table_name;
WHERE Condition_de_requête
8
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
!>), des opérations arithmétiques (+, -, *, /, %) et des opérations logiques (ALL, AND, ANY, BETWEEN,
EXISTS, IN, LIKE, NOT, OR, IS NULL, UNIQUE) ou toutes combinaisons.
TIPS
Voir ‘Chapter 6 : SQL Operators’ du « SQL Tutorial » pour plus de détails concernant les opérateurs SQL
Activité 2.a : Utiliser la consultation avec qualification pour faire des requêtes avec conditions. Quelques
exemples sont donnés ci-dessous à titre indicatif. Essayer de tester un maximum d’opérateurs mentionnés
ci-dessus.
SELECT * FROM article
WHERE prixunit > 100 AND qtestock <= 80;
SELECT * FROM commande
WHERE datecom NOT BETWEEN ‘01-JAN-93’ AND ‘31-MAR-93’;
SELECT * FROM client
WHERE ville IN (‘ALGER’, ‘ORAN’, ‘BATNA’);
SELECT * FROM client
WHERE nom LIKE ‘%nd_’; {les deux avant-dernier caractères sont ‘nd’}
SELECT * FROM client WHERE tel IS NOT NULL;
N.B : Dans l’opérateur LIKE, le signe de pourcentage (%) représente zéro, un ou plusieurs caractères. Le
trait de soulignement (_) représente un seul chiffre ou caractère. Ces symboles peuvent être utilisés en
combinaison.
2.2. Conditions de jointure
Comme vous l’avez observé, toutes les opérations ci-dessus récupèrent l’information à partir d’une seule
table. Les conditions de jointure introduisent la possibilité de consulter plusieurs tables.
SYNTAXE DE BASE
SELECT coli…
FROM tab1, tab2…, tabn
WHERE condition_de_jointure_entre_les_tabi
AND conditions_de_requête
Equijointure : la condition de jointure est une comparaison d’égalité de deux colonnes appartenant à deux
tables différentes.
Activité 2.b : donner les identifiant des clients, leurs noms, ainsi que les date de commandes faites par des
habitants d’Alger entre 01 Janvier 2010 et aujourd’hui. La requête ci-dessous peut répondre a la question,
mais d’autres sont aussi possibles (essayer la commande JOIN).
9
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
NB : SYSDATE renvoie l'heure à laquelle la fonction s'exécute, c’est l’une des fonctions date SQL.
TIPS
Consulter ‘Chapter 37 : SQL Date Functions’ du « SQL Tutorial » pour plus de détails concernant les fonctions
date SQL.
Jointure multiple : la condition de jointure est une comparaison d’égalité de plusieurs colonnes appartenant
à plusieurs tables différentes.
Activité 2.c : Exécuter la requête ci-dessous, en précisant à quelle question elle répond. Essayer de répondre
à la même question en utilisant la commande JOIN.
SELECT article.idarticle, designation
FROM article, ligne_com, commande
WHERE article.idarticle = ligne_com.idarticle
AND commande.numcom = ligne_com.numcom
AND commande.datecom BETWEEN ‘01-JAN-93’ AND SYSDATE ;
Auto-jointure : c’est une jointure d’une table avec elle-même. Elle est nécessaire pour répondre à des
requêtes comparant les éléments d’une même table entre eux.
Activité 2.d : Liste des couples d’article dont la quantité en stock du premier est égale à deux fois celle du
second. La requête ci-dessous peut répondre à la question. Remarquer l’utilisation des attributs qualifiés ainsi
que le renommage temporaire locale des tables.
SELECT a.idarticle, a.qtestock, b.idarticle, b.qtestock
FROM article a, article b
WHERE a.qtestock = 2* b.qtestock ;
10
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
SYNTAXE DE BASE
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE condition])
Activité 2.e : Liste les clients habitant Alger qui ont passé une commande entre la période du ’01 Janvier
2010’ et aujourd’hui. Comparer cette requête avec celle de l’Activité 2.b.
SELECT DISTINCT idclient FROM commande
WHERE idclient IN (SELECT idclient FROM client
WHERE ville = ‘ALGER’)
AND datecom BETWEEN ‘01-JAN-10’ AND SYSDATE;
Activité 2.f : Liste de clients qui ont passé au moins une commande entre la période du ’01 Janvier 2010’ et
aujourd’hui et dont la quantité commandé est égale à la quantité en stock. Expliquer la requête ci-dessous et
dire est ce qu’elle répond à cette question.
SELECT * from client x
WHERE idclient = (SELECT UNIQUE idclient from commande y
WHERE x.idclient = y.idclient
AND datecom BETWEEN ‘01-JAN-93’ AND SYSDATE
AND numcom IN (SELECT numcom from ligne_com z
WHERE y.numcom= z.numcom
AND qtecom=(SELECT qtestock FROM article t
WHERE t.idarticle = z.idarticle)
)
);
Activité 2.i : Revoir les CREATE et INSERT instructions où le SELECT a été utilisé.
TIPS
Consulter ‘Chapter 40 : SQL Sub Queries’ du « SQL Tutorial » pour connaitre quelques règles que les sous-
requêtes doivent suivre.
11
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
N.B : (1) Le mot clé SQL DISTINCT est utilisé conjointement avec l'instruction SELECT pour éliminer
tous les enregistrements en double et extraire uniquement des enregistrements uniques. (2) Le mot clef AS
représente un alias.
TIPS
Voir le ‘Chapter 29 : SQL Alias Syntax’ du « SQL Tutorial » pour plus de détails sur les alias et le ‘Chapter 23 :
SQL Distinct Keyword’ pour se familiariser avec le mot clef DISTINCT.
N.B : Assurez-vous que la colonne que vous utilisez pour trier, doit être dans la liste des colonnes.
Activité 3.b: Essayer la commande ORDER BY en utilisant des requêtes de votre choix. Voici un exemple
SELECT * FROM client
ORDER BY nom;
SELECT * FROM client
ORDER BY idclient DESC;
12
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
HAVING : La clause HAVING vous permet de spécifier des conditions qui filtrent quels résultats de
groupe apparaissent dans les résultats finaux. La clause WHERE place des conditions sur les colonnes
sélectionnées, tandis que la clause HAVING place des conditions sur les groupes créés par la clause GROUP
BY.
N.B : La clause HAVING doit suivre la clause GROUP BY dans une requête et doit précéder la clause
ORDER BY si elle est utilisée.
Activité 3.c: Essayer la commande GROUP BY avec HAVING en utilisant des requêtes de votre choix.
Voici des exemples :
SELECT * FROM commande
GROUP BY datecom;
HAVING datcom > 1 JANVIER 2010 ;
SELECT * FROM line_comm
GROUP BY idclient;
HAVING SUM(qu) > 100;
13
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
14
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
le même nombre de colonnes sélectionnées, le même nombre de colonnes expressions, le même type de
données, et les avoir dans le même ordre.
SYNTAXE DE BASE
SELECT column1 [,column2]
FROM table1 [, table2 ]
[WHERE condition]
UNION
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
N.B : La clause UNION ALL permet de retourner tous les lignes même les doubles
INTERSECT : La clause/opérateur SQL INTERSECT est utilisée pour combiner deux instructions
SELECT, mais renvoie des lignes de la première instruction SELECT identique à une ligne de la deuxième
instruction SELECT. Cela signifie qu’INTERSECT renvoie uniquement les lignes communes renvoyées par
les deux instructions SELECT. De même que pour l'opérateur UNION, les mêmes règles s'appliquent
lorsque vous utilisez l'opérateur INTERSECT. MySQL ne supporte pas l'opérateur INTERSECT.
EXCEPT : La clause/opérateur SQL EXCEPT est utilisée pour combiner deux instructions SELECT et
renvoie des lignes de la première instruction SELECT qui ne sont pas renvoyées par la deuxième instruction
SELECT. Cela signifie EXCEPT retourne uniquement les lignes, qui ne sont pas disponibles dans la
deuxième instruction SELECT. De même que pour l'opérateur UNION, les mêmes règles s'appliquent
lorsque vous utilisez l'opérateur EXCEPT. MySQL ne supporte pas l'opérateur EXCEPT.
Activité 3.f: Se familiariser avec les clauses UNION, INTERSECT et EXCEPT et essayer de formuler des
requêtes SQL sur notre base de données en les utilisant.
15
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
Objectifs : à l’issue de ce TP, vous seriez en mesure de créer des bases de données à partir d’un MCD
en utilisant des logiciels dédiés, la charger dans un SGBD-R et finalement formuler des requêtes avancées
pour l’interrogation de la base afin de répondre aux besoins exprimées par l’utilisateur. Plus précisément
vous seriez en mesure de :
- Dessiner des MCD et les transformer en modèles logiques automatiquement avec le logiciel
PowerAMC.
- Générer des scripts SQL de bases de données à partir des modèles crées par PowerAMC et les
charger dans un SGBD-R.
- Interroger la base de données pour répondre aux besoins exprimés par l’utilisateur.
La base de données de fabrication des produits est donnée par le MCD suivant :
1. Modèle Conceptuel de Données
USINE PUF PRODUIT
NU <pi> Numérique (20) <O> Quantité Numérique (8) NP <pi> Numérique (20) <O>
NomU Caractère variable (20) 0,n NomP Caractère variable (20)
Ville Caractère variable (20) Couleur Caractère variable (20)
0,n
NU <pi> Poids Caractère variable (20)
NP <pi>
...
0,n
FOURNISSEUR
NF <pi> Numérique (20) <O>
NomF Caractère variable (20)
Statut Caractère variable (20)
Ville Caractère variable (20)
NF <pi>
...
Une usine est d´écrite par son numéro NU, son nom NomU, la Ville dans laquelle elle est située;
Un produit est décrit par son numéro NP, son nom NomP, sa Couleur, son Poids;
Un fournisseur est décrit par son numéro NF, son nom NomF, son Statut (fournisseur sous-traitant,
fournisseur-client, .....), la Ville où il est domicilié;
16
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
PUF: le produit de numéro NP a été livré à l’usine de numéro NU par le fournisseur de numéro NF
dans une Quantité donnée.
Activité 1.a : Installer le logiciel PowerAMC et dessiner le MCD ci-dessus.
Activité 1.b : Transformer le modèle obtenu en un modèle logique de données, puis vers le modèle physique
en utilisant PowerAMC.
Activité 1.c : Générer le script SQL de la base de données, ouvrir le fichier résultant pour voir les
commandes SQL générées.
2. Remplissage de la base
Voici les données avec lesquels on aimerait peupler notre base de données
Fournisseur (NF, NomF, Statut, Ville) PUF (NP, NU, NF, qu)
(1, 'A', 'Indépendent', 'Paris') (1, 1, 1, 10)
(2, 'B', 'Grossiste', 'Paris') (1, 1, 2, 15)
(3, 'C', 'Indépendant', 'Londres') (5, 4, 3, 15)
(4, 'D', 'Grossiste', 'Paris') (5, 5, 3, 15)
(5, 'E', 'Indépendant', 'Londres') (5, 1, 3, 15)
(6, 'F', 'Grossiste', 'Bruxelles') (5, 2, 3, 1)
(7, 'G', 'Indépendant', 'Liège') (5, 3, 3, 1)
(8, 'H', 'Grossiste', 'Namur') (2, 1, 4, 1)
(9, 'I', 'Indépendant', 'Charleroi')
(10, 'J', 'Grossiste', 'Namur')
Activité 2.a : Créer un script SQL pour l’insertion de ces données dans notre base de données.
Activité 2.b : Charger le script obtenu dans la base de données à travers SQL workshop de l’utilitaire
Application Express.
17
TP BDD Oracle : SQL et PL/SQL Ecole Militaire Polytechnique
5. Donner les numéros des fournisseurs qui approvisionnent l’usine n◦1 en un produit rouge.
6. Donner les noms des fournisseurs qui approvisionnent une usine de Londres ou de Paris en un
produit rouge.
7. Donner les numéros des produits livrés à une usine par un fournisseur de la même ville.
8. Donner les numéros des produits livrés à une usine de Londres par un fournisseur de Londres.
9. Donner les numéros des usines qui ont au moins un fournisseur qui n’est pas de la même ville.
10. Donner les numéros des fournisseurs qui approvisionnent à la fois les usines n◦1 et n◦2.
11. Donner les numéros des usines qui utilisent au moins un produit disponible chez le fournisseur n◦3
(c’est-à-dire un produit qu’il livre mais pas nécessairement a cette usine).
12. Donner le numéro du produit le plus léger (les numéros si plusieurs produits ont ce même poids).
13. Donner les numéros des usines qui ne reçoivent aucun produit rouge d’un fournisseur londonien.
14. Donner les numéros des fournisseurs qui fournissent au moins un produit fourni par au moins un
fournisseur qui fournit au moins un produit rouge.
15. Donner tous les triplets (VilleF, NP, VilleU) tels qu’un fournisseur de la première ville
approvisionne une usine de la deuxième ville avec un produit NP.
16. Même question qu’en 15, mais sans les triplets où les deux villes sont identiques.
17. Donner les numéros des produits qui sont livrés à toutes les usines de Londres.
18. Donner les numéros des fournisseurs qui approvisionnent toutes les usines avec un même produit.
19. Donner les numéros des usines qui achètent au fournisseur n◦4 tous les produits qu’il fournit.
20. Donner les numéros des usines qui s’approvisionnent uniquement chez le fournisseur n◦3.
Activité 2.b : De plus, exprimer en SQL les requêtes et mises à jour suivantes:
21. Ajouter un nouveau fournisseur : h45, Alfred, sous-traitant, Chaloni.
22. Supprimer tous les produits de couleur noire et de numéro compris entre 100 et 199.
23. Changer la ville du fournisseur n◦1 : il a déménagé pour Nice.
24. Changer le statut de tous les fournisseurs de Paris et de Lyon pour “sous-traitant”.
25. Donner le nombre d’usines approvisionnées par le fournisseur n◦1.
26. Pour chaque produit livré à une usine, donner le numéro du produit, celui de l’usine et la quantité
totale qui a été livrée.
27. Donner les numéros des fournisseurs qui fournissent au moins le produit ’P5’ et le produit ’P9’.
18