Académique Documents
Professionnel Documents
Culture Documents
BASES DE DONNEES
- LE LANGAGE SQL -
Une base de données est un ensemble structuré de données enregistrées sur supports accessible par
l’ordinateur.
Un SGBD (Système de Gestion de Base de Données) est un ensemble de logiciels qui fournit un
environnement pour décrire, mémoriser, manipuler, traiter des collections de données
Exemples de SGBD
Access
Sql Server
My SQL
Sqlite
Oracle
PostgreSQL
DB2
…
Exemple de Base de données
Pour gérer l'ensemble des informations concernant la vente des voitures, les données qui seront
enregistrées sur disque dur se présentent sous forme de tables suivantes:
Personne Voiture
NumVoit Marque Modele Couleur
NumAch Nom Age Ville
1 Ford Fiesta Noire
1 yassin 42 Agadir
2 Citroën C4 Blanche
2 Imane 33 Casablanca
3 Renault Clio Rouge
3 Reda 30 Rabat
4 Peugeot 307 cc Noire
4 Meryem 42 Agadir
5 Citroën C3 Bleue
5 Walid 27 Marrakech
6 Renault Twingo Noire
Vente
NumAch NumVoit DateVente Prix
1 1 2013-02-12 70000
2 4 2010-12-02 55000
Tuple (enregistrement)
4 5 2009-08-26 40000 Ou occurrence
5 2 2011-09-10 80000
Ces tables sont enregistrées dans la base de données Gestion_ventes ayant le schéma
relationnel suivant :
SGBD-SQL 1 M.GUEROIHI
Ce schéma relationnel peut être représenté comme suit :
Remarques:
Personne, Voiture et vente sont appelées : Tables ou Relations
Chaque table ou relation est constituée de colonnes appelées attributs.(champs)
Les attributs de la table Personne sont : NumAch, Nom, Age et ville
Chaque attribut a un type (ou domaine) (ex : le type de NumAch est entier (Integer)).
Chaque table doit avoir une clé primaire (qui identifie une occurrence de la table) (identifiant)
o La clé primaire de la table Personne est : NumAch
o La clé primaire de la table Voiture est : NumVoit
o La clé primaire de la table Vente est : NumAch+NumVoit
La table Ventre a une jointure d’une part avec la table Personne via sa clé étrangère NumAch
et d’autre part avec la table Voiture via sa clé étrangère NumVoit.
II- Langage de description des données :
1- Création d’une table
Exemple :
Création de la table : Personne contraintes d’intégrité
Les contraintes d’intégrité, portant sur une ou plusieurs colonnes,
CREATE TABLE PERSONNE ( possibles sont :
NumAch INT NOT NULL PRIMARY KEY, PRIMARY KEY, spécifie qu’un ensemble d’attributs est clé
NOM VARCHAR(30), primaire,
Age INT, UNIQUE, spécifie qu’un ensemble d’attributs ne contient pas
Ville VARCHAR(25) des doublons (comme PRIMARY KEY, sauf qu’Il est possible de
); spécifier plusieurs UNIQUE sur la même table)
FOREIGN KEY... REFERENCES, spécifie qu’un ensemble
d’attributs est clé étrangère,
NOT NULL, spécifie qu’un ensemble d’attributs ne contient pas
de valeur manquante (NULL)
SGBD-SQL 2 M.GUEROIHI
Création de la table : VOITURE Création de la table : VENTE
2- Autres opérations
Opération Syntaxe
Suppression d’une table DROP TABLE Nomtable
Renommer une Table ALTER TABLE Nomtable RENAME TO NouveauNom
Ajouter une colonne à une table ALTER TABLE Nomtable ADD colonne Type
Exemple: Ajout de la colonne Tel (de type INT) dans la table Personne
ALTER TABLE Personne ADD Tel INT ;
Pour copier tous les enregistrements de la table Personne vers la table Acheteur (de même structure (colonnes)) :
Exemple : la requête suivante permet de supprimer les voitures rouges de la table voiture
SGBD-SQL 3 M.GUEROIHI
3. Modification des enregistrements :
La modification s’effectue avec la commande UPDATE dont la syntaxe est la suivante :
Exemple : la requête suivante permet de modifier la couleur de la voiture numéro 3 ( nouvelle couleur est
'Bleue')
SELECT Ai ,…., Ap
π Ai (R)
FROM R ;
Exemple 1 :
Projection de la table Personne sur les colonnes Nom et Ville
Nom Ville
NumAch Nom Age Ville
yassi Agadir
1 Yassin 42 Agadir
n
Iman Casabla
2 Imane 33 Casablanca
e nca
Reda Rabat
3 Reda 30 Rabat
Mery Agadir
4 Meryem 42 Agadir
em
Walid Marrake
5 Walid 27 Marrakech
ch
SGBD-SQL 4 M.GUEROIHI
Exemple2 : Affichage de différentes marques de voitures
Exemple 3: On demande les prix des voitures en euros(les prix sont en dirhams) :
(1 € = 11.03DH)
σ (R)
E SELECT *
Exemple 1 : Sélectionner les lignes de la table vente dont le prix est strictement supérieur à 60000
SGBD-SQL 5 M.GUEROIHI
Les opérateurs utilisés (en SQL) sont :
Nom LIKE '_e%' ( _ remplace un seul caractère) retourne les noms dont le deuxième caractère est e.
Version 2 :
Exemple 3 : Extraction des personnes dont l’âge est compris entre 25 et 40 ans.
Version 2 :
SGBD-SQL 6 M.GUEROIHI
Exemple 4 : Extraction des personnes n’habitant pas Agadir
Version 2 :
Exemple 5 : Extraction des personnes dont le 2ème caractère de son nom est un 'e'
Exemple 6: requête permettant d'éditer les personnes dans l'ordre des âges croissants:
SELECT *
ASC : Ordre croissant
FROM Personne
DESC : Ordre décroissant
ORDER BY Age ASC;
SGBD-SQL 7 M.GUEROIHI
Exemple 7 : Requête permettant d'éditer la liste des 3 premières personnes les plus jeunes.
SELECT * SELECT *
FROM Personne FROM Personne
Ou
ORDER BY Age ASC ORDER BY Age ASC
LIMIT 3; LIMIT 0,3;
Exemple 8 : Requête permettant d'éditer la liste des personnes dont la ville n’est pas saisie
SELECT *
FROM Personne
WHERE Ville IS NULL;
Exemple 9 : on veut extraire les noms et âge des personnes qui habitent Agadir
SGBD-SQL 8 M.GUEROIHI
3. Produit cartésien
Algèbre Relationnel SQL
SELECT *
R1 X R2
FROM R1, R2
Exemple:
Algèbre Relationnel SQL
SELECT *
VOITURE x VENTE FROM Voiture , Vente
Voiture Vente
NumVoit Marque Modele Couleur NumAch NumVoit DateVente Prix
1 Ford Fiesta Noire 1 1 2013-02-12 70000
2 Citroën C4 Blanche 2 4 2010-12-02 55000
3 Renault Clio Rouge 4 5 2009-08-26 40000
4 Peugeot 307 cc Noire 5 2 2011-09-10 80000
5 Citroën C3 Bleue
6 Renault Twingo Noire
Voiture X Vente
SGBD-SQL 9 M.GUEROIHI
4. Jointure :
Algèbre Relationnel SQL
SELECT *
R1 ▷◁A R2
Si A est l'attribut commun FROM R1 JOIN R2
ou ON R1.A = R2.A
R1 ▷◁A1,A2 R2
Remarque : Le résultat d'une jointure peut être obtenu par une sélection sur produit cartésien.
Algèbre Relationnel :
σ Voiture.NumVoit=Vente.NumVoit(Voiture X VENTE)
SQL :
SELECT *
FROM Voiture , Vente
WHERE Voiture.NumVoit = Vente.NumVoit;
SGBD-SQL 10 M.GUEROIHI
Exemple 2 : Ecrire la requête permettant d’afficher la marque, la couleur et le prix de la voiture achetée par "Walid".
Version 1 :
- Algèbre Relationnel : (projection+ Jointure + Sélection)
- Requête SQL :
Version 2 :
- Algèbre Relationnel : (projection+ Produit cartésien + Sélection)
- Requête SQL :
SGBD-SQL 11 M.GUEROIHI
5. Fonctions d’agrégation :
- AVG : calcule la moyenne d’une colonne.
- COUNT : compte le nombre de lignes.
- MAX : calcule la valeur maximale.
- MIN : calcule la valeur minimale.
- SUM : calcule la somme des valeurs d’une colonne.
SELECT AVG(Prix)
FROM Vente ;
Exemple 2: Ecrire la requête qui permet d’afficher la somme des prix, le prix max, le nombre de voitures vendues et
le prix moyen des voitures vendues.
6. Regroupement de données.
Il peut être intéressant de regrouper des résultats afin de faire des opérations par groupe. Cette opération sera
réalisée à l’aide de la clause GROUP BY suivie du nom de chaque colonne sur laquelle on veut effectuer des
regroupements.
Exemple 1 :
La requête suivante permet de récupérer le nombre de voitures des différentes marques de la table voiture.
Exemple 2 : Ecrire la requête SQL permettant d’afficher le nombre de personne par ville
Exemple 3 : Ecrire la requête SQL permettant d’afficher la somme des prix de ventes de voiture par marque
Exemple 4 : Ecrire la requête SQL permettant d’afficher la somme des prix de ventes de voiture par Ville
SGBD-SQL 12 M.GUEROIHI
Remarque : La clause HAVING va de pair avec GROUP BY, il permet d’indiquer une restriction sur les groupes crées
grâce à la clause GROUP BY.
Exemple 4 : La requête suivante permet de récupérer la liste des marques différentes de voitures avec le nombre
d’exemplaires, dont le nombre est supérieur à 1.
Une requête cumulant WHERE, HAVING, GROUP BY est évaluée dans l'ordre suivant :
1 – Application de WHERE : sélectionne des lignes
2 – Application de GROUP BY : constitution des groupes
3 – évaluation des fonctions d'agrégation sur les groupes constitués.
4 – Application de HAVING : sélection des groupes
7. Sous requêtes.
SQL permet de comparer une expression ou une colonne ou résultat d’ une autre requête SELECT.
Cette condition est dite « condition de sous-requête » et les 2 requêtes sont dites requête imbriquées
Les requêtes imbriquées dans SQL peuvent être utilisés pour comparer une expression ou une liste
d’ expression au résultat d’une autre requête SELECT, déterminer l’appartenance d’une expression ou
l’ existence d’ une ligne dans le résultat d’ une requête SELECT etc.
Exemple1 : Afficher les numéros et prix des voitures dont le prix est supérieur à la moyenne des prix de vente.
SGBD-SQL 13 M.GUEROIHI
Exemple 2:
La requête suivante permet de récupérer la marque et le modèle des voitures dont le prix dépasse 45000.
Exemple 3:
La requête suivante permet de récupérer les noms et les âges des personnes qui n’ont acheté aucune voiture
SELECT Nom, Age SELECT Nom, Age
FROM Personne FROM Personne P LEFT JOIN Vente V
WHERE Numach NOT IN ( SELECT NumAch ON P.NumAch=V.NumAch
FROM Vente WHERE V.numAch IS NULL
);
Exemple 5: cette requête affiche les marques des voitures les plus vendues.
SELECT Marque
From Voiture JOIN Vente
ON Voiture.NumVoit=Vente.NumVoit
GROUP BY Marque
HAVING Count(*)=(SELECT Max(compte)
FROM (SELECT COUNT(*) AS Compte
FROM Voiture JOIN Vente
ON Voiture.NumVoit=Vente.NumVoit
Group BY Marque
)
);
SGBD-SQL 14 M.GUEROIHI
8. Opérateurs Binaire ensembliste
Union
o Opération binaire ensembliste commutative
o Rôle : L'union génère une relation regroupant exclusivement toutes les occurrences de la
relation R1 et toutes les occurrences de la relation R2.
o Si une même occurrence existe dans R1 et dans R2, elle n'apparaît qu'une seule fois dans le
résultat de l'union.
o Contrainte : R1 et R2 doivent avoir les mêmes attributs.
o Le résultat de l'union est une nouvelle relation qui a les mêmes attributs que R1 et R2.
Syntaxe Algèbre Relationnel Syntaxe SQL
SELECT * FROM R1
R1 ∪ R2 UNION
SELECT * FROM R2
Exemple d'union
Intersection
o Opération binaire ensembliste commutative
o Rôle : L'intersection génère une relation regroupant exclusivement toutes les occurrences
qui existent à la fois dans la relation R1 et dans la relation R2.
o Contrainte : R1 et R2 doivent avoir les mêmes attributs.
o Le résultat de l'intersection est une nouvelle relation qui a les mêmes attributs que R1 et
R2.
o Si R1 ou R2 ou les deux sont vides, la relation qui résulte de l'intersection est vide.
SGBD-SQL 15 M.GUEROIHI
Exemple d'intersection
Différence
o Opération binaire ensembliste non commutative
o Rôle : La différence génère une relation regroupant exclusivement toutes les occurrences de
la relation R1 qui n'existent pas dans la relation R2.
o Contrainte : R1 et R2 doivent avoir les mêmes attributs.
o Le résultat de la différence est une nouvelle relation qui a les mêmes attributs que R1 et R2.
Syntaxe Algèbre Relationnel Syntaxe SQL
SELECT * FROM R1
MINUS
R1 - R2 SELECT * FROM R2
SELECT * FROM R1
EXCEPT
SELECT * FROM R2
Exemple de différence
Exemple 2: Nom et age des personnes qui n’ont acheté aucune voiture.
SGBD-SQL 16 M.GUEROIHI
Division
o Opération binaire non commutative
o Rôle : La division génère une relation regroupant exclusivement toutes les parties
d'occurrence de la relation R1 qui sont associées à toutes les occurrences de la relation
R2.
o Contraintes : R2 ne peut pas être vide. Tous les attributs de R2 doivent être présents dans
R1. R1 doit posséder au moins un attribut de plus que R2.
o Le résultat de la division est une nouvelle relation qui a tous les attributs de R1 sans aucun
de ceux de R2.
Syntaxe Algèbre Relationnel Syntaxe SQL
Il n’existe pas un opérateur de DIVISION
en SQL, mais on peut combiner plusieurs
instructions pour exprimer la division
R1 ÷ R2
Exemple de division
Etudiant
nomEtudiant
Dubois
Pascal
SELECT nomEnseignant
FROM Enseignement E1 JOIN Etudiant E2
ON E1.nomEtudiant=E2.nomEtudiant
GROUP BY nomEnseignant
Having COUNT(E1.nomEtudiant) = (SELECT count(NomEtudiant) from Etudiant)
Exemple1:
CREATE VIEW Acheteur (Nom, Age)
AS
SELECT Nom, Age
FROM personne ;
La vue Acheteur peut être utilisée par la suite dans une requête select comme une table
Une vue sert à :
L' exploiter dans une autre requête (SELECT)
Les vues permettent ainsi de décomposer l’écriture des requêtes complexes.
SGBD-SQL 17 M.GUEROIHI
Exemple 2: Afficher la(les) marque(s) des voitures la(les) plus vendue(s)
Version 1 : Sans Utilisation de vue :
SELECT Marque
From Voiture JOIN Vente
ON Voiture.NumVoit=Vente.NumVoit
GROUP BY Marque
HAVING Count(*)=(SELECT Max(compte)
FROM (SELECT COUNT(*) AS Compte
FROM Voiture JOIN Vente
ON Voiture.NumVoit=Vente.NumVoit
Group BY Marque
)
);
Version 2 : Avec Utilisation de vue :
a- Création de la vue : b- Utilisation de la vue
CREATE VIEW V
AS
SELECT Marque,COUNT(*) AS Compte SELECT Marque
FROM Voiture JOIN Vente FROM V
WHERE Compte= (SELECT Max(Compte)
ON Voiture.NumVoit=Vente.NumVoit
Group BY Marque FROM V)
EXERCICES
Exercice 1 :
On considère le schéma relationnel suivant :
Parc (IP , nom , lieu ) ;
Catalogue ( IP , constructeur , modele )
1. Ecrivez en SQL les requêtes pour afficher
a. l’adresse IP de la machine s’appelant “PC_Math”.
b. tous les noms de machines en ordre alphabétique et avec leurs adresses IP
c. pour chaque constructeur le nombre de ses modèles différents.
d. pour chaque constructeur ayant au moins 2 modèles différents afficher le nombre de ses machines.
Exercice 2
Soit la base de données triangles.sqlite, constituée d’une seule table, dont le schéma relationnel est :
Triangle ( idt : integer , ab : integer , ac : integer , bc : integer )
Chaque ligne représente les longueurs d’un triangle ABC (la taille de ses trois côtés AB, AC et BC), ainsi qu’un
identificateur unique (on parle de clé primaire).
Ecrivez en SQL les requêtes pour afficher :
1. la plus petite valeur des produits AB × AC × BC pour les triangles ABC de périmètre supérieur ou égal à 100 ;
2. Les longueurs AB, AC et BC correspondants au(x) triangles(s) pour le(s)quel(s) le minimum précédent est
atteint ;
3. Tous les triangles rectangles en A ;
4. Le nombre de tels triangles ;
5. Le maximum des périmètres des triangles rectangles en A ;
SGBD-SQL 18 M.GUEROIHI
Exercice 3 :
Enfant
Numf nomf age scol nume
Service 123 Loubna 17 C 7369
124 Zohra 8 A 7369
Nums Noms loc 235 Abdelkrim 13 B 7369
10 comptabilite Fes 236 Abdellah 8 A 7499
20 Recherches Rabat 237 Samah 2 S 7499
30 Ventes Meknes 238 Mohamed 5 S 7521
40 Achat Casa 239 Said 12 A 7521
240 Khalid 4 S 7566
SGBD-SQL 19 M.GUEROIHI