ESIEA 2011/2012 TP BDD PARTIE I A la découverte du dictionnaire d Oracle 2.3. Testez les commandes ci-dessous : show user ; select * from all_users; desc user_tables ; select table_name from user_tables; column table_name heading Nom_de_l_utilisateur select table_name from user_tables; column object_name format a30 set pages 30 select object_name, object_type from user_objects order by object_type; desc user_constraints; column constraint_name format a30 select constraint_name from user_constraints where table_name='&matable'; Quelques fonctions SQL/Oracle SELECT RPAD('Soleil',17,'bla') "RPAD exemple" FROM DUAL; SELECT LPAD('DESS EID',15,'*.') "LPAD exemple" FROM DUAL; SELECT SUBSTR('DESS EID',6,3) "SUBSTR exemple" FROM DUAL; SELECT SUBSTR('ABCDEFGHIJ',-5,4) "SUBSTR exemple" FROM DUAL; SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "Now" FROM DUAL; SELECT LENGTH('WEB WAREHOUSE') "Longueur en caractères" FROM DUAL; SELECT DECODE(ANNEE, 1, 'Première', 2, 'Seconde', 'Valeur différente de 1 et de 2!!') AS ANETUDE FROM ELEVES; SELECT NVL(SPECIALITE, 'Valeur NON renseignée') FROM PROFESSEURS; SELECT NVL(SPECIALITE, 'Valeur NON renseignée') AS SPEC_PROF FROM PROFESSEURS; SELECT ROUND(17.0958,1) "ROUND exemple" FROM DUAL; SELECT ROUND(17.58,2) "ROUND exemple" FROM DUAL; SELECT TRUNC(1958.0917,1) "TRUNC exemple" FROM DUAL; SELECT TRUNC(1958.0917,2) "TRUNC exemple" FROM DUAL; SELECT ROUND(TO_DATE('17-SEP-2002'), 'YEAR') "New Year" FROM DUAL; SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; SELECT ADD_MONTHS(SYSDATE,7) FROM DUAL; SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19-JUN-2001'))) AS AGEB FROM DUAL; SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY'))FROM DUAL; TP BDD Oracle SQL PL/SQL 1
PARTIE II Creation des tables Création de la table département : CREATE TABLE departement (num_dept number(4) PRIMARY KEY, nom_dept VARCHAR(50), localite char(10)); Création de la table employés : CREATE TABLE employes (num_emp NUMBER(4) PRIMARY KEY, nom CHAR(10) NOT NULL CHECK(NOM=UPPER(NOM)), fonction CHAR(9), superieur NUMBER(4) REFERENCES employes(num_emp), date_embauche DATE, salaire NUMBER(7,2) CHECK(salaire>1000), commission NUMBER(7,2), num_dept number(4) NOT NULL REFERENCES departement(num_dept)); Contenu de la Table DEPARTEMENT NUM_DEPT NOM_DEPT LOCALITE 110 FINANCE NANTES 120 RECHERCHE DIJON 130 VENTES CAEN 140 RESSOURCE BLOIS TP BDD Oracle SQL PL/SQL 2
Contenu de la Table EMPLOYES NUM_EMP NOM FONCTION SUPERIEUR DATE_EMB SALAIRE COMM NUM_DEPT 369 SERGE COMPTA 902 17/12/2002 1800.00 120 499 ALBERT COMMER 698 20/02/2002 2600 800.00 130 521 WILLY COMMER 698 27/08/2003 2250.00 1000.00 130 566 JONAS GESTION 839 02/04/2003 3975.00 120 698 BLANC GESTION 839 01/05/2002 3850 130 782 KENT GESTION 839 06/06/2002 3450.00 110 788 SYLVIE INFORMA 566 09/09/1997 4000.00 1100.00 120 839 QUEEN PDG 17/11/1999 6000.00 5500.00 110 844 TINA COMMER 698 08/09/2001 2500.00 130 876 ADAMO COMPTA 788 23/09/2001 2100.00 120 900 JUAN COMPTA 698 03/12/2002 5000.00 130 902 FAURE INFORMA 566 23/01/2002 2300.00 120 934 MILLER COMPTA 782 03/12/2001 1950.00 110 654 MARTIN COMMER 698 28/09/2002 2250.00 2400.00 130 EX00 Testez les instructions suivantes : SQL> DESC employes SQL> DESC departement -- ligne 1 SQL> select * from departement; -- ligne 2 SQL> select * from employes; -- ligne 3 SQL> select sysdate from DUAL; -- ligne 4 SQL> select * from cat; -- ligne 5 SQL> select * from tab; -- ligne 6 Créez un fichier F1.sql dans lequel vous écrivez les 6 lignes précédentes et lancez SQL> start F1 ou SQL> @F1 TP BDD Oracle SQL PL/SQL 3
Requêtes SQL EXO1 : Liste des employés dont la fonction est GESTIONNAIRE dans les départements 120 et 130 : EXO2 : Liste des employés qui n ont pas la fonction GESTIONNAIRE et qui ont été embauchés en 1991 : EXO3 : Liste des noms des employés qui ont R et T dans leur nom : EXO4 : Liste des noms des employés qui ont deux A dans leur nom : EXO5 : Liste des noms des employés qui n ont pas de supérieur : EXO6 : Liste des noms des employés, numéros de département, fonctions et date d embauche triés par : - N de département croissant, - Ordre alphabétique des fonctions, - Ancienneté croissante (les derniers embauchés d abord). EXO7 : Liste des noms des employés et leur salaire tronqué au millier : EXO8 : Liste des noms des employés en remplaçant les noms par ##### dans le département 110 : EXO9 : Liste des noms des employés avec la date de début du mois d embauche : EXO10 : Liste des noms et le nombre de mois d ancienneté au 1 er janvier 2000 : EXO11 : Liste des noms, emplois, date d embauche, numéro et nom du département des employés travaillant à DIJON : EXO12 : Liste des noms et date d embauche des employés embauchés avant leur supérieur : EXO13 : Liste des noms et date d embauche des employés embauchés avant BLANC : EXO14 : Liste des employés embauchés le même jour que FAURE : EXO15 : Liste des employés embauchés avant tous les employés du département 110 : EXO16 : Liste des employés qui ont la même fonction et le même supérieur que TINA : TP BDD Oracle SQL PL/SQL 4
EXO17 : Liste des noms, emplois, salaires des employés ayant la même fonction que JONAS ou un salaire supérieur à celui de FAURE triés par emploi et par salaire : EXO18 : Liste des noms et numéro des employés qui n ont pas de subordonnés : EXO19 : Liste des noms et départements des employés qui ne travaillent pas dans le même département que leur supérieur: EXO20 : Donner le salaire moyen (en tenant compte des commissions) : EXO21 : Liste des nombres d employés dans chaque tranche de salaire (en milliers) : EXO22 : Liste des employés qui ont le salaire le plus élevé dans chaque département : EXO23: Liste des emplois ayant le salaire moyen le plus bas. EXO24: Construire l arbre hiérarchique de la société : EXO25 : Créer une vue qui permet d afficher le salaire moyen par département : EXO26 : Créer une vue qui permet d afficher le salaire moyen par fonction : EXO27 : Créer une vue qui permet d afficher le salaire moyen : EXO28 : Liste des noms, emplois, salaires et le pourcentage que représente le salaire de chaque employé par rapport : - au salaire moyen par fonction, - au salaire moyen par département, - au salaire moyen en général. TP BDD Oracle SQL PL/SQL 5