Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Chapitre 04:
Modèle Conceptuel
Modèle relationnel
normalisé
Algèbre relationnelle
Requêtes
AR
Composition des Requêtes
SQL
3 Le Langage de manipulation relationnel SQL
Supporté par la plupart des produits commerciaux que ce soit par les
systèmes de gestion de bases de données micro tel que Access ou par les
produits plus professionnels tels que Oracle ou Sybase.
Les contraintes
Les contraintes d’intégrité sur les
17
colonnes de tables
Les contraintes d’intégrités permettent aux SGBD-R de garantir la
cohérence des données lorsque ces dernières sont mises à jour.
Ces contraintes correspondent à des contraintes du monde réel que la
base de données cherche à représenter.
Exemple,
le nom d’un mois doit être une chaine de caractères, ou l’âge un
nombre…
Il y aussi les clés primaires et clés étrangères, mais aussi bien
d’autres contraintes que les bases de données peuvent exprimer.
Ainsi si une mise à jour viole une de ces contraintes, elle sera
alors tout simplement rejetée.
18 Contrainte de non nullité (NOT
NULL)
La contrainte de vérification est une contrainte qui permet de spécifier que la valeur
d’une colonne particulière doit satisfaire une expression booléenne.
Exemple :
CREATE TABLE client ( num-cli int NOT NULL ,
nom-cli varchar (15), adr-cli char (50), primary key
(num-cli))
21 Expression d’une contrainte
référentielle (clé étrangère)
La contrainte d’intégrité de référence est la contrainte de clé étrangère.
On déclarera la clé étrangère et la table référencée par la clause : foreign key
Exemple:
CREATE TABLE detail (num-com int NOT NULL,
num-cli int NOT NULL,
qte-com int,
PRIMARY KEY (num-co, num-cli),
FOREIGN KEY (num-com) references
commande,
FOREIGN KEY (num-cli) references CLIENT)
Contrainte d’intégrité de référence
22
(REFERENCES)
Colonne ou groupe de colonnes correspondent aux valeurs qui apparaissent
dans les lignes d’une autre table.
La suppression se fait dans la table maitre (ici personne) ainsi que dans la
table courante (cours) dans laquelle la contrainte d’intégrité est comme suit :
Exemple:
[ CONSTRAINT <nom_contrainte>
{ PRIMARY KEY (<nom_col>[, <nom_col>…]) |
FOREIGN KEY <nom_col>[, <nom_col>…])
REFERENCES <nom_tablel> [ (<nom_col>…) ]
[ ON DELETE {CASCADE |SET NULL} ]
CHECK (<condition>) }
28 Les contraintes d’intégrité sur la table
CONSTRAINT
Cette partie optionnelle permet de donner un nom à une contrainte de table.
Si la contrainte est violée, le nom de la contraint est présent dans les messages d’erreur.
PRIMARY KEY
Cette contrainte permet de spécifier une clé primaire composée de plusieurs attributs.
FOREIGN KEY ( <nom_col> [, …])
REFRENCES <table-maitre> [ ( <nom_col_maitre> [, …]) ]
[ ON DELETE {CASCADE | SET NULL | RESTRICT} ]
Cette contrainte permet de définit un ensemble d’attributs comme clés étrangères. Les
clés de la table maitres doivent être définies comme PRIMARY KEY ou UNIQUE.
CHECK (<condition>)
Cette contrainte permet d’exprimer une condition qui doit exister entre plusieurs attributs
de la ligne.
29 Suppression d’une table
[ ] : optionnel | : ou
33
Requête d'interrogation SQL
la clause select décrit la relation résultat.
L'expression d'attributs désigne soit une liste d'attributs, soit une expression
fonctionnelle obtenue à l'aide des fonctions
sum (somme), avg (moyenne), count (compte), min, max.
Le mot clé distinct permet d'éliminer les doubles après une projection.
La clause from désigne les relations concernées par la requête, avec éventuellement une
ou plusieurs variables synonymes pour chaque relation désignée.
La clause where, optionnelle, spécifie les critères de sélection.
La condition de sélection est une expression logique spécifiant les prédicats de
restriction ou de jointure à satisfaire par la réponse.
La sous-question peut être n'importe quelle question SQL, ce qui permet de générer une
série de questions imbriquées.
Le group by partitionne la relation selon les valeurs de la liste des attributs spécifiée.
La clause having exprime une condition sur le groupe d’enregistrements associé à
chaque valeur du groupage.
La clause order by permet de trier les résultats obtenus.
34
Requête d'interrogation SQL
Le principe général de l'évaluation d'une requête permet de comprendre la
sémantique que SQL attribue aux requêtes.
Ce principe est le suivant:
35
Requête d'interrogation SQL
Remarque :
Seules les clauses select et from sont obligatoires. Dans le cas d'une requête ne
contenant que ces clauses, le résultat est le produit cartésien des relations
mentionnées dans la clause from.
Exemple :
1) Donner les noms des clients.
a) résultat avec doublons :
SELECT nom-cli
FROM client
36
Requête d'interrogation SQL
b) résultat sans doublons :
SELECT DISTINCT (nom-cli)
FROM CLIENT
Exemple :
Donner num-prod et des-prod des produits non commandés.
SELECT num-prod
FROM PRODUIT
WHERE prix-un >= ALL SELECT prix-un
FROM PRODUIT
43
Requête d'interrogation SQL
d) ANY: Compare chacune des valeurs de l’ensemble à une valeur particulière et retourne ‘VRAI’ si la
comparaison est évaluée à ‘VRAI’ pour au moins un des éléments.
SELECT num-prod
FROM PRODUIT
WHERE prix-un > ANY SELECT prix-un
FROM PRODUIT
Exemple2 : Donner les numéros des clients qui ont commandé des produits en quantité > 60
SELECT n°cli
FROM COMMANDE
WHERE n°com= ANY SELECT n°com
FROM DETAIL
WHERE qcom >60
44
Requête d'interrogation SQL
e) EXISTS : Retourne ‘VRAI’ si la sous-interrogation (requête imbriquée) ramène au
moins une ligne.
Exemple: Donner les numéros des clients qui ont commandé au moins un produit en
quantité supérieure à 100.
SELECT n°cli
FROM COMMANDE
WHERE EXISTS (SELECT *
FROM DETAIL
WHERE n°com= COMMANDE.n°com
And qcom > 100)
45
Requête d'interrogation SQL
SELECT n°pro
FROM PRODUIT
WHERE NOT EXISTS (SELECT * FROM DETAIL
WHERE n°pro= PRODUIT.n°pro)
46 Requête d'interrogation SQL
3) En introduisant les connecteurs AND et OR entre sous-requêtes. On peut
réaliser des formules très complexes.
47
Requête d'interrogation SQL
Exemple : Donnez les noms des clients qui ont commandé des produits ayant
pour désignation ‘amox’ et commandés en quantité > 100
Select nom-cli
From CLIENT
Where num-cli in select num-cli
From COMMANDE
Where num-com in (select num-com
From DETAIL
Where qte-com>100 and num_prod in select num-prod
From PRODUIT
Where des-prod=’amox’)
48
Requête d'interrogation SQL
4) Opération JOINTURE (équijointure)
SELECT *
FROM table1, table2, table3, ...
WHERE table1.attribut1=table2.attribut1
AND table2.attribut2=table3.attribut2 AND ...;
Exemple :
SELECT *
FROM Produit, Détail
WHERE Produit.CodePrd=Détail.CodePrd ;
La clause HAVING ne s’emploie qu’avec un ‘GROUP BY’. Elle exprime une condition
sur le groupe d’enregistrements associé à chaque valeur du groupage.
Exemple: Donner la somme des quantités commandées des produits qui ont été
commandés au moins deux fois.
Remarque
SELECT *
FROM PRODUIT
ORDER BY prix-un/desc
53 Requête d'interrogation SQL
7) On peut faire de la recherche avec des conditions sur les ensembles
Exemple1: Quels sont les clients qui ont commandés tous les produits?
SELECT n°cli
FROM COMMANDE
WHERE (SELECT n°pro
FROM DETAIL
WHERE n°com= COMMANDE.n°com)
CONTAINS
(SELECT n°pro
FROM PRODUIT)
54
Requête d'interrogation SQL
Exemple2: Donner les numéros des commandes où figurent tous les produits.
SELECT num-com
FROM DETAIL
GROUP BY num-com HAVING SET (num-prod)
CONTAINS
SELECT num_prod
FROM PRODUIT
55
Requête d'interrogation SQL
Ces fonctions sont sum, min, max, avg et count. Elles peuvent apparaître
aussi bien dans la clause select que dans la clause Having. Les formes les
plus générales sont les suivantes:
57 Requête d'interrogation SQL
Il faut noter que les attributs B sur lesquels se fait le partitionnement des
relations doivent nécessairement apparaître dans la clause select pour une
bonne interprétation externe des résultats des fonctions de calcul.
Requête d'interrogation SQL
59
Fonction d’agrégation
a) COUNT(expr) : dénombre les lignes sélectionnées.
Exemple :
SELECT COUNT(num_prod)
FROM PRODUIT
Remarques :
1) On peut préfixer expr par les mots clés [DISTINCT] [ALL]
2) Ces fonctions peuvent apparaître dans la clause SELECT ou dans la clause HAVING.
60 Requête d'interrogation SQL
Lien entre algèbre relationnelle et SQL
61 Soit le schéma de base de données relationnel suivant :
R1 (A, B) R2 (C, D) R3 (A, E) R4 (B)
Lien entre algèbre relationnelle et SQL
62
63 Mise à jour des relations
1) Insérer des tuples :
INSERT INTO
- insérer un tuple : INSERT INTO nom de relation Values <tuple constant>
- insérer un ensemble de tuples : INSERT INTO nom de relation :
< requête SELECT dont le résultat a même schéma que la relation nom relation>
Exemple1 : insérer le tuple (P10, desp, 100) dans PRODUIT.
- si la clause ‘WHERE condition est présente, seuls les tuples satisfaisant la condition
sont supprimés.
- si la clause ‘WHERE condition’ est absente, alors tous les tuples sont supprimés ; la
relation continue d’exister, mais sa population est vide.
DELETE PRODUIT
WHERE desg=’amox’
65 Mise à jour des relations
3) Mettre à jour un (des) attribut(s) :
UPDATE
UPDATE nom relation
SET nom attribut1=<expression1 qui définit une valeur pour l’attribut1> …. …..
SET nom attributn=<expression n qui définit une valeur pour l’attribut n>
[WHERE condition]
Exemple: augmenter le prix des produits dont le prix est inférieur à 100 de 20.
UPDATE PRODUIT
SET prix-un= prix-un +20
WHERE prix-un <100
Remarque : La condition qui suit la clause WHERE peut être une requête SQL.
66
67 Exercice d’application AR & SQL
Soit la base de données de schéma suivant:
Exprimer à l'aide des opérations de l'algèbre relationnelle puis SQL les requêtes suivantes:
4) Quels sont les étudiants qui ne font pas partie des groupes 1, 5 et 6 ?
Algèbre Relationnelle vs SQL
70
5) Quels sont les étudiants qui ont cours le Samedi, le Lundi et le Jeudi ?
71
Algèbre Relationnelle vs SQL
5) Quels sont les étudiants qui ont cours le Samedi, le Lundi et le Jeudi ?
Algèbre Relationnelle vs SQL
72
8) Quels sont les étudiants qui suivent au moins les modules suivis par Mohammed ?
74 Algèbre Relationnelle vs SQL
9) Quels sont les étudiants qui suivent exactement les mêmes modules que Mohammed ?
R1=ETUDIANT[nom-et = Mohammed]
R2=R1[module]
R3=EMP-TMPS[module]
R4= ETUDIANT[nom-et, module]
R5=R3-R2
R6=R5[module]ETUDIANT
R7=R6[nom-et]
R8=DIVISION(R4,R2)
R9= R8-R7