INSIA – SIGL 2 Bases de données SQL – ORACLE TP 2 DDL et

Transcription

INSIA – SIGL 2 Bases de données SQL – ORACLE TP 2 DDL et
INSIA – SIGL 2
Bases de données
SQL – ORACLE
TP 2
DDL et Select spécifiques
Bertrand LIAUDET
Première partie : installation de l’environnement
Installation
•
Installer un répertoire de travail avec l’environnement de base (login, calculette root,
calculette tpsql, etc). Mettez le fichier empdept.sql dans le répertoire. Installer la BD
empdept.sql. A noter que le zip propose un environnement de travail sur la base d’un
utilisateur « tpselect »
•
Regarder le contenu du fichier « empdept .sql »et comprendre tout le code : constraint,
sequence, index, nextval…
•
1.
2.
Mettre toutes les commandes suivantes dans le fichier « tp2exo1.sql » :
3.
Lister les attributs de vos tables
Desc emp
Desc dept
Lister les clés de vos tables (vue user_indexes, attribut index_name, table_name,
uniqueness). Expliquer la valeur de « uniqueness ».
Select index_name, table_name, uniqueness from user_indexes ;
Uniqueness précise si l’index est unique ou non unique, c’est-à-dire : ramenant un tuple ou
plusieurs tuples.
Lister les toutes les contraintes (vue user_constraints, attributs constraint_name,
table_name, r_constraint_name) par ordre alphabetique de nom. Quel est la
signification de l’attribut « r_constraint_name ».
Select constraint_name, table_name, r_constraint_name from user_constraints order by
constraint_name ;
La « r_constraint_name » c’est le nom de la contrainte à laquelle la « constraint_name » fait
référence. Exemple : la clé étrangère fk_emp_deptno_dept fait référence à la clé primaire
« pk_dept ».
4.
5.
Lister vos tables
Select * from cat ;
INSIA - BASES DE DONNÉES – SIGL 2 – ORACLE-TP 2 - page 1/5 - Bertrand LIAUDET
6.
7.
Lister l’état des foreign key (attributs status, deferrable, deferred en plus). Modifier la
taille des colonnes pour que l’affichage soit propre.
Column constraint_name format a20
Column r_constraint_name format a20
Column table_name format a20
Select constraint_name, table_name, r_constraint_name, status, deferrable, deferred from
user_constraints order by constraint_name ;
Lister tous vos objets (vue user_objects). Choisissez trois attributs significatifs. Afficher
le résultat par ordre alphabétique. Modifier la taille des colonne pour que le résultat
soit propre.
Select * from user_objects ;
Column object_name format a20
Select object_name, object_type, created, last_ddl_time from user_objects order by
object_type, object_name ;
Requêtes
•
Ecrire un script appelé « tp2exo2.sql » qui répond aux questions suivantes. Envoyer le
résultat dans un fichier appelé « restp2exo2.txt ».
1.
Tous les salaires, commissions et totaux (salaire + commission)
Select empno, ename, sal, comm, sal+nvl(comm, 0) total
from emp ;
Tous les employés qui ne sont pas managers et qui sont embauchés en 2006. On
donnera 2 réponses : avec extract et avec substr.
Select empno, ename, job, hiredate
from emp
where job != ‘MANAGER’
and extract(year from hiredate)=2006 ;
2.
3.
Select empno, ename, job, hiredate
from emp
where job != ‘MANAGER’
and substr(hiredate, 7,2)=’06’ ;
Tous les employés n'ayant pas de subordonnées. On donnera 3 réponses : avec un select
imbriqué, avec une jointure externe et avec une opération ensembliste.
Select empno, ename, mgr
from emp
where empno not in (
select mgr from emp
where mgr is not null
)
order by ename ;
select empno, ename, mgr
INSIA - BASES DE DONNÉES – SIGL 2 – ORACLE-TP 2 - page 2/5 - Bertrand LIAUDET
from emp
minus
select chef.empno, chef.ename, chef.mgr
from emp, emp chef
where emp.mgr=chef.empno
order by ename ;
4.
5.
6.
Select chef.empno, chef.ename, chef.mgr
From emp right join emp chef
On emp.mgr=chef.empno
Where emp.empno is null
Order by chef.ename ;
Quel est la valeur du plus grand salaire moyen par département ? On donnera la
solution la plus compacte possible.
Select max(avg(sal)) from emp group by deptno ;
-- Vérification
Select deptno, avg(sal) from emp group by deptno ;
Quel est le département qui a le plus grand salaire moyen ? On projettera le n°, le nom
et le salaire moyen.
Select d.deptno, d.dname, avg(sal)
From emp e join dept d
on(e.deptno=d.deptno)
Group by d.deptno, d.dname
Having avg(sal) = (
Select max(avg(sal)) from emp group by deptno
);
Afficher tous les départements avec leurs salaires moyens et le salaire moyen des
salaires moyen par département. On donnera la solution la plus compacte possible.
Select deptno, avg(sal) from emp group by rollup (deptno) ;
La version « rollup » donne la moyenne des salaires de l’entreprise
Ou bien
Select deptno, avg(sal), (select avg(sal) from emp) from emp group by deptno ;
Cette version donne aussi la moyenne des salaires de l’entreprise
7.
Ou bien
Select deptno, avg(sal), (select avg(avg(sal)) from emp group by deptno)
from emp group by deptno ;
Cette version donne la moyenne des moyennes des salaires par départements.
Afficher tous les départements avec leur salaire moyen et le salaire moyen des
employés.
On retombe sur la version précédente :
INSIA - BASES DE DONNÉES – SIGL 2 – ORACLE-TP 2 - page 3/5 - Bertrand LIAUDET
Select deptno, avg(sal), (select avg(sal) from emp) from emp group by deptno ;
Cette version donne aussi la moyenne des salaires de l’entreprise
8. Afficher le salaire moyen par profession et le salaire moyen de l’entreprise dans une
seule requête. Vérifier que le salaire moyen de l’entreprise est le bon. Afficher les
résultats avec 1 chiffre après la virgule pour la moyenne.
Select job, cast (avg(sal) as number(7,1)), (select round(avg(sal),1) from emp) from emp
group by rollup (job) ;
9. Afficher tous les employés du département 30 avec les caractéristique du département
en numérotant les employés de 1 à n.
Select rownum, empno, ename, d.*
From emp join dept d
on (emp.deptno=d.deptno)
where d.deptno=30 ;
10. Parmi les salariés triées par somme des salaires et des commissions, afficher ceux qui se
situent entre la 5ème et la 10ème position. On affichera le numéro de leur classement, leur
identifiant, leur nom, leur job, leur département, leur salaire, leur commission et le
total.
Select tt.* from ( Select rownum num, t.* from (
select empno, ename, sal, comm, sal + nvl(comm, 0) total
From emp
Order by total
) t ) tt
where num >= 5 and num <=10 ;
Remarque : le tri oblige à faire une imbrication de select sinon le rownum se fait avant le tri.
La restriction oblige à faire une deuxième imbrication de select car le rownum ne permet que
de prendre les premiers.
11. Afficher les salaires des employés et la somme de tous les salaires. Dans un premier
temps, on n’affiche que le numéro de l’employé. Ensuite on affichera le numéro et le
nom.
Select empno, ename, sal, sum(sal) over() from emp ;
Ou bien
Select empno, ename, sal, somme from emp, (select sum(sal) somme from emp) t;
Ou bien
Select empno, ename, sal, (select sum(sal) somme from emp) somme from emp ;
12. Lister tous les supérieurs hiérarchiques de DUPONT. On affichera le numéro et le nom
de toute la série.
Select lpad(' ',4*level-4) || empno branches
from emp
start with empno = 7935
connect by prior mgr=empno;
ou bien
Select level, empno, mgr
from emp
INSIA - BASES DE DONNÉES – SIGL 2 – ORACLE-TP 2 - page 4/5 - Bertrand LIAUDET
start with empno = 7935
connect by prior mgr=empno;
13. Tous les subordonnés de JONES. On fera deux versions : l’une « simple », l’autre avec
représentation de l’arbre (avec lpad).
Select lpad(' ',4*level-4) || empno branches
from emp
start with empno = 7566
connect by prior empno=mgr;
version tous les managers :
Select lpad(' ',4*level-4) || empno branches
from emp
start with empno = any (select empno from emp where job=’MANAGER’)
connect by prior empno=mgr;
DDL
•
1.
2.
3.
4.
5.
6.
7.
Transformez le script « biblio.sql » codé en MySQL en script ORACLE :
On ajoutera les séquences nécessaires.
On ajoutera les contraintes d’intégrité suivantes :
La date de retour d’un livre est postérieure à sa date d’emprunt.
La durée maximum d’emprunt est comprise entre 7 et 28 jours.
La date d’emprunt est égale à la date du jour par défaut.
Affichez toutes les contraintes à partir du dictionnaire des données
Vérifier le bon fonctionnement des contraintes : écrivez des instructions DML qui
permettent de faire les tests.
SQL developer
•
Installez ORACLE SQL Developer
•
Connectez-vous en tant qu’utilisateur à votre prenom sous SQL Developer
•
Ajoutez une deuxième connexion en tant qu’utilisateur SYSTEM.
•
Ajoutez une troisième connexion en tant qu’utilisateur « invité ».
•
Parcourez les tables de l’utilisateur à votre prénom. Affichez leur contenu.
•
Regardez le contenu de la séquence.
•
Modifiez la valeur du prochain numéro de séquence.
•
Refaites quelques requêtes déjà testées sous SQLPLUS.
INSIA - BASES DE DONNÉES – SIGL 2 – ORACLE-TP 2 - page 5/5 - Bertrand LIAUDET

Documents pareils

Chapitre 2 La sélection simple - ESEN :: Ecole Supérieure d

Chapitre 2 La sélection simple - ESEN :: Ecole Supérieure d Codd. Chaque SGBDR (DB2, Informix, Ingres, SQL SERVER...) présente sa propre version de SQL. ORACLE possède sa propre version. Ceci dit, toutes les versions sont fondées sur le même noyau. ORACLE f...

Plus en détail

INSIA Bases de données ORACLE – 2 – SELECT avancé SQL*Plus

INSIA Bases de données ORACLE – 2 – SELECT avancé SQL*Plus START WITH : l’employé qui sert de feuille de la branche recherchée. Si on filtre avec mgr=7902, on obtient toutes les branches dont les feuilles ont comme parent le 7902. select level, empno, mgr ...

Plus en détail