Académique Documents
Professionnel Documents
Culture Documents
Chapitre 4: 1. Définition Des Données
Chapitre 4: 1. Définition Des Données
Chapitre 4: 1. Définition Des Données
SQL
- SQL (Structured Query Language) est l’une des raisons principales du succès du modèle
relationnel
- SQL est devenu un standard supporté par tous les SGBD relationnels
- Standardisé par un effort conjoint de l’ANSI et de l’ISO en 1986 (SQL1). Révisé en 1992 (SQL2),
puis en 1999 (SQL3).
- D’autres révisions ont suivi en 2003 et en 2006 et en 2011 pour introduire des aspects liés à XML
et aux objets notamment.
- SQL est à la fois un LDD et un LMD ; il permet la définition, l’interrogation et la modification de la
BD. Il permet également de définir des vues et des autorisations.
BD/FS Tétouan/2021-2022 28
o Syntaxe : DEFAULT <value>
- CHECK: restriction des valeurs du domaine ou de l’attribut
Note DECIMAL(4,2) NOT NULL CHECK (Note >=0 AND Note <=20);
CHECK peut être également spécifiée lors de la définition d’un domaine
Exemple :
CREATE DOMAIN D_Note AS DECIMAL(4,2) CHECK (D_Note >=0 AND D_Note <=20);
BD/FS Tétouan/2021-2022 29
Exemple :
ALTER TABLE EMPLOYE ADD COLUMN Fonction CHAR(12);
Remarque : Contrairement au modèle relationnel formel ; les tables SQL ne sont pas des ensembles ;
l’existence de lignes identiques (mêmes valeurs pour tous les attributs) est autorisée. Toutefois, les
tables SQL pour lesquelles, une clé a été définie sont des ensembles (sans doublons).
1. Liste des noms et adresses des employés qui travaillent pour le département informatique
SELECT Nom, Adresse
FROM EMPLOYE, DEPARTEMENT
WHERE DNom = ‘Informatique’ AND DNum = DNumero;
2. Liste des numéros projets localisés à Tétouan, le nom du département en charge du projet, le
nom et l’adresse du chef de ce département
SELECT PNum, Dnom, Nom, Adresse
FROM EMPLOYE, DEPARTEMENT, PROJET
WHERE ChefMat = Matricule AND DNum = DNumero AND Plocalite = ‘Tetouan’;
BD/FS Tétouan/2021-2022 30
SELECT E.Prenom, E.Nom, S.Prenom, S.Nom
FROM EMPLOYE AS E, EMPLOYE AS S
WHERE E.SuperMat = S.Matricule;
E et S sont des alias pour la relation EMPLOYE
On peut renommer la table ainsi que ses attributs dans la clause FROM :
EMPLOYE AS E(Pr, Nm, Ad, DNais, Sx, Sl, SMat, DN)
BD/FS Tétouan/2021-2022 31
SELECT Nom, Prenom
FROM EMPLOYE
WHERE Adresse like ‘%Tetouan%’;
Exemple : Simuler une augmentation de salaire de 10% pour les employés travaillant sur le projet
‘Web’
SELECT Nom, Prenom, Salaire*1.1 AS Nouv_Salaire
FROM EMPLOYE AS E , PROJET AS P, TRAVAILLE_SUR AS T
WHERE E.Matricule = T.Emat AND P.PNum = T.PNum AND P.PNom = ‘Web’;
Exemple : Noms et prénoms des employés dont les salaires sont entre 5000 et 7000
SELECT Nom, Prenom
FROM EMPLOYE
WHERE Salaire BETWEEN 5000 AND 7000;
2.7. Insertion
L’insertion porte sur un tuple.
INSERT INTO EMPLOYE
VALUES (1165, ‘Alaoui’, ‘Ahmed’, ‘Tetouan’, 01/01/1980’, ‘M’,8000, 1120, 2);
On peut préciser les attributs à insérer.
INSERT INTO EMPLOYE(Matricule, Nom, Adresse, Prenom)
VALUES (1165, ‘Alaoui’, ‘Tetouan’, ‘Ahmed’);
Dans ce cas les attributs pour lesquelles des valeurs n’ont pas été insérées prennent leurs valeurs par
défaut ou sont mis à NULL. Autrement l’insertion est rejetée.
L’insertion peut également porter sur plusieurs lignes. Une table peut être chargée par les résultats
d’une requête par exemple.
CREATE TABLE TRAVAILLE_SUR_INFO
(Emp_Nom VARCHAR(15),
Proj_Nom VARCHAR(15),
Heures DECIMAL(3,1))
2.8. Modification
UPDATE EMPLOYE
SET Salaire = Salaire*1.1
WHERE Matricule = 1165;
BD/FS Tétouan/2021-2022 32
WHERE Nom = ‘Alaoui’;
BD/FS Tétouan/2021-2022 33
3. SQL Avancé
3.1. Table de vérité des comparaisons avec NULL
- Les conditions comportent des comparaisons qui peuvent porter sur des valeurs NULL
- Une valeur est NULL si elle n’est pas connue, n’est pas disponible ou n’est pas applicable
- une valeur NULL n’est pas égale à une autre valeur NULL
- Quand une valeur NULL prend part à une comparaison elle est considérée INCONNU
BD/FS Tétouan/2021-2022 34
3.4. Imbrication des requêtes SQL : Comparaison entre tuples
SQL permet également la comparaison entre des tuples
- Liste des matricules des employés avec les combinaisons (projet, heures) sur un projet pour
lequel travaille l’employé de matricule ‘1165’
SELECT DISTINCT EMat
FROM TRAVAILLE_SUR
WHERE (Pnum, Heures) IN
(SELECT Pnum, Heures
FROM TRAVAILLE_SUR
WHERE Emat = 1165);
BD/FS Tétouan/2021-2022 35
( SELECT *
FROM ENFANT
WHERE Matricule = Emat);
- Liste des employés qui travaillent sur tous les projets gérés par le département n°2
SELECT Nom, Prenom
FROM EMPLOYE E
WHERE NOT EXISTS ((SELECT Pnum
FROM PROJET
WHERE Dnumero = 2)
EXCEPT (SELECT PNum
FROM TRAVAILLE_SUR
WHERE Emat = E.Matricule));
Avec NATURAL JOIN (Jointure naturelle) entre deux relations R et S, la condition de jointure est
implicite et porte sur tous les attributs de même nom de R et S.
Si les attributs ne sont pas de même nom, on peut les renommer pour qu’ils coïncident.
Liste des employés du département INFORMATIQUE
SELECT Nom, Prenom, Adresse
FROM (EMPLOYE NATURAL JOIN
(DEPARTEMENT AS DEPT(DNum, DNom, Chef, DC, DDC))
WHERE DNom = ‘INFORMATIQUE’;
Par défaut, les jointures sont internes, c’est-à-dire que ne sont inclus que les tupIes d’une relation
pour lesquels il existe des tuples correspondants dans l’autre relation.
Si on souhaite extraire les autres tuples, on a recours à des jointures externes. Ci-dessous un exemple
avec les deux types de jointure.
BD/FS Tétouan/2021-2022 36
Il existe plusieurs manières de spécifier des jointures en SQL :
- INNER JOIN (équivalent à JOIN)
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL JOIN
BD/FS Tétouan/2021-2022 37
Supposons qu’on souhaite connaître les départements qui comptent parmi leurs employés,
au moins 5 avec un salaire supérieur à 10 000.
SELECT Dnom, COUNT(*)
FROM EMPLOYE, DEPARTEMENT
WHERE DNum = DNumero AND Salaire > 10000
GROUP BY Dnum
HAVING COUNT(*) > 5;
BD/FS Tétouan/2021-2022 38