Avertissement: Ce qui suit ne constitue qu’une présentation incomplète de SQL. Pour plus de
précision, se référer à la documentation technique du SGBD utilisé.
Sous le SGBD Oracle: les types de données suivants sont utilisables lors de la définition des
attributs d'une relation:
- CHAR (< longueur>) : Chaîne de caractères de longueur fixe (255 caractères)
- VARCHAR(< longueur>) : Chaîne de caractères de longueur variable (255 caractères)
- NUMBER['(' <lgr1> ',' <lgr2> ')' ] : virgule fixe ou flottante.
- DATE: format standard jour-mois-an
- LONG: Chaîne d'au plus 65535 caractères
- RAW et LONGRAW : similaire à CHAR et à LONG respectivement, pour des chaînes
hexadécimales.
- La valeur de l'expression qui suit le mot clé DEFAULT est assignée à l'attribut si celui-ci n'a pas
de valeur associée lors d'une insertion de n-uplet dans la relation.
- [<contrainte>] : permet de spécifier des contraintes d'intégrité associées à l'attribut. Pour le
moment nous nous contentons de la contrainte de la valeur obligatoirement présente dans la
définition d'une table (NOT NULL)
1
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
2. L’interrogation
1) < liste de sélection > : définit les attributs de la relation résultat, un élément de la liste de
sélection peut être une constante, un attribut, une expression arithmétique ou une fonction de
groupe.
2) < liste de relations > : définis les relations qui seront utilisés pour la requête.
3) La clause DISTINCT : permet d'éliminer les doubles du résultat.
( Pas d’élimination des tuples en doubles sauf mention explicite ( DISTINCT ) )
4) La clause WHERE est une qualification des n-uplets de R1 x R2 x … x Rn .
Ces n-uplets qui satisfont le WHERE seront utilisés pour construire le résultat.
Elle est formée en utilisant
a) les opérateurs de comparaisons = , != , < , > , < = , > =
b) les connecteurs Logiques AND, OR et NOT avec les parenthèses si c'est nécessaire.
AND est prioritaire par rapport au OR .
c) prédicat d'appartenance à un ensemble IN , NOT IN .
d) prédicat de comparaison entre ensembles CONTAINS, NOT CONTAINS .
e) prédicat de comparaison de texte LIKE (permettant de tester si un terme de type chaîne
de caractères contient une ou plusieurs sous-chaînes) .
f) prédicat de test d'un terme comparaison avec IS NULL, IS NOT NULL .
C'est un prédicat de test de nullité qui permet de tester si un terme a une valeur convenue
'NULL' signifiant que sa valeur est inconnue.
g) prédicat EXISTS, NOT EXISTS, prédicat BETWEEN (BETWEEN: permettant de
tester si la valeur d'un terme est comprise entre la valeur de deux constantes).
h) prédicat de comparaison avec une S/requête (imbrication de requête) ANY , ALL .
2
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
où les arguments peuvent être des variables, des constantes ou des expressions.
3
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
Nous avons déjà présenté les fonctions d'agrégation au paragraphe 2.3 ( COUNT, SUM,AVG,
MAX, MIN, VARIANCE).
On dispose également:
- de fonctions de manipulation de chaîne de caractères
REPLACE pour la substitution d'une sous-chaîne à une autre,
SUBSTR pour l'extraction de sous-chaîne,
LENGTH pour déterminer la longueur d'une chaîne, … etc.
- de fonctions numériques
ABS(n) : la valeur absolue de n ,
CEIL(n): le plus petit entier supérieur ou égale à n,
FLOOR(n) : la partie entière de n ,
MOD(n,m) : le reste de la division entière de m par n ,
POWER(m,n) : m à la puissance n ,
SQRT(n): la racine carrée de n , … etc.
- de fonctions de conversions
TO-DATE: convertit une chaîne de caractères représentant une date en une date,
TO-CHAR : convertit une date ou une valeur numérique en chaîne de caractères,
TO-NUMBER: convertit une chaîne de caractères représentant un nombre en un
nombre,… etc.
4
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
5
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
b)
" Lister le Nom, le Prénom et le Salaire de tous les employés triés par ordre croissant de leurs noms
et par ordre décroissant de leurs salaires."
Requête17 :
" Liste de tous les employés (No-Dept, Nom du Dept, Nom, prénom, Salaire) triés par ordre
croissant du numéro de département, ordre décroissant de leurs salaires et ordre croissants de leurs
noms."
6
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
Requête18 :
"Donner la somme, le maximum, le minimum et la moyenne des salaires des employés de
département 'Recherche' . "
Requête19 :
"Donner le nombre des employés qui travaillent dans le département 'Recherche'."
Requête20 :
" Donner le nombre de salaires différents dans la relation EMPLOYE."
Requête21 :
" Lister le nom des employés ayant 2 personnes à charge ou plus."
Requête22 :
"Pour chaque département, retrouver le numéro de département, le nombre d'employés et leur
salaire moyen."
Requête23 :
"Rechercher pour chaque projet, son numéro, son nom ainsi que le nombre d'employés
qui y travaillent."
Requête24 :
"La liste de tous les projets (numéro, nom, nombre d'employés) tels que le nombre d'employés
travaillant dans ce projet est supérieur à 2."
Requête25 :
"Lister le nom et le prénom des employés n'ayant aucune personne à charge"
Requête26 :
"Lister le nom et le prénom de tous les directeurs de département ayant au moins une
personne à charge"
Requête27 :
"Recherche de tous les employés (Nas) travaillant sur le projet 1,2 ou 3 "
Requête28 :
Liste de tous les employés (Nom, Prenom) n'ayant pas (ou pas encore) de superviseur "
Requête29 :
"Lister tous les noms et les prénoms des employés résidants à Tunis "
Requête30 :
"Lister tous les employés dont le nom possède 9 caractères et commence par les 3 lettres 'BEN' "
Requête31 :
" Lister le nom et le salaire de tous les employés si on augmente leurs salaires de 10% . "
Requête32 :
"Lister tous les noms et les prénoms des employés dont le salaire est entre 300 et 400 D."
Requête33 :
"Afficher le montant de la vente de 23 articles au prix de 45.00"
Requête34 :
"Afficher la date du jour"
Requête35 :
"Donner pour chaque employé son nom et son prénom ainsi que le nom et le prénom de son
superviseur hiérarchique direct."
7
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
Exemple
1) Ajout d'un seul tuple
a)
INSERT INTO EMPLOYE
VALUES ('TOUZI','Ali', 273381485,'12-jun,-57','14 rue Bellevue, Tunis','M',400, 465381273,4)
b)
INSERT INTO EMPLOYE (Nom, NAS)
VALUES ('TOUZI', 273381485)
Les autres attributs sont supposés avoir des valeurs non connues. Elles prennent la valeur NULL
par défaut.
c)
INSERT INTO EMPLOYE (Nom, NAS, No_Dept)
VALUES ('TOUZI', 273381485,2)
On doit vérifier avant l'insertion la Contraintes d’intégrité Référentielle: le département Numéro 2
existe ou non.
d)
INSERT INTO EMPLOYE (Nom, No_Dept)
VALUES ('TLILI', 2)
Vérification des valeurs Nulles rejet :Nas est une clé mais sa valeur n'est pas spécifiée dans ce
cas.
b) On remplie la table
INSERT INTO Dept_Info( Dept_Nom, Nb_Emp ,Sal_Tot )
SELECT Nom_D, Count(*), Sum(Salaire)
FROM DEPARTEMENT, EMPLOYE
WHERE No_Dep = No_Dept
GROUP BY Nom_D
8
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
Exemple
a) Modification d'un seul tuple
UPDATE PROJET
SET Loc_p = 'Sousse', Dept_No = 5
WHERE No_p = 10
Exemple
a) Suppression d'un seul tuple
DELETE FROM EMPLOYE
WHERE NAS=273381465
9
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
Syntaxe
CREATE VIEW <nom-vue> AS <requête>
Exemple1 "Liste de tous les employés (Nom) et des projets (Nom, nombre d'Heures) sur lesquels ils
travaillent"
CREATE VIEW TRAVAILLE-SUR1
AS SELECT Nom, Nom-p, Heures ( V1 )
FROM EMPLOYE, PROJET, TRAVAILLE-SUR
WHERE NAS=NAS-Emp AND Projet-No = No-p
Travaille-Sur1 DEPT-INFO
Nom Nom-p Heures Dept-Nom Nbre-Empls Sal-Total
10
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
1)
SQL> create table employé
2 (Nom varchar2(15),
3 Prénom varchar2(15),
4 NAS number(10) not null
5 );
Table créée.
SQL>
2)
SQL> create table Département
2 (
3 Nom_D varchar2(20),
4 No_Dep number(2),
5 Nas_Resp number(10)not null,
6 Date_Resp date,
7 constraint PK_DEP1 primary key (No_dep)
8 );
Table créée.
SQL>
/*************************************************************/
SQL> describe département
Nom NULL ? Type
----------------------------------------- -------- ----------------------------
NOM_D VARCHAR2(20)
NO_DEP NOT NULL NUMBER(2)
NAS_RESP NOT NULL NUMBER(10)
DATE_RESP DATE
SQL>
/*************************************************************/
3)
SQL> alter table département
2 add nom_r varchar2(10);
Table modifiée.
11
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
SQL>
/*****************************************************/
4)
SQL> alter table département
2 modify nom_r varchar2(20);
Table modifiée.
SQL>
/*****************************************************/
5)
SQL> drop table départementt;
drop table départementt
*
ERREUR à la ligne 1 :
ORA-00942: Table ou vue inexistante
SQL>
/*****************************************************/
6)
SQL> drop table département;
Table supprimée.
SQL>
12
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
13
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
1. DESCRIPTION DE L’APPLICATION
La base de données Entreprise a pour but de gérer les employés, les départements et les
projets d’une entreprise. On se propose de concevoir une BD pour cette entreprise.
Au terme de cette première phase les concepteurs aboutissent aux spécifications suivantes :
Un département possède un nom, un numéro et un directeur dont la date d’entrée en fonction
est mémorisée. Un département est identifié par son numéro de département. Un département peut
être localisé à différents endroits géographiques.
Un département est responsable d’un certain nombre de projet. Chaque projet est caractérisé par un
nom, un numéro et une localisation unique. Un projet est identifié par son numéro de projet.
Chaque employé est caractérisé par son nom, son prénom, son numéro d’assurance, son
adresse, son salaire, son sexe et sa date de naissance. Un employé est identifié par son numéro
d’assurance.
Un employé est toujours rattaché à un seul département mais peut travailler sur plusieurs projets
non nécessairement rattachés à un seul département.
Le nombre d’heures par semaine passé par un employé sur chaque projet est mémorisé.
A chaque employé correspond un superviseur responsable.
Pour chaque employé, on désire également conserver le prénom, le sexe, la date de naissance et la
relation de filiation de chacune de ses personnes à charges. On suppose que les prénoms des
personnes à charges d’un même employé sont distincts.
Département Dep-Loc
Nom_D No-Dep Nas_Resp Date_Resp No-Dep Loc-Dep
Travaille-Sur Projet
NAS-Emp Projet-No Heures Nom_p No-p Loc_p Dept_No
Dependant
NAS-Emp Prénom-Dependant Sexe Naiss_D Filiation
+ C.I.Ref
14
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
Employé
Nom Prénom NAS D_Nais Adresse Sexe Salaire Nas_S No_Dept
up
Ben ahmed Ali 123456789 09/01/55 34 rue de la sambre, M 300 333445555 5
tunis
Ben ALI Mohamed 333445555 08/12/45 4 rue banafsej , M 400 888665555 5
rades
Ben Ali Fethi 999887777 19/07/58 10 rue 2566 , M 250 987654321 4
ezzahra
Ben Salah Alia 987654321 20/06/47 22 rue 65989, F 430 888665555 4
hamma- lif
Hergli Faten 666884444 15/12/52 15 rue 10245, F 380 333445555 5
el menzeh
Sayadi Iméne 453453453 31/07/62 22 rue el assmine F 250 333445555 5
el manar2
Sayadi Leila 987987987 29/03/59 10 rue 10254 , F 250 987654321 4
montfleury
Tlili Salah 888665555 10/11/57 7 rue 14587 , M 550 1
tunis
Département Dep-Loc
Nom_D No_Dep Nas_Resp Date_Resp No_Dep Loc_Dep
Recherche 5 333445555 22/5/78 1 Tunis
Administration 4 987654321 01/01/85 4 Monastir
Direction 1 888665555 19/06/71 5 Sfax
5 Sousse
5 Tunis
Travaille-Sur Projet
NAS_Emp Projet_No Heures Nom_p No_p Loc_p Dept_No
123456789 1 32.5 Produit X 1 Sfax 5
123456789 2 7.5 Produit Y 2 Sousse 5
666884444 3 40.0 Produit Z 3 Tunis 5
453453453 1 20.0 Produit X1 10 Monastir 4
453453453 2 20.0 Produit Y1 20 Tunis 1
333445555 2 10.0 Produit Z1 30 Monastir 4
333445555 3 10.0
333445555 10 10.0
333445555 20 10.0
999887777 30 30.0
999887777 10 10.0
987987987 10 35.0
987987987 30 5.0
987654321 30 20.0
987654321 20 15.0
888665555 20
Dependant
NAS_Emp Sexe Naiss_D Filiation
Prénom-Dependant
333445555 Ali M 05/02/86 Fils
333445555 Zeineb F 05/10/88 Fille
333445555 Ridha M 03/05/90 Fils
987654321 Sami M 20/02/89 Fils
123456789 Saloua F 15/03/86 Fille
123456789 Taoufik M 10/06/85 Fils
123456789 Sami M 10/06/90 Fils
15
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
/* fichier emp_ldd.sql */
16
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
17
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
/* fichier emp_lmd.sql */
18
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
19
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
/* fichier emp_req.sql */
20
Mme Grissa.A Chap5 SQL : UN LANGAGE DE BASE DE DONNEES RELATIONNELLE
Département (Nom_D,No_Dep,Nas_Resp,Date_Resp)
Dep-Loc (No_Dep,Loc_Dep)
Travaille-Sur (NAS_Emp,Projet_No,Heures)
Projet (Nom_p,No_p,Loc_p,Dept_No)
Dependant (NAS_Emp,Prénom-Dependant,Sexe,Naiss_D,Filiation)
+ C. I
Employé ( NAS, Nom, Prénom, D_Nais, Adresse, Sexe, Salaire, #NAS, #No-Dep)
21