Bases de données
relationnelles &
langage SQL
Initiation aux bases de données
Bases de données relationnelles
Une Base de Données (en anglais : Relational Database) est un
ensemble d’informations qui sont organisées et stockées dans
des fichiers selon un mode précis par un SGBD
Système de gestion de base de données (SGBD):[En anglais:
Database Management System – DBMS]
Un SGBD est un logiciel qui regroupe des programmes pour la
gestion de bases de données (Organisation et stockage des
données, Extraction d’information à partir des données, …)
Initiation aux bases de données 2
Bases de données relationnelles
Système de gestion de base de données relationnelles (SGBDR):
[En anglais: Relational Database Management System – RDBMS]
Un SGBDR est un SGBD dont les bases de données sont
relationnelles.
Exemples de SGBDRs:
- MySQL
- Oracle
- IBM DB2
-…
Initiation aux bases de données 3
Langage SQL des SGBDR
SQL (Structured Query Language) est le langage utilisé par les
SGBDRs pour la création, la manipulation et l’interrogation de
bases de données relationnelles.
SQL offre des instructions pour :
- la création de tables
- l’insertion de lignes dans les tables
- la mise à jour des donnés de tables
-…
Initiation aux bases de données 4
SQL – Création de tables
NumMod NomMod
NumEt NomEt
Etudiant inscrit Module
DateNaiss
Note
ProfRes
But :
Professeur
Représenter dans des tables les
données relatives au déroulement
Bureau
des enseignement du semestre NumProf
NomProf Salaire
actuel.
Initiation aux bases de données 5
SQL – Création de tables
Chaque ligne de la table/relation "Etudiant" correspond à un étudiant.
Chaque étudiant a les attributs "NumEt" pour son numéro d’étudiant, "Nom" pour son
nom de famille, "Prenom" pour son prénom et "DateNaiss" pour sa date de naissance.
Ces attributs sont les colonnes de la table "Etudiant".
CREATE TABLE Etudiant( Le domaine d’un attribut
NumEt INTEGER, est l’ensemble des
valeurs possibles que
Nom VARCHAR(50), peut avoir cet attribut.
Prenom VARCHAR(80), Le domaine de l’attribut
DateNaiss DATE "NumEt" est l’ensemble
); des entiers positifs.
L’attribut "DateNaiss" est Le type "VARCHAR(80)"
déclaré de type "DATE" représente les chaînes de
caractères pouvant avoir
jusqu’à 80 caractères
Initiation aux bases de données 6
SQL – Création de tables
CREATE TABLE Professeur(
NumProf INTEGER,
NomProf VARCHAR(50),
Bureau VARCHAR(10),
Salaire FLOAT
)
Les attributs de la relation "Professeur" sont :
- "NumProf" : numéro d’un professeur
- "NomProf" : nom complet d’un professeur
- "Bureau" : numéro de bureau d’un professeur
- "Salaire" : salaire d’un professeur
Initiation aux bases de données 7
SQL – Création de tables
CREATE TABLE Module(
NumMod INTEGER,
NomMod VARCHAR(50),
NumProfRes INTEGER
)
Les attributs de la relation "Module" sont :
- "NumMod" : numéro d’un module
- "NomMod" : intitulé d’un module
- "NumProfRes" : numéro du professeur responsable d’un module
Initiation aux bases de données 8
SQL – Création de tables
NumMod NomMod
CREATE TABLE Module(
NumMod INTEGER,
NomMod VARCHAR(50), Module
NumProfRes INTEGER
)
ProfRes
CREATE TABLE Professeur( Professeur
NumProf INTEGER,
NomProf VARCHAR(50), Bureau
NumProf
Bureau VARCHAR(10), NomProf Salaire
Salaire FLOAT
)
Initiation aux bases de données 9
SQL – Création de tables
NumMod NomMod
NumEt NomEt
Etudiant inscrit Module
DateNaiss Note
Un étudiant peut être
CREATE TABLE Inscrit( inscrit dans plusieurs
NumEt INTEGER, modules.
Plusieurs étudiants
NumMod VARCHAR(15),
peuvent être inscrits à un
Note FLOAT module.
)
"Note" représente la note obtenue par l’étudiant qui a le numéro "NumEt" en le module
avec le numéro "NumMod".
Initiation aux bases de données 10
SQL – Insertion de données
etudiant
NumEt Nom prenom datenaiss
INSERT INTO etudiant
VALUES(50013, ‘Alili‘, ‘Ali’ , ‘2002-07-25’) ;
etudiant
NumEt Nom prenom datenaiss
50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
Initiation aux bases de données 11
SQL – Insertion de données
professeur
NumProf NomProf bureau salaire
INSERT INTO professeur
VALUES(3100, 'Ahmed Hamdi', 'E402', 50000) ;
professeur
NumProf NomProf bureau salaire
3100 'Ahmed 'E402' 50000.5
Hamdi'
Initiation aux bases de données 12
SQL – Insertion de données
professeur
NumProf NomProf bureau salaire
3100 'Ahmed Hamdi' 'E402' 50000.0
On peut aussi insérer
INSERT INTO professeur plusieurs lignes à la
VALUES(3101, 'Aicha Madihi', 'E403', 60000), fois avec une seule
(3102, 'Fadoua Malaki', 'F404', 70000.6) ; requête INSERT.
professeur
NumProf NomProf bureau salaire
3100 'Ahmed Hamdi' 'E402' 50000
3101 'Aicha Madihi' 'E403' 60000
3102 ‘Fadoua Malaki' 'E404' 70000.6
Initiation aux bases de données 13
SQL – Insertion de données
module
NumMod NomMod NumProfRes
INSERT INTO module VALUES
(570, 'XML', 3100),
(580, 'Java', 3100),
(590, ‘Prolog', 3102) ;
module
NumMod NomMod NumProfRes
570 'XML' 3100
580 'Java' 3100
590 'Prolog' 3102
Initiation aux bases de données 14
SQL – Insertion de données
etudiant module
NumEt ... NumMod ...
50013 ... 570 ...
50014 ... 580 ...
... ... ... ...
inscrit
INSERT INTO inscrit VALUES
NumEt NumMod Note
(50013, 570, NULL),
50013 570 NULL
(50014, 570, 13.5),
(50013, 580, 12.25); 50014 570 13.5
50013 580 12.25
Initiation aux bases de données 15
SQL – Sélection
Sélection de tous les tuples de la table "Etudiant"
(Sélection de tous les étudiants) :
SELECT *
FROM etudiant ;
ou, en précisant la liste de tous les attributs de la table
"Etudiant" :
SELECT numet, nom, prenom, datenaiss
FROM etudiant ;
Initiation aux bases de données 16
SQL – Sélection etudiant
NumEt Nom prenom datenaiss
50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
Sélection avec clause WHERE :
50014 'Bajaji' 'Mouna' ‘2000-11-19’
SELECT * On sélectionne de table
FROM etudiant "Etudiant" l’étudiant qui
WHERE numEt = 50013; a le numéro : 50013
Résultat :
NumEt Nom Prenom datenaiss
50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
Initiation aux bases de données 17
SQL – Sélection Professeur
NumProf NomProf bureau salaire
Sélection à partir de 3100 'Ahmed Hamdi' 'E402' 50000
plusieurs tables 3101 'Aicha Madihi' 'E403' 60000
Produit cartésien :
module
NumMod NomMod NumProfRes
SELECT *
FROM Module, Professeur ; 570 'XML' 3100
580 'Java' 3100
Produire toutes les combinaisons
possibles des lignes de "Module"
avec les lignes de "Professeur"
Module Professeur
NumMod NomMod NumProfRes NumProf NomProf bureau salaire
570 'XML' 3100 3100 'Ahmed Hamdi' 'E402' 50000
570 'XML' 3100 3101 'Aicha Madihi' 'E403' 60000
580 'Java' 3100 3100 'Ahmed Hamdi' 'E402' 50000
580 'Java' 3100 3101 'Aicha Madihi' 'E403' 60000
Initiation aux bases de données 18
SQL – Sélection Professeur
NumProf NomProf bureau salaire
Sélection à partir de 3100 'Ahmed Hamdi' 'E402' 50000
plusieurs tables 3101 'Aicha Madihi' 'E403' 60000
module
Donner chaque module avec NumMod NomMod NumProfRes
les informations du 570 'XML' 3100
professeur responsable : 580 'Java' 3100
SELECT *
FROM Module, Professeur Module Professeur
WHERE NumProfRes=NumProf;
NumProfRes= NumProf
NumMod NomMod NumProfRes NumProf NomProf bureau salaire
570 'XML' 3100 3100 'Ahmed Hamdi' 'E402' 50000
580 'Java' 3100 3100 'Ahmed Hamdi' 'E402' 50000
Initiation aux bases de données 19
SQL – Sélection Professeur
NumProf NomProf bureau salaire
3100 'Ahmed Hamdi' 'E402' 50000
3101 'Aicha Madihi' 'E403' 60000
Donner les numéros et les
3102 ‘Fadoua Malaki' ‘F404' 70000.6
intitulés des modules dont le
professeur responsable est module
'Fadoua Malaki' : NumMod NomMod NumProfRes
570 'XML' 3100
580 'Java' 3100
SELECT NumMod, NomMod
590 'Prolog' 3102
FROM Module, Professeur
WHERE NumProfRes=NumProf
AND NomProf=‘Fadoua Malaki';
NumMod NomMod
590 'Prolog'
Initiation aux bases de données 20
SQL – Sélection Professeur
NumProf NomProf bureau salaire
Renomage 3100 'Ahmed Hamdi' 'E402' 50000
3101 'Aicha Madihi' 'E403' 60000
Donner les numéros et les
3102 ‘Fadoua Malaki' ‘F404' 70000.6
intitulés des modules
(numero, intitule) dont le module
professeur responsable est NumMod NomMod NumProfRes
'Fadoua Malaki' : 570 'XML' 3100
580 'Java' 3100
SELECT NumMod AS numero,
590 'Prolog' 3102
NomMod AS intitule
FROM Module, Professeur
WHERE NumProfRes=NumProf
AND NomProf=‘Fadoua Malaki';
numero intitule
590 'Prolog'
Initiation aux bases de données 21
SQL – Sélection etudiant
NumEt Nom prenom datenaiss
DISTINCT 50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
50014 'Bajaji' 'Mouna' ‘2000-11-19’
Donner les différents
50015 'Hafidi' 'Hafid' ‘2003-01-01’
prénoms des étudiants (sans
50030 'Mjidi' 'Hafid' ‘2003-01-01’
redondance):
DISTINCT permet d’éviter les
SELECT DISTINCT prenom répétitions
FROM etudiant
prenom
'Ali'
'Mouna'
Hafid
Initiation aux bases de données 22
SQL – Sélection etudiant
NumEt Nom prenom datenaiss
Valeurs NULL 50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
50014 'Bajaji' 'Mouna' ‘2000-11-19’
Donner les étudiants
50015 'Hafidi' 'Hafid' ‘2003-01-01’
(NumEt, Nom, Prenom) qui
n’ont pas encore de note inscrit
dans le module avec numéro NumEt NumMod Note
570 : 50014 570 NULL
50013 570 13.5
SELECT e.NumEt, Nom, Prenom 50015 580 12.25
FROM etudiant e, inscrit i
WHERE e.NumEt=i.NumEt Le contraire de "IS NULL" est
AND NumMod=570 "IS NOT NULL"
AND note IS NULL
NumEt Nom prenom
50014 'Bajaji' 'Mouna'
Initiation aux bases de données 23
SQL – Sélection
Fonctions et opérateurs :
Professeur
NumProf NomProf bureau salaire
- MAX(), MIN(), AVG(), … 3100 'Ahmed Hamdi' 'E402' 50000
-,,,,,...
3101 'Aicha Madihi' 'E403' 60000
-… 3102 ‘Fadoua Malaki' ‘F404' 70000.6
Donner le salaire maximum
des salaires des professeurs :
SELECT MAX(salaire) AS salairemax
FROM Professeur ;
salairemax
70000.7
Initiation aux bases de données 24
SQL – Sélection
Fonctions et opérateurs :
Professeur
NumProf NomProf bureau salaire
- MAX(), MIN(), AVG(), …
3100 'Ahmed Hamdi' 'E402' 50000
- ,,,,,,... 3101 'Aicha Madihi' 'E403' 60000
3102 ‘Fadoua Malaki' ‘F404' 70000.6
Donner le salaire maximum
des salaires des professeurs :
SELECT AVG(salaire) AS salairemoyen
FROM Professeur ;
salairemoyen
70000.2
Initiation aux bases de données 25
SQL – Sélection
Fonctions et opérateurs :
Professeur
NumProf NomProf bureau salaire
3100 'Ahmed Hamdi' 'E402' 50000
3101 'Aicha Madihi' 'E403' 60000
3102 ‘Fadoua Malaki' ‘F404' 70000.6
Donner le nombre des
professeurs :
SELECT COUNT(*) AS nombreprofs
FROM Professeur ;
nombreprofs
3
Initiation aux bases de données 26
SQL – Sélection
Fonctions et opérateurs : etudiant
NumEt Nom prenom datenaiss
50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
Donner les étudiants 50014 'Bajaji' 'Mouna' ‘2000-11-19’
(NumEt, Nom, Prenom) qui 50015 'Hafidi' 'Hafid' ‘2003-01-01’
sont nés avant l’an 2002 :
SELECT NumEt, Nom, Prenom
FROM etudiant
WHERE YEAR(datenaiss) < 2002 ;
NumEt Nom prenom
50014 'Bajaji' 'Mouna'
Initiation aux bases de données 27
SQL – Sélection
Fonctions et
Professeur
opérateurs : NumProf NomProf bureau salaire
3100 'Ahmed Hamdi' 'E402' 50000
3101 'Aicha Madihi' 'E403' 60000
Donner les professeurs 3102 ‘Fadoua Malaki' ‘F404' 70000.6
dont le numéro de bureau
commence par 'E' :
SELECT *
FROM Professeur
WHERE bureau LIKE 'E%‘ ;
NumProf NomProf bureau salaire
3100 'Ahmed Hamdi' 'E402' 50000
3101 'Aicha Madihi' 'E403' 60000
Initiation aux bases de données 28
SQL – Sélection
Fonctions et opérateurs : etudiant
NumEt Nom prenom datenaiss
50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
Donner les étudiants qui 50014 'Bajaji' 'Mouna' ‘2000-11-19’
sont nés dans les années 50015 'Hafidi' 'Hafid' ‘2003-01-01’
allant de 2002 à 2003:
SELECT *
FROM etudiant
WHERE YEAR(datenaiss) = 2002
OR YEAR(datenaiss) = 2003;
NumEt Nom prenom datenaiss
50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
50015 'Hafidi' 'Hafid' ‘2003-01-01’
Initiation aux bases de données 29
SQL – Sélection
Fonctions et opérateurs : etudiant
NumEt Nom prenom datenaiss
50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
Donner les étudiants qui 50014 'Bajaji' 'Mouna' ‘2000-11-19’
sont nés dans les années 50015 'Hafidi' 'Hafid' ‘2003-01-01’
allant de 2002 à 2003:
SELECT *
FROM etudiant
WHERE YEAR(datenaiss) BETWEEN 2002 AND 2003;
NumEt Nom prenom datenaiss
50013 ‘Alili‘ ‘Ali’ ‘2002-07-25’
50015 'Hafidi' 'Hafid' ‘2003-01-01’
Initiation aux bases de données 30