Académique Documents
Professionnel Documents
Culture Documents
1 ING GSIL
Bases de Données
Plan
➢Introduction
➢Modèle Entité/Association
➢Modèle relationnel
➢Langage SQL : LDD
➢Langage SQL : LMD
➢Les vues, procédures stockées, triggers et vues matérialisées
1
24/02/2022
SGBD
• Différents Systèmes de Gestion de Bases de
Données existent.
• Ils diffèrent par leurs architecture et/ou par
les services qu’elles peuvent offrir.
SGBD
• Microsoft ACCESS
– Architecture Serveur de fichiers
– Très utile pour débutants
– Convient aux petits projets
– Environnement simple à installer et à utiliser
– Permet de tester et manipuler le langage SQL
2
24/02/2022
SGBD
• SQLite
– Architecture embarquée : données stockées sur
un seul fichier
– OpenSource et gratuit
– Simple à installer et à utiliser
– Écrit en langage C
https://www.sqlite.org
SGBD
• Créer une base de données :
– Lancer sqlite3
– Écrire la commande de création (ou d’ouverture si la
base existe) :
sqlite> .open base.db
3
24/02/2022
SGBD
• MySQL
– Architecture Client/Serveur
– OpenSource
– Intégré dans l'environnement
WAMP(Apache/PHP)
– Très utilisée
4
24/02/2022
MySQL: Importer /
Exporter une base
• Via L’interface PhpMyAdmin : Fichier sql
exemple: db_entreprise.sql
Requêtes SQL
• Modèle relationnel de la base db_entreprise :
– Employe(id, nom, prenom, date_naissance, date_arrivee)
– Metier(id,nom)
– Service(id, nom)
– Exerce(#id_employe, #id_metier, #id_service, temps)
10
10
5
24/02/2022
• Opérations :
– Insertion de données : INSERT INTO ….
– Modification de données : UPDATE ….
– Suppression de données : DELETE ….
– Recherche de données : SELECT ….
11
11
12
12
6
24/02/2022
13
13
• Un ensemble de données
INSERT INTO client (id, nom, tel) VALUES
(1, 'Ali', 123), Client
(2, 'Mohamed',456), Id Nom Tél
(3, 'Zeineb', 789), 1 Ali 123
(4, 'Zied', 753); 2 Mohamed 456
3 Zeineb 789
4 Zied 75314
14
7
24/02/2022
– Exemples :
UPDATE client SET pays = 'TUNISIE';
UPDATE client SET pays = 'TUNISIE', ville= 'Sfax';
15
15
– Exemples :
UPDATE client SET pays = 'TUNISIE' WHERE id=2;
UPDATE client SET pays = 'TUNISIE' WHERE nom='Foulen';
16
16
8
24/02/2022
Ou encore :
TRUNCATE TABLE nomtable;
– Exemples :
DELETE FROM client;
17
17
– Exemples :
DELETE FROM client WHERE id=2;
DELETE FROM client WHERE tel=123;
18
18
9
24/02/2022
19
20
20
10
24/02/2022
• Opérateurs de comparaison :
=, <>, !=, >, <, >=, <=, IN, BETWEEN (nombre ou dates),
LIKE (chaînes ou dates), IS NULL, IS NOT NULL.
• Opérateurs logiques :
AND, OR, NOT
21
21
Exemples :
22
22
11
24/02/2022
Requêtes SQL
• Recherche de données: sélection triée
SELECT colonnes FROM nomtable WHERE condition Order by attribut(s) [Desc];
Exemple :
SELECT * FROM client WHERE nom= 'Foulen‘ order by prenom;
Client
Id Nom prenom Client
25 Foulen Ali Id Nom prenom
35 Foulen Haythem 25 Foulen Salah
46 Foulen Mohamed 35 Foulen Mohamed
84 Foulen Salah 46 Foulen Haythem
84 Foulen Ali 23
23
Requêtes SQL
Select attribut(s) from table [Where condition]
[Order by attribut(s) [Desc]];
1. Lister tous les employés.
2. Lister tous les employés triés par nom.
3. Lister tous les employés triés par nom et prénom.
4. Lister tous les employés triés par date de
naissance selon un ordre décroissant.
5. Lister tous les employés dont la date d’arrivée est
comprise entre 1994-11-28 et 2003-06-10 triés
par date de naissance
24
24
12
24/02/2022
Requêtes SQL
• LIKE (opérateur de comparaison pour chaînes de caractères
ou dates)
Le symbole _ remplace un caractère quelconque
Le symbole % remplace 0 à plusieurs caractères quelconques
(Pour ACCESS : _ devient ? Et % devient * )
25
25
Requêtes SQL
• UNION, INTERSECT ou EXCEPT
On définit deux requêtes dont les résultats ont même arité (même
nombre de colonnes et mêmes types d’attributs), et on les relie par
un des mot-clé : UNION, INTERSECT ou EXCEPT
Exemple : Select …….. Union Select ……..;
11. Lister tous les employés dont l’année d’arrivée est 1994 et
l’année de naissance est inférieur à l’année 1980.
12. Lister tous les employés dont l’année d’arrivée est 1994
exceptés ceux dont l’année de naissance est supérieur ou
égale à l’année 1980.
13. Lister tous les employés dont l’année d’arrivée est inférieur
à 2000 ou l’année de naissance est inférieur à l’année 1980.
26
26
13
24/02/2022
Requêtes SQL
• Fonctions SQL utiles pour les dates (liste non exhaustive):
– CURDATE(), NOW() : récupérer la date courante
Select curdate();
Select now();
– DATE() extraire une date à partir d’une chaîne au format DATE
Select now();
Select date(now());
– DATEDIFF() déterminer le nombre de jours entre 2 dates
select datediff('2020-02-02','2020-01-02’);
select datediff(curdate(),’2020-02-01’);
select datediff(curdate(),’2019-02-01’);
– Day(), Month(), Year() : le jour, le mois ou l’année de la date
Select day(now());
Select month(’2019-07-01’);
Select year(curdate());
– FROM_DAYS() convertir un nombre de jour en une date
Select from_days(366);
27
27
Requêtes SQL
• Fonctions SQL utiles pour les dates (liste non exhaustive):
– CURDATE(), NOW() : récupérer la date courante
– DATE() extraire une date à partir d’une chaîne au format DATE
– DATEDIFF() déterminer le nombre de jours entre 2 dates
– Day(), Month(), Year() : le jour, le mois ou l’année de la date
– FROM_DAYS() convertir un nombre de jour en une date
28
28
14
24/02/2022
29
Requêtes SQL
• Exemple :
– Select * from employe, exerce;
– Select * from employe, exerce where id=id_employe;
Quelle est la différence entre les deux requêtes?
Pourquoi la condition de jointure est elle nécessaire?
Une jointure est une composition de deux opérations (un
produit cartésien, une sélection) afin de rapprocher et
sélectionner des informations à partir de plusieurs tables. La
jointure assure que ces informations aient des liens entre elles.
30
30
15
24/02/2022
Requêtes SQL
17. Sélectionner les noms et prénoms des employés
travaillant à temps ‘plein’.
18. Sélectionner les noms et prénoms des employés
dont le métier est ‘Vendeur’.
19. Sélectionner les noms et prénoms des employés
dont le métier est ‘Vendeur’ et travaillant dans le
service ‘Commercial’.
31
31
Jointures
• Ils existent différents types de jointures.
32
32
16
24/02/2022
Jointures
Employe Exerce
Id Nom Id_employe id_service id_metier temps
1 Ali 1 2 2 Plein
2 Zeineb 2 10 4 mi-temps
3 Mohamed 2 15 6 mi-temps
3 22 3 Plein
4 Foulen
Jointure interne :
SELECT * des données de part et
d'autre de la jointure
FROM employe, exerce
WHERE employe.id = exerce.id_employe;
Id Nom Id_employe id_service id_metier temps
1 Ali 1 2 2 Plein
2 Zeineb 2 10 4 mi-temps
2 Zeineb 2 15 6 mi-temps
3 Mohamed 3 22 3 Plein
33
33
Jointure Interne
SELECT *
FROM table1, table2
WHERE table1.colonne1 = table2.colonne2;
-- équivalent à
SELECT *
FROM table1
[INNER] JOIN table2
ON table1.colonne1 = table2.colonne2;
34
34
17
24/02/2022
Jointure Interne
Exemple :
SELECT *
FROM employe, exerce
WHERE employe.id = exerce.id_employe;
-- équivalent à
SELECT *
FROM employe
[INNER] JOIN exerce
ON employe.id = exerce.id_employe;
35
Employe
Jointures
Exerce
Id Nom Id_employe id_service id_metier temps
1 Ali 1 2 2 Plein
2 Zeineb 2 10 4 mi-temps
3 Mohamed 2 15 6 mi-temps
4 Foulen 3 22 3 Plein
Jointure externe :
sélectionner également les lignes pour lesquelles il n'y a pas de
correspondance dans une des tables jointes
36
18
24/02/2022
Jointure Externe
• Jointure Externe par la gauche
SELECT *
FROM table1
LEFT [OUTER] JOIN table2
ON table1.colonne1 = table2.colonne2;
37
38
19
24/02/2022
39
Jointure Externe
• Quelle est la différence entre ces deux requêtes?
SELECT nom, prenom, temps
FROM employe
LEFT JOIN exerce
ON employe.id = exerce.id_employe;
40
20
24/02/2022
Valeurs nulles
• le marqueur NULL qui représente "pas de
valeur" est un peu particulier.
• On ne peut tester directement colonne = NULL
• Deux possibilités :
– L’opérateur <=> qui a le même rôle que = mais qui
reconnait en plus NULL
– IS NULL / IS NOT NULL
41
41
42
21
24/02/2022
43
44
22