Vous êtes sur la page 1sur 19

CPGE- AGADIR MP-PSI

BASES DE DONNEES

- LE LANGAGE SQL -

I- Introduction aux bases de données:

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 :

 Personne (NumAch : integer, Nom : varchar(30), Age : integer, Ville : varchar(25))


 Voiture (NumVoit : integer, Marque : varchar(20), Modele : varchar(15), Couleur : varchar(10))
 Vente (NumAch, NumVoit, Date_vente : Date, Prix : REAL)

SGBD-SQL 1 M.GUEROIHI
Ce schéma relationnel peut être représenté comme suit :

Clé étrangère(FK) Clé primaire

Clé primaire (PK) Vente


NumAch Clé primaire
Voiture NumVoit
Date_Vente Personne
NumVoit NumAch
Prix
Marque Nom
Modele Age
Couleur Clé étrangère
Ville

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

Syntaxe : Types de données

Les principaux types de données supportés sont les suivants :


CREATE TABLE Nomtable (
 chaînes de caractères de taille fixe, complétées à droite par des
colonne1 type1, espaces ( CHAR(taille) ),
 chaînes de taille variable ( VARCHAR(taille) ),
colonne2 type2,
 entiers sur 32 bits (INT ou INEGER),
.........,  nombres en précision fixe (NUMERIC (nbChiffres, nbDecimales) ),
.........);  nombres en virgule flottante simple précision (REAL),
 types date et/ou heure (DATE/TIME/ DATETIME).

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

CREATE TABLE VOITURE ( CREATE TABLE Vente (


NumVoit INT NOT NULL, NumAch INT NOT NULL,
Marque VARCHAR(20), NumVoit INT NOT NULL,
Modele VARCHAR(15), DateVente Date ,
Couleur VARCHAR(10), Prix Float,
PRIMARY KEY (NumVoit ) PRIMARY KEY (NumAch , NumVoit ),
); FOREIGN KEY(NumAch) REFERENCES Personne (NumAch),
FOREIGN KEY(NumVoit) REFERENCES Voiture (NumVoit)
);

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 ;

III- Mise à jour des données :

1. Insertion des enregistrements :


Exemple 1 : Insertion de 5 enregistrements dans la table Personne

INSERT INTO PERSONNE VALUES


( 1, 'Yassmin' , 42 , 'Agadir'),
( 2, 'Imane' , 33 , 'Casa'),
( 3, 'Reda' , 30 , 'Rabat'),
( 4, 'Meryem' , 42 , 'Agadir'),
( 5, 'Walid' , 27 , 'Marakech');
Exemple 2: la requête suivante permet d’insérer un enregistrement dans la table voiture

INSERT INTO voiture (NumVoit, Marque, Couleur) INSERT INTO voiture


VALUES (10,'Triumph', 'Bleue'); VALUES (10,'Triumph',NULL, 'Bleue');
La colonne 'Modele' est omise, elle prendra la valeur NULL

Exemple 3 : Copier une table dans une autre table

Pour copier tous les enregistrements de la table Personne vers la table Acheteur (de même structure (colonnes)) :

INSERT INTO Acheteur SELECT * FROM Personne

2. Suppression des enregistrements :


La suppression s’effectue avec la commande DELETE dont la syntaxe est la suivante :

DELETE FROM Table WHERE C ;


Cette requête supprime tous les n-uplets de Table satisfaisant la condition C.

Exemple : la requête suivante permet de supprimer les voitures rouges de la table voiture

DELETE FROM Voiture WHERE Couleur=’Rouge’;

SGBD-SQL 3 M.GUEROIHI
3. Modification des enregistrements :
La modification s’effectue avec la commande UPDATE dont la syntaxe est la suivante :

UPDATE Table SET Attribut=Valeur


WHERE C;
Cette requête modifie les valeurs de l'Attribut de tous les n-uplets de la Table satisfaisant la condition C.

Exemple : la requête suivante permet de modifier la couleur de la voiture numéro 3 ( nouvelle couleur est
'Bleue')

UPDATE Voiture SET Couleur= 'Bleue'


WHERE NumVoit =3;
NB :

Les commandes Insert, Update et Delete sont appelées requêtes Action

IV- Langage de manipulation de données

1. Projection : Extraction des colonnes d'une relation

Algèbre Relationnel SQL

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

Algèbre Relationnel SQL


π Nom,Ville (Personne) SELECT DISTINCT Nom, Ville
FROM Personne ;

SGBD-SQL 4 M.GUEROIHI
Exemple2 : Affichage de différentes marques de voitures

NumVoit Marque Modele Couleur


1 Ford Fiesta Noire Marque

2 Citroën C4 Blanche Ford

3 Renault Clio Rouge Citroën

4 Peugeot 307 cc Noire Renault

5 Citroën C3 Bleue Peugeot

6 Renault Twingo Noire

Algèbre Relationnel : Requête SQL :

Exemple 3: On demande les prix des voitures en euros(les prix sont en dirhams) :

(1 € = 11.03DH)

NumAch NumVoit DateVente Prix Prix DateVente Prix_Euros


1 1 2013-02-12 70000 70000 2013-02-12 6342.8778
2 4 2010-12-02 55000 55000 2010-12-02 4983.6897
4 5 2009-08-26 40000 40000 2009-08-26 3624.5016
5 2 2011-09-10 80000 80000 2011-09-10 7249.0032

Algèbre Relationnel : Requête SQL :

2. Sélection : Sélection des lignes d'une relation selon une condition


Algèbre Relationnel SQL

σ (R)
E SELECT *

E : Expression logique (condition) FROM R


R : Relation
WHERE E;

Exemple 1 : Sélectionner les lignes de la table vente dont le prix est strictement supérieur à 60000

NumAch NumVoit DateVente Prix


NumAch Num DateVente Prix
1 1 2013-02-12 70000 V
1 1 2013-02-12 70000
2 4 2010-12-02 55000 o
5 2 i 2011-09-10 80000
4 5 2009-08-26 40000 t
5 2 2011-09-10 80000

Algèbre Relationnel SQL


SELECT *
σprix>60000(vente) FROM Vente
WHERE Prix > 60000 ;

SGBD-SQL 5 M.GUEROIHI
Les opérateurs utilisés (en SQL) sont :

♦ <, <=, =, >=, >, <>, != ;


♦ AND, OR, NOT ;
♦ IN, par exemple Marque IN ('Citroen', 'Opel') ; les voitures dont la marque est 'Opel' ou 'Citroën'
♦ BETWEEN, par exemple Prix BETWEEN 45000 AND 60000 ;
♦ LIKE pour comparer des chaînes de caractères, par exemple :
Nom LIKE 'Me%' (% remplace n’importe quel ensemble de caractère) renverra les noms commençant
par 'Me' (Mehdi, Meryem,..).

Nom LIKE '_e%' ( _ remplace un seul caractère) retourne les noms dont le deuxième caractère est e.

Exemple 2 : Liste des voitures rouges ou blanches

NumVoit Marque Modele Couleur


1 Ford Fiesta Noire NumVoit Marque Model Couleur
e
2 Citroën C4 Blanche 2 Citroën C4 Blanche

3 Renault Clio Rouge 3 Renault Clio Rouge

4 Peugeot 307 cc Noire


5 Citroën C3 Bleue
6 Renault Twingo Noire

Algèbre Relationnel : Requête SQL :


Version 1 :

Version 2 :

Exemple 3 : Extraction des personnes dont l’âge est compris entre 25 et 40 ans.

NumAc Nom Age Ville NumAch Nom Age Ville


h
1 yassin 42 Agadir 2 Imane 33 Casablanca
2 Imane 33 Casablanca 3 Reda 30 Rabat
3 Reda 30 Rabat 5 Walid 27 Marrakech
4 Meryem 42 Agadir
5 Walid 27 Marrakech

Algèbre Relationnel : Requête SQL :


Version 1 :

Version 2 :

SGBD-SQL 6 M.GUEROIHI
Exemple 4 : Extraction des personnes n’habitant pas Agadir

NumAch Nom Age Ville NumAch Nom Age Ville


1 yassin 42 Agadir 2 Imane 33 Casablanca
2 Imane 33 Casablanca 3 Reda 30 Rabat
3 Reda 30 Rabat 5 Walid 27 Marrakech
4 Merye 42 Agadir
m
5 Walid 27 Marrakech

Algèbre Relationnel : Requête SQL :


Version 1 :

Version 2 :

Exemple 5 : Extraction des personnes dont le 2ème caractère de son nom est un 'e'

NumAch Nom Age Ville NumAch Nom Age Ville


1 yassin 42 Agadir 3 Reda 30 Rabat
2 Imane 33 Casablanca 4 Meryem 42 Agadir
3 Reda 30 Rabat
4 Merye 42 Agadir
m
5 Walid 27 Marrakech

Algèbre Relationnel : Requête SQL :

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;

NumAc Nom Age Ville


h NumAch Nom Age Ville
1 yassin 42 Agadir
5 Walid 27 Marrakech
2 Imane 33 Casabla
nca 3 Reda 30 Rabat
3 Reda 30 Rabat
2 Imane 33 Casablanca
4 Meryem 42 Agadir
1 yassin 42 Agadir
5 Walid 27 Marrake
ch 4 Merye 42 Agadir
m

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;

NumAch Nom Age Ville


5 Walid 27 Marrakech
3 Reda 30 Rabat
2 Imane 33 Casablanca

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;

Remarque : Requête exprimant une projection et sélection

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

Numvoit Marque Modele Couleur NumAch NumVoit DateVente Prix


1 Ford Fiesta Noire 1 1 12/02/2013 70000
1 Ford Fiesta Noire 2 4 02/12/2010 55000
1 Ford Fiesta Noire 4 5 26/08/2009 40000
1 Ford Fiesta Noire 5 2 10/09/2011 80000
2 Citroën C4 Blanche 1 1 12/02/2013 70000
2 Citroën C4 Blanche 2 4 02/12/2010 55000
2 Citroën C4 Blanche 4 5 26/08/2009 40000
2 Citroën C4 Blanche 5 2 10/09/2011 80000
3 Renault Clio Rouge 1 1 12/02/2013 70000
3 Renault Clio Rouge 2 4 02/12/2010 55000
3 Renault Clio Rouge 4 5 26/08/2009 40000
3 Renault Clio Rouge 5 2 10/09/2011 80000
4 Peugeot 307 cc Noire 1 1 12/02/2013 70000
4 Peugeot 307 cc Noire 2 4 02/12/2010 55000
4 Peugeot 307 cc Noire 4 5 26/08/2009 40000
4 Peugeot 307 cc Noire 5 2 10/09/2011 80000
5 Citroën C3 Bleue 1 1 12/02/2013 70000
5 Citroën C3 Bleue 2 4 02/12/2010 55000
5 Citroën C3 Bleue 4 5 26/08/2009 40000
5 Citroën C3 Bleue 5 2 10/09/2011 80000
6 Renault Twingo Noire 1 1 12/02/2013 70000
6 Renault Twingo Noire 2 4 02/12/2010 55000
6 Renault Twingo Noire 4 5 26/08/2009 40000
6 Renault Twingo Noire 5 2 10/09/2011 80000

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

Exemple 1 : Liste des voitures et leurs opérations de ventes correspondantes


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

Numvoit Marque Modele Couleur NumAch NumVoit DateVente prix


1 Ford Fiesta Noire 1 1 12/02/2013 70000
4 Peugeot 307 cc Noire 2 4 02/12/2010 55000
5 Citroën C3 Bleue 4 5 26/08/2009 40000
2 Citroën C4 Blanche 5 2 10/09/2011 80000

Algèbre Relationnel SQL


SELECT *
Voiture ▷◁NumVoit Vente FROM Voiture JOIN Vente
ON Voiture.NumVoit = Vente.NumVoit;

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.

Exemple 1: La requête suivante permet de récupérer le prix moyen des voitures.

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.

SELECT Marque, COUNT(*) AS Compte


FROM Voiture
GROUP BY Marque;

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.

SELECT Marque, COUNT(*) AS Compte


FROM Voiture
GROUP BY Marque
HAVING Compte > 1;
Exemple 5 : Réécrire la requête de l’exemple précédent en éliminant les voitures rouges.

SELECT Marque, COUNT(*) AS Compte


FROM Voiture
WHERE Couleur NOT LIKE 'Rouge'
GROUP BY Marque
HAVING Compte>1 ;
Remarque :

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.

SELECT Marque , Modele


FROM Voiture
WHERE NumVoit IN ( SELECT NumVoit Attention : la sous-requête doit avoir
FROM Vente une seule colonne comme résultat
WHERE Prix > 45000
);
Réécrire cette requête en utilisant la jointure.

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 4: Afficher les marques des voitures les plus chères.


Version 1 : Sans Jointure Version2 : Avec jointure

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

Personne1 Algèbre Relationnel SQL


Nom Prénom
FIKRI HASSAN
ALAMI AHMED Personne1 ∪ Personne2
IBRAHIMI LOUBNA
Nom Prénom SELECT * FROM Personne1
Personne2 FIKRI HASSAN
ALAMI AHMED UNION
nom Prénom
ESSAHEL MORAD IBRAHIMI LOUBNA SELECT * FROM Personne2
IBRAHIMI LOUBNA ESSAHEL MORAD
FIKRI AMINA FIKRI AMINA

 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.

Syntaxe Algèbre Relationnel Syntaxe SQL


SELECT * FROM R1
R1 ∩ R2
INTERSECT
SELECT * FROM R2

SGBD-SQL 15 M.GUEROIHI
Exemple d'intersection

Personne1 Algèbre Relationnel SQL


Nom Prénom
FIKRI HASSAN SELECT * FROM Personne1
ALAMI AHMED Personne1 ∩ Personne2 INTERSECT
IBRAHIMI LOUBNA
SELECT * FROM Personne2
Personne2
Nom Prénom
Nom Prénom IBRAHIMI LOUBNA
ESSAHEL MORAD
IBRAHIMI LOUBNA
FIKRI AMINA

 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

Personne1 Algèbre Relationnel SQL


nom Prénom SELECT * From Personne1
FIKRI HASSAN Personne1 - Personne2 MINUS
ALAMI AHMED SELECT * From Personne2
IBRAHIMI LOUBNA
Nom prénom Ou
Personne2 FIKRI HASSAN
nom Prénom ALAMI AHMED SELECT * From Personne1
ESSAHEL MORAD EXCEPT
IBRAHIMI LOUBNA SELECT * From Personne2
FIKRI AMINA

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

Enseignement Algèbre Relationnel SQL


nomEnseignant nomEtudiant
FAOUZI Dubois Enseignement ÷ Étudiant Il n’existe pas un
Fidus Pascal opérateur de DIVISION en
Robert Dubois SQL.
FAOUZI Pascal nomEnseignant
Fidus Dubois FAOUZI
FAOUZI Durand Fidus
Robert Durand

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)

9. Création d’une vue


Une « vue » est le résultat d’une requête SELECT que l’on peut manipuler de la même façon qu’une
table. On peut considérer une vue comme une table dynamique (virtuelle) dont le contenu est
recalculé à chaque utilisation. (Les données ne sont pas stockées dans une vue de la base).

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 :

Soit le schéma relationnel la base de données « Entreprise » suivant :

 Employe (nume:int, nome:varchar(20), fonct:varchar(10), chef:int,


Datemb:datetime, sal:decimal(7,2), comm:decimal(7,2), nums:int)
 Service (nums :int, noms:varchar(15), loc:varchar(10))
 Enfant (numf:int, nomf:varchar(20), age:int, scol:char(1), nume:smallint)
Exemple de données :
Employe

Nume Nome Fonct chef datemb sal Comm nums


7369 Rmiki Agent 7902 16/12/80 800 20
7499 El Faiz Vendeur 7698 20/02/81 1600 300 30
7521 Alami Vendeur 7698 21/02/81 1250 500 30
7566 Nasri Directeur 7839 02/04/81 2975 20
7654 Bakari Vendeur 7698 28/02/81 1250 1400 30
7698 Bensalah Directeur 7839 01/05/81 2850 30
7782 Bennani Directeur 7839 06/09/81 2450 10
7788 El Oifi Analyste 7566 09/12/82 3000 20
7839 Karim President 19/11/82 5000 10
7844 Sanhaji Vendeur 7698 08/11/81 1500 30
7876 Sbai Agent 7788 12/01/83 1250 20
7900 Benslimane Agent 7698 03/12/81 950 30
7902 Boutayeb Analyste 7566 02/12/81 3000 20
7934 Benbrahim Agent 7782 23/01/82 1300 10

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

1- Préciser pour chaque table la clé primaire ? Clés étrangères ?


2- Ecrire les instructions SQL permettant de créer les différentes tables.
3- Ecrire les instructions SQL permettant d’insérer 3 enregistrements dans chaque table.
4- Formuler en SQL les requêtes suivantes :
R1: Lister tous les employés avec leurs numéros
R2: Donner les noms des vendeurs ainsi que leurs salaires
R3: Combien y a-t-il d'analyste dans l'entreprise
R4: Donner noms, fonction et salaires des employés classés par salaire en ordre décroissant
R5: Donner la masse salariale (sans commissions)
R6: Donner la somme des salaires par fonction
R7: Parmi les vendeurs, quel est le nom et le salaire de l'employé le moins payé
R8: Donner le nom du chef de l’employé ‘Boutayeb’
R9: Donner les noms, fonctions et salaires des employés exerçant la même fonction que 'Nasri' (triés par ordre
croissant des salaires)
R10: Donner les noms et fonctions des employés ainsi que le nom du service où ils travaillent
R11: Pour les employés qui ont des enfants, donner leurs noms et celui de leurs enfants et leurs âges (triés par
ordre croissant des noms des employés puis par ordre croissant de l’âge des enfants)
R12: Donner les noms de tous les employés et pour ceux qui ont des enfants donner les noms de ces derniers
R13: Donner les noms des 5 employés les plus payés ainsi que leurs fonctions et salaires.
R14 : Ajouter 20% à tous les vendeurs ayant des enfants.

SGBD-SQL 19 M.GUEROIHI

Vous aimerez peut-être aussi