Donnes
Hamid HRIMECH
EST de Berrechid
Stations de travail
Interface
Langages de programmation /
manipulation de donnes
Traitements
SGBD
Donnes
Bases de Donnes
D= Donne (Data)
SQL
interactif
LDD (DDL)
Dfinition
LMD (DML)
Manipulation
intgr
dynamique
LCD (DCL)
Contrle
CREATE
INSERT
GRANT
DECLARE
PREPARE
DROP
DELETE
REVOKE
CURSOR
DESCRIBE
ALTER
UPDATE
CONNECT
FETCH
EXECUTE
COMMIT
Interrogation
SELECT
ROLLBACK
SET
Slection de champs/lignes
SELECT
FROM
WHERE ;
Suppression de lignes
DELETE
FROM
WHERE ;
UPDATE
SET
WHERE ;
Insertion de lignes
INSERT
INTO
VALUES ...;
Cration de table
CREATE (
Suppression de table
DROP ;
Modification de structure
ALTER . ;
);
nom
prenom
dateN
Martin
Vra
85-10-31 13.5
77
Martin
Annie
85-12-31 15.5
75
Dupont Sylvie
83-02-03 15.0
77
Martin
83-10-22 05.7
93
Dupond Laurent
92
Lefvre Laurent
Annie
11.5
Syntaxe du SQL
Exemple
CREATE TABLE etud (
num INT UNSIGNED NOT NULL PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
prenom VARCHAR(25) NOT NULL,
dateN DATE,
note DECIMAL(3,1) UNSIGNED ZEROFILL,
dep CHAR(2),
licence TINYINT(1)
);
Syntaxe gnrale
DROP TABLE nom_table ;
Syntaxe gnrale
DELETE FROM nom_table
WHERE condition ;
Suppression de toutes les lignes de la table (-> table vide) !
DELETE FROM etud ;
Suppression des lignes d'tudiants de licence 3
DELETE FROM etud
WHERE licence=3 ;
Suppression des lignes d'tudiants nomms Jean Dupont
DELETE FROM etud
WHERE nom='Dupont' AND prenom='Jean' ;
10
Syntaxe gnrale n1
INSERT INTO nom_table
VALUES (val1, val2,,val7) ;
Exemple de syntaxe n1
INSERT INTO etud
VALUES (7,'Martin','Vra' ,'1988-01-01',13.5,75,1) ;
Syntaxe gnrale n2
INSERT INTO nom_table (champ3, champ2,champ7)
VALUES (val3, val2, val7) ;
Exemple de syntaxe n2
INSERT INTO etud (licence, nom, prenom )
VALUES (1, 'Martin', 'Vra') ;
11
12
13
champ2
champ3
champ3
champ1
champ4
champ4
champ5
14
Syntaxe du SELECT
Syntaxe minimale
SELECT FROM table;
Syntaxe complte (respecter l'ordre des clauses)
SELECT
[DISTINCT | ALL ] {* | champ [[AS] alias], ... }
FROM table [[AS] alias], ...
[WHERE { condition | sous condition} ]
[GROUP BY champ , ...]
[HAVING condition]
[ORDER BY {champ | num}{ASC | DESC}, ...]
[LIMIT [deb,] nb];
15
Martin
Vra
15.5
Martin
Annie
15.0
Dupont
Sylvie
05.7
Martin
Annie
Dupond Laurent
11.5
Lefvre Laurent
16
num
nom
prenom
dateN
Martin
Vra
85-1031
13.5
77
Martin
Annie
85-1231
15.5
75
Dupont
Sylvie
83-0203
15.0
77
Martin
Annie
83-1022
05.7
93
Dupond Laurent
92
Lefvre Laurent
11.5
17
Prnom
...
En utilisant AS
SELECT prenom AS Prnom,
nom AS 'Nom de famille'
FROM etud;
Sans utiliser AS (facultatif)
SELECT prenom Prnom,
nom 'Nom de famille'
FROM etud;
Nom de famille
...
18
SELECT dep
FROM etud ;
dep
dep
Martin
Vra
...
77
77
77
Martin
Annie
...
75
75
75
Dupont Sylvie
...
92
92
92
Martin
...
77
77
null
75
75
93
null
Nom
Annie
...
...
...
93
93
...
...
...
77
77
...
...
...
92
92
...
...
... null
null
19
dep
licence
dep
licence
93
93
75
75
75
75
77
77
75
75
75
75
null
null
93
93
93
93
20
num
nom
prenom
dateN
note
dep
licence
92
93
Dupond Laurent
Martin
Lefvre Laurent
Martin
Vra
85-1031
13.5
77
Dupont
Sylvie
83-0203
15.0
77
Martin
Annie
85-1231
15.5
75
Annie
83-1022
05.7
11.5
21
nom
prenom
dateN
note
dep
licence
Martin
Annie
85-1231
15.5
75
Dupont
Sylvie
83-0203
15.0
77
Martin
Vra
85-1031
13.5
77
Lefvre Laurent
Martin
Dupond Laurent
Annie
11.5
83-1022
05.7
3
93
92
22
num
nom
prenom
dateN
note
dep
licence
92
77
Dupond Laurent
Dupont
Lefvre Laurent
Martin
Annie
85-12-31
15.5
75
Martin
Annie
83-10-22
05.7
93
Martin
Vra
85-10-31
13.5
77
Sylvie
83-02-03
15.0
11.5
23
24
prenom
dateN
note dep
Annie
85-1231
15.5
75
Dupont Sylvie
83-0203
15.0
77
Martin
85-1031
13.5
77
Martin
Vra
Lefvre Laurent
Martin
Annie
Dupond Laurent
11.5
83-1022
05.7
licence
3
93
92
25
rang
nom
0 1 Martin
1 2
2 3
Dupont
3 4 Martin
4 5
5 6
prenom
dateN
Annie
85-1231
15.5
75
Sylvie
83-0203
15.0
77
Vra
85-1031
13.5
77
Lefvre Laurent
Martin
Annie
Dupond Laurent
11.5
83-1022
05.7
3
93
92
2
enregistrements
26
champ2
champ3
champ4
champ5
27
prenom
dateN
Martin
Vra
85-1031
13.5 77
Martin
Annie
85-1231
15.5 75
Dupont Sylvie
83-0203
15.0 77
Martin
83-1022
05.7 93
92
Annie
Dupond Laurent
Lefvre Laurent
11.5
28
Chane : valeur entre guillemets simples ' ' ou doubles " "
Date : valeur entre guillemets en prsence de sparateur sans sparateur : guillemets facultatifs
Echappement de l'apostrophe dans la valeur
Exemples :
Chane
Date avec sparateur
Nombre
... nom='Martin'
(comme une chane)
... num=3
... date_n='1980-12-31'
... note=13.5 ... nom='Martin'
... nom="Martin"
... date_n='1980/12/31'
... num='3'
... nom='L''Hote'
Date sans sparateur
... note='13.5' ... nom='L\'Hote'
... date_n='19801231'
... nom="L'Hote"
... date_n=19801231
29
prenom
dateN
Martin
Vra
85-1031
13.5
77
Martin
Annie
85-1231
15.5
75
Dupont
Sylvie
83-0203
15.0
77
Martin
Annie
83-1022
05.7
93
92
Dupond Laurent
Lefvre Laurent
11.5
30
prenom
dateN
Martin
Vra
85-1031
13.5
77
Martin
Annie
85-1231
15.5
75
Dupont
Sylvie
83-0203
15.0
77
Martin
Annie
83-1022
05.7
93
92
Dupond Laurent
Lefvre Laurent
11.5
31
licence=1)
note IS NULL) ;
( licence=1
note IS NULL ;
-> 2 enregistrements
-> 4 enregistrements
prenom
dateN
Martin
Vra
85-1031
13.5 77
Martin
Annie
85-1231
15.5 75
Dupont
Sylvie
83-0203
15.0 77
Martin
Annie
83-1022
05.7 93
32
Vra
85-10-31
13.5
77
Martin
Annie
85-12-31
15.5
75
Dupont
Sylvie
83-02-03
15.0
77
Martin
Annie
83-10-22
05.7
93
Dupond
Laurent
92
Lefvre
Laurent
11.5
33
E1 E2 OR
NOT
Calcul sur E : + - * /
34
nom
prenom
dateN
note_m
note_b
Martin
Vra
85-10-31
13.5
15.0
Martin
Annie
85-12-31
15.5
10.0
Dupont
Sylvie
83-02-03
15.0
15.0
Martin
Annie
83-10-22
Dupond
Laurent
Lefvre
Laurent
02.0
11.5
35
Quels tudiants ont des rsultats meilleurs en maths (+ 2 pts) qu'en bio ?
SELECT * FROM etud1
WHERE note_m >= (note_b + 2) ;
nom
prenom
dateN
note_m
note_b
Martin
Vra
85-10-31
13.5
15.0
Martin
Annie
85-12-31
15.5
10.0
Dupont
Sylvie
83-02-03
15.0
15.0
Martin
Annie
83-10-22
Dupond
Laurent
Lefvre
Laurent
02.0
11.5
36
nom
prenom
dateN
Martin
Vra
85-1031
13.5 77
Martin
Annie
85-1231
15.5 75
Dupont
Sylvie
83-0203
15.0 77
Martin
Annie
83-1022
05.7 93
92
Dupond Laurent
37
nom
prenom
dateN
Martin
Vra
85-1031
13.5 77
Martin
Annie
85-1231
15.5 75
Dupont
Sylvie
83-0203
15.0 77
83-1022
05.7 93
92
Martin
Annie
Dupond Laurent
Null
non compt
38
nom
prenom
dateN
Martin
Vra
85-1031
13.5
77
Martin
Annie
85-1231
15.5
75
Dupont
Sylvie
83-0203
15.0
77
Martin
Annie
83-10- 05.7 93
1
22
Respecter l'ordre des bornes (infrieure puis suprieure)
Dupond Laurent
92
2
Lefvre Laurent
11.5
39
nom
prenom
dateN
Martin
Vra
85-1031
13.5 77
Martin
Annie
85-1231
15.5 75
Dupont
Sylvie
83-0203
15.0 77
Martin
Annie
83-1022
05.7 93
92
Dupond Laurent
Lefvre Laurent
11.5
40
prenom
dateN
Martin
Vra
85-1031
13.5
77
Martin
Annie
85-1231
15.5
75
Dupont
Sylvie
83-0203
15.0
77
Martin
Annie
83-1022
05.7
93
92
Dupond Laurent
Lefvre Laurent
11.5
41
prenom
Attention LIKE
au lieu de =
dateN
Martin
Vra
85-1031
13.5
77
Martin
Annie
85-1231
15.5
75
Dupont
Sylvie
83-0203
15.0
77
Martin
Annie
83-1022
05.7
93
Dupond
Laurent
92
Lefvre
Laurent
Dupontel Anne
Mattel
Laurenc
11.5
42
prenom
Attention LIKE
au lieu de =
dateN
note dep
licence
Martin
Vra
85-1031
13.5
77
Martin
Annie
85-1231
15.5
75
Dupont
Sylvie
83-0203
15.0
77
Martin
Annie
83-1022
05.7
93
Dupond
Laurent
92
Lefvre
Laurent
Dupontel Anne
Mattel
Laurenc
11.5
43
44
45
Oprateurs
Oprateurs arithmtiques
% (MOD)
Oprateurs de comparaison
galit
/ non galit
=
<
<>
!=
>=
<=
supriorit / infriorit
>
IN ('val1','val2','val3')
intervalle de valeurs
motif de chane
LIKE
valeur Null
IS NULL
IS NOT NULL
Oprateurs logiques
et
non ou ou exclusif
&&
||
Connecteurs logiques
AND
Gestion de la priorit
% _
!
)
OR
XOR
NOT
46
<>
% MOD
!=
BETWEEN
AND
OR
&&
||
>
<
>=
<=
IS
LIKE
REGEXP
IN
47
Martin
Vra
Martin Vra
Martin
Annie
Martin Annie
Dupont
Sylvie
Dupont Sylvie
Martin
Annie
Martin Annie
Dupond
Laurent
Dupond Laurent
Lefvre
Laurent
Lefvre Laurent
48
prenom
Nom complet
Martin
Vra
Martin Vra
Martin
Annie
Martin Annie
Dupont Sylvie
Dupont Sylvie
Martin
Martin Annie
Annie
49
mise en
majuscule
upper(nom) prenom
note note*2
MARTIN
Vra
13.5
27.0
MARTIN
Annie
15.5
31.0
DUPONT
Sylvie
15.0
30.0
MARTIN
Annie
05.7
11.4
DUPOND
Laurent
LEFVRE
Laurent
11.5
23.0
50
COUNT
nombre d'enregistrements
nombre d'tudiants total
nombre d'tudiants dont la note est connue
SUM
somme
somme des prix dans une facture
MAX
maximum
liste des tudiants qui ont la meilleure note
MIN
minimum
liste des tudiants qui ont la note la plus basse
AVG
moyenne (average) pour des nombres
moyenne des notes de licence 1
51
52
SELECT COUNT(*)
FROM etud ;
SELECT COUNT(*) AS 'Nb d\'tudiants'
FROM etud ;
-> s'il y a des espaces, entourer de '' ou ""
SELECT dep AS Dpartement,
Dpartement
nom AS Nom,
prenom AS Prnom
FROM etud;
AS est facultatif (selon les implmentations)
SELECT dep Dpartement,
nom Nom,
prenom Prnom
FROM etud;
COUNT(*)
6
Nb d'tudiants
6
Nom Prnom
53
AVG(note)
SELECT AVG(note) FROM etud ;
12.24
Moyenne des notes (non NULL)
SELECT MIN(note), AVG(note), MAX(note) FROM etud ;
MIN(note)
AVG(note)
MAX(note)
5.7
12.24
15.5
Incorrect :
SELECT nom, MIN(note) FROM etud ;
nom, note des tudiants ayant la note la plus basse
pas de mlange entre Agrgat et Champ !
54
nom
prenom
date_n
Lefvre
Martin Laurent
Vra
85-1031
85-12-
13.5
11.5 77
3
2
15.5 75
15.5 75
1
1
null
75
13.5 77
15.0 77
2
2
77
15.0 77
05.7 93
2
1
92
93
92
92
05.7 93
11.5
2
2
1
Martin
Martin
Annie
Annie
Martin Vra
Dupont Sylvie
Dupont
Martin
Sylvie
Annie
Dupond Laurent
Dupond Annie
Laurent
Martin
Lefvre Laurent
31
85-1231
85-1031
83-0203
83-0203
83-1022
83-1022
dep count(*
)
55
3
2
56
prenom
date_n
note
dep
licence
Martin
Vra
85-10-31
13.5
77
Martin
Annie
85-12-31
15.5
75
Dupont
Sylvie
83-02-03
15.0
77
Martin
Annie
83-10-22
05.7
93
Dupond
Laurent
92
Lefvre
Laurent
11.5
57
612
58
59
Quelques fonctions
61
Rcupration de date/temps
62
%y an (2 chiffres) : 97
%m mois (01 12) : 04
%b mois (court) : Apr
%d jour (01 31) : 08
%a jour (court) : Sat
%w jour de semaine (Di=0, Lu=6)
%j N jour (1 365)
%U semaine de l'anne (dbut=di)
%r heure (12h) : 11:59:30 PM
%I heure (12h) : 11
%p AM ou PM
%i minutes (2 chiffres) : 51
%S secondes (2 chiffres) : 53
%Y an (4 chiffres) : 1997
%M mois (long) : April
%e jour (1 31) : 8
%W jour (long) : Saturday
%u idem (dbut=lu)
%T heure (24h) : 23:59:30
%H heure (24h) : 23
63
Syntaxe gnrale
CREATE TABLE table2
AS requte ;
64
Les champs peuvent tre prfixs pour le nom de la table ou de son alias
SELECT etud.nom FROM etud WHERE etud.note>10 ;
SELECT e.nom FROM etud e WHERE e.note>10 ;
65
etud
prenom
date_n
note
dep
licence
Martin
Vra
85-10-31
13.5
77
Martin
Annie
85-12-31
15.5
75
Dupont
Sylvie
83-02-03
15.0
77
Martin
Annie
83-10-22
05.7
93
Dupond
Laurent
92
Lefvre
Laurent
11.5
dep_num
departement
3
dep_nom
01
Ain
...
75
Paris
77
Seine-et-Marne
92
Hauts-de-Seine
93
Seine-Saint-Denis
66
nom
prenom
dateN
dep_nom
Martin
Vra
85-10-31 13.5
77
77
Seine-et-Marne
Martin
Annie
85-12-31 15.5
75
75
Paris
Dupont
Sylvie
83-02-03 15.0
77
77
Seine-et-Marne
Martin
Annie
83-10-22 05.7
93
93
Seine-Saint-Denis
92
92
Hauts-de-Seine
null
null
null
01
Ain
Dupond Laurent
Lefvre
Laurent
null
11.5 null
null
null
null
null
null
67
prenom
dateN
nb enregistrements =
6 tudiants x
n dpartements
dep_nom
Martin
Vra
85-10-31 13.5
77
01
Ain
Martin
Annie
85-12-31 15.5
75
01
Ain
Dupont
Sylvie
83-02-03 15.0
77
01
Ain
Martin
Annie
83-10-22 05.7
93
01
Ain
92
01
Ain
01
Ain
..
...
...
...
Dupond Laurent
Lefvre
Laurent
11.5
....
....
Martin
Vra
85-10-31 13.5
77
77
Seine-et-Marne
Martin
Annie
85-12-31 15.5
75
77
Seine-et-Marne
Dupont
Sylvie
83-02-03 15.0
77
77
Seine-et-Marne
Martin
Annie
83-10-22 05.7
93
77
Seine-et-Marne
92
77
Seine-et-Marne
77
Seine-et-Marne
...
...
...
...
...
Dupond Laurent
Lefvre
Laurent
....
....
11.5
...
...
..
68
Produit cartsien
SELECT * FROM etud, departement ;
SELECT * FROM etud CROSS JOIN departement ;
SELECT * FROM etud JOIN departement ;
Jointure
SELECT *
FROM etud, departement
WHERE dep=dep_num ;
SELECT *
FROM etud
JOIN departement
ON dep=dep_num ;
69
Ne pas oublier la
clause WHERE
de jointure
departement
etud
nom
prenom
dateN
dep_nom
Martin
Vra
85-10-31 13.5
77
77
Seine-et-Marne
Martin
Annie
85-12-31 15.5
75
75
Paris
Dupont
Sylvie
83-02-03 15.0
77
77
Seine-et-Marne
Martin
Annie
83-10-22 05.7
93
93
Seine-Saint-Denis
92
92
Hauts-de-Seine
Dupond Laurent
Lefvre
Laurent
11.5
70
nom
prenom
dateN
dep
dep_nom
Martin
Vra
85-10-31 13.5
77
77
Seine-et-Marne
Martin
Annie
85-12-31 15.5
75
75
Paris
Dupont
Sylvie
83-02-03 15.0
77
77
Seine-et-Marne
Martin
Annie
83-10-22 05.7
93
93
Seine-Saint-Denis
92
92
Hauts-de-Seine
11.5 null
null
Dupond Laurent
Lefvre
Laurent
71
etud
nom
prenom
dateN
dep_nom
Martin
Vra
85-10-31 13.5
77
77
Seine-et-Marne
Martin
Annie
85-12-31 15.5
75
75
Paris
Dupont
Sylvie
83-02-03 15.0
77
77
Seine-et-Marne
Martin
Annie
83-10-22 05.7
93
93
Seine-Saint-Denis
Dupond Laurent
null
null
92
92
Hauts-de-Seine
Lefvre
Laurent
null
11.5 null
null
null
null
null
null
null
null
01
Ardche
null
par dfaut, une jointure est une jointure interne (INNER JOIN)
72
etud
nom
prenom
dateN
note
dep
licenc
e
dep_num
dep_nom
Martin
Vra
85-10-31 13.5
77
77
Seine-et-Marne
Martin
Annie
85-12-31 15.5
75
75
Paris
Dupont
Sylvie
83-02-03 15.0
77
77
Seine-et-Marne
Martin
Annie
83-10-22 05.7
93
93
Seine-Saint-Denis
Dupond Laurent
null
null
92
92
Hauts-de-Seine
null
null
null
null
null
null
07
Ain
null
null
null
null
null
null
07
Ardche
Lefvre
Laurent
null
11.5
null
null
null
73
dep
01
07
75
77
92
93
dep
count(*)
count(*)
01
07
75
77
92
93
74
Auto-jointure de table
Jointure de la table sur elle-mme
Utilisation de 2 alias pour la mme table
SELECT * FROM etud e1, etud e2
WHERE e1.num=e2.binome ;
e1
num
e2
nom
nom
prenom binome
Martin
Vra
Martin
Annie
Martin
Annie
Martin
Vra
Dupont
Sylvie
Martin
Annie
Martin
Annie
Dupont
Sylvie
Dupond Laurent
Lefvre Laurent
Lefvre Laurent
Dupond Laurent
75
Auto-jointure de table
Etudiants dont la note est infrieure la note de l'tudiant n 4
SELECT e1.*
FROM etud e1, etud e2
WHERE e1.note < e2.note
AND e2.num=4 ;
e1
e2
num
nom
prenom
Note
num
nom
prenom binome
Martin
Vra
13.5
Martin
Annie
15.5
Martin
Annie
15.5
Martin
Vra
13.5
Dupont
Sylvie
15.0
Dupont
Sylvie
15.0
Martin
Annie
05.7
Martin
Annie
05.7
Dupond Laurent
null
Dupond Laurent
null
Lefvre Laurent
13.5
Lefvre Laurent
13.5
76
Equi-jointure et thta-jointure
Equi-jointure =
Thta-jointure
>
>=
<
<=
78
85
Les contraintes
86
Les contraintes
87