Vous êtes sur la page 1sur 8

Compte Rendu TP Base de Donnes.

Khady FAYE & Laura DONNIO I3FR

Introduction
Dans le cadre de notre formation sur les bases de donnes, nous avons effectu un TP qui avait pour objectif de nous familiariser avec le serveur PostgrelSQL mais galement dessayer de comprendre le systme dune base de donnes par des requtes SQL, celles-ci nous permettant dextraire des informations prcises dune entit.

1.

Ouverture de session PostgrelSQL

Pour effectuer notre base de Donnes, nous nous sommes servis de ce site web qui nous a transfr vers un serveur de base de donnes (PostgrelSQL) : http://pc5352c.esiee.fr/bdd

2. Premires tables
Pour crer une base de donnes, il y a fallu crer plusieurs tables pour raliser le schma relationnel. Rappels : Mot : cl primaire mot* : cl trangre
1. Table pieces (entit pieces)

Attributs: id_piece, nom, type, prix, type.


2. Table fournisseurs (entit fournisseurs)

Attributs: id_fourn, nom, no, voie. Contrainte: cp >= 1 AND cp > 96000

3. Table

liaison (reprsente fournisseurs et pieces )

lassociation

entre

Attributs: ref_fourn*, ref_piece*.

4. Table table (entit table)

Attributs : produit.

Remarque : Nous pouvons insrer un enregistrement vide malgr la contrainte NOT NULL , car la vide est considr comme une valeur. Si on est saisi NULL dans le champ nom comme valeur, cela est accepte mais en expression il ne lest pas. Nous navons pas le droit de crer des doublons dans une base de donnes. En cas dessai, la saisie sera refuse. Nous ne pouvons pas insrer deux fois de suite un enregistrement (1,1) dans la table liaison car les cardinalits sont dfinies par 1 de chaque ct. On ne peut avoir de redondance !
3.

Requtes SQL (1) : decryptage.

1. SELECT * FROM fournisseurs ; Nous affiche le schma relationnel de Fournisseurs avec tous ses attributs. 2. SELECT * FROM fournisseurs ORDER BY cp ; Tri le schma relationnel en fonction de lattribut cp dans lordre alphabtique croissant.
3. SELECT * FROM fournisseurs WHERE nom=PC direct ;

Affiche le schma relation quavec les fournisseurs qui ont le nom PC direct. 4. SELECT * FROM fournisseurs WHERE nom=PC dire ; Affiche le schma relationnel des fournisseurs qui ont le nom PC dire (aucun rsultat ). 5. SELECT * FROM fournisseurs WHERE nom LIKE PC di % ; Affiche le schma relationnel des fournisseurs qui ont le nom commenant par Pc di . 6. SELECT * FROM fournisseurs WHERE nom LIKE _C_di% ; Idem.

7. SELECT * FROM fournisseurs WHERE nom NOT LIKE %PC%; Affiche le schma relationnel des fournisseurs ayant un nom de contenant pas le terme PC. 8. SELECT * FROM fournisseurs WHERE cp >= 75000 AND cp < 76000 Affiche le schma relationnel des fournisseurs ayant un code postal compris entre 75000 et 76000.

9. SELECT id_fourn, nom, cp /1000 FROM fournisseurs;

Affiche le schema relationnel de fournisseurs avec ses attributs id_fourn, nom et le code postal divis par 1000.
10. SELECT id_fourn, nom, cp /1000 AS departement FROM

fournisseurs ORDER by department DESC; Idem mais crer un alias pour contenir le code postal /1000 ( cest un renommage) dans dpartement et nous trions par rapport au dpartement dans lordre dcroissant. 11. SELECT * FROM pieces WHERE (type=proc AND prix > 200) OR prix >100; Affiche le schma relationnel des pices o (le type est un processeur et le prix est suprieur 200) ou le prix est suprieur 100. 12. SELECT * FROM pieces WHERE prix >= ALL (SELECT prix FROM pieces); Affiche le schma relationnel en prenant en compte tous les prix et rcupre les informations o le prix est le plus lev. 13. SELECT * FROM fournisseurs WHERE voie IS null;

Affiche le schma relationnel des fournisseurs o la voie est nulle. 14. SELECT * FROM fournisseurs, liaison;

Affiche le schma relationnel associant les fournisseurs et la liaison. Cest produit Cartsien entre deux tables.

15. SELECT

* FROM fournisseurs, liaison fournisseurs.id_fourn = liaison.ref_fourn;

WHERE

Affiche quelles pices sont vendues par quels fournisseurs en associant id_fourn de fournisseurs avec la ref_fourn de liaison. 16. SELECT * FROM id_fourn=ref_fourn; fournisseurs, liaison WHERE

Idem, mais on utilise une jointure naturelle c'est--dire que nous navons pas besoin de prciser les colonnes concernes par la jointure. Dans ce cas, le compilateur SQL va rechercher dans les 2 tables, les colonnes dont le nom est identique. 17. SELECT * FROM id_fourn=ref_fourn; fournisseurs JOIN liaison ON

Nous faisons une jointure mais en utilisant le mot cl JOIN et nous prcisons ce que va tre joint. Cela sappelle une jointure interne. 18. (SELECT id_fourn FROM fournisseurs) INTERSECT (SELECT ref_fourn FROM liaison); Lintersection ici permet de trouver ce que les deux tables ont en commun. Cela nous renvoit les 4 id_fourn.
19. SELECT id_fourn FROM fournisseurs WHERE id_fourn IN

(SELECT ref_fourn FROM liaison); Idem. Mais on utilise le mot cl IN. 20. (SELECT id_fourn FROM fournisseurs) (SELECT ref_fourn FROM liaison); EXCEPT

Except cherche dans la premire table ce qui est diffrent avec la deuxime table et laffiche.
21. SELECT id_fourn FROM fournisseurs WHERE id_fourn

NOT IN (SELECT ref_fourn FROM liaison); Idem, mais cette fois ci on utilise le mot cl NOT IN.
22. SELECT

* FROM fournisseurs JOIN liaison ((SELECT id_fourn FROM fournisseurs) EXCEPT (SELECT ref_fourn FROM liaison)) AS ssreq ON ssreq.id_fourn=fournisseurs.id_fourn;

4.

Requtes SQL (2): Conversion.

1. Fournisseurs qui sont domicilis Paris SELECT * FROM fournisseurs WHERE voie NOT LIKE Paris ;
2. Fournisseurs dont le champ voie nest pas definie

SELECT * FROM fournisseurs WHERE voie IS null ; 3. Liste des processeurs dont le nom contient Intel par ordre Alphabtique SELECT * FROM pieces WHERE (type=proc AND nom LIKE Intel % ) ORDER BY;
4. Nom

des fournisseurs dpartement

domicilis

dans

le

mme

Select nom from fournisseurs where nom IN (cp/1000=((select cp/1000 from fournisseurs) INTERSECT (select cp/1000 from fournisseurs))); On cherche o il y a un doublon entre les codes postals. La requte ne marche pas mais nous avons essay de nous en approcher *

5. Nom des fournisseurs vendant des processeurs dont le nom contient Intel Select nom from (select * from fournisseurs, liaison, pieces where ref_pieces=id_pieces AND ref_fourn=id_fourn) AS ALIAS where type=procand nom like Intel%); 6. Fournisseurs ne vendant pas de disque dur WD Caviar 1.2T Select nom from (select * from fournisseurs, liaison, pieces where ref_pieces=id_pieces AND ref_fourn=id_fourn) AS ALIAS where type=ddand nom NOT like WD Caviar 1.2T%); 7. Fournisseurs ne vendant aucun produit Select nom from (select * from fournisseurs, liaison, pieces where ref_pieces=id_pieces AND ref_fourn=id_fourn) AS ALIAS where type= NULL ); 8. Ceux qui ne vendent quun produit

9. Ceux qui les vendent tous Select nom from fournisseurs where nom IN (Select * from pieces, fournisseurs, liaison where (pieces.nom=ALL id_fourn=ref_fourn and id_piece_ref_pieces)); La requte ne marche pas mais nous avons essay de nous en approcher *

10. Moyenne distribus

des

prix

des

produits

effectivement

SELECT AVG( prix ) AS moyenneprix FROM pieces ; 11. Lister les moyennes des prix par catgorie de produit

12. Les produits le moins chers que la moyenne de prix observe tous les produits confondus

13. Catgories de produits dont la moyenne de prix > 100 Select type from pieces where ( (AVG(prix) from piece )>100);

Conclusion
Ce TP nous a permis de mieux comprendre le fonctionnement dune base de donnes, comment les relations entre les entits doivent tre bien dfinies pour que nimporte quelle recherche puisse aboutir. Mme si certaines questions non pas taient faites, nous avons cherch et essay de diffrentes manires les rsoudre, en nous approchant le plus possible de la syntaxe de la requte demande.

Vous aimerez peut-être aussi