Vous êtes sur la page 1sur 22

24/02/2022

Cours Base de données

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

SGBD Utilisé pour ce cours


7

MySQL: Base de données


• Création d’une base de données:
Create database nom_base;

• Charger une base afin de l’utiliser :


Use nom_base;

• Supprimer une base de données :


Drop database nom_base;

4
24/02/2022

MySQL: Importer /
Exporter une base
• Via L’interface PhpMyAdmin : Fichier sql
exemple: db_entreprise.sql

• Via Mysql console :


– Importer une base de données :
source c:/…chemin…/ db_entreprise.sql;

• Via l’invite de commandes :


– Importer une base de données :
mysql -u username [-h localhost] -p nombdd < Fichier.sql
– Exporter une base de données :
mysqldump -u username -p nombdd [table1 table2] > Fichier.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

Langage de Manipulation de Données


(LMD)
• LMD : Appliquer les opérations aux données:
rechercher et mettre à jour les données.

• 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

Langage de Manipulation de Données


(LMD)
• Insertion de données :
– Insérer une ligne en spécifiant seulement les colonnes
souhaitées

INSERT INTO nomtable(A1, A2, ... An)


VALUES (v1, v2, ... vn);

➔Les attributs non spécifiés seront à NULL ou à la


valeur par défaut.

12

12

6
24/02/2022

Langage de Manipulation de Données


(LMD)
• Insertion de données :
– Insérer une ligne en spécifiant toutes les colonnes

INSERT INTO nomtable VALUES (v1, v2, ... vn);

➔Obligation de remplir toutes les données, tout


en respectant l’ordre des colonnes.

13

13

Langage de Manipulation de Données


(LMD)
• Insertion de données :
– Insertion de plusieurs lignes à la fois :
• Une requête SELECT (même type et nombre d’attributs)
INSERT INTO Client (id, nom, tél)
SELECT id, nom, tél FROM Passager;

• 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

Langage de Manipulation de Données


(LMD)
• Modification de données:
– Modifier toutes les lignes

UPDATE nomtable SET colonne_1='nouvelle valeur';

UPDATE nomtable SET colonne_1 = 'valeur 1', colonne_2='valeur2',


colonne_3 = 'valeur 3‘;

– Exemples :
UPDATE client SET pays = 'TUNISIE';
UPDATE client SET pays = 'TUNISIE', ville= 'Sfax';

15

15

Langage de Manipulation de Données


(LMD)
• Modification de données:
– Modifier une ou plusieurs lignes
UPDATE nomtable SET colonne_1='nouvelle valeur'
WHERE condition;

UPDATE nomtable SET colonne_1 = 'valeur 1', colonne_2='valeur2',


colonne_3 = 'valeur 3' WHERE condition;

– Exemples :
UPDATE client SET pays = 'TUNISIE' WHERE id=2;
UPDATE client SET pays = 'TUNISIE' WHERE nom='Foulen';

16

16

8
24/02/2022

Langage de Manipulation de Données


(LMD)
• Suppression de données:
– Supprimer toutes les lignes

DELETE FROM nomtable ;

Ou encore :
TRUNCATE TABLE nomtable;

– Exemples :
DELETE FROM client;

17

17

Langage de Manipulation de Données


(LMD)
• Suppression de données:
– Supprimer une ou plusieurs lignes
DELETE FROM nomtable WHERE condition;

– Exemples :
DELETE FROM client WHERE id=2;
DELETE FROM client WHERE tel=123;

DELETE FROM client WHERE pays = 'TUNISIE' ;


DELETE FROM client WHERE nom='Foulen';

18

18

9
24/02/2022

Langage de Manipulation de Données


(LMD)
• Recherche de données: SELECT (une seule table/sans conditions)

– Obtenir une colonne


SELECT attribut FROM nomtableau;
Exemple : SELECT nom FROM client;

– Obtenir plusieurs colonnes


SELECT attribut1, attribut2 FROM nomtableau;
Exemple : SELECT nom, tél FROM client;

– Obtenir toutes les colonnes d’un tableau


SELECT * FROM nomtableau;
Exemple : SELECT * FROM client;
19

19

Langage de Manipulation de Données


(LMD)
• Recherche de données: SELECT (une seule table/sans conditions)

– Ajouter DISTINCT après le mot SELECT pour éviter des


redondances.

SELECT DISTINCT attribut FROM nomtableau;


Exemple : SELECT DISTINCT nom FROM client;

SELECT DISTINCT attribut1, attribut2 FROM nomtableau;


Exemple : SELECT DISTINCT nom, prenom FROM client;

20

20

10
24/02/2022

Langage de Manipulation de Données


(LMD)
• Recherche de données: SELECT (une seule table/avec conditions)

SELECT colonnes FROM nomtable WHERE condition


Exemple : SELECT * FROM client WHERE nom= 'Foulen‘;

• 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

Langage de Manipulation de Données


(LMD)
• Recherche de données: SELECT (une seule table/avec conditions)

Exemples :

SELECT * FROM client WHERE nom= 'Foulen' AND tel=123;


SELECT * FROM client WHERE nom= 'Foulen' OR nom='Ben Foulen';
SELECT * FROM produit WHERE prix<= 100;
SELECT * FROM produit WHERE prix Between 100 AND 200;
SELECT * FROM produit WHERE (prix Between 100 AND 200) OR
libellé='Chaise';

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;

SELECT * FROM client WHERE nom= 'Foulen‘ order by prenom desc;

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 * )

6. Lister tous les employés dont le nom commence par b.


7. Lister tous les employés dont la 2ème lettre du nom est a.
8. Lister tous les employés dont l’année d’arrivée est 1994.
9. Lister tous les employés dont l’année d’arrivée est dans les
années 90.
10. Lister tous les employés dont le mois de naissance est février.

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

14. Lister l'âge de tous les employés.


15. Lister pour tous les employés l'âge auquel ils sont arrivés.
16. Lister pour tous les employés le nombre de mois de travail
à partir de la date d’arrivée.

28

28

14
24/02/2022

Langage de Manipulation de Données


(LMD)
• Recherche de données: SELECT (deux ou plusieurs tables)

SELECT colonnes FROM nomtable1, nomtable2 WHERE condition AND


jointure;

Exemple : SELECT * FROM client, dossier WHERE


matricule=matricule_client;

SELECT * FROM client, dossier WHERE matricule=1 and


matricule=matricule_client;

SELECT * FROM client, dossier WHERE num=100 and


matricule=matricule_client; 29

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.

• Dans ce cours, on va s’intéresser aux :


– Jointures internes : il faut qu'il y ait des données
de part et d'autre de la jointure.
employe.id=exerce.id_employe
– Jointures externes : permet de sélectionner
également les lignes pour lesquelles il n'y a pas de
correspondance dans une des tables jointes

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;

Application : reprendre les questions 17, 18, 19 en utilisant


[INNER] JOIN
35

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

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
4 Foulen NULL NULL NULL NULL
36

36

18
24/02/2022

Jointure Externe
• Jointure Externe par la gauche
SELECT *
FROM table1
LEFT [OUTER] JOIN table2
ON table1.colonne1 = table2.colonne2;

• Jointure Externe par la droite


SELECT *
FROM table1
RIGHT [OUTER] JOIN table2
ON table1.colonne1 = table2.colonne2;
37

37

Jointure Externe par la gauche


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
4 Foulen 3 22 3 Plein

SELECT * FROM employe


LEFT [OUTER] JOIN exerce
ON 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
4 Foulen NULL NULL NULL NULL 38

38

19
24/02/2022

Jointure Externe par la droite


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
4 Foulen 3 22 3 Plein

SELECT * FROM employe


RIGHT [OUTER] JOIN exerce
ON 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
39
3 Mohamed 3 22 3 Plein

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;

SELECT nom, prenom, temps


FROM exerce
RIGHT JOIN employe
ON employe.id = exerce.id_employe;
40

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

Valeurs nulles/ Valeurs par défaut


Exemple (1/3):
Create table emp(
id integer primary key auto_increment,
Nom varchar(20),
Prenom varchar(20) default ‘Foulen’);

Insert into emp (id,nom) values (1,’ali’);


Insert into emp values (null,’zied’,null);
Insert into emp(nom) values (’Mohamed’);
Insert into emp(id) values (25);
Insert into emp (id,nom) values (null,’ziad’);
Insert into emp values (null,null,null); 42

42

21
24/02/2022

Valeurs nulles/ Valeurs par défaut


Exemple (2/3):
Alter table emp Add adresse varchar(50) not null;
Alter table emp Add age integer;

Insert into emp(nom) values (‘Zeineb’);


Insert into emp (id,nom,age) values (25,’Salah’,22);
Insert into emp (age) values (22);

Alter table emp MODIFY age integer NOT NULL;


43

43

Valeurs nulles/ Valeurs par défaut


Exemple (3/3):
SELECT * FROM emp WHERE nom=NULL;

SELECT * FROM emp WHERE nom<=>NULL;


SELECT * FROM emp WHERE nom IS NULL;
SELECT * FROM emp WHERE nom IS NOT NULL;
SELECT * FROM emp WHERE NOT nom IS NULL;
SELECT * FROM emp WHERE nom IS NULL AND
prenom IS NOT NULL;

DROP TABLE emp; 44

44

22

Vous aimerez peut-être aussi