Académique Documents
Professionnel Documents
Culture Documents
SQL Partie I
Table employes
. * salaire annuel
1. Écrivez une requête pour afficher les noms (prénom, nom) en utilisant le nom
d'alias "Prénom", "Nom"
2. Écrivez une requête pour obtenir l'ID de service unique de la table des employés
3. Écrivez une requête pour obtenir tous les détails de l'employé de la table des
employés par prénom, décroissant.
4. Écrivez une requête pour obtenir les noms (prénom, nom), salaire, fonds de
prévoyance PF de tous les employés (PF est calculé comme 12% du salaire).
5. Écrivez une requête pour obtenir l'ID d'employé, les noms (prénom, nom), le salaire
par ordre croissant de salaire.
1/17
6. Écrivez une requête pour obtenir l'ensemble des salaires mensuels payables aux
employés.
7. Écrivez une requête pour obtenir le salaire maximum et minimum des employés.
8. Écrivez une requête pour obtenir le salaire moyen et le nombre d'employés dans la
table des employés.
9. Écrivez une requête pour obtenir le nombre d'employés travaillant avec l'entreprise.
10. Écrivez une requête pour obtenir le nombre d'emplois disponibles dans la table des
employés.
11. Écrivez une requête pour obtenir tous les prénoms des employés en majuscules.
12. Écrivez une requête pour obtenir les 3 premiers caractères du prénom de chaque
employés.
13. Écrivez une requête pour calculer (19 * 5) *.2 et l'afficher comme RESULTAT.
14. Écrivez une requête pour obtenir les noms complets (par exemple Steven King,
Neena Kochhar etc.) de tous les employés.
15. Écrivez une requête pour obtenir le prénom de la table des employés après avoir
supprimé les espaces blancs des deux côtés.
16. Écrivez une requête pour obtenir la longueur des noms d'employés (prénom, nom).
17. Écrivez une requête pour sélectionner les 10 premiers enregistrements de la table
des employés. Remarque: Supposons que le champ Salaire fournisse les
informations sur le «salaire annuel».
18. Écrire une requête pour obtenir le salaire mensuel (arrondir 2 décimales) de chaque
employé?
Fonctions scalaires
round(X, Y) La fonction round(X, Y) renvoie une valeur à virgule flottante X arrondie à
Y chiffres à droite de la virgule décimale. Si l'argument Y est omis, il est supposé être 0.
trim(X, Y) La fonction trim(X, Y) renvoie une chaîne formée en supprimant tous les
caractères qui apparaissent dans Y aux deux extrémités de X. Si l'argument Y est omis,
trim(X) supprime les espaces des deux extrémités de X, (rtrim(X) supprime les espaces
du côté droit, ltrim(X) supprime les espaces du côté gauche de X).
upper(X) La fonction upper(X) renvoie une copie de la chaîne d'entrée X dans laquelle
tous les caractères ASCII minuscules sont convertis en leur équivalent majuscule.
lower(X) La fonction lower(X) renvoie une copie de la chaîne X avec tous les caractères
ASCII convertis en minuscules.
2/17
substr(X, Y) La fonction substr(X, Y, Z) renvoie une sous-chaîne de chaîne d'entrée X
qui commence par le caractère Y-ième et qui est de longueur de Z caractères. Si Z est
omis, substr(X, Y) renvoie tous les caractères jusqu'à la fin de la chaîne X commençant
par Y-ème. Le caractère le plus à gauche de X est de numéro 1.
-- 1
SELECT prenom "Prénom", nom "Nom"
FROM employes;
-- 2
SELECT DISTINCT id_service
FROM employes;
-- 3
SELECT *
FROM employes
ORDER BY prenom DESC;
-- 4
SELECT prenom, nom, salaire, salaire * .15 PF
FROM employes;
-- 5
SELECT id_employe, prenom, nom, salaire
FROM employes ORDER BY salaire;
-- 6
SELECT SUM(salaire)
FROM employes;
-- 7
SELECT MAX(salaire), MIN(salaire)
FROM employes;
-- 8
SELECT AVG(salaire), COUNT(*)
FROM employes;
-- 9
SELECT COUNT(*)
FROM employes;
-- 10
SELECT COUNT(DISTINCT id_job)
FROM employes;
-- 11
SELECT UPPER(prenom)
FROM employes;
3/17
-- 12
SELECT SUBSTR(prenom, 1, 3)
FROM employes;
-- 13
SELECT (19 * 5) * .2 AS RESULTAT;
-- 14
SELECT nom || ' ' || prenom 'Nom Complet'
FROM employes;
-- 15
SELECT TRIM(prenom)
FROM employes;
-- 16
SELECT prenom, nom, LENGTH(prenom)+LENGTH(nom) 'Longueur du nom'
FROM employes;
-- 17
SELECT id_employe, prenom
FROM employes
LIMIT 10;
-- 18
SELECT prenom, nom, round(salaire/12, 2) AS 'Salaire monsuel'
FROM employes;
SQL partie II
Table employes
4/17
1. Écrivez une requête pour afficher les noms (prénom, nom) et le salaire de tous les
employés dont le salaire n'est pas compris entre 10 000 et 15 000.
2. Écrivez une requête pour afficher les noms (prénom, nom) et l'ID de service de tous
les employés des services 30 ou 100 par ordre alphabétique croissant par ID de
service.
3. Rédigez une requête pour afficher les noms (prénom, nom) et le salaire de tous les
employés dont le salaire n'est pas compris entre 10 000 et 15 000 et qui
appartiennent au service 30 ou 100.
4. Écrivez une requête pour afficher le prénom de tous les employés qui ont à la fois un
«b» et un «c» dans leurs prénoms.
5. Écrivez une requête pour afficher le nom de famille, l'emploi et le salaire de tous les
employés dont le travail est celui d'un programmeur ou d'un commis à l'expédition
et dont le salaire n'est pas égal à 4 500, 10 000 ou 15 000.
6. Écrivez une requête pour afficher les noms des employés dont les noms comportent
exactement 6 caractères.
7. Écrivez une requête pour afficher les noms de famille des employés ayant «e»
comme troisième caractère.
8. Écrivez une requête pour afficher les emplois / désignations disponibles dans la
table des employés.
9. Écrivez une requête pour afficher les noms (prénom, nom), salaire et le fonds de
prévoyance PF (15% du salaire) de tous les employés.
-- 2
SELECT prenom, nom, id_service
FROM employes
WHERE id_service IN (30, 100)
ORDER BY id_service ASC;
-- 3
SELECT prenom, nom, salaire, id_service
FROM employes
WHERE salaire NOT BETWEEN 10000 AND 15000
AND id_service IN (30, 100);
5/17
-- 4
SELECT prenom
FROM employes
WHERE prenom LIKE '%b%'
AND prenom LIKE '%c%';
-- 5
SELECT nom, id_job, salaire
FROM employes
WHERE id_job IN ('IT_PROG', 'SH_CLERK')
AND salaire NOT IN (4500,10000, 15000);
-- 6
SELECT nom
FROM employes
WHERE nom LIKE '______';
-- 7
SELECT nom
FROM employes
WHERE nom LIKE '__e%';
-- 8
SELECT DISTINCT id_job
FROM employes;
-- 9
SELECT prenom, nom, salaire, salaire*.15 PF
from employes;
6/17
... id_job salaire commission_pct id_manager id_service
1. Écrivez une requête pour lister le nombre d'emplois disponibles dans la table des
employés.
2. Écrivez une requête pour obtenir le total des salaires payables aux employés.
3. Écrivez une requête pour obtenir le salaire minimum de la table des employés.
4. Rédigez une requête pour obtenir le salaire maximum d'un employé travaillant
comme programmeur.
6. Écrivez une requête pour obtenir le salaire le plus élevé, le plus bas, la somme et le
salaire moyen de tous les employés.
7. Rédigez une requête pour obtenir le nombre d'employés occupant le même poste.
8. Écrivez une requête pour obtenir la différence ("DIFFERENCE") entre les salaires
les plus élevés et les plus bas.
10. Écrivez une requête pour obtenir l'ID du service et le salaire total payable dans
chaque service.
11. Écrivez une requête pour obtenir le salaire moyen pour chaque ID de poste sauf du
programmeur.
12. Écrivez une requête pour obtenir le salaire total, maximum, minimum, salaire
moyen des employés (ID de poste), pour l'ID de service 90 uniquement.
13. Écrivez une requête pour obtenir l'ID du poste et le salaire maximum des employés
dont le salaire maximum est supérieur ou égal à 4 000.
14. Écrivez une requête pour obtenir le salaire moyen de tous les services employant
plus de 10 employés.
-- 1
SELECT COUNT(DISTINCT id_job)
FROM employes;
7/17
-- 2
SELECT SUM(salaire)
FROM employes;
-- 3
SELECT MIN(salaire)
FROM employes;
-- 4
SELECT MAX(salaire)
FROM employes
WHERE id_job = 'IT_PROG';
-- 5
SELECT AVG(salaire),count(*)
FROM employes
WHERE id_service = 90;
-- 6
SELECT ROUND(MAX(salaire),0) "Maximum",
ROUND(MIN(salaire),0) "Minimum",
ROUND(SUM(salaire),0) "Somme",
ROUND(AVG(salaire),0) "Moyenne"
FROM employes;
-- 7
SELECT id_job, COUNT(*)
FROM employes
GROUP BY id_job;
-- 8
SELECT MAX(salaire) - MIN(salaire) "DIFFERENCE"
FROM employes;
-- 9
SELECT manager_id, MIN(salaire)
FROM employes
WHERE manager_id IS NOT NULL
GROUP BY manager_id
ORDER BY MIN(salaire) DESC;
-- 10
SELECT id_service, SUM(salaire)
FROM employes
GROUP BY id_service;
-- 11
SELECT id_job, AVG(salaire)
FROM employes
WHERE id_job <> 'IT_PROG'
GROUP BY id_job;
-- 12
SELECT id_job, SUM(salaire) "Somme",
AVG(salaire) "Moyenne",
MAX(salaire) "Maximum",
MIN(salaire) "Minimum"
FROM employes
WHERE id_service = '90'
GROUP BY id_job;
8/17
-- 13
SELECT id_job, MAX(salaire)
FROM employes
GROUP BY id_job
HAVING MAX(salaire) >=4000;
-- 14
SELECT id_job, AVG(salaire), COUNT(*)
FROM employes
GROUP BY id_service
HAVING COUNT(*) > 10;
SQL Partie IV
Table employes
Table services
9/17
Table sites
1. Écrivez une requête pour trouver les noms (prénom, nom) et les salaires des
employés qui ont un salaire plus élevé que celui de l'employé dont le nom est 'Bull'.
2. Écrivez une requête pour trouver les noms (prénom, nom) de tous les employés qui
travaillent dans le service informatique.
3. Écrivez une requête pour trouver les noms (prénom, nom) des employés dont le
responsable travaille pour un service basé aux États-Unis. Conseil: écrivez des sous-
requêtes à une ou plusieurs lignes
4. Écrivez une requête pour trouver les noms (prénom, nom) des employés qui sont
des gestionnaires.
5. Écrivez une requête pour trouver les noms (prénom, nom), le salaire des employés
dont le salaire est supérieur au salaire moyen.
6. Écrivez une requête pour trouver les noms (prénom, nom), le salaire des employés
dont le salaire est égal au salaire minimum pour leur grade professionnel.
7. Écrivez une requête pour trouver les noms (prénom, nom), le salaire des employés
qui gagnent plus que le salaire moyen et qui travaillent dans l'un des services
informatiques.
8. Écrivez une requête pour trouver les noms (prénom, nom), le salaire des employés
qui gagnent plus que M. Bell.
9. Écrivez une requête pour trouver les noms (prénom, nom), le salaire des employés
qui gagnent le même salaire que le salaire minimum pour tous les départements.
10. Écrivez une requête pour trouver les noms (prénom, nom) des employés qui ne sont
pas des superviseurs.
10/17
11. Écrivez une requête pour afficher l'ID d'employé, le prénom, le nom, le salaire de
tous les employés dont le salaire est supérieur à la moyenne de leur service.
12. Écrivez une requête pour trouver le 5e salaire maximum dans la table des employés.
13. Écrivez une requête pour trouver le 4e salaire minimum dans la table des employés.
14. Écrivez une requête pour sélectionner les 10 derniers enregistrements d'une table.
15. Écrivez une requête pour lister le numéro de département, le nom de tous les
départements dans lesquels il n'y a pas d'employés dans le département.
18. Écrivez une requête pour obtenir le nième salaire maximum des employés.
-- 1
SELECT prenom, nom, salaire
FROM employes
WHERE salaire > (
SELECT salaire
FROM employes
WHERE nom = 'Bull');
-- 2
SELECT prenom, nom
FROM employes
WHERE id_service IN (
SELECT id_service
FROM services
WHERE nom_service='IT');
-- 3
SELECT prenom, nom
FROM employes
WHERE id_manager in (
SELECT id_employe
FROM employes
WHERE id_service IN (
SELECT id_service
FROM services
WHERE id_site IN (
SELECT id_site
FROM sites
WHERE id_pays='US')));
11/17
-- 4
SELECT prenom, nom
FROM employes
WHERE (id_employe IN (
SELECT id_manager
FROM employes));
-- 5
SELECT prenom, nom, salaire
FROM employes
WHERE salaire > (
SELECT AVG(salaire)
FROM employes);
-- 6
SELECT prenom, nom, salaire
FROM employes
WHERE employes.salaire = (
SELECT min_salaire
FROM jobs
WHERE employes.id_job = jobs.id_job);
-- 7
SELECT prenom,nom,salaire
FROM employes
WHERE id_service IN (
SELECT id_service
FROM services
WHERE nom_service LIKE 'IT%' )
AND salaire >(
SELECT avg(salaire)
FROM employes );
-- 9
SELECT prenom, nom, salaire
FROM employes
WHERE salaire>(
SELECT salaire
FROM employes
WHERE nom='Bell');
-- 10
SELECT * FROM employes
WHERE salaire = (
SELECT MIN(salaire)
FROM employes);
-- 11
SELECT prenom, nom, salaire
FROM employes
WHERE id_service IN (
SELECT id_service
FROM services
WHERE nom_service LIKE 'IT%')
AND salaire > (
SELECT avg(salaire)
FROM employes);
12/17
-- 12
SELECT id_employe, prenom
FROM employes AS A
WHERE salaire > (
SELECT AVG(salaire)
FROM employes
WHERE id_service = A.id_service);
-- 13
SELECT DISTINCT salaire
FROM employes e1
WHERE 5 = (
SELECT COUNT(DISTINCT salaire)
FROM employes e2
WHERE e1.salaire <= e2.salaire
);
-- 14
SELECT DISTINCT salaire
FROM employes e1
WHERE 4 = (
SELECT COUNT(DISTINCT salaire)
FROM employes e2
WHERE e1.salaire >= e2.salaire
);
-- 15
SELECT * FROM (
SELECT * FROM employes ORDER BY id_employe DESC LIMIT 10)
ORDER BY id_employe ASC;
-- 16
SELECT * FROM services
WHERE id_service
NOT IN (select id_service FROM employes);
-- 17
SELECT DISTINCT salaire
FROM employes a
WHERE 3 >= (
SELECT COUNT(DISTINCT salaire)
FROM employes b
WHERE a.salaire <= b.salaire
)
ORDER BY a.salaire DESC;
-- 18
SELECT *
FROM employes emp1
WHERE (1) = (
SELECT COUNT(DISTINCT(emp2.salaire))
FROM employes emp2
WHERE emp2.salaire > emp1.salaire
);
SQL Partie V
Table employes
13/17
id_employe prenom nom email telephone Date_embauche ...
Table services
Table sites
14/17
id_site adresse code_postal ville province_etat id_pays
Table pays
AR Argentine 2
AU Australie 3
BE Belgique 1
BR Brésil 2
CA Canada 2
Table historique_job
Table jobs
IT_PROG programmeur . .
AC_ACCOUNT comptable . .
AC_MGR manager . .
1. Écrivez une requête pour trouver les adresses (id_site, addresse, ville, province,
nom_pays) de tous les services.
2. Écrivez une requête pour trouver les noms (prénom, nom), l'ID et le nom du service
de tous les employés.
3. Écrivez une requête pour trouver l'ID de l'employé, son nom de famille ainsi que l'id
et le nom de famille de son manager .
15/17
4. Écrivez une requête pour trouver les noms (prénom, nom) et la date d'embauche des
employés qui ont été embauchés après «Jones».
6. Écrivez une requête pour trouver l'ID de l'employé, le nom du poste, le nombre de
jours entre la date de fin et la date de début pour tous les emplois du service 90 à
partir de l'historique des travaux.
7. Écrivez une requête pour afficher l'ID du service, le nom du service et le prénom du
responsable.
8. Rédigez une requête pour afficher le nom, le nom du responsable et la ville d'un
service.
9. Rédigez une requête pour afficher l'intitulé du poste et le salaire moyen des
employés.
10. Écrivez une requête à pour afficher l'intitulé du poste, le nom de l'employé et la
différence entre le salaire de l'employé et le salaire minimum pour le poste.
11. Écrivez une requête pour afficher l'historique des tâches effectuées par tout employé
qui tire actuellement plus de 10 000 de salaire.
-- 2
SELECT prenom, nom, id_service, nom_service
FROM employes
JOIN services USING (id_service);
-- 3
SELECT e.id_employe 'Id', e.nom 'Employe',
m.id_employe 'Id_Manager', m.nom 'Manager'
FROM employes e
join employes m
ON (e.id_manager = m.id_employe);
-- 4
SELECT e.prenom, e.nom, e.date_embauche
FROM employes e
JOIN employes e2
ON (e2.nom = "Jones")
WHERE e2.date_embauche < e.date_embauche;
16/17
-- 5
SELECT nom_service AS 'Nom service',
COUNT(*) AS 'Nombre d`employer'
FROM services
INNER JOIN employes
ON employes.id_service = services.id_service
GROUP BY services.id_service, nom_service
ORDER BY nom_service;
-- 6
SELECT id_employe, intitule_job, date_fin-date_debut Jours
FROM historique_job
NATURAL JOIN jobs
WHERE id_service=90;
-- 7
SELECT d.id_service, d.nom_service, e.id_manager, e.prenom
FROM services d
INNER JOIN employes e
ON (d.id_manager = e.id_employe);
-- 8
SELECT d.nom_service, e.prenom, s.ville
FROM services d
JOIN employes e
ON (d.id_manager = e.id_employe)
JOIN sites s USING (id_site);
-- 9
SELECT intitule_job, AVG(salaire)
FROM employes
NATURAL JOIN jobs
GROUP BY intitule_job;
-- 10
SELECT intitule_job, prenom, salaire-min_salaire 'salaire - Min_salaire'
FROM employes
NATURAL JOIN jobs;
-- 11
SELECT hj.* FROM historique_job hj
JOIN employes e
ON (hj.id_employe = e.id_employe)
WHERE salaire > 10000;
17/17