Initiation aux bases de données
Licence 1 MIASHS
2017-2018
[email protected]
Dans la suite…
Comment les Applications
2. Modèle de données sont sur un 5. Cas pratique :
données relationnel organisées SGBD PostgreSQL
Comment les Langage pour
3. Algèbre requêtes sont écrire des 4. Langage SQL
relationnel structurées requêtes
07/03/2018 Initiation aux bases de données - L1 MIASHS 2
Structured Query Language, IBM, 1970
3. LE LANGAGE SQL
07/03/2018 Initiation aux bases de données - L1 MIASHS 3
Ressources
Exemple de livres numériques de P8 :
07/03/2018 Initiation aux bases de données - L1 MIASHS 4
Un peu d’histoire !
1970 SEQUEL (Structured English QUEry Language) développé par IBM
1975 SEQUEL officiellement renommé SQL
1986 Recommandation de l’ANSI (Institut de normalisation américaine)
1987 Norme internationale ISO
1999 Norme ISO/IEC 9075
2011
07/03/2018 Initiation aux bases de données - L1 MIASHS 5
Organisation du langage SQL
LDD LMD LCD
Langage de Langage de Langage de
Définition des Données Manipulation des Données Contrôle de Données
Créer une base de Insertion, modification,
données. suppression de Protection des
Modifier sa structure. données. données.
Supprimer la base. Extraction de données.
http://sql.sh/cours
07/03/2018 Initiation aux bases de données - L1 MIASHS 6
Fil rouge
GestionNotes
Coefficient
Etudiant
idCoef
valeur idE 1,1
1,1 prenom
#idCtrl
Matiere Controle Note
idM 1,1 idCtrl idN
nom 0, N nom 1,1 valeur
0,N
sujet #idCtrl
0, N 0, N
#idM #idE
date
07/03/2018 Initiation aux bases de données - L1 MIASHS 7
Requête de base
Quels sont les attributs à garder ?
SELECT [champs] Dans quelle(s) table(s)
s’effectue(nt) la requête ?
FROM [tables]
WHERE [condition]
Conditions permettant d’exprimer
; la nature de la requête.
Toujours un ; à la fin de la requête
pour la valider.
07/03/2018 Initiation aux bases de données - L1 MIASHS 8
La plus célèbre requête
SELECT *
FROM uneTable;
• * signifie
« tous les champs ».
• Cette requête affiche toutes les données
stockées dans la table uneTable.
• Permet d’avoir une bonne visibilité des
données.
Vous devez TOUJOURS avoir une bonne visibilité !!!
07/03/2018 Initiation aux bases de données - L1 MIASHS 9
∏
÷ ρ
⋈ σ
× ∪
COMMENT EXPRIMER
- ∩
LES OPÉRATEURS ?
07/03/2018 Initiation aux bases de données - L1 MIASHS 10
Projection
÷
∏ ρ
SELECT c1, c2, …
⋈ σ
FROM nomTable
× ∪ ;
- ∩
07/03/2018 Initiation aux bases de données - L1 MIASHS 11
Renommage
∏
÷ ρ SELECT c1 as
nouveauNom, c2, …
⋈ σ
FROM nomTable
× ∪
;
- ∩
07/03/2018 Initiation aux bases de données - L1 MIASHS 12
Sélection
∏
÷ ρ
SELECT c1, c2, …
⋈ σ FROM nomTable
WHERE conditions
× ∪
;
- ∩
Conditions : =, <>, !=, >, <, >=, <=, AND, OR, NOT, IN, BETWEEN, LIKE, IS NULL, IS NOT NULL, …
07/03/2018 Initiation aux bases de données - L1 MIASHS 13
Union
∏
÷ ρ
SELECT * FROM table1
⋈ σ UNION
SELECT * FROM table2
×
;
- ∩
UNION ALL permet d’afficher les doublons
07/03/2018 Initiation aux bases de données - L1 MIASHS 14
Intersection
∏
÷ ρ
SELECT * FROM table1
⋈ σ INTERSECT
SELECT * FROM table2
× ∪
;
- ∩
07/03/2018 Initiation aux bases de données - L1 MIASHS 15
Différence
∏
÷ ρ
SELECT * FROM table1
⋈ σ EXCEPT
SELECT * FROM table2
× ∪
-
;
∩
Cette commande s’appelle MINUS dans d’autre SGBD.
07/03/2018 Initiation aux bases de données - L1 MIASHS 16
Produit cartésien
∏
÷ ρ
SELECT *
⋈ σ
FROM table1, table2
× ∪ ;
- ∩
07/03/2018 Initiation aux bases de données - L1 MIASHS 17
Jointure
Jointure naturelle
∏
÷ ρ
SELECT *
σ FROM table1
NATURAL JOIN table2
× ∪
;
- ∩
07/03/2018 Initiation aux bases de données - L1 MIASHS 18
Jointure
Thêta/équijointure
∏
SELECT *
÷ ρ
FROM table1
σ
INNER JOIN table2
× ∪ ON condition
- ∩ ;
Exemple de condition : table1.id = table2.idT
Autres jointures : http://sql.sh/cours/jointures
07/03/2018 Initiation aux bases de données - L1 MIASHS 19
Division
∏
÷ ρ
⋈ σ
Pas d’équivalent direct
× ∪
- ∩
Voyons les autres spécificités du langage SQL avant de réfléchir à la division.
07/03/2018 Initiation aux bases de données - L1 MIASHS 20
UTILISATION AVANCÉE
07/03/2018 Initiation aux bases de données - L1 MIASHS 21
Les fonctions
Agrégation
• MAX() : valeur maximum
• MIN() : valeur minimum SELECT fonction(champs)
as nomChamps
• COUNT() : nombre
d’élément FROM nomTable
• AVG() : moyenne ;
• SUM() : somme
Exemple : select prenom, AVG(select …) as moyenne from etudiant;
07/03/2018 Initiation aux bases de données - L1 MIASHS 22
Les fonctions
Chaîne de caractère
• UPPER() : majuscule
• LOWER() : minuscule
• LENGTH() : nombre de SELECT fonction(champs)
caractères as nomChamps
• TRIM() : suppression des FROM nomTable
espaces (début et fin)
• POSITION() : position d’une ;
sous-chaîne
• …
07/03/2018 Initiation aux bases de données - L1 MIASHS 23
Les fonctions
Mathématiques
• ABS() : valeur absolues
• COS() : cosinus
SELECT fonction(champs)
• SIN() : sinus as nomChamps
• FLOOR() : arrondi en
dessous FROM nomTable
• ROUND(): arrondi au plus ;
proche
• …
07/03/2018 Initiation aux bases de données - L1 MIASHS 24
Les fonctions
Dates et heures
• AGE() : âge calculé par la
différence entre deux dates
SELECT fonction(champs)
• CURRENT_DATE() : date as nomChamps
actuelle
• CURRENT_TIME() : heure FROM nomTable
actuelle
;
• NOW() : date et heure actuelle
• …
07/03/2018 Initiation aux bases de données - L1 MIASHS 25
Eliminer les doublons
concernant un champs
Etudiant
prénom
Alex
Alex
Eric
Sabine SELECT DISTINCT champs
Sabine
FROM nomTable
SELECT DISTINCT prénom
FROM Etudiant;
;
Etudiant
prénom
Alex
Eric
Sabine
07/03/2018 Initiation aux bases de données - L1 MIASHS 26
Eliminer les doublons
concernant un n-uplet entier
Etudiant
prénom moyenne
Alex 13,5
Alex 13,5 SELECT c1, c2, c3, …
Eric 17
Sabine 15,5 FROM nomTable
Sabine 15,5
…
SELECT prénom, moyenne
FROM Etudiant
GROUP BY prénom, GROUP BY c1
Etudiant
;
prénom moyenne
Alex 13,5
Eric 17
Sabine 15,5
07/03/2018 Initiation aux bases de données - L1 MIASHS 27
Conditions
utilisant les fonctions d’agrégation
Etudiant
prénom note
Alex 11,5
Alex 13,5
Alex 9,5
Martin 5 SELECT [champs]
Martin 11
FROM [tables]
GROUP BY champs
Martine 9,5
HAVING conditions
Léa 9,5 ;
SELECT prénom
From Etudiant
GROUP BY prénom
HAVING AVG(note) > 10;
Etudiant
prénom
Alex
07/03/2018 Initiation aux bases de données - L1 MIASHS 28
Classement du résultat
Etudiant
prénom
Marc
Sabine
Eric
SELECT [champs]
Alex
SELECT prénom FROM [tables]
From Etudiant
ORDER BY prénom ASC; …
ORDER BY champs ASC
Etudiant
;
prénom
Alex
Eric
Marc
Sabine
ASC : ascendant – DESC : descendant
07/03/2018 Initiation aux bases de données - L1 MIASHS 29
Sélection
d’un sous-ensemble
• LIMIT : nombre de n-uplets
maximum à renvoyer. SELECT [champs]
• OFFSET : numéro du n-
FROM [tables]
uplets à partir duquel on
commence la liste ORDER BY c1 DESC
LIMIT n1 OFFSET n2
→Le résultat est composé de n1 n-
;
uplets à partir du n2ème n-uplet du
résultat de base.
07/03/2018 Initiation aux bases de données - L1 MIASHS 30
La prochaine fois
• Suite du cours
• TP sur les requêtes SQL
• Retour sur les schémas relationnels du mini-projet
• Suite du cours
Nouvelle version du mini-projet à rendre avant lundi 12 mars 20h.
Ceux qui ne respectent pas les règles suivantes auront 0 :
• Le mini-projet doit se trouver dans un fichier PDF.
• Les titres doivent être ceux qui vous ont imposés avec la
numérotation qui a été imposée.
• Seul le schéma relationnel est autorisé sous forme d’une photo.
07/03/2018 Initiation aux bases de données - L1 MIASHS 31