20 Déc2015
Les requêtes SELECT- Base de données RH
Objectif: Écrire des requêtes SELECT comportant la projection, le regroupement, le tri et les jointures.
Soit le schéma relationnel suivant :
Travail à faire:
Écrire les requêtes SELECT répondant aux questions suivantes:
- Donner la liste des numéros et noms des employés du département 20
- Donner la liste des numéros et noms des ouvriers et leur numéro de département
- Donner les noms des vendeurs du département 30 dont le salaire est supérieur à 1500
- Donner la liste des noms, fonctions et salaires des directeurs et des présidents
- Donner la liste des noms, fonctions et salaires des directeurs et des employés qui ont un salaire > 5000
- Donner la liste des noms et fonctions des directeurs du département 10 et des ouvriers du département 20.
- Donner la liste des noms, des fonctions et des numéros du département des employés qui ne sont pas ni ouvrier ni directeur
- Donner la liste des noms, fonctions et salaires des employés qui gagnent entre 2200 et 2800
- Donner la liste des noms, des fonctions et des numéros du département des employés ouvrier, secrétaire ou vendeur
- Donner la liste des employés dont le responsable est connu
- Donner la liste des employés dont le responsable n’est pas connu
- Donner la liste des salaires, fonctions et noms des employés du département 20, selon l’ordre croissant des salaires
- Donner la liste des salaires, fonctions et noms des employés du département 20, selon l’ordre décroissant des salaires
- Donner la liste des employés triée selon l’ordre croissant des fonctions et l’ordre décroissant des salaires
- Donner la moyenne des salaires des tous les employés
- Donner la moyenne des salaires des ouvriers.
- Donner le plus haut salaire et le plus bas salaire de tous les employés
- Donner le nombre d’employés du départment 10
- Donner le nombre de différentes fonctions occupées par les employés du département 10
- Donner la moyenne des salaires pour chaque département (afficher numéro de département et moyenne),
- Donner pour chaque département, le salaire annuel moyen des employés qui ne sont pas ni directeurs ni président
- Donner pour chaque fonction de chaque département le nombre d’employés et le salaire moyen.
- Donner la liste des salaires moyens pour les fonctions comportant plus de deux employés.
- Donner la liste des numéros de départements avec au moins deux secrétaires.
- Donner le nom de chaque employé et la ville dans laquelle il/elle travaille.
- Donner la ville dans laquelle travaille l'employé 1035.
- Donner les noms, fonctions et noms des départements des employés des départements 20 et 30
- Donner les noms des tous employés et les noms de leur responsable (renommer l’attribut responsable en ‘CHEF’)
- Donner la liste des noms et salaires des employés qui gagnent au moins que leur responsable (afficher aussi les noms des responsables)
- Donner la liste des noms, salaires, fonctions des employés qui gagnent plus que l'employé 1035.
- Donner les noms des tous employés et, s’il est connu, les noms de leur responsable (renommer l’attribut responsable en ‘CHEF’)
- Donner les noms des employés et les noms de projets aux quels ils participent.
- Donner les projets aux quels l'employé 1035 participe.
- Donner les noms des ingénieurs qui participent au projet ‘EAST_MARKETS’
- Donner les noms des tous les employés et les noms de projets aux quels ils participent (même s’ils ne participent à aucun projet)
- Donner les noms des tous les directeurs et les noms de projets aux quels ils participent (même s’ils ne participent à aucun projet)
- Donner les noms et fonctions des employés qui gagnent plus que 'Mahmoudi'.
- Donner les noms département où il y a des employés qui gagnent plus de 3000.
- Donner les fonctions dont la moyenne des salaires est inférieure à la moyenne de celle des ingénieurs
- Donner les employés qui ont occupé les fonctions de vendeurs et d’ouvriers
- Donner les employés qui n’ont jamais été vendeurs
- Donner les projets où ne travaillent que des ingénieurs
//Auteur: CHAOULID
//Copyright: Exelib.net
//**D'autres Écritures sont possibles**
//Q1 select Num_Emp,Nom_Emp from EMPLOYE where Num_Dep=20 //Q2 select Num_Emp,Nom_Emp,Num_Dep from EMPLOYE where Fonction_Emp='ouvrier' //Q3 select Nom_Emp from EMPLOYE where Fonction_Emp='vendeur' and Num_Dep=30 and Salaire_Emp>1500 //Q4 select Nom_Emp,Fonction_Emp,Salaire_Emp from EMPLOYE where Fonction_Emp='President' or Fonction_Emp='Directeur' //Q5 select Nom_Emp,Fonction_Emp,Salaire_Emp from EMPLOYE where (Fonction_Emp='President' or Fonction_Emp='Directeur') and Salaire_Emp>5000 //Q6 select Nom_Emp,Fonction_Emp from EMPLOYE where (Fonction_Emp='Directeur' and Num_Dep=10) or (Fonction_Emp='Ouvrier' and Num_Dep=20) //Q7 select Nom_Emp,Fonction_Emp,Num_Dep from EMPLOYE where Fonction_Emp not in ('ouvrier','directeur') //Q8 select Nom_Emp,Fonction_Emp,Salaire_Emp from EMPLOYE where Salaire_Emp between 2200 and 2800 //Q9 select Nom_Emp,Fonction_Emp,Num_Dep from EMPLOYE where Fonction_Emp in ('ouvrier','directeur','secrétaire') //Q10 select * from EMPLOYE where Sup_Emp is not null //Q11 select * from EMPLOYE where Sup_Emp is null //Q12 select Salaire_Emp,Fonction_Emp,Nom_Emp from EMPLOYE where Num_Dep=20 order by Salaire_Emp //Q13 select Salaire_Emp,Fonction_Emp,Nom_Emp from EMPLOYE where Num_Dep=20 order by Salaire_Emp desc //Q14 select * from EMPLOYE order by Fonction_Emp asc,Salaire_Emp desc //Q15 select AVG(Salaire_Emp) as "Moyenne des salaires" from EMPLOYE //Q16 select AVG(Salaire_Emp) as "Moyenne des salaires des ouvriers" from EMPLOYE where Fonction_Emp='ouvrier' //Q17 select MAX(Salaire_Emp) as "Salaire Max",MIN(Salaire_Emp) as "Salaire Min" from EMPLOYE //Q18 select COUNT(*) as "Nombre d'Employés du département 10" from EMPLOYE where Num_Dep=10 //Q19 select COUNT(distinct(Fonction_Emp)) as "Nombre de fonctions" from EMPLOYE where Num_Dep=10 //Q20 select Num_Dep,AVG(Salaire_Emp) as "Moyenne de salaires" from EMPLOYE group by Num_Dep //Q21 select Num_Dep, AVG(Salaire_Emp*12) as "Salaire annuel moyen" from EMPLOYE where Fonction_Emp not in ('directeur','president') group by Num_Dep //Q22 select Num_Dep,Fonction_Emp,COUNT(Num_Emp) as "Nombre d'employés",AVG(Salaire_Emp) as "Salaire Moyen" from EMPLOYE group by Num_Dep,Fonction_Emp //Q23 select Fonction_Emp,AVG(Salaire_Emp) as "Salaire Moyen" from EMPLOYE group by Fonction_Emp having COUNT(Num_Emp)>2 //Q24 select Num_Dep from EMPLOYE where Fonction_Emp='secrétaire' group by Num_Dep having COUNT(Nom_Emp)>=2 //Q25 select e.Nom_Emp,d.site_Dep from EMPLOYE e inner join DEPARTEMENT d on e.Num_Dep=d.Num_Dep //Q26 select d.site_Dep as "Ville" from EMPLOYE e inner join DEPARTEMENT d on e.Num_Dep=d.Num_Dep where e.Num_Emp=1035 //Q27 select e.Nom_Emp,e.Fonction_Emp,d.Nom_Dep from EMPLOYE e inner join DEPARTEMENT d on e.Num_Dep=d.Num_Dep where d.Num_Dep=20 or d.Num_Dep=30 //Q28 select e1.Nom_Emp, e2.Nom_Emp as "CHEF" from EMPLOYE e1 inner join EMPLOYE e2 on e1.Sup_Emp=e2.Num_Emp //Q29 select e1.Nom_Emp,e1.Salaire_Emp,e2.Nom_Emp from EMPLOYE e1 inner join EMPLOYE e2 on e1.Sup_Emp=e2.Num_Emp where e1.Salaire_Emp>=e2.Salaire_Emp //Q30 select Nom_Emp,Salaire_Emp,Fonction_Emp from EMPLOYE where Salaire_Emp> (select Salaire_Emp from EMPLOYE where Num_Emp=1) //Q31 select e1.Nom_Emp, e2.Nom_Emp as "CHEF" from EMPLOYE e1 left outer join EMPLOYE e2 on e1.Sup_Emp=e2.Num_Emp //Q32 select e.Nom_Emp,p.Nom_Proj from EMPLOYE e inner join TRAVAILLER t on e.Num_Emp=t.Num_Emp inner join PROJET p on t.Code_Proj=p.Code_Proj //Q33 select p.* from TRAVAILLER t inner join PROJET p on t.Code_Proj=p.Code_Proj where t.Num_Emp=1035 //Q34 select e.Nom_Emp from EMPLOYE e inner join TRAVAILLER t on e.Num_Emp=t.Num_Emp inner join PROJET p on t.Code_Proj=p.Code_Proj where e.Fonction_Emp='Ingénieur' and p.Nom_Proj='EAST_MARKETS' //Q35 select e.Nom_Emp from EMPLOYE e left outer join TRAVAILLER t on e.Num_Emp=t.Num_Emp left outer join PROJET p on t.Code_Proj=p.Code_Proj //Q36 select e.Nom_Emp from EMPLOYE e left outer join TRAVAILLER t on e.Num_Emp=t.Num_Emp left outer join PROJET p on t.Code_Proj=p.Code_Proj where e.Fonction_Emp='directeur' //Q37 select Nom_Emp,Fonction_Emp from EMPLOYE where Salaire_Emp>ALL(select Salaire_Emp from EMPLOYE where Nom_Emp='Mahmoudi') //Q38 select distinct(d.Nom_Dep) from EMPLOYE e inner join DEPARTEMENT d on e.Num_Dep=d.Num_Dep where e.Salaire_Emp>3000 //Q39 select Fonction_Emp from EMPLOYE group by Fonction_Emp having AVG(Salaire_Emp)< (select AVG(Salaire_Emp) from EMPLOYE where Fonction_Emp='Ingénieur') //Q40 select e.* from EMPLOYE e inner join HISTORIQUE h on e.Num_Emp=h.Num_Emp where h.Fonction_Emp='vendeur' intersect select e.* from EMPLOYE e inner join HISTORIQUE h on e.Num_Emp=h.Num_Emp where h.Fonction_Emp='ouvrier' //Q41 select * from EMPLOYE where Num_Emp not in (select Num_Emp from HISTORIQUE where Fonction_Emp='vendeur') //Q42 select distinct p.* from PROJET p inner join TRAVAILLER t on p.Code_Proj=t.Code_Proj where t.Code_Proj not in ( select distinct p.Code_Proj from PROJET p inner join TRAVAILLER t on p.Code_Proj=t.Code_Proj inner join EMPLOYE e on t.Num_Emp=e.Num_Emp where e.Fonction_Emp !='Ingénieur' )