Module M2104 Compte rendu du TP N 3 : Les requêtes en BD 1
Sommaire I Introduction...3 II Sujet...3 III Modélisation...3 IV Création de tables...4 V Remplissage des tables...5 VI Requêtes...10 VII Conclusion...14 2
I IntroductionDans le cadre du D.U.T. Réseaux et Télécommunications, un module nommé «Bases de données» est enseigné par le professeur Mr Amar R-C (pour les Travaux dirigé et pour les cours magistraux) ainsi que par Mme J.Palasi (pour les Travaux pratiques). Dans ce cours, il nous est enseigné une introduction au SQL (Standar Query Language) et les généralités des bases de données. Cette base de données sera utile à un entrepreneur qui voudra gérer ses employés, savoir sur quels missions ils travaillent, et avoir des informations sur eux (salaire, date d'embauche, etc...) Voici le schema Entité-Association : Voici le shéma relationnel : 1 1 1 3
II Création de tables Pour créer une table destinées à stocker, on utilise la commande SQL CREATE qui a pour syntaxe : CREATE TABLE nom_table (nom_colonne type_colonne modificateurs_colonne, nom_colonne type_colonne modificateurs_colonne, ). Ce qui nous donne pour la table : Dept : CREATE TABLE dept(deptno int NOT NULL primary key, dname varchar(20) NOT NULL, loc varchar(20) NOT NULL) Employé : CREATE TABLE emp(empno int NOT NULL primary key, ename varchar(20) NOT NULL, job varchar(20) NOT NULL, mgr int, hiredate date NOT NULL, sal double(7,2) NOT NULL, comm double(7,2), deptno int NOT NULL) Mission : CREATE TABLE mission (missno int NOT NULL primary key, empno int NOT NULL, ciename varchar(20) NOT NULL, local varchar(20) NOT NULL, enddate date) Definitions : INT NOT NULL PRIMARY KEY : Entier non nul qui est une clé primaire CHAR(40) : chaine de maximum 40 caractères VARCHAR : chaine de caractères, de chiffres et caractères spéciaux. INT : Entier III Remplissage des tables Afin d insérer des données dans une table, il faut utiliser la commande INSERT INTO et la commande VALUES: Exemple : INSERT INTO nom_table (nom_colonne,,nom-colonne) VALUES(valeur, valeur) 4
Voici ci-dessous le remplissage des différentes tables : Table dept : INSERT INTO dept (deptno,dname,loc) VALUES (10, "Accounting", "New-York"); INSERT INTO dept VALUES (20, "Research", "Dallas"); INSERT INTO dept VALUES (30, "Sales", "Chicago"); INSERT INTO dept VALUES (40, "Operations", "Boston'' ); Table employé : INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7369, "Smith", "Clerk", 7902, "1981-12-17", "800.00", NULL, 20); INSERT INTO emp VALUES (7499, "Allen", "Salesman", 7698, "1981-02-20", "1600.00", "300.00", 30); INSERT INTO emp VALUES (7521, "Ward", "Salesman", 7698, "1981-02-22", "1250.00", "500.00", 30); INSERT INTO emp VALUES (7566, "Jones", "Manager", 7839, "1981-04-02", "2975.00", NULL, 20); INSERT INTO emp VALUES (7654, "Martin", "Salesman", 7698, "1981-09-28", "1250.00", "1400.00", 30); INSERT INTO emp VALUES (7698, "Blake", "Manager", 7839, "1981-05-01", "2850.00",NULL, 30); INSERT INTO emp VALUES (7782, "Clark", "Manager", 7839, "1981-06-09", "2450.00", NULL, 10); INSERT INTO emp VALUES (7788, "Scott", "Analyst", 7566, "1981-11-09", "3000.00", NULL, 20); INSERT INTO emp VALUES (7839, "King", "President", "NULL", "1981-11-17", "5000.00", NULL, 10); 5
INSERT INTO emp VALUES (7844, "Turner", "Salesman", 7698, "1981-09-08", "1500.00", "0.00", 30); INSERT INTO emp VALUES (7876, "Adams", "Clerk", 7788, "1981-09-23", "1100.00", NULL, 20); INSERT INTO emp VALUES (7900, "James", "Clerk", 7698, "1981-12-03", "950.00", NULL, 30); INSERT INTO emp VALUES (7902, "Ford", "Analyst", 7566, "1981-12-03", "3000.00", NULL, 20); INSERT INTO emp VALUES (7934, "Miller", "Clerk", 7782, "1982-01-23", "1300.00", NULL, 10); Table mission : INSERT INTO mission (missno, empno, ciename, local, enddate) VALUES (209, 7654, "BMW", "Berlin", "2001-02-09"); INSERT INTO mission VALUES (212, 7698, "MacDo", "Chicago", "2001-03-04"); INSERT INTO mission VALUES (213, 7902, "Oracle", "Dallas", "2001-04-11"); INSERT INTO mission VALUES (214, 7900, "FIDAL", "Paris", "2001-06-07"); INSERT INTO mission VALUES (216, 7698, "IBM", "Chicago", "2001-02-09"); INSERT INTO mission VALUES (218, 7499, "Décathlon", "Clermont", "2002-12-24"); INSERT INTO mission VALUES (219, 7782, "BMW", "Chicago", "2001-08-16"); 6
VI Requêtes Pour pouvoir faire une requête a une table il est nécessaire d utilisé un certains langage qui s utilise avec des mots clés comme les suivants : SELECT : Permet d accéder aux rangées désignés par l ensemble de critère de recherche FROM : Permet d aller chercher une colonne dans une table WHERE : Permet d insérer une ou des condition(s) ORDER BY : triés AS : Renomme une colonne dans SELECT 1) SELECT DISTINCT sal FROM emp ; 7
2) SELECT sal FROM emp ; 8
3) SELECT job FROM emp ; 9
4) SELECT * FROM emp; SELECT * FROM mission; SELECT * FROM dept 5) SELECT job, mgr FROM emp ; 10
6) SELECT missno FROM mission WHERE enddate < «2001-05-01» and (`local`=«chicago» OR `local`=«dallas») ; 7) SELECT missno FROM mission WHERE local like «C%» ; 11
8) SELECT ename FROM emp WHERE comm IS NULL ; 9) SELECT empno, ename FROM emp WHERE hiredate > «1981-05-01» and hiredate <= «1981-10-31» ; 12
10) SELECT deptno FROM emp WHERE comm IS NOT NULL ; R11) SELECT dept.deptno FROM dept, emp WHERE dept.deptno=emp.deptno AND job='clerk' 13
R12) SELECT ename, dname, localisation FROM emp, mission, dept WHERE emp.empno=mission.empno AND mission.localisation=dept.loc AND emp.deptno=dept.deptno 14
R13. R14. 15
R15. 16
R16. Donner les noms des employés qui ont un ou plusieurs collègues qui touchent un salaire plus grand que le leur et qui appartiennent au même département : 17
R17. 18
R18. R19. 19
R20. R21. Trouver le nombre de managers 20
22. Trouver le salaire moyen des employés qui sont en mission 23. S il est en mission, trouver la date de fin de mission de l employé qui est dans l entreprise depuis le plus longtemps. 21
R24. Trouver les noms, salaire, commission, salaire + commission de tous les vendeurs 22
R25. Trouver les noms des employés qui touchent une commission comprise entre 35 et 120% de leur salaire. 23
R26. Nom des employés dont le manager gagne plus du double de leur salaire 24
6. Manipulation de chaînes et de dates R27. Afficher les noms des employés cadrés à droite sur une longueur de 10 caractères, le début de ligne étant complété par des blancs 25
R28. Afficher les noms des employés cadrés à gauche sur une longueur de 15 caractères, la fin de ligne étant complétée par des traits d'union ('-') R29. Liste des trois premières lettres du nom de chaque employé 26
R30. Liste des noms des employés à l'envers R31. Afficher toutes les informations sur les employés avec comme format de date d'embauche "Thu 17 Dec 1981" SELECT * FROM `employés` WHERE hiredate = "Thu 17 Dec 1981" La requête n affiche rien car aucun n employé n a ce format date pour sa date d embauche. R32. Liste des départements et de leur localisation avec le format "nom/lieu". 27
7. ORDER BY GROUP BY HAVING R33. Donner les noms des employés par ordre alphabétique SELECT nameemp FROM `employés` ORDER BY nameemp ASC CRTH1A GFIU AE1 H IUerTv éd e Vélizy R34. Donner les noms des employés par ordre alphabétique inversé 28
R35. Donner les informations sur les employés par ordre décroissant de date d'embauche puis par ordre alphabétique de nom 29
R36. Présenter les employés par groupes de même valeur de salaire, et par ordre décroissant de ces valeurs SELECT * FROM `employés` GROUP BY SALARY ORDER BY SALARY DESC R37. Représenter les employés groupés selon les noms de département ordonnés dans l'ordre alphabétique inverse 30
R38. Représenter les employés groupés selon le mois et l'année de leur date d'embauche (ordre chronologique) : N dept Nb de missions 31
R40. Afficher le salaire moyen par job SELECT E.job, AVG(SALARY) AS "SALAIRE MOYEN" FROM employés AS E GROUP BY E.job R41. Afficher les noms des employés groupés par job puis par nom de département 32
R42. Afficher les nombres d'employés dirigés directement par chaque manager (ici on comprend manager comme un employé ayant son numéro dans la colonne mgr) R43. Nom des départements qui ont 2 missions ou plus 33
R45. R46. Nom des villes qui accueillent 2 missions ou plus IV Conclusion En conclusion, à travers ce TP nous avons consalider nos bases sur la création des requêtes de différents type : Projections/Sélections/Jointures etc. Cela nous a permis d acquérir les compétences nécessaires à l organisation d une bibliothèque sous les commandes du langage SQL. 34