Académique Documents
Professionnel Documents
Culture Documents
Introduction
Ces langages sont équivalents : ils permettent de désigner les mêmes ensembles
de données.
1. Algèbre relationnelle
1.1 Opérations de base
1.1.1 Opérations unaires
Restriction
La restriction d’une relation R par un prédicat Q est une relation R’ de
même schéma contenant les nuplets (tuples) de R satisfaisant Q.
R
Exemple
Soit la relation Etudiant (ID-Etud, Nom, Prénom, Ville, DN, NbreAnnées)
Etudiant
ID_Etud Nom Prénom Ville DN NbreAnnées
001 Amir Ali Oran 15/01/1994 2
002 Bey Mohamed SBA 02/03/1992 3
003 Kadi Amal SBA 19/05/1993 3
004 Amar Ahmed Oran 20/04/1994 3
σ(Etudiant;(Ville=‘Oran’)∧(NbreAnnées>2) ) donne :
ID_Etud Nom Prénom Ville DN NbreAnnées
004 Amar Ahmed Oran 20/04/1994 3
Projection
La projection d’une relation R de schéma R( A1, A2,…, An ) sur les attributs
{A1, A2,…, Ap} ,p<n, est une relation R’ de schéma R’(A1, A2,…, Ap ) contenant
les tuples obtenus à partir des tuples de R par élimination des valeurs des
attributs de R n’appartenant pas à R’ et suppression des tuples en doubles.
A1, …, Ap
R
Nom Prénom
Amir Ali
Bey Mohamed
Kadi Amal
Amar Ahmed
Notation : T=R ∪ S
Repésentation graphique
T
R S
Nom Prénom
Amine Hichem
Benali Amira
Bekkar Reda
Azzi Mohamed
Amir Ali
Bey Mohamed
Kadi Amal
Amar Ahmed
Notation : T= R – S
Repésentation graphique
T
R S
Exemple R2 A B
R1 A B a1 b1
a1 b1 a4 b4
a2 b2 a5 b5
R1-R2 A B
a2 b2
Produit cartésien : le p.c de deux relations R et S de schémas quelconques est
une relation T ayant pour attributs la concaténation des attributs de R et S et
pour tuples toutes les concaténations d’un tuple de R à un tuple de S.
Notation : T= R×S
Repésentation graphique
T
R S
Exemple
R1 A B S1 C D
a1 b1 c1 d1
a2 b2 c2 d2
R1xS1 A B C D
a1 b1 c1 d1
a1 b1 c2 d2
a2 b2 c1 d1
a2 b2 c2 d2
Sélection : cette opération est définie par une restriction suivie d’une projection.
Par exemple si on veut obtenir les noms et prénoms des étudiants habitant Oran
on écrira :
R S
Exemple
R1 A B R2 A B
a1 b1 a1 b1
a2 b2 a4 b4
a3 b3 a5 b5
R1∩R2 A B
a1 b1
Repésentation graphique
T
R S
Exemple
R1 A B S3 C D
a1 b1 a1 d1
a2 b2 c4 d4
a3 b3 c5 d5
R1 ⋈ S3 A B C D
a1 b1 a1 d1
Division
La division de S (A1,A2, …Ap, Ap+1,…, An) par S(Ap+1,…, An) est une
relation Q(A1,A2,…Ap) formée de tous les tuples qui concaténés à chacun des
tuples de S donne toujours un tuple de R.
Notation : Q=R÷S
Cette opération s’applique à une requête qui contient le terme « pour tous ».
Repésentation graphique
T
R S
Exemple
R1 A B C
S4 A B
a1 b1 c1
a1 b1
a2 b2 c2
a2 b2
a3 b3 c3
a1 b1 c2
R1÷S4 C
c2
Expression de requête:
Soit la base de données suivante :
Q1 : Client.NC=Achat.NC ; Q2 : Produitt.NP=Achat.NP
Résultat
Nom, Adresse
année-prod
Q2
Q1
type=
Client "portable"
Quantite>50
Achat Produit
On distingue
• SQL2 : standard adopté en 1992
• SQL3 : extension de SQL2 avec "gestion" d’objets.
Une sélection est une combinaison d’une restriction suivie d’une projection. Une
restriction s’exprime par un bloc du type :
SELECT *
FROM nom de relation
WHERE condition ;
Exemples
« Lister les clients dont le nom comporte la lettre A en 2ième position »
SELECT *
FROM client C
WHERE C.nom LIKE '_A%'
Le prédicat LIKE compare une chaîne avec un modèle. (_) remplace n'importe
quel caractère (%) remplace n'importe quelle suite de caractères
« Lister les produits dont le prix est compris entre 5000 et 12000”
SELECT *
FROM produit P
WHERE P.prix BETWEEN 5000 AND 12000
On peut trier les résultats selon l’ordre croissant (ASC) ou décroissant (DESC)
d’un ou plusieurs attributs en utilisant la clause :
Exemple : « listez les noms des clients habitant Sidi-Bel-Abbès par ordre
alphabétique croissant » s’écrit :
SELECT Nom
FROM Client
WHERE Adresse = « SBA »
ORDER BY Nom ASC;
SELECT *
FROM relation1, relation2
Exemple
Par exemple, la requête « Trouvez les noms des clients qui ont fait des achats »
nécessite d’effectuer la jointure de Client avec Achat sur l’attribut NC (cette
jointure est appelée jointure naturelle):
Dans cette requête on exprime le fait que le numéro client (NC) des noms des
clients cherchés doit appartenir à la liste des numéros des clients (NC) de la
relation Achat.
Les attributs résultats doivent appartenir aux relations citées dans le bloc le plus
externe.
2)
SELECT DISTINCT Nom
FROM Client
WHERE NC IN (SELECT NC
FROM Achat, Produit
WHERE (Achat.NP=Produit.NP)
AND (Produit.designation=’ livre’));
3)
SELECT DISTINCT Nom
FROM Client
WHERE NC IN (SELECT NC
FROM Achat
WHERE NP IN (SELECT NP FROM Produit
WHERE (Produit.designation=’ livre’)));
Afin de faciliter des imbrications des blocs, on peut référencer dans un bloc
interne une relation d’un bloc externe, on parle alors de référence inter-bloc.
Ainsi, la requête peut encore s’écrire :
4)
SELECT DISTINCT Nom
FROM Client
WHERE ‘livre’ IN (SELECT designation
FROM Achat, Produit
WHERE (Achat.NP=Produit.NP)
AND (Achat.NC=Client.NC));
SELECT NP
FROM Produit
WHERE type=’Dell’
UNION
SELECT NP
FROM Produit
WHERE couleur=’noire’;
Différence
« Listez les numéros des produits qui n’ont jamais été acheté»
SELECT NP
FROM Produit
MINUS
SELECT NP
FROM Achat;
Intersection
« Quels sont les numéros des produits qui sont achetés par les clients 1 et 2»
SELECT NP
FROM Achat
WHERE NC=1
INTER
SELECT NP
FROM Achat
WHERE NC=2;
2.1.5 Expressions de calcul
Ces fonctions peuvent être utilisées dans la clause SELECT, par exemple pour
« trouver le nombre de clients habitant SBA », on écrit :
SELECT COUNT(NC)
FROM Client
WHERE Adresse=’SBA’;
Mais aussi pour exprimer une qualification de recherché à l’aide d’une clause
spéciale:
SELECT NP
FROM Achat
GROUP BY NP HAVING COUNT (DISTINCT NC) >20 ;
SQL fournit aussi d’autres clauses et mots clés tel que : ALL, ANY, EXISTS
qui permettent de distinguer les cas où l’on recherche un élément quelconque
des cas où l’on recherche tous les éléments.
Exemples :
« Donner les noms des produits qui n'ont pas été acheté »
SELECT C.nom
FROM produit P
WHERE NOT EXISTS( SELECT *
FROM Achat A
WHERE A.NP = P.NP );
« Donnez les nos des clients ayant acheté un produit en quantité supérieure à
chacune des quantités de produits achetées par le client 'c1' »
SELECT A.NC
FROM Achat A
WHERE A.qte >= ALL(SELECT B.qte
FROM Achat B
WHERE B.NC = 'c1' ) ;
« Donnez les nos des clients ayant acheté un produit en quantité supérieure à
au moins l'une des quantités de produits achetées par le client 'c1' »
SELECT A.NC
FROM Achat A
WHERE A.qte >= ANY(SELECT B.qte
FROM Achat B
WHERE B.NC = 'c1' );
Exemples
« Ajoutez le client 10 de nom Amine habitant SBA » , s’écrit :
« Ajoutez dans une table « temp » de même schéma que la table Achat, tous
les achats qui sont en quantité supérieur à 50 »
DELETE Produit
WHERE ‘Ahmed’ IN (SELECT Nom FROM Client, Achat
WHERE(Client.NC=Achat.NC)AND (Achat.NP=Produit. NP));
« Mettre la quantité à 0 pour tous clients d’adresse SBA », s’exprime par :
UPDATE Achat
SET Quantite=0
WHERE ‘SBA’ IN (SELECT Adresse
FROM Client
WHERE Client.NC=Achat.NC);
définition de colonne : :=
nom de colonne
(nom de domaine ou type)
[liste de contrainte de colonne]
[DEFAULT valeur par défaut]
contrainte de colonne : :=
[CONSTRAINT nom]
type de contrainte de colonne
contrainte de table : :=
[CONSTRAINT nom]
type de contrainte de table
Exemples:
modification de table : :=
ADD COLUMN définition de colonne
ADD CONSTRAINT contrainte de table
DROP COLUMN nom de colonne
DROP CONSTRAINT nom de contrainte
Une vue est une table virtuelle résultat d’une requête. Son rôle est de :
- réduire la complexité syntaxique des requêtes
- définir les schémas externes.
- définir des contraintes d’intégrité.
- définir un niveau additionnel de sécurité en restreignant l’accès à un
sous-ensemble de lignes et/ ou de colonnes.
Exemple
« création de la vue correspondant aux clients qui habitent Alger »
Syntaxe :
CREATE [UNIQUE] INDEX index ON table (colonne [ASC|DESC], ...)