Page 1 sur 97
Objectifs
Mode demploi
renvoie des supports de cours, des livres ou la documentation en ligne constructeur, par le
symbole :
Manip raliser avec un utilitaire graphique (qui devrait normalement simplifier le travail !)
Approfondissement : travail de documentation ou exercice supplmentaire, faire individuellement
(non intgr dans le temps de formation moyen)
Page 2 sur 97
Il est issu de SEQUEL : Structured English Query Language. Cest le premier langage pour les
S.G.B.D Relationnels. Il a t dvelopp par IBM en 1970 pour systme R, son 1er SGBDR.
S.Q.L. a t reconnu par lANSI puis impos comme norme. Il nexiste pas de S.G.B.D.R sans
S.Q.L. ! Malheureusement, malgr la norme SQL, il existe un ensemble de dialectes qui
respectent un minimum commun.
Ce cours sappuiera sur le langage Transact SQL de Microsoft, en essayant de rester le plus
standard possible.
SQL est bas sur la thorie des ensembles : il manipule des tables qui reprsentent le graphe
dune relation entre plusieurs ensembles (colonnes).
IdPilote
1
2
3
4
5
6
7
8
9
NomPilote
GAINSBOURG
FERRAT
NOUGARO
SCHUMMAN
STROGOFF
SORREL
TAVERNIER
FAYOLLE
LECU
PrenomPilote
Serge
Jean
Claude
Robert
Michel
Lucien
Bertrand
Marc
Rgis
Ligne ou tuple
Colonne ou attribut
Page 3 sur 97
gnrateur d'application : qui fait appel aux crans et tats prcdents, et qui permet
la cration de menus ainsi que des traitements sur la BD par requtes simples (en
SQL) ou en imbriquant des appels des programmes dvelopps en L3G (ce qui
permet de combiner puissance des outils de 4me gnration et souplesse des L3G).
GENERATEUR
GENERATEUR
D'ECRANS
D'APPLICATI0NS
SQL
ACCES
GENERATEUR
DE SCHEMAS
DICTIONNAIRE
RESEAUX
NOYAU
+
CONCEPTUELS
UTILITAIRES
GENERATEUR
DE RAPPORTS
Page 4 sur 97
Outils disponibles dans le menu Microsoft SQL Server : Analyseur de requte SQL
(interprteur SQL interactif), Enterprise Manager (administration des bases de donnes
en rseau)
USE PUBLI
select *
from magasins
Cliquez sur la flche verte pour lancer la requte, qui affiche la description des magasins :
id_mag nom_mag
adresse_mag
ville
pays
code_postal
------ ---------------------------------------- ---------------------------------------- -------------------- ---- ----------6380
Eric the Read Books
788, Catamaugus Ave.
Seattle
WA
98056
7066
Librairie spcialise
567, Av. de la Victoire
Paris
FR
75016
7067
Moissons livresques
577, Boulevard Anspach.
Bruxelles
BE
1000
..etc
Il y a parfois des petites diffrences entre la documentation et le contenu rel des tables =>
pensez vrifier vos programmes en visualisant les contenus des tables par des requtes simples
A partir de SQL Server 7.0, la base originale sur laquelle sappuient tous les exemples de la
documentation Microsoft, est en anglais : PUBS. Vous pouvez lutiliser pour tester des syntaxes
documentes dans laide, mais les exercices porteront toujours sur la version franaise de la
base : PUBLI
Page 5 sur 97
Tous les diteurs appartenant au groupe sont dcrits dans la table diteurs.
Les diteurs ont des logo (table pub_info), emploient du personnel (table employ), et ditent des
livres (table titre).
Chaque employ occupe un emploi (table emplois)
Chaque livre est crit par un ou plusieurs auteurs (table auteurs et table intermdiaire
titreauteur)
Pour chaque livre vendu, son/ses auteurs touchent des droits, qui sont dfinis en pourcentage du
prix de vente, par tranche, en fonction de la quantit de livres vendus (table droits_prvus).
Les livres sont vendus dans des magasins (table ventes et magasins)
Page 6 sur 97
Diffrents types de remise sont consentis sur les livres vendus (table remises)
Table diteurs
Nom_colonne
id_diteur
nom_diteur
ville
rgion
pays
Type de donnes
char(4)
varchar(40)
varchar(20)
char(2)
varchar(30)
NULL
non
oui
oui
oui
oui
Par dfaut
Check
oui (1)
Cl/index
CP, ordonn.
'USA'
(1)
La contrainte CHECK id_diteur est dfinie comme (id_diteur in ('1389', '0736', '0877', '1622', '1756')
OR id_diteur LIKE '99[0-9][0-9]')
id_diteur
nom_diteur
ville
rgion
pays
0736
0877
1389
1622
1756
9901
9952
9999
Boston
Washington
Bruxelles
Chicago
Lausanne
Munich
New York
Paris
MA
DC
NULL
IL
NULL
NULL
NY
NULL
USA
USA
BE
USA
CH
GER
USA
FR
Cl/index
CP, ordonn., CE diteurs(id_diteur)
Table pub_info
Nom_colonne
pub_id
logo
pr_info
Type de donnes
char(4)
image
text
NULL
non
oui
oui
id_diteur
logo (1)
info_rp (2)
0736
NEWMOON.BMP
Exemple de donnes de type text pour New Moon Books, diteur 0736 dans la base de donnes
pubs. New Moon Books est situ Boston, Massachusetts.
0877
BINNET.BMP
Exemple de donnes de type text pour Binnet & Hardley, diteur 0877 dans la base de donnes
pubs. Binnet & Hardley est situ Washington, D.C.
ALGODATA.BMP
Exemple de donnes de type text pour Algodata Infosystems, diteur 1389 dans la base de donnes
1389
pubs. Algodata Infosystems est situ Bruxelles, Belgique.
5LAKES.BMP
Exemple de donnes de type text pour Five Lakes Publishing, diteur 1622 dans la base de donnes
1622
pubs. Five Lakes Publishing est situ Chicago, Illinois.
1756
RAMONA.BMP
Exemple de donnes de type text pour Ramona diteur, diteur 1756 dans la base de donnes pubs.
Ramona diteur est situ Lausanne, Suisse.
9901
GGGG.BMP
GGG&G est situ Munich, Allemagne.
Exemple de donnes de type text pour GGG&G, diteur 9901 dans la base de donnes pubs.
9952
SCOOTNEY.BMP
Exemple de donnes de type text pour Scootney Books, diteur 9952 dans la base de donnes pubs.
Scootney Books est situ New York City, New York.
9999
LUCERNE.BMP
Exemple de donnes de type text pour ditions Lucerne, diteur 9999 dans la base de donnes pubs.
Les ditions Lucerne sont situes Paris, France.
(1) Les informations prsentes ici NE sont PAS les donnes relles. Il s'agit du nom du fichier d'o provient le bitmap (donnes graphiques).
(2) Le texte prsent ici NE constitue PAS la totalit des donnes. Lors de l'affichage de donnes text, l'affichage est limit un nombre fini de
caractres. Ces informations prsentent les 120 premiers caractres de la colonne de texte.
Page 7 sur 97
Table employ
Tous les employs ont un coefficient actuel (colonne position_employ), compris entre le coefficient
minimum et le coefficient maximum correspondant leur type demploi (niv_min et niv_max dans la
table emplois)
Nom_colonne
id_employ
pn_employ
init_centrale
nom_employ
id_emploi
position_employ
id_diteur
date_embauche
Type de donnes
empid
varchar(20)
char(1)
varchar(30)
smallint
tinyint
char(4)
datetime
NULL
non
non
oui
non
non
non
non
non
1
10
'9952'
GETDATE( )
Cl/index
CP, non ordonn.
Compos, ordonn. (2)
Compos, ordonn. (2)
Compos, ordonn. (2)
CE emplois(id_emploi)
CE diteurs(id_diteur)
Les tableaux suivants prsentent le contenu de la table employ. La premire colonne (id_employ) est rpte dans la
liste du dessous, devant les colonnes 6 8. Elle n'est rpte qu' des fins de lisibilit.
id_employ (#1)
pn_employ (#2)
init_centrale (#3)
nom_employ (#4)
id_emploi (#5)
PMA42628M
PSA89086M
VPA30890F
PHB50241M
L-B31947F
F-C16315M
PTC11962M
A-C71970F
PJD25939M
R-D39728F
AMD15433F
ARD36773F
PHF38899M
PXH22250M
PDI47470M
KFJ64308F
MGK44605M
POK93028M
JYL26161F
M-L67958FMaria
Y-L77953M
LAL21447M
ENL44273F
PCM98509F
R-M53550M
HAN90777M
TPO55093M
SKO22412M
MAP77183M
PSP68661F
M-P91209M
LCQ23061M
LJR92907F
M-R38834F
DWR65030M
A-R89858F
CAS28514M
MMS49649F
CGS88322F
MAS70474F
HAS54740M
MFS52347M
DBT39435M
Paolo
Pedro
Victoria
Patrick
Lesley
Francisco
Philip
Aria
Philippe
Renelde
Ann
Anabela
Peter
Paul
Palle
Karin
Matti
Pirkko
Janine
M
S
P
H
NULL
NULL
T
NULL
J
NULL
M
R
H
X
D
F
G
O
Y
Accorti
Alfonso
Ashworth
Brognon
Brown
Chang
Cramer
Cruz
De Bueger
Depr
Devon
Domingues 8
Franken
Henriot
Ibsen
Josephs
Karttunen
Koskitalo
Labrune
7
Latimer
Lebihan
Lincoln
McKenna
Mendel
Nagy
O'Rourke
Ottlieb
Paolino
Parente
Pereira
Querton
Radoux
Ranc
Roel
Roulet
Santana
Saveley
Schmitt
Smith
Snyder
Sommer
Tonini
13
14
6
9
7
4
2
10
5
8
3
id_employ (#1)
position_employ (#6)
id_diteur (#7)
date_embauche (#8)
PMA42628M
PSA89086M
VPA30890F
PHB50241M
L-B31947F
F-C16315M
35
89
140
170
120
227
0877
1389
0877
0736
0877
9952
08/12/92
12/12/90
09/10/90
08/09/88
02/11/91
11/02/90
NULL
Yoshi
Laurence
Elizabeth
Patricia
Roland
Helvetius
Timothy
Sven
Miguel
Paula
Manuel
Luc
Laurence
Martine
Diego
Annette
Carlos
Mary
Carine
Margaret
Howard
Martn
Daniel
Larsson
NULL
A
N
C
NULL
A
P
A
S
NULL
C
J
W
NULL
A
M
G
A
A
F
B
10
5
7
14
6
10
5
12
5
14
11
11
7
13
5
11
8
8
5
9
9
6
6
5
8
13
9
12
10
11
Page 8 sur 97
215
87
246
35
200
100
75
159
195
100
220
80
172
9952
1389
1756
0877
9952
0877
0877
0877
0736
0736
0736
9999
9901
1389
32
175
35
150
150
120
100
150
112
125
101
198
170
75
192
152
211
175
64
78
100
165
75
11/11/89
10/12/91
03/01/89
09/11/89
07/12/91
01/12/93
05/12/92
08/11/93
05/09/93
10/12/92
05/01/94
11/11/93
05/12/91
03/12/92
1389
0736
0877
9999
0736
9999
0736
1389
1389
1389
9999
1622
9999
0877
1389
9999
9999
0736
1389
1389
0736
0736
0877
06/11/89
06/03/90
07/12/90
08/01/89
09/05/91
03/11/93
06/11/88
04/05/91
12/07/92
01/12/94
01/09/89
10/09/93
03/11/94
02/05/92
12/12/91
02/11/90
04/11/89
06/12/93
07/07/92
09/11/88
11/11/88
04/11/90
01/01/90
Table emplois
A chaque type demploi, correspond un coefficient minimal (niv_min) et un coefficient maximal
(niv_max)
Nom_colonne
id_emploi
desc_emploi
niv_min
niv_max
Type de donnes
smallint
varchar(50)
tinyint
tinyint
NULL
non
non
non
non
id_emploi desc_emploi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
niv_min
niv_max
10
200
175
175
150
140
200
100
75
75
75
25
25
25
10
250
225
250
250
225
Cl/index
CP, ordonn.
175
175
165
150
100
100
100
(1) La contrainte DEFAULT est dfinie comme ("Nouveau poste - pas de dnomination officielle").
(2) La contrainte CHECK niv_min est dfinie comme (niv_min >= 10). (3) La contrainte CHECK niv_max est dfinie comme (niv_max <= 250).
Page 9 sur 97
Table auteurs
Certains auteurs travaillent sous contrat avec leur diteur ( colonne contrat de type bit)
Nom_colonne
id_auteur
nom_auteur
pn_auteur
tlphone
adresse
ville
pays
code_postal
contrat
Type de donnes
id
varchar(40)
varchar(20)
char(12)
varchar(40)
varchar(20)
char(2)
char(5)
bit
NULL
non
non
non
non
oui
oui
oui
oui
non
Par dfaut
Check
oui (1)
Cl/Index
CP, .
Compos, non ordonn (3)
Compos, non ordonn (3)
'INCONNU'
oui (2)
(1) La contrainte CHECK id_auteur est dfinie comme (id_auteur LIKE '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]').
(2) La contrainte CHECK code_postal est dfinie comme (code_postal LIKE '[0-9][0-9][0-9][0-9][0-9]').
(3) L'index compos non ordonn est dfini sur nom_auteur, pn_auteur.
Les tables ci-dessous prsentent le contenu de la table auteurs. La premire colonne (id_auteur) est rpte dans la liste
du dessous, devant les colonnes 5 9. Elle n'est rpte qu' des fins de lisibilit.
id_auteur (#1)
nom_auteur (#2)
pn_auteur (#3)
tlphone (#4)
172-32-1176
213-46-8915
238-95-7766
267-41-2394
274-80-9391
341-22-1782
409-56-7008
427-17-2319
472-27-2349
486-29-1786
527-72-3246
648-92-1872
672-71-3249
712-45-1867
722-51-5454
724-08-9931
724-80-9391
756-30-7391
807-91-6654
846-92-7186
893-72-1158
899-46-2035
998-72-3567
Bourne
Mathieu
Chartier
Mdina
Merrell
Lorense
Bucchia
Logerot
Schildwachter
Vue
Posey
Sorense
De Verne
Vilc
Hall
D'Autricourt
Lacouture
Jalabert
Bec
Letournec
Facq
Chevalier
Chevalier
Stphanie
Charles
Laurent
Marguerite
Patricia
Danielle
Patrice
Philippe
Xavier
Jessica
William
Christophe
Vincent
Benjamin
Catherine
Alain
Gilles
Marc
Arthur
Benot
Jean-Rmy
Anne
Bernard
45.33.08.49
93.11.73.35
38.66.24.53
48.96.77.44
42.27.44.35
02.32.89.34
42.01.84.27
42.24.89.91
47.04.44.77
42.71.09.71
69.15.11.00
56.79.96.29
45.48.12.23
93.30.24.68
54.43.36.78
46.36.37.99
45.04.48.78
45.22.88.91
22.47.87.11
48.54.31.99
56.48.05.44
20.24.54.21
20.24.54.20
id_auteur (#1)
adresse (#5)
ville (#6)
172-32-1176
213-46-8915
238-95-7766
267-41-2394
274-80-9391
341-22-1782
409-56-7008
427-17-2319
472-27-2349
486-29-1786
527-72-3246
648-92-1872
672-71-3249
712-45-1867
722-51-5454
724-08-9931
724-80-9391
756-30-7391
807-91-6654
846-92-7186
893-72-1158
899-46-2035
998-72-3567
4, square Gauguin
18, avenue Arbabi
4, impasse Lamoix
48, passage Sainte Anne
2, place du Gnral Catroux
14, impasse Lacarte
201, boulevard de Clichy
32, rue de l'Amiral Clou
11, rue Buffon
62-64, rue Vieille du Temple
57, avenue des tapis
55 , rue Pierre-Louis Coll
113, rue du Cherche-Midi
18, faubourg Saint Jean
12, rue Astarte
75, rue des Couronnes Paris
20, rue de la Pompe
94, rue de la Condamine
4, chemin de la Tour de Campel
32, rue du Mont Thabor
59, rue Lisleferme
48, rue de Valmy
48, rue de Valmy
Nice
Paris
Bordeaux
Toulouse
Paris
Lige
Bordeaux
Luxembourg
Bruxelles
Chevrette
Zurich
Zurich
Vers-La-Petite
Monte Carlo
Luxembourg
FR
Marseille
Paris
Bruges
Lille
Paris
Genve
Genve
FR
FR
FR
FR
FR
BE
FR
LU
BE
FR
CH
CH
FR
MC
LU
75017
FR
FR
BE
FR
FR
CH
CH
06014
75017
33000
31002
75015
01548
33000
01016
02530
91450
91450
91450
91712
98000
02016
1
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
13016
75020
05006
59000
75018
91712
91712
1
1
1
1
0
1
1
Page 10 sur 97
Table titreauteur
Attention : certains auteurs peuvent tre dcrits dans la table Auteurs sans tre prsents dans la table
titreauteur, sils nont encore rien crit (cas des auteurs sous contrat qui crivent leur premier livre)
Nom_colonne
id_auteur
id_titre
cmd_auteur
droits_pourcent
(1)
(2)
(3)
Type de donnes
id
tid
tinyint
int
NULL
non
non
oui
oui
Cl/index
Compos CP, ordonn., (1) CE auteurs(id_auteur) (2)
Compos CP, ordonn., (1) CE titres(id_titre) (3)
id_auteur
id_titre
cmd_auteur
droits_pourcent
172-32-1176
213-46-8915
213-46-8915
238-95-7766
267-41-2394
274-80-9391
409-56-7008
427-17-2319
486-29-1786
486-29-1786
712-45-1867
722-51-5454
724-80-9391
724-80-9391
756-30-7391
846-92-7186
899-46-2035
899-46-2035
998-72-3567
998-72-3567
PS3333
BU1032
BU2075
PC1035
BU1111
BU7832
BU1032
PC8888
PC9999
PS7777
MC2222
MC3021
BU1111
PS1372
PS1372
PC8888
MC3021
PS2091
PS2091
PS2106
1
2
1
1
2
1
1
1
1
1
1
1
1
2
1
2
2
2
1
1
100
40
100
100
40
100
60
50
100
100
100
75
60
25
75
50
25
50
50
100
Table titres
Certains auteurs peroivent une avance sur recette, pendant lcriture de leur livre ( colonne
avance). Pour chaque titre, on tient jour le nombre douvrages vendus, tous magasins confondus
(colonne cumulannuel_ventes), et la tranche de droit dauteur atteinte par ce livre (colonne droits)
Nom_colonne
id_titre
titre
type
id_diteur
prix
avance
droits
cumulannuel_ventes
notes
datepub
Type de donnes
tid
varchar(80)
char(12)
char(4)
money
money
int
int
varchar(200)
datetime
NULL
non
non
non
oui
oui
oui
oui
oui
oui
non
Cl/index
CP, ordonn.
Non ordonn.
UNDECIDED'
CE diteurs(id_diteur)
GETDATE( )
Les tableaux ci-aprs prsentent le contenu de la table titres. La premire colonne (id_titre) est rpte dans les listes du
dessous, d'abord devant les colonnes 5 8, ensuite devant les colonnes 9 et 10. Elle n'est rpte qu' des fins de lisibilit.
id_titre (#1)
BU1032
BU1111
BU2075
BU7832
MC2222
MC3021
MC3026
PC1035
PC8888
PC9999
PS1372
PS2091
PS2106
titre (#2) t
Guide des bases de donnes du gestionnaire press
La cuisine - l'ordinateur : bilans clandestins
Le stress en informatique n'est pas une fatalit!
Toute la vrit sur les ordinateurs
Les festins de Parly 2
Les micro-ondes par gourmandise
La psychologie des ordinateurs de cuisine
Est-ce vraiment convivial?
Les secrets de la Silicon Valley
Guide des bonnes manires sur un rseau
Phobie et passion informatique : ventail de comportements
La colre : notre ennemie?
Vivre sans crainte
type (#3)
gestion
gestion
gestion
gestion
cui_moderne
cui_moderne
SANS TITRE
informatique
informatique
informatique
psychologie
psychologie
psychologie
id_diteur (#4)
1389
1389
0736
1389
0877
0877
0877
1389
1389
1389
0877
0736
0736
prix (#5)
140,00
82,00
24,00
136,00
136,00
21,00
NULL
156,00
136,00
NULL
147,00
76,00
49,00
Page 11 sur 97
PS3333
PS7777
id_titre (#1)
BU1032
BU1111
BU2075
BU7832
MC2222
MC3021
MC3026
PC1035
PC8888
PC9999
PS1372
PS2091
PS2106
PS3333
PS7777
avance (#6)
35.000
34.000
69.000
34.000
0.00
102.000
NULL
48.000
54.000
NULL
48.000
15.000
41.000
14.000
27.000
droits (#7)
10
10
24
10
12
24
NULL
16
10
NULL
10
12
10
10
10
0736
0736
136,00
54,00
cumulannuel_ventes (#8)
4095
3876
18722
4095
2032
22246
NULL
8780
4095
NULL
375
2045
111
4072
3336
id_titre (#1)
notes (#9)
datepub (#10)
BU1032
Vue d'ensemble illustre des systmes de gestion de base de donnes disponibles sur le march. L'accent est mis sur les
applications de gestion courantes.
06/12/85
BU1111
Conseils utiles vous permettant de tirer le meilleur parti possible de vos ressources informatiques.
06/09/85
BU2075
Expos des techniques mdicales et psychologiques les plus rcentes permettant de survivre dans le bureau lectronique.
Explications claires et dtailles.
06/12/85
BU7832
Analyse commente des possibilits offertes par les ordinateurs : un guide impartial pour l'utilisateur critique.
06/12/85
MC2222
Recueil de recettes rapides, faciles et lgantes, testes et gotes par des gens qui n'ont jamais le temps de manger. Aide
prcieuse pour le cuisinier occasionnel.
06/09/85
MC3021 Adaptation de recettes traditionnelles des provinces franaises - la cuisine au micro-ondes.
06/09/85
MC3026 NULL
17/05/96
PC1035 Etude comparative des progiciels les plus rpandus. S'adressant aux utilisateurs dbutants, cet ouvrage tablit un palmars des
06/12/85
logiciels en fonction de leur convivialit.
PC8888 Deux femmes courageuses dvoilent tous les scandales qui jonchent l'irrsistible ascension des pionniers de l'informatique. Matriel et
logiciel : personne n'est pargn.
06/12/85
PC9999 La bible des dbutants dans un environnement rseau.
17/05/96
PS1372
Lecture indispensable pour le spcialiste : cet ouvrage tudie les diffrences entre ceux qui dtestent et craignent les ordinateurs et
10/11/85
ceux qui les trouvent patants.
PS2091
Etude approfondie des consquences somatiques des motions fortes. De nombreux schmas du mtabolisme illustrent l'expos et en
06/11/85
facilitent la comprhension.
PS2106
Comment amortir le choc des interactions quotidiennes par la gymnastique, la mditation et la dittique (nombreux exemples de
menus). Bandes vido sur commande pour les exercices physiques.
10/05/85
PS3333
Que se passe-t-il quand les donnes viennent manquer? Analyse scientique des effets du manque d'information sur les grands
06/12/85
consommateurs.
PS7777
Comment se protger contre le stress exagr du monde moderne. Parmi les remdes proposs : utilisation de l'ordinateur et
alimentation judicieusement choisie.
06/12/85
Table droits_prvus
Les auteurs peroivent des droits croissants sur leurs livres, en fonction de la quantit vendue : les
droits sont exprims en pourcentage (colonne droits), pour chaque tranche de livres vendus (nombre
de livres entre minimum et maximum). Exemple : Si lon vend 3500 livres "BU1035", son auteur
percevra 10% sur les 2000 premiers livres, 12% du livre 2001 au 3000, 14% du 3001 au 3500.
Nom_colonne
id_titre
minimum
maximum
droits
Type de donnes
idt
int
int
int
NULL
non
oui
oui
oui
Cl/index
CE titres(id_titre)
Page 12 sur 97
id_titre
BU1032
BU1032
PC1035
PC1035
PC1035
PC1035
PC1035
BU2075
BU2075
BU2075
BU2075
BU2075
BU2075
BU2075
BU2075
PS2091
PS2091
PS2091
PS2091
PS2106
PS2106
PS2106
PS2106
MC3021
MC3021
MC3021
MC3021
MC3021
MC3021
MC3021
MC3021
PC8888
PC8888
PC8888
PC8888
PS7777
PS7777
PS3333
PS3333
PS3333
PS3333
BU1111
BU1111
BU1111
BU1111
BU1111
BU1111
BU1111
BU1111
MC2222
MC2222
MC2222
MC2222
MC2222
MC2222
BU7832
BU7832
BU7832
BU7832
BU7832
BU7832
BU7832
BU7832
PS1372
PS1372
PS1372
PS1372
PS1372
0
5001
0
2001
3001
4001
10001
0
1001
3001
5001
7001
10001
12001
14001
0
1001
5001
10001
0
2001
5001
10001
0
1001
2001
4001
6001
8001
10001
12001
0
5001
10001
15001
0
5001
0
5001
10001
15001
0
4001
8001
12001
16001
20001
24001
28001
0
2001
4001
8001
12001
20001
0
5001
10001
15001
20001
25001
30001
35001
0
10001
20001
30001
40001
5000
50000
2000
3000
4000
10000
50000
1000
3000
5000
7000
10000
12000
14000
50000
1000
5000
10000
50000
2000
5000
10000
50000
1000
2000
4000
6000
8000
10000
12000
50000
5000
10000
15000
50000
5000
50000
5000
10000
15000
50000
4000
8000
10000
16000
20000
24000
28000
50000
2000
4000
8000
12000
20000
50000
5000
10000
15000
20000
25000
30000
35000
50000
10000
20000
30000
40000
50000
10
12
10
12
14
16
18
10
12
14
16
18
20
22
24
10
12
14
16
10
12
14
16
10
12
14
16
18
20
22
24
10
12
14
16
10
12
10
12
14
16
10
12
14
16
18
20
22
24
10
12
14
16
18
20
10
12
14
16
18
20
22
24
10
12
14
16
18
Table ventes
Les magasins envoient des commandes aux diteurs. Chaque commande porte sur un ou plusieurs
livres. Chaque magasin possde ses propres conventions de numrotation des commandes. Pour
dcrire une ligne de commande de faon unique, il faut donc connatre : le magasin qui la mise
(colonne id_mag), le numro de commande (num_cmd), le titre du livre command (id_titre). La
table Ventes possde donc une cl primaire compose, constitue de ces trois colonnes.
Page 13 sur 97
Nom_colonne
id_mag
num_cmd
date_cmd
qt
modepaiements
id_titre
NULL
non
non
non
non
non
non
Type de donnes
char(4)
varchar(20)
datetime
smallint
varchar(12)
idt
Cl/index
Compos CP, ordonn. (1) , CE magasins(id_mag)
Compos CP, ordonn. (1)
(1) L'index compos, cl primaire, ordonn est dfini sur id_mag, num_cmd, id_titre.
id_mag
63
6380
7066
7066
7067
7131
7131
7131
7131
7131
7131
7896
7896
7896
8042
8042
8042
8042
num_cmd
date_cmd
qt
modepaiements
id_titre
722a
A2976
QA7442.3
D4482
N914008
N914014
P3087a
P3087a
P3087a
P3087a
QQ2299
TQ456
X999
423LL922
423LL930
P723
QA879.1
09/11/94
05/12/93
09/12/94
09/12/94
09/12/94
09/12/94
05/12/93
05/12/93
05/12/93
05/12/93
10/12/93
12/12/93
02/11/93
09/12/94
09/12/94
03/11/93
05/11/93
3
50
75
10
20
25
20
25
15
25
15
10
35
15
10
25
30
Net 60
Net 30
Comptant
Net 60
Net 30
Net 30
Net 60
Net 60
Net 60
Net 60
Net 60
Net 60
Comptant
Comptant
Comptant
Net 30
Net 30
PS2091
PC8888
PS2091
PS2091
PS2091
MC3021
PS1372
PS2106
PS3333
PS7777
BU7832
MC2222
BU2075
MC3021
BU1032
BU1111
PC1035
Table magasins
Nom_colonne
id_mag
nom_mag
adresse_mag
ville
pays
code_postal
id_mag
6380
7066
7067
7131
7896
8042
Type de donnes
char(4)
varchar(40)
varchar(40)
varchar(20)
char(2)
char(5)
NULL
non
oui
oui
oui
oui
oui
nom_mag
Eric the Read Books
Librairie spcialise
Moissons livresques
Doc-U-Mat: Quality Laundry and Books
Fricative Bookshop
Bookbeat
Cl/index
CP, ordonn.
adresse_mag
788 Catamaugus Ave.
567, Av. de la Victoire
577, Boulevard Anspach.
24-A Avrogado Way
89 Madison St.
679 Carson St.
ville
Seattle
Paris
Bruxelles
Remulade
Fremont
Portland
pays
WA
FR
BE
WA
CA
OR
code_postal
98056
75016
1000
98014
90019
89076
Table remises
Les diteurs consentent trois types de remises : des remises client certains magasins privilgis
(rfrencs par la colonne id_mag) ; des remises en volume , en fonction de la quantit
commande (entre qtmin et qtmax) ; une remise initiale (type FNAC) tous les magasins du
groupe.
Nom_colonne
typeremise
id_mag
qtmin
qtmax
remise
Type de donnes
varchar(40)
char(4)
smallint
smallint
decimal
NULL
non
oui
oui
oui
non
typeremise
Remise initiale
Remise Volume
Remise client
id_mag
NULL
NULL
8042
qtmax
NULL
1000
NULL
remise
10.5
6.7
5.0
qtmin
NULL
100
NULL
Cl/index
CE magasins(id_mag)
Page 14 sur 97
L'instruction SELECT spcifie les colonnes que vous voulez rcuprer. La clause FROM
spcifie les tables dans lesquelles se trouvent les colonnes. La clause WHERE spcifie les
lignes que vous voulez visualiser dans les tables. Syntaxe simplifie de l'instruction
SELECT :
SELECT liste_de_slection
FROM liste_de_tables
WHERE critres_de_slection
Par exemple, l'instruction SELECT suivante extrait les nom et prnom des crivains de la
table auteurs vivant Paris.
SELECT pn_auteur, nom_auteur
FROM auteurs
WHERE ville = 'Paris'
pn_auteur
--------Charles
Patricia
Alain
Marc
Jean-Rmy
nom_auteur
-------------Mathieu
Merrell
D'Autricourt
Jalabert
Facq
Rsultat attendu
nom_diteur
ville
---------------------------------------- -------------------New Moon Books
Boston
Binnet & Hardley
Washington
Algodata Infosystems
Bruxelles
Five Lakes Publishing
Chicago
Ramona, diteur
Lausanne
GGG&G
Munich
Scootney Books
New york
Editions Lucerne
Paris
rgion
-----MA
DC
NULL
IL
NULL
NULL
NY
NULL
(8 ligne(s) affecte(s))
Page 15 sur 97
Les clauses d'une instruction SELECT doivent tre utilises dans l'ordre dcrit ci-dessus. (Par
exemple, si l'instruction comprend une clause GROUP BY et une clause ORDER BY, la clause
GROUP BY prcde la clause ORDER BY).
Le nom des objets de la base de donnes doit tre dtermin si le choix d'un objet est ambigu :
vous pouvez alors prciser le nom de la base de donnes, du propritaire, de la table, en les
sparant par des points :
base_de_donnes.propritaire.nom_de_table.nom_de_colonne
Par exemple, si l'utilisateur suzanne possde la table auteurs dans la base de donnes pubs,
l'identificateur unique de la colonne ville dans cette table est:
pubs.suzanne.auteurs.ville
Vous pouvez demander un tri en fonction du nom de colonne ou de la position de colonne dans
la liste de slection. Les deux requtes suivantes sont quivalentes:
SELECT pn_auteur, nom_auteur
FROM auteurs
ORDER BY nom_auteur
ORDER BY 2
Pour plus d'informations sur SELECT, consultez l'instruction SELECT dans le Manuel de
rfrence Transact-SQL (choisissez Select Examples (T-SQL) )
Page 16 sur 97
Afficher le nom, le prnom, et la date dembauche des employs embauchs en 1990, dont le nom
commence par L, et la position est comprise entre 10 et 100 ( LIKE sur le champ date).
Rsultat attendu
nom_employ
pn_employ
date_embauche
position_employ
---------------------- -------------------- ---------------------------------------------------- ---------------Lincoln
Elizabeth
1990-12-07 00:00:00.000
35
(1 ligne(s) affecte(s))
Exercice 3 : ORDER BY
Afficher le nom et la date dembauche des employs, classs par leur identificateur dditeur, puis
par leur nom de famille (sous-critre)
Rsultat attendu
nom_employ
date_embauche
------------------------------ -----------------------------------------------------Brognon
1988-09-08 00:00:00.000
Ibsen
1993-09-05 00:00:00.000
.
Radoux
1994-11-03 00:00:00.000
Roulet
1990-11-02 00:00:00.000
Santana
1989-11-04 00:00:00.000
(43 ligne(s) affecte(s))
Page 17 sur 97
Expressions et fonctions
Les 4 oprateurs arithmtiques de base peuvent tre utiliss dans les clauses SELECT, WHERE
et ORDER pour affiner les recherches partout o il est possible d'utiliser une valeur d'attribut :
Livres qui reoivent une avance sur vente suprieure 500 fois leur prix :
SELECT titre, prix, avance
FROM titres
WHERE avance > = 500 * prix
Suivant les systmes la gamme des oprateurs et des fonctions utilisables peut tre trs volue :
elle comporte toujours des fonctions de traitement de chanes de caractres, des oprateurs sur
les dates, etc...
Cet exemple dtermine la diffrence en jours entre la date courante et la date de publication :
SELECT newdate = DATEDIFF(day, datepub, getdate())
FROM titres
Page 18 sur 97
La clause GROUP BY est employe dans les instructions SELECT pour diviser une table en
groupes. Vous pouvez regrouper vos donnes par nom de colonne ou en fonction des rsultats des
colonnes calcules lorsque vous utilisez des donnes numriques. L'instruction suivante calcule
l'avance moyenne et la somme des ventes annuelles cumules pour chaque type de livre:
----------24278
19566
30788
12875
9939
(null)
Les fonctions de groupe (ou dagrgation ) effectuent un calcul sur l'ensemble des valeurs
d'un attribut d'un groupe de tuples. Un groupe est un sous ensemble des tuples d'une table tel que
la valeur d'un attribut y reste constante ; un groupe est spcifi au moyen de la clause GROUP
BY suivi du nom de l'attribut l'origine du groupement. En l'absence de cette clause tous les
tuples slectionns forment le groupe.
Ces fonctions imposent la spcification de l'attribut en tant qu'argument. Si cet argument est
prcd du mot cl DISTINCT les rptitions sont limines. D'autre part, les valeurs
indtermines (= NULL) ne sont pas prises en compte.
La clause HAVING est quivalente WHERE mais elle se rapporte aux groupes. Elle porte en
gnral sur la valeur dune fonction de groupe : seuls les groupes rpondant au critre spcifi
par HAVING feront parti du rsultat.
Regrouper les titres en fonction du type, en liminant les groupes qui contienne un seul livre
SELECT type
FROM titres
GROUP BY type
HAVING COUNT(*) > 1
type
-----------cui_moderne
cui_traditio
gestion
SQL -AFPA Vnissieux
Page 19 sur 97
informatique
psychologie
Regrouper les titres en fonction du type, en se limitant aux types qui dbutent pas par la lettre c
SELECT type
FROM titres
GROUP BY type
HAVING type LIKE 'c%'
type
-----------cui_moderne
cui_traditio
Regrouper les titres en fonction du type par diteur, en incluant seulement les diteurs dont le
numro d'identification est suprieur 0800 et qui ont consenti des avances pour un total suprieur
90 000 FF, et qui vendent des livres pour un prix moyen infrieur 150 FF:
SELECT id_diteur, SUM(avance), AVG(prix)
FROM titres
GROUP BY id_diteur
HAVING SUM(avance) > 90000
AND AVG(prix) < 150
AND id_diteur > '0800'
Mme exemple, en liminant les titres dont le prix est infrieur 60 FF, et en triant les rsultats en
fonction des numros d'identification des diteurs:
SELECT id_diteur, SUM(avance), AVG(prix)
FROM titres
WHERE prix >= 60
GROUP BY id_diteur
HAVING SUM(avance) > 90000
AND AVG(prix) < 150
AND id_diteur > '0800'
ORDER BY id_diteur
Page 20 sur 97
droits_maxi
----------12
24
24
24
24
18
16
18
16
16
16
12
La clause COMPUTE est employe dans des instructions SELECT avec des fonctions
d'agrgation ligne SUM, AVG, MIN, MAX et COUNT pour gnrer des valeurs
statistiques partir de valeurs contenues dans des groupes de lignes.
Ces valeurs statistiques apparaissent sous forme de lignes supplmentaires dans les rsultats de
la requte, ce qui vous permet de visualiser les lignes dtail et les lignes de statistiques dans un
seul ensemble de rsultats..
Page 21 sur 97
prix
-------------------------21.00
136.00
sum
==========================
157.00
Exercice 8 : COMPUTE
Pour chaque niveau de droits, afficher les identificateurs des livres correspondant, le min et la max
de ventes donnant droit ce niveau (infos de dtails), et le nombre de livres dans le niveau
(rcapitulatif)- Utilisation de la table droits_prvus.
Rsultat attendu
droits
id_titre minimum maximum
----------- -------- ----------- ----------10
BU1032
0
5000
10
PC1035
0
2000
10
BU2075
0
1000
10
PS2091
0
1000
10
PS2106
0
2000
10
MC3021
0
1000
10
PC8888
0
5000
10
PS7777
0
5000
10
PS3333
0
5000
10
BU1111
0
4000
10
BU7832
0
5000
10
PS1372
0
10000
cnt
===========
12
droits
id_titre minimum maximum
----------- -------- ----------- ----------12
PS1372
10001
20000
12
BU7832
5001
10000
12
BU1111
4001
8000
..
12
BU1032
5001
50000
cnt
===========
12
etc
(70 ligne(s) affecte(s))
Page 22 sur 97
Afficher les noms dauteurs, leur pays et leur ville en les classant par ville (infos de dtail), et le
nombre dauteurs par pays (rcapitulatif)
Rsultat attendu
nom_auteur
ville
pays
---------------------------------------- ----------------- ---Bec
Bruges
BE
Schildwachter
Bruxelles
BE
Lorense
Lige
BE
cnt
===========
3
nom_auteur
ville
pays
---------------------------------------- ---------------- ---Chevalier
Genve
CH
Chevalier
Genve
CH
Posey
Zurich
CH
Sorense
Zurich
CH
cnt
===========
4
nom_auteur
ville
pays
---------------------------------------- --------------- ---Bucchia
Bordeaux
FR
Chartier
Bordeaux
FR
Mdina
Toulouse
FR
De Verne
Vers-La-Petite
FR
cnt
===========
13
etc .
(28 ligne(s) affecte(s))
Page 23 sur 97
Les oprations de jointure permettent d'extraire des donnes partir de plusieurs tables ou vues
dans la mme base de donnes ou dans des bases diffrentes en n'effectuant qu'une seule
opration. Joindre deux ou plusieurs tables revient comparer les donnes de colonnes
spcifiques, et ensuite utiliser les lignes slectionnes dans les rsultats de cette comparaison
pour crer une nouvelle table.
Une instruction de jointure:
spcifie une colonne dans chaque table ;
compare les valeurs de ces colonnes ligne par ligne ;
forme de nouvelles lignes en combinant les lignes qui contiennent les valeurs retenues dans la
comparaison.
Exemple de jointure : nom des auteurs et des diteurs vivant dans la mme ville :
SELECT pn_auteur, nom_auteur, nom_diteur
FROM auteurs, diteurs
WHERE auteurs.ville = diteurs.ville
pn_auteur
nom_auteur
nom_diteur
------------ ------------------ ------------------Xavier
Schildwachter
Algodata Infosystems
Alain
D'Autricourt
Editions Lucerne
Charles
Mathieu
Editions Lucerne
Jean-Rmy
Facq
Editions Lucerne
Marc
Jalabert
Editions Lucerne
Patricia
Merrell
Editions Lucerne
prix
------------140.0000
24.0000
136.0000
147.0000
(4 ligne(s) affecte(s))
Page 24 sur 97
sum
===========
70
etc
nom_auteur
Qvendue
--------------------------------- ----------Chartier
30
Chevalier
281
Hall
40
Jalabert
20
Lacouture
45
Letournec
50
Logerot
50
Mathieu
50
Mdina
25
Vue
25
(10 ligne(s) affecte(s))
Page 25 sur 97
Les sous-requtes
Une sous-requte est une instruction SELECT imbrique l'intrieur d'une instruction SELECT,
INSERT, UPDATE ou DELETE, ou d'une autre sous-requte : une sous-requte peut porter sur
la mme table que la requte externe ou sur une autre table.
Dans Transact-SQL, une sous-requte qui renvoie une seule valeur peut s'employer dans toutes
les circonstances o une expression est autorise.
Les instructions SELECT qui incluent au moins une sous-requte sont parfois appeles requtes
imbriques ou instructions SELECT imbriques. Le fait d'imbriquer une instruction SELECT
l'intrieur d'une autre explique la prsence du mot structur dans l'expression langage
d'interrogation structur (SQL, Structured Query Language).
Une sous-requte imbrique dans une instruction SELECT externe prsente la syntaxe suivante:
L'instruction SELECT d'une sous-requte se place toujours entre parenthses. Elle ne peut pas
contenir de clause ORDER BY ou COMPUTE.
Une sous-requte peut s'imbriquer dans une clause WHERE, ou HAVING d'une instruction
externe SELECT, INSERT, UPDATE ou DELETE, ou dans une autre sous-requte. Le niveau
d'imbrication n'est pas limit.
A noter le cas particulier des requtes imbriques places aprs le SELECT, qui permettent
dafficher une colonne calcule (Cf. Exercice 14).
Il existe deux catgories de sous-requtes : les sous-requtes qui renvoient une et une seule
valeur directement manipulable par des oprateurs de comparaison, et les requtes ensemblistes
qui renvoient des listes manipulables par les oprateurs ensemblistes IN, ANY , ALL, EXISTS
Page 26 sur 97
prix
------------136,00
136,00
136,00
136,00
En substituant la constante 136, la requte qui calcule ce prix, on obtient la solution avec sousrequte :
SELECT titre, prix
FROM titres
WHERE prix = (SELECT prix FROM titres
WHERE titre = 'Toute la vrit sur les ordinateurs')
Avec la mme dmarche de construction progressive, on peut rpondre des questions plus
complexes : dans tous les cas, il faut reprer dans la question, la proposition principale qui fournit
la requte principale et les propositions subordonnes qui fournissent les critres de choix ; chaque
subordonne devient une requte imbrique qu'il faudra d'abord tester indpendamment, sur un cas
particulier.
Exemple : Afficher les titres des livres dont le prix est suprieur ou gal au tiers du prix maximum,
et infrieur ou gal la moyenne des prix.
-- 1) trouver le prix maximum
SELECT max(prix)
FROM titres
-=> 156.00
-- 2) trouver la moyenne des prix
SELECT avg(prix)
FROM titres
--
=> 99.4
SELECT titre
FROM
titres
WHERE (prix >= 156.0/3)
and (prix <= 99.4)
-- 4) Rcrire la requte principale en substituant les requtes imbriques aux 2 constantes
SELECT titre
FROM
titres
WHERE prix >= (SELECT max(prix)
FROM titres ) /3
and
prix <= (SELECT avg(prix)
FROM titres )
Sous-requtes ensemblistes
Page 27 sur 97
Utilisation de IN et EXISTS pour tester lappartenance dun nuple une liste construite par une
requte imbrique
Exemple : Afficher les noms et les prnoms des auteurs qui ont crit au moins un livre (donc qui
figurent dans la table titreauteur)
Avec loprateur IN :
Dans ce cas particulier, le problme est rductible une requte simple, sans sous-requte :
Sous-requtes oprant sur des listes, introduites par un oprateur de comparaison modifi par
ANY ou ALL :
Exemple 1 : Afficher les noms et les prnoms des auteurs dont tous les livres ont un prix de 136 F
Page 28 sur 97
Lorsquune requte imbrique ne renvoie rien, toutes les expressions avec loprateur ALL
sont vraies : on peut tout dire de lensemble vide. La requte ci-dessus trouve donc les
auteurs recherchs, dont tous les livres valent 136 F, mais aussi les auteurs qui nont pas
encore publi de livres (et ne figurent donc pas dans la table titreauteur)
Pour sassurer du bon fonctionnement de loprateur ALL, il faut toujours doubler la sous-requte
avec ALL dune sous-requte dexistence :
SELECT
FROM
WHERE
and
nom_auteur, pn_auteur
auteurs au
id_auteur IN (SELECT id_auteur FROM titreauteur)
136 = ALL ( SELECT prix
FROM
titres t, titreauteur ta
WHERE t.id_titre = ta.id_titre
AND
au.id_auteur = ta.id_auteur)
ORDER BY nom_auteur, pn_auteur
Exemple 2 : Afficher les noms et les prnoms des auteurs dont au moins un livre a un prix de 136F
Page 29 sur 97
Page 30 sur 97
Exercice 15 bis :
Afficher le nom et lidentificateur des diteurs qui ditent de la gestion et pas dinformatique
Rsultat attendu
nom_diteur
id_diteur
---------------------------------------- ---------New Moon Books
0736
(1 ligne(s) affecte(s))
Exercice 15 ter :
FACULTATIF
Afficher le nom et lidentificateur des diteurs qui ne font pas davance ( = null) sur leurs livres
Rsultat attendu
nom_diteur
id_diteur
---------------------------------------- ---------Binnet & Hardley
0877
Algodata Infosystems
1389
(2 ligne(s) affecte(s))
Page 31 sur 97
fixer les critres de recherche par HAVING sur les groupes et par WHERE sur des
valeurs individuelles,
pour utiliser une fonction sur les groupes dans un WHERE ou s'il faut utiliser une
valeur d'attribut d'une autre table utiliser une requte imbrique,
pour fusionner les rsultats de deux clauses SELECT utiliser l'oprateur UNION,
une jointure est indispensable pour traduire une requte o il s'agit de visualiser des
informations manant de plusieurs tables.
lorsqu'il faut extraire des informations d'une table et qu'une autre table est ncessaire pour
conditionner la slection des tuples de la premire une requte imbrique s'impose.
Page 32 sur 97
Dans SQL Server, vous pouvez ajouter ou modifier des donnes au moyen des instructions de
modification de donnes INSERT, DELETE, et UPDATE
Vous pouvez modifier des donnes dans une seule table par instruction. Transact-SQL vous
permet de baser vos modifications sur des donnes contenues dans d'autres tables, mme celles
d'autres bases de donnes.
Le mot-cl VALUES est utilis pour spcifier les valeurs de certaines ou de toutes les colonnes
dans une nouvelle ligne :
INSERT nom_de_table
VALUES (constante1, constante2, ...)
INSERT titres
VALUES ('BU2222', 'Plus vite!', 'gestion', '1389',
NULL, NULL, NULL, NULL, 'ok', '14/06/95')
Ajout de certaines colonnes : les colonnes ignores doivent tre dfinies pour permettre des
valeurs NULL. Si vous sautez une colonne avec la contrainte DEFAULT, sa valeur par dfaut
est utilise.
Vous pouvez galement utiliser une instruction SELECT dans une instruction INSERT pour
insrer des valeurs slectionnes dans une ou plusieurs autres tables ou vues. Voici la syntaxe
simplifie :
INSERT nom_de_table
SELECT liste_de_colonne
FROM liste_de_table
WHERE critres_de_slection
INSERT diteurs
SELECT '9980', 'test', ville, rgion, pays
FROM diteurs
WHERE nom_diteur = 'New Moon Books'
Nouveau contenu de la table :
id_diteur
-----0736
nom_diteur
ville
rgion
pays
--------------------------------- ----New Moon Books
Boston
MA
USA
Page 33 sur 97
Washington
Bruxelles
Chicago
Lausanne
Munich
New York
Boston
Paris
DC
IL
CH
(null)
NY
MA
(null)
USA
BE
USA
GER
USA
USA
FR
Insertion de donnes provenant dune autre table, colonnes dans le mme ordre :
INSERT auteurs
SELECT *
FROM nouveaux_auteurs
Insertion de donnes provenant dune autre table, colonnes dans un autre ordre : la table auteurs
contient les colonnes id_auteur, pn_auteur, nom_auteur et adresse, la table nouveaux_auteurs
contient les colonnes id_auteur, adresse, pn_auteur et nom_auteur .
Exercice 16 :
Rentrer vos noms, prnoms, dans la table auteurs, avec un identificateur qui nexiste pas dj.
Tous les champs obligatoires (non NULL) doivent tre renseigns, sauf ceux qui possdent une
valeur par dfaut (tlphone). Rafficher la table. Relancer la mme requte et interprter le
message derreur.
Exercice 17 :
Recopier toutes les caractristiques dun auteur en lui donnant un nouvel identificateur, et un
nouveau nom.
Arthur Bec dcide par exemple de modifier son nom en Roland Perceval. Voici comment
modifier sa ligne dans la table auteurs :
UPDATE auteurs
SET nom_auteur = 'Perceval', pn_auteur = 'Roland'
WHERE nom_auteur = 'Bec'
Mise jour de la colonne cumulannuel_ventes de la table titres, avec la somme des ventes les
plus rcentes enregistres dans la table ventes :
UPDATE titres
SET cumulannuel_ventes = cumulannuel_ventes +
(SELECT SUM(qt) FROM ventes
WHERE ventes.id_titre = titres.id_titre
AND ventes.date_cmd IN (SELECT MAX(date_cmd) FROM ventes))
Page 34 sur 97
Exercice 18 :
Augmenter de 10% tous les prix des livres de lditeur Algodata Infosystems. Vrifier
lopration par une commande Select adquate, avant et aprs laugmentation.
Supposons qu'une opration complexe dbouche sur l'acquisition de tous les auteurs de
Bruxelles et de leurs ouvrages par un autre diteur. Vous devez immdiatement supprimer tous
ces ouvrages de la table titres, mais vous ne connaissez pas leur titre ni leur numro
d'identification. La seule information dont vous disposez concerne le nom de la ville o rsident
ces auteurs.
Vous pouvez effacer les lignes dans la table titres en retrouvant les numros d'identification des
auteurs pour les lignes qui ont Bruxelles comme ville dans la table auteurs, et en utilisant ensuite
ces numros pour trouver les numros d'identification des ouvrages dans la table titreauteur. En
d'autres termes, une triple jointure est requise pour trouver les lignes que vous souhaitez effacer
dans la table titres.
Les trois tables sont donc comprises dans la clause FROM de l'instruction DELETE. Toutefois,
seules les lignes dans la table titres qui rpondent aux conditions de la clause WHERE sont
effaces. Vous devez effectuer des effacements spars pour supprimer les lignes pertinentes
dans les autres tables que la table titres.
DELETE titres
FROM auteurs, titres, titreauteur
WHERE titres.id_titre = titreauteur.id_titre
AND auteurs.id_auteur = titreauteur.id_auteur
AND ville = 'Bruxelles'
Exercice 19 :
Dtruire les lignes cres dans la table auteur, dans les exercices 16 et 17, afin de remettre la table
dans son tat initial.
Page 35 sur 97
3.1 Introduction
Exemple : la base de donnes Compagnie arienne que lon crera sous SQL Server dans la
suite de ce cours :
Page 36 sur 97
TypeAvion
: type davion : A320, B707 (Cl trangre vers la colonne TypeAvion de la table
TYPE, alphanumrique)
BaseAeroport : identificateur de laroport o est bas lavion (cl trangre vers la colonne
TypeAvion
A320
B707
A320
DC10
B747
A320
ATR42
B727
B727
A340
BaseAeroport
NIC
CDG
BLA
BLA
ORL
GRE
CDG
LYS
NAN
BAS
Tous les avions de mme type ont des caractristiques communes : tous les A320 possdent le mme
nombre de places et sont contruits par AirBus . Pour ne pas introduire de redondance dans notre
base, il faut donc crer une table TYPE pour stocker le nombre de places et le nom du constructeur.
Capacit
IdConstructeur
TypeAvion
A320
A340
ATR42
B707
B727
B747
DC10
Capacite
300
350
50
250
300
400
200
idConstructeur
1
1
1
2
2
2
4
Les noms des constructeurs doivent tre connus avant de renseigner les types davion : il faut les
stocker dans une table indpendante CONSTRUCTEUR , pour pouvoir les prsenter lutilisateur
dans une liste droulante. Par ailleurs, cette solution conomise de la place dans la base de donnes
(N entiers au lieu de N fois 50 caractres)
Page 37 sur 97
NomConstructeur
IdConstructeur
1
2
3
4
NomConstructeur
Arospatiale
Boeing
Cessna
Douglas
Tous les avions sont bass dans un aroport. Les vols effectus par la compagnie arienne vont dun
aroport de dpart un aroport darrive. La table AEROPORT doit regrouper toutes les
caractristiques qui concernent directement laroport : identificateur, nom, ville desservie
NomAeroport
NomVilleDesservie
IdAeroport
BAS
BLA
BRI
CDG
GRE
LYS
NAN
NIC
ORL
NomAeroport
Poretta
Blagnac
Brive
Roissy
Saint Geoir
Saint exupry
Saint Herblain
Nice cote d'azur
Orly
NomVilleDesservie
Bastia
Toulouse
Brive
Paris
Grenoble
Lyon
Nantes
Nice
Paris
Un vol, dcrit par un numro de vol unique, relie un aroport de dpart un aroport darrive, en
partant une heure donne et en arrivant une heure donne.
Le mme vol est propos par la compagnie arienne des dates diffrentes, avec des moyens (pilote
et avion) ventuellement diffrents : ne pas confondre la table VOL qui dcrit les caractristiques
gnrales du vol, avec la table AFFECTATION qui dcrit les moyens mis en uvre pour un VOL
propos une date donne.
VOL (NumVol, AeroportDept, Hdpart, AeroportArr, HArrive)
NumVol
AeroportDept
Hdpart
AeroportArr
Page 38 sur 97
AeroportDept
NIC
ORL
CDG
GRE
BLA
LYS
BAS
NIC
BRI
NIC
ORL
NIC
Hdpart
7:00
11:00
12:00
9:00
17:00
6:00
10:00
7:00
19:00
18:00
15:00
17:00
AeroportArr
CDG
BLA
NIC
BLA
GRE
ORL
ORL
BRI
ORL
ORL
NIC
NAN
HArrive
9:00
12:00
14:00
11:00
19:00
7:00
13:00
8:00
20:00
19:00
16:00
19:00
Pour connatre une desserte de faon unique, il faut connatre le numro de vol et la date : la
table AFFECTATION aura donc une cl primaire compose , constitue par la concatnation des
colonnes NumVol et DateVol.
AFFECTATION (NumVol, DateVol, NumAvion, IdPilote)
NumVol
DateVol
NumAvion
IdPilote
NumVol
IT100
IT100
IT101
IT101
IT102
IT102
IT103
IT103
IT104
IT104
IT105
IT105
IT106
IT106
IT107
IT107
IT108
IT108
IT109
IT109
IT110
DateVol
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
7 avril 2001
6 avril 2001
NumAvion
100
101
100
103
101
102
105
104
105
107
107
106
109
104
106
103
106
106
107
105
102
IdPilote
1
2
2
4
1
3
3
2
3
8
7
7
8
5
9
8
9
5
7
1
2
Page 39 sur 97
7 avril 2001
6 avril 2001
7 avril 2001
104
101
100
3
4
8
Les lments dune colonne appartiennent tous au mme ensemble appel domaine
Une cl qui fait rfrence la cl primaire dune autre table est appele cl trangre :
NumAvion dans Affectation
Ladministrateur (compte sa) vous a accord le droit de crer une nouvelle base de donne, dont
vous serez propritaire (compte dbo, data base owner ) : le dbo a tous les droits sur sa base,
de mme que ladministrateur a tous les droits sur la totalit du SGBDR.
Loguez vous avec lAnalyseur de requte , sous votre nom de connexion NT habituel, et
tapez la requte SQL de cration de base de donnes :
CREATE DATABASE AirXXX
Doc. en ligne : Accder aux donnes et les modifier : Elments de syntaxe Transact
SQL -> Utilisation des types de donnes
La premire tape consiste crer des domaines , cest--dire des types de donnes, qui
sappliqueront aux colonnes ou attributs des tables et des colonnes. Comme en C ou en Pascal,
les domaines sont dfinis par le propritaire de la base de donnes, partir des types prdfinis
du langage SQL :
bit
tinyint
smallint
int
647).
decimal
numeric
Donnes numriques fixes de prcision et d'chelle comprises entre -1038 -1 et 1038 -1.
Synonyme de decimal.
smallmoney
money
real
float
Page 40 sur 97
smalldatetime Donnes de date et d'heure comprise entre le 1er janvier 1900 et le 6 juin 2079, avec
une prcision d'une minute.
datetime
Donnes de date et d'heure comprises entre le 1er janvier 1753 et le 31 dcembre 9999,
avec une prcision de trois centimes de seconde ou de 3,33 millisecondes.
char
chane de caractres de longueur fixe d'un maximum de 8 000 caractres.
varchar
chane de caractres de longueur variable d'un maximum de 8 000 caractres.
text
texte de longueur variable ne pouvant pas dpasser 231 - 1 (2 147 483 647) caractres.
binary
donnes binaires de longueur fixe ne pouvant pas dpasser 8 000 octets.
varbinary
Donnes binaires de longueur variable ne pouvant pas dpasser 8 000 octets.
image
Donnes binaires de longueur variable ne pouvant pas dpasser 231 - 1 (2 147 483
647) octets.
La syntaxe pour crer des nouveaux types ne fait pas partie de la norme ANSI du SQL. Sous
SQL SERVER il faut appeler la procdure systme sp_addtype (system procedure add type), par
le mot cl execute
SQL Server ne fait pas de diffrence entre les majuscules et les minuscules pour les noms de
type de donnes systme.
Exercice 20
Les exercices qui suivent vont vous guider pour crire un script de cration de base de donnes :
Creer.SQL.
On commentera chacune des tapes du script (commentaire Transact SQL :
/* plusieurs lignes */
ou -- fin de ligne)
Etape 1 : cration des types utilisateurs :
TypeDate : type prdfini datetime. Obligatoire. (=> date du vol dans la table Affectation).
TypeHoraire : type prdfini smalldatetime. Obligatoire (=> heures de dpart et darrive, dans la table Vol)
TypeNom : chane variable limite 50 caractres. Obligatoire. (=> nom du pilote dans la table Pilote et du
constructeur dans la table Constructeur)
TypePrenom : chane variable limite 30 caractres. Optionnel. (=> prnom du pilote dans la table Pilote)
TypeAvion : chane variable limite 20 caractres. Obligatoire. (=> type davion dans les tables Type et
Avion)
Page 41 sur 97
Menu Action , Enregistrer un nouveau serveur SQL Server pour accder au serveur :
sans utiliser lassistant, choisir le nom du serveur dans la liste droulante, choisir Utiliser
lauthentification Windows.
Fermer la fentre dinscription du serveur, et dvelopper les objets de la base en cliquant sur le +
ct du nom du Serveur ( licne avec flche verte)
Dvelopper Bases de donnes : seules les bases de donnes auxquelles vous avez accs
apparaissent. Dvelopper la base en cours de construction, et le rpertoire Types de donnes
utilisateurs .
Page 42 sur 97
La cl primaire est une colonne ou une combinaison de colonnes dont les valeurs identifient de
faon unique chaque ligne dans la table : elle ne peut pas tre nulle.
Une cl trangre est une colonne ou une combinaison de colonnes dont les valeurs
correspondent la cl primaire d'une autre table. Elle nest pas obligatoirement unique ni dfinie
(peut tre NULL), mais ses valeurs doivent correspondre des valeurs existantes de la cl
primaire. On cre une cl trangre par la contrainte FOREIGN KEY lors de la cration ou de la
modification dune table.
Assurer l'intgrit des donnes, cest prserver la cohrence et l'exactitude des donnes stockes
dans une base de donnes en validant le contenu des diffrents champs, en vrifiant la valeur des
champs l'un par rapport l'autre, en validant les donnes dans une table par rapport une autre,
et en vrifiant que la mise jour d'une base de donnes est efficacement et correctement
effectue pour chaque transaction.
4 contraintes dintgrit :
Intgrit dentit : unicit de la cl primaire (PRIMARY KEY) ou dautres cls
(UNIQUE)
Intgrit de domaine : plage des valeurs possibles pour une colonne. On peut restreindre
cette plage en attribuant la colonne un type dfini par lutilisateur, ou par une
contrainte CHECK avec une rgle.
L'intgrit rfrentielle garantit la relation entre une cl primaire unique dans une table
et les cls trangres qui y font rfrence dans les autres tables. Exemple : avant de
supprimer une ligne dans la table PILOTE, il faut supprimer toutes les lignes de la table
VOL qui font rfrence ce pilote.
ajouter des enregistrements une table lie lorsqu'il n'y a aucun enregistrement associ dans la
table primaire ;
changer des valeurs ou effacer des enregistrements dans une table primaire qui engendrerait des
enregistrements orphelins dans une table lie;
Par exemple, avec les tables ventes et titres dans la base de donnes pubs, l'intgrit rfrentielle est
base sur la relation entre la cl trangre (id_titre) de la table ventes et la cl primaire (id_titre) de
la table titres, comme le montre l'illustration suivante:
Page 43 sur 97
Vous pouvez crer des tables permanentes ou des tables temporaires (locales ou globales).
Une table temporaire locale est visible uniquement pour la connexion qui l'a cre. Une table
temporaire globale est disponible pour toutes les connexions. Les tables temporaires locales
sont supprimes automatiquement la fin de la session courante. Les tables temporaires globales
sont supprimes la fin de la dernire session qui les utilise
Lorsque vous crez une table, nommez ses colonnes, dfinissez un type de donne pour chaque
colonne, prcisez si elles peuvent contenir des valeurs NULL, dfinissez des contraintes par
loption CHECK, des valeurs par dfaut par DEFAULT
Cl primaire
PRIMARY KEY,
NOT NULL DEFAULT 'Nouveau poste',
NOT NULL CHECK (niv_min >= 10),
NOT NULL CHECK (niv_max <= 250)
Contrainte
FOREIGN KEY : la colonne (ou attribut) fait rfrence la cl primaire dune autre table.
num_emploi smallint et
DEFAULT : valeur par dfaut lorquaucune valeur nest donne dans INSERT ou UPDATE
CHECK :
CHECK (id_diteur IN ('1389', '0736', '0877', '1622', '1756')
OR id_diteur LIKE '99[0-9][0-9]')
CHECK (niv_min >= 10)
Page 44 sur 97
Complter le script de cration pour crer les tables de la base Compagnie arienne , dcrite
dans le schma gnral. Pour chaque table, on dfinira les liens cl trangre-cl primaire en
suivant le schma.
Dfinitions de contraintes supplmentaires sur les tables :
AVION : la cl primaire NumAvion est autoincrmente partir de 100, par pas de 1.
TYPE : la cl primaire TypeAvion commence obligatoirement par une lettre.
Capacit comprise entre 50 et 400 : cette colonne est obligatoire, avec un dfaut de 100
CONSTRUCTEUR : la cl primaire IdConstructeur est autoincrmente partir de 1, par pas de 1
PILOTE : la cl primaire IdPilote est autoincrmente partir de 1, par pas de 1
AEROPORT : la cl primaire IdAeroport ne comporte que des lettres
la colonne NomVilleDesservie est optionnelle
la colonne NomAeroport est obligatoire
VOL : la cl primaire NumVol est constitue du prfixe " IT" suivi de trois chiffres
AFFECTATION : la cl primaire est compose des colonnes NumVol et DateVol
la cl trangre IdPilote peut tre NULL (en attente daffectation un pilote)
Page 45 sur 97
Dans le rpertoire Bases de donnes , Tables , visualisez et vrifiez les tables et leurs
contraintes.
Pour visualiser les proprits dune table, double-clicker sur son nom, ou avec le bouton
droit de la souris, choisir Modifier une table
Pour obtenir les dtails sur les contraintes, et les cls trangres : cliquer sur le bouton
Proprit de table et dindex , dans la fentre de modification de table.
Page 46 sur 97
Une vue est une table virtuelle dont le contenu est dfini par une requte SELECT. Comme une
table relle, la vue possde des colonnes nommes et des lignes de donnes, mais elle nest pas
stocke dans la base de donnes, et na pas dexistence propre, indpendamment des tables.
Les vues amliorent la scurit en permettant de contrler les donnes que les utilisateurs
peuvent visualiser, et lergonomie, en prsentant les donnes sous une forme familire,
indpendamment de la structure interne de la base.
Une vue peut tre manipule exactement comme une table : lorsquon modifie une vue, on
modifie en fait les tables sur lesquelles elle sappuie. Inversement, si on modifie les tables, les
modifications sont reportes automatiquement dans toutes les vues qui leur font rfrence. La
suppression dune vue ninflue pas sur le contenu de la table associe. Par contre la suppression
dune table supprime toutes les vues qui lui font rfrence.
Limitations :
Page 47 sur 97
Vous pouvez crer des vues uniquement dans la base de donnes courante.
Vous pouvez construire des vues partir d'autres vues ou de procdures qui font rfrence des
vues.
Si vous remplissez une vue par une instruction SELECT, vous navez en gnral pas besoin de
donner les noms des colonnes, qui seront ceux du SELECT, sauf dans les cas suivants :
- colonnes drives d'une expression arithmtique, d'une fonction ou d'une constante.
- plusieurs colonnes issues de tables diffrentes auraient le mme nom.
- on veut donner un nom la colonne de la vue, diffrent du nom de la colonne dans la table
(prsentation pour lutilisateur de la base de donnes)
Vous ne pouvez pas associer des rgles, des valeurs par dfaut ou des Dclencheurs des vues,
ni construire des Index partir de vues.
Vous ne pouvez pas crer de vues temporaires et vous ne pouvez pas crer de vues partir de
tables temporaires.
Vous ne pouvez pas modifier par UPDATE, INSERT ou DELETE les vues qui drivent de
plusieurs tables par jointure, ou qui contiennent les clauses GROUP BY, ou DISTINCT, ou qui
omettent un attribut obligatoire de la table (dclar NOT NULL) : ces vues ne seront accessibles
quen lecture.
Pour une table modifiable, la clause WITH CHECK OPTION contrle les modifications sur la
vue.
Exercice 24
On veut disposer dune vue qui visualise les dparts du jour, partir de Paris, avec la
prsentation ci-dessous :
NumVol
De
IT101
IT102
IT110
ORL
CDG
ORL
A
BLA
NIC
NIC
Heure de Dpart
11H15
12H31
15H24
Heure d'arrive
12H40
14H00
16H00
Remarques :
-
La table AEROPORT donne la liste des aroports desservant chaque ville : ORLY (ORL) et Charles de
Gaulle (CDG) pour la ville de Paris. La table AFFECTATION donne les dates de tous les vols.
Utiliser la fonction DATENAME() de Transact SQL pour extraire lheure et les minutes des colonnes
VOL.Hdpart et VOL.HArrive, qui sont stockes en smalldatetime : DATENAME (hh, Hdpart) renvoie
lheure du dpart, DATENAME (mi, Hdpart) renvoie les minutes
On obtient la date du jour par la fonction GETDATE(). Cette date ne peut pas tre compare directement
AFFECTATION.DateVol, car elle comprend les heures, minutes, secondes. Le plus simple est de comparer
le quantime du jour de la date courante, au quantime de la date du vol : la fonction DATENAME
(dayofyear, uneDate) extrait le quantime du jour de la date uneDate
Tester la vue par un select simple. Rajouter la cration de la vue dans le script de cration
de la base, et sa suppression dans le script de suppression.
Page 48 sur 97
3.5 Dfinition des permissions sur les objets dune base de donne
Contrle daccs aux donnes dans un SGBD
L'accs aux donnes est contrl par le SGBD au moyen de l'identification de l'utilisateur qui
lors de la connexion doit fournir le nom d'utilisateur et le mot de passe associ. Chaque objet
dune base de donnes mmorise la liste des utilisateurs autoriss le manipuler : son crateur
et les autres utilisateurs qui auront t habilits par lui.
Ladministrateur systme de SQL SERVER (compte sa) est le seul possder tous les droits sur
toutes les bases de donnes : cration dune nouvelle base, suppression Ces droits ne peuvent
pas lui tre retirs (indpendants des droits explicites sur la base)
Le propritaire dune base de donnes (DBO : Data Base Owner) a tous les droits sur les objets
de sa base, et peut les donner dautres utilisateurs par la commande GRANT ou leur retirer des
droits par la commande REVOKE
Pour autoriser l'accs un objet pour tous les utilisateurs on utilisera le groupe PUBLIC
Permissions d'instruction :
Permissions d'objet :
Il faut dabord accorder des permissions gnrales au groupe public, puis prciser en accordant
ou en retirant des permissions spcifiques certains utilisateurs :
GRANT SELECT
ON auteurs
TO public
go
-- Marie , Jean et Pierre auront tous les privilges sur la table auteurs
GRANT INSERT, UPDATE, DELETE
ON auteurs
TO Marie, Jean, Pierre
Page 49 sur 97
Permissions d'instruction :
Permissions d'objet :
Permission dinstruction :
En vous loggant avec le compte propritaire de la base (dbo), vous pouvez visualiser et modifier
les permissions dinstruction (CREATE TABLE, CREATE VIEW) des diffrents utilisateurs
de votre base : slectionnez le nom de votre base, et choisissez Proprits au bouton droit de
la souris.
Page 50 sur 97
Vous pouvez aussi visualiser et modifier les permissions dobjet sur les tables (SELECT,
INSERT, UPDATE, DELETE) : double-clickez sur une table pour visualiser la fentre
Proprits de table , puis clickez sur le bouton Autorisations
Page 51 sur 97
Une procdure stocke est un ensemble d'instructions compiles, qui peut s'excuter plus
rapidement. Les procdures stockes augmentent la puissance et la performance du langage
SQL. Elles peuvent :
recevoir et renvoyer des paramtres une procdure appelante,
- appeler d'autres procdures,
- renvoyer une valeur de sortie la procdure appelante
Les procdures stockes sur d'autres serveurs SQL auxquels le processus client n'est pas
directement connect peuvent tre excutes si le serveur distant autorise les accs distants.
Les procdures stockes diffrent des autres instructions et lots d'instructions SQL parce qu'elles
sont pranalyses et prnormalises. Lorsque vous excutez une procdure pour la premire fois,
le programme de traitement des requtes de SQL Server l'analyse et prpare une structure interne
normalise pour la procdure qui est stocke dans une table systme. Lors de la premire
excution de la procdure au dmarrage du serveur SQL, elle est charge en mmoire et
compile compltement (elle n'est plus analyse ou mise en ordre puisque cela a t fait lors de
sa cration). Le plan compil reste alors en mmoire (sauf si le besoin de mmoire l'oblige en
sortir ) pour que sa prochaine excution (effectue par le mme client ou par un autre) puisse
tre traite sans que le plan de compilation consomme des ressources systme.
Les procdures stockes peuvent servir de mcanismes de scurit, car un utilisateur peut avoir
la permission d'excuter une procdure stocke mme s'il n'a aucune permission sur les tables ou
les vues auxquelles elle fait rfrence
Les procdures stockes sont des objets de base de donnes : la permission d'excuter CREATE
PROCEDURE revient par dfaut au propritaire de base de donnes qui peut la transmettre
d'autres utilisateurs.
Vous ne pouvez crer une procdure stocke que dans la base de donnes courante.
Une procdure stocke peut contenir toutes les instructions SQL, sauf CREATE. Elle peut
appeler une autre procdure stocke jusqu 16 niveaux dimbrications.
Page 52 sur 97
Dans Enterprise Manager, dans votre base de donnes, choisissez l'option Procdures
stockes, et ensuite Nouvelle Procdure Stocke avec le bouton droit de la souris.
Ou
Utilisez l'instruction SQL CREATE PROC :
la procdure stocke info_auteur reoit en paramtres le nom et le prnom d'un auteur, et affiche
le titre et l'diteur de chacun des livres de cet auteur :
CREATE PROC info_auteur @nom varchar(40), @prnom varchar(20)
AS
SELECT nom_auteur, pn_auteur, titre, nom_diteur
@ avant le nom
FROM
auteurs, titres, diteurs, titreauteur
du paramtre
WHERE pn_auteur = @prnom
AND nom_auteur = @nom
AND auteurs.id_auteur = titreauteur.id_auteur
AND titres.id_titre = titreauteur.id_titre
AND titres.id_diteur = diteurs.id_diteur
go
nom_auteur
pn_auteur
titre
nom_diteur
------------------------------------------------------------------------------- ---------------------------------------Chevalier
Bernard
La colre : notre ennemie ?
New Moon Books
Chevalier
Bernard
Vivre sans crainte
New Moon Books
la procdure info_diteur2 affiche le nom des auteurs qui ont crit un livre publi par l'diteur
pass en paramtre : si aucun nom d'diteur n'est prcis, la procdure fournit les auteurs publis
par Algodata Infosystems.
CREATE PROC info_diteur2 @nom_diteur varchar(40) = 'Algodata Infosystems'
AS
Paramtre
SELECT nom_auteur, pn_auteur, nom_diteur
par dfaut
FROM auteurs a, diteurs e, titres t, titreauteur ta
WHERE @nom_diteur = e.nom_diteur
AND a.id_auteur = ta.id_auteur
AND t.id_titre = ta.id_titre
AND t.id_diteur = e.id_diteur
Si la valeur par dfaut est une chane de caractres contenant des espaces ou des marques de
ponctuation, ou si elle dbute par un nombre (par exemple, 6xxx), elle doit figurer entre
guillemets anglais simples.
La procdure peut spcifier les actions accomplir si l'utilisateur ne fournit pas de paramtre :
CREATE PROC montre_index3 @table varchar(30) = NULL
AS
IF @table is NULL
PRINT 'Entrez un nom de table'
ELSE
-- traitement du paramtre
Page 53 sur 97
Loption OUTPUT derrire un paramtre, indique un paramtre en sortie, qui est renvoy la
procdure appelante : somme_titres est cre avec un paramtre d'entre facultatif
titre_slectionn et un paramtre de retour somme
Dans une procdure stocke, vous pouvez aussi retourner une valeur par linstruction RETURN,
et la rcuprer dans lappelant par la syntaxe suivante :
Page 54 sur 97
Si lun des paramtres est omis, la procdure affichera le message derreur : Erreur : manque le
nom du pilote , ou Erreur : manque le prnom du pilote . Si le pilote nexiste pas, la procdure
affichera Erreur : pilote inexistant . Tester la procdure, et rajouter la au script de cration de
la base.
1) Faire un SELECT qui affiche la somme des heures de vol dun pilote donn, pour un numro
de semaine donn, avec la prsentation suivante :
---------------------------------------------------------------------------Semaine 49,
On utilisera la fonction DATEDIFF pour calculer la diffrence entre lheure de dpart et darrive,
et DATENAME avec loption week pour extraire le numro de semaine de la date du vol.
2) Ranger le nom et le prnom du pilote, et le numro de semaine dans des variables intermdiaires
Transact SQL. Stocker la somme des heures de vol dans une variable de type INT, et prparer le
texte afficher dans une variable de type VARCHAR.
Pour formater le texte afficher, on aura besoin de la fonction CONVERT (Ressources : exemple
prcdent et aides sur Convert, et Print dans Transact SQL)
3) En partant du SELECT prcdent, faire une procdure Horaire qui renvoie la somme des
heures de vol dun pilote quelconque pour une semaine donne, et tester la en affichant son
rsultat.
Une procdure stocke doit tre une bote noire : ne pas afficher de messages derreurs mais
retourner un code derreur lappelant : 0 si succs, -1 si pilote inexistant. Le nom, le prnom du
pilote et le numro de semaine seront dfinis comme paramtres obligatoires.
4) Raliser une procdure ObjectifHebdomadaire qui
FACULTATIF
- affiche le numro de semaine demande, le nom et le prnom du pilote, et son nombre dheures
hebdomadaire (renvoy par Horaire)
- compare cette somme un objectif pass en paramtre : nombre dheures demandes
- affiche Objectif atteint ou non atteint
Ajouter Horaire et ObjectifHebdomadaire, aux scripts de cration et de suppression
Page 55 sur 97
Doc. en ligne : Crer et maintenir des bases de donnes : Respect des rgles
dentreprise laide de dclencheurs
Aide Transact SQL : CREATE TRIGGER
Dfinition
Les trigger garantissent la cohrence des donnes lies logiquement dans diffrentes tables : par
exemple, un trigger permettra de mettre jour toutes les lignes de la table AFFECTATION,
lies lavion que lon va supprimer dans la table AVION.
Chaque trigger est spcifique certaines oprations sur les donnes : UPDATE, INSERT ou
DELETE. Il s'excute immdiatement aprs lopration qui la lanc : le trigger et l'opration
forment une seule transaction qui peut tre annule par le trigger. Si une erreur grave est
dtecte, toute la transaction est automatiquement annule (en langage de bases de donnes, une
transaction dsigne une suite indivisible dinstructions SQL, qui seffectuent toutes ou pas du
tout ; cette notion sera dtaille dans les chapitres suivants)
Exemples dutilisation :
Pour effectuer des changements en cascade dans des tables lies de la base de donnes : un
dclencheur DELETE sur titres.id_titre provoque une suppression des lignes correspondant
ce titre dans les tables titreauteur, ventes et droits_prvus.
Pour assurer des restrictions plus complexes que par la contrainte CHECK : contrairement
CHECK, les dclencheurs peuvent faire rfrence des colonnes dans d'autres tables.
Pour trouver la diffrence entre l'tat d'une table avant et aprs une modification des donnes, et
accomplir une ou plusieurs actions en fonction de cette diffrence.
Un dclencheur est un objet de base de donnes. Pour crer un dclencheur, vous devez spcifier
la table courante et les instructions de modification des donnes qui l'activent. Ensuite, vous
devez spcifier la ou les actions que le dclencheur devra entreprendre.
Une table peut avoir au maximum trois dclencheurs: un dclencheur UPDATE, un dclencheur
INSERT et un dclencheur DELETE.
Exemple 1 :
Page 56 sur 97
ON titres
FOR INSERT, UPDATE
Conditions de dclenchement
AS
RAISERROR ('Insertion Livres',15,9)
Actions associes
go
Ce trigger envoie un message au client lorsquon ajoute ou on modifie des donnes dans titres.
Linstruction SQL :
insert titres (id_titre, titre)
values ('BX100', 'test')
cumulannuel_ventes
-----------------15
40
30
Page 57 sur 97
INSERT ventes
VALUES ('6380', '6700', '1994', 100, 'Net 60', 'BU1032' )
-- Provoque la mise jour automatique de la table TITRES par le trigger, et donc aussi le
dclenchement du trigger davertissement prcdent :
Msg. 50000, niveau 15, tat 9
Insertion Livres
La table Inserted est une table provisoire associ un tigger ( dclencheur). Elle est gre par
SqlServer. Elle contient les copies des lignes affectes par les ordres Insert dans la table du
dclencheur. D'une faon analoque, SqlServer gere une table Deleted contient les copies des lignes
supprimes dans la table du dclencheur. Pour les lignes mise jour par un ordre Update, les
anicennes lignes sont copies dans la table Deleted, puis les nouvelles sont copies dans la table
Inserted.
Dans tous les cas, la table du dclencheur est modifie par l'ordre Sql.
Pour visualiser et mettre jour un Trigger : dans la fentre de modification de la Table concerne,
cliquez sur le bouton Dclencheurs , dans la barre doutils
Page 58 sur 97
Page 59 sur 97
Les index permettent doptimiser le fonctionnement dune base de donnes : ils acclrent les
oprations SELECT, INSERT, UPDATE et DELETE en fournissant un accs direct sur
certaines colonnes ou ensembles de colonnes.
Un index ordonn (option CLUSTERED) fournit un accs direct aux lignes physiques de la
table, sur le disque. La cration dun index ordonn modifie l'ordre physique des lignes : il faut
donc le crer avant les index non ordonns, et il ne peut y avoir quun index ordonn par table
(souvent sur la cl primaire).
Un index non ordonn (sans loption CLUSTERED) est un index qui sappuie sur l'ordre logique
de la table, en mmoire. Une table peut contenir plusieurs index non ordonns. Employez un
index non ordonn pour :
La recherche de donnes au moyen d'un index ordonn est presque toujours plus rapide quavec
un index non ordonn. L'index ordonn est particulirement utile lorsque lon veut extraire en
une seule instruction plusieurs lignes qui possdent des cls contigus : lindex garantit que ces
lignes seront physiquement adjacentes.
Pour crire un index efficace, il faut visualiser la slectivit des colonnes = le nombre de
valeurs uniques par rapport au nombre de lignes de la table, donnes par linstruction SQL :
SELECT COUNT (DISTINCT nom_de_colonne) FROM nom_de_table
Choix de lindex
5000
20
Index ordonn
Pas d'index
Index ordonn unique : sur la colonne id_d'auteur de la table auteurs pour assurer l'unicit des
donnes. L'option CLUSTERED tant spcifie, cet index classera physiquement les donnes
sur le disque.
Page 60 sur 97
Index compos simple : cre un index sur les colonnes id_d'auteur et id_titre de la table
titreauteur.
Crer un Index non ordonn compos sur les champ NomPilote et PrenomPilote de la table Pilote.
Vrifier lexistence de lindex sous Microsoft SQL Enterprise : slectionner la table, puis avec le
bouton droit Modifier une table , puis cliquer dans la barre doutil sur le bouton Proprits de
table et dindex :
Page 61 sur 97
3.9 Rcapitulation
Reprendre tous les exercices et complter le script de cration de la base, dans lordre :
dfinition des permissions sur les tables, les vues, les procdures stockes
suppression des tables, en commenant par les tables avec des cls trangres
Conservez votre base et crez en une autre vide, que vous allez grer entirement sous Enterprise
Manager
Types de donnes utilisateur : bouton droit => Nouveau type de donnes dfini par
lutilisateur
Page 62 sur 97
Triggers : slectionnez une une les tables concernes : bouton droit Modifier une table ,
puis bouton Dclencheurs dans la barre doutil de la fentre Crer la table
Slectionner votre base : avec le bouton droit, choisir Toutes Tches , Gnrer des scripts
SQL
Page 63 sur 97
4. LES TRANSACTIONS
Principes
Une transaction est une unit logique de travail, un ensemble d'instructions dinterrogation ou de
mise jour des donnes que SQL traite comme une seule action indivisible : soit toutes les
instructions comprises dans la transaction sont traites, soit aucune.
Ce mcanisme garantit la fiabilit des accs au SGBD et la cohrence des donnes : il pare
toute interruption non dsire d'une squence d'instructions (arrt programme, panne machine ou
volont d'annuler les dernires oprations).
Une unit logique de travail doit possder quatre proprits appeles proprits ACID
(Atomicit, Cohrence, Isolation et Durabilit), pour tre considre comme une transaction :
- Atomicit : une transaction doit tre une unit de travail indivisible ; soit toutes les
modifications de donnes sont effectues, soit aucune ne l'est.
Soit une transaction bancaire qui dbite un compte A et crdite un compte B : sans le
mcanisme de transaction, si une erreur survenait entre le dbit et le crdit, la somme verse
serait perdue pour tout le monde. Le mcanisme de transaction va lier les deux oprations : en
cas de crash du systme central ou de coupure du rseau entre lagence bancaire et le central,
les deux oprations sont annules.
- Cohrence : lorsqu'elle est termine, une transaction doit laisser les donnes dans un tat
cohrent.
Cest une consquence de latomicit : si lon arrive sans erreur la fin de la transaction, les
comptes dbiteur et crditeur sont actualiss par une opration indivisible ; si une erreur
survient pendant la transaction, les deux oprations sont annules.Dans les deux cas, les deux
soldes demeurent cohrents.
Remarquons que le mcanisme de transaction ne fait pas tout : si le problme survient
immdiatement aprs la fin de la transaction, le virement a eu lieu, et il nest pas question de le
faire une seconde fois ; au contraire, si lerreur survient juste avant, il faut refaire le virement.
Ce sera donc lapplication de tenir jour un journal des virements, pour savoir dans tous
les cas si le virement a eu lieu ou non : pour restituer fidlement les oprations, le journal doit
videmment tre actualis dans la transaction.
- Isolation : les modifications effectues par des transactions concurrentes doivent tre isoles
transaction par transaction. Une transaction accde aux donnes soit dans l'tat o elles taient
avant d'tre modifies par une transaction concurrente, soit telles qu'elles se prsentent aprs
excution de cette dernire, mais jamais dans un tat intermdiaire.
Page 64 sur 97
Tant quune transaction nest pas finie, on ne peut pas tre sr quelle aboutisse sans erreur : un
utilisateur qui consulte les deux soldes depuis un autre terminal de gestion, doit donc voir les
anciens soldes = les dernires donnes dont la cohrence est garantie.
- Durabilit : Lorsqu'une transaction est termine, ses effets sur le systme sont permanents. Les
modifications sont conserves mme en cas de dfaillance du systme.
Remarques :
1) Ce type de fonctionnement est possible parce que le S.G.B.D. dispose d'une copie des tables
avant modification (souvent appele SNAPSHOT = ltat instantan). Lors du COMMIT, le
SGBDR recopie le fichier SNAPSHOT sur le fichier de bases de donne, en une seule opration
indivisible.
2) Un ROLLBACK automatique est excut en cas de panne de la machine.
3) ROLLBACK et COMMIT ne concernent pas les commandes de dfinition de donnes :
CREATE, DROP, ALTER. Toute modification portant sur la structure de la base de donnes, est
donc irrversible.
4) L'excution frquente d'un COMMIT peut viter la perte d'informations.
Selon les SGBD, le dbut d'une transaction est dclench diffremment : sous SQL SERVER, il
est marqu par linstruction :
BEGIN TRANSACTION
La fin dune transaction est marque par les instructions COMMIT ou ROLLBACK.
Les modifications ne sont rendues permanentes que lors de l'instruction COMMIT : tant que les
changements ne sont pas valids par un COMMIT, seul l'utilisateur travaille sur les donnes
quil vient de modifier alors que les autres utilisateurs travaillent sur les valeurs avant
modification.
pour que SQL SERVER gre correctement les transactions, commencer par spcifier
Page 65 sur 97
Pour expliquer ce qui a t observ, nous allons dtailler les deux utilisations des transactions :
-
dans la gestion des accs concurrents (plusieurs clients accdant aux mmes tables en lecture
ou en criture, entranant un verrouillage)
TRANSACT SQL range un compte-rendu derreur, aprs chaque requte, dans la variable
globale : @@error . Si linstruction sest bien effectue, @@error = 0, sinon il sagit dune
erreur ou dun Warning.
Pour crire une transaction correcte, il faut donc tester @@error et faire un ROLLBACK ds
quune erreur est dtecte.
On veut grer par une procdure stocke les dparts de la socit, et les raffectations des vols au
pilote remplaant. La procdure doit tre fiable : un pilote ne doit tre supprim des listes de la
compagnie arienne, quune fois le remplaant entr dans les listes et tous ses vols raffects. Ces
trois oprations doivent tre indivisibles.
On propose linterface suivante pour la procdure stocke :
ENTREE
@idAncien
@nom
@prenom
SORTIE
@idNouveau
RETOUR
(0) Remplacement OK,
(1) Erreur : paramtres incorrects,
(2) Erreur : l'ancien pilote , n'existe pas,
(3) Erreur systme
La procdure sera livre avec son programme de test
Un SGBD tant souvent utilis sur une machine multi-utilisateurs, ou en Client-Serveur partir
de plusieurs clients, on peut imaginer ce qui arriverait si deux transactions pouvaient modifier en
mme temps la mme ligne dune table !
Page 66 sur 97
Ce mcanisme permet de bloquer l'accs aux lignes ou aux tables concernes soit
automatiquement (ORACLE, SQL Server), soit sur commande explicite (DB2, RDB). L'accs
une ligne ou une table verrouilles peut tre trait soit par attente du dblocage (mode WAIT)
soit par ROLLBACK de la transaction (mode NOWAIT) : le dblocage est effectif ds la fin de
la transaction.
En attente
En attente
Page 67 sur 97
La norme SQL2 ne prvoie pas de demande explicite des verrous en dbut de transaction : les
programmeurs risquant doublier de rserver les verrous, la norme considre que la prise
automatique de verrous par le SGBD est prfrable. Le SGBD choisit automatiquement les
verrous poser sur les tables et les lignes en fonction des requtes reues :
SELECT : le SGBD pose un verrou partag , cest--dire un verrou qui autorise les autres
lecteurs consulter la table, mais qui bloque les demandes dcriture (INSERT, DELETE,
UPDATE)
INSERT, DELETE, UPDATE : le SGBD pose un verrou exclusif qui interdit tout autre
opration sur lobjet, y compris les lectures
PROBLEME
Verrou
Exclusif
TRANSACTION
T1
Lecture inconsistante
SOLUTION
T2
T1
T2
Update
Update
Select
Attente
fin verrou
Rollback
Rollback
Select
Libration
verrou
Lecture non
T1
Select
rptitive
Verrou
Partag
T2
T1
T2
Select
Update
Verrou
Exclusif
Update
Attente fin
verrou
partag
Update
Commit
Update
Libration
Commit
verrous
Le SGBD pose des verrous diffrents selon le niveau disolation des transactions :
1. Read Uncommited : Aucun verrou. On peut lire les mises jour dans dautres applications,
mme si elles nont pas encore t valides par un COMMIT. Fortement dconseill !
2. Read Commited (dfaut) : verrou exclusif sur les lignes modifies. Le SGBD cache les
modifications en cours aux autres utilisateurs, tant quelles nont pas t valides par COMMIT.
Mais il ne pose pas de verrous sur le SELECT : dans une mme transaction, les lectures ne sont pas
Page 68 sur 97
ncessairement rptitives , les donnes pouvant tre modifies par une autre transaction entre
des lectures qui se suivent.
3. Repeatable Read (conseill) : corrige le problme prcdent des lectures non rptitives, en
posant un verrou partag sur les lignes lues, en plus du verrou exclusif sur les lignes modifies. Les
lignes ne pourront donc pas tre modifies entre le premier SELECT et la fin de la transaction.
4. Serializable : le SGBD prend un verrou de table sur toute ressource utilise
En rsum, le SGBD manipule quatre sortes de verrous, selon les oprations et le niveau
disolation demands :
Verrou partag
Verrou exclusif
Verrou de tables
Verrou de pages : en pratique, un SGBD ne pose jamais un verrou sur une seule ligne, mais sur
la page qui contient cette ligne.
Par dfaut SQL Server travaille dans un cas proche du Read Commited : il pose des verrous
exclusifs sur les pages modifies; il pose des verrous partags sur les pages lues (comme dans le
cas Repeatable Read ) mais il les libre ds la fin du SELECT. Les verrous partags sont
donc bloquants si une modification est en cours dans une autre transaction, mais ils nempchent
pas les autres de modifier les donnes qui viennent dtre lues.
Exemple de transaction bancaire qui garantit la cohrence du solde (abandon si solde insuffisant)
et la rptitivit des diffrentes lectures (solde non modifi par une autre transaction entre
deux lectures)
-- fixer le mode disolation
set transaction isolation level SERIALIZABLE
-- dbut de la transaction
begin transaction
-- lecture de la table Compte avec verrouillage de la table en mode exclusif : criture et lecture
interdites jusquau COMMIT
Page 69 sur 97
Application A
begin transaction
Application B
begin transaction
BlOQUANT
(sur verrou
Page 70 sur 97
ARTICLE
FOURNIS
Noart (2)
Design (20)
Qtstock (4)
Prv (7,2)
Nofourn (2)
Nom (20)
Adresse (40)
ACHAT
Nofourn (2)
Noart (2)
Pra (7,2)
Delreap (2)
Qtencde (4)
Nota :
Les numros darticle et de fournisseur sont des donnes numriques
Rgles de gestion :
les quantits en commande sont cumules par fournisseur et article
les quantits livres par les fournisseurs sont dduites au fur et mesure de la
quantit commande cumule
le prix dachat mmoris est le dernier utilis, ainsi que le dlai de
rapprovisionnement
Attention :
Pour des raisons pdagogiques, lintgrit rferentielle nest pas respecte dans
cette base de donnes.(Par exemple, larticle 172 se trouve dans la table Achat et
non dans la table Article)
En effet les requtes ralises montrent les consquences de ce problme
dintgrit.
Page 71 sur 97
Design
(dsignation)
ENGRENAGE
CAME
BOULON
BOULON
ECROU
BOUGIE
GENERATEUR
ROUE
CARBURATEUR
?
ENGRENAGE
CAME
BOULON
CULBUTEUR
ECROU_5/10
ECROU_12/10
LAVE GLACE
ROUE
COURROIE
Qtstock
(quantit en
stock)
0
8000
900
1000
900
?
500
1100
?
?
7500
5000
125000
10
70000
110000
600000
0
8500
Prv
(prix de vente)
14,93
27.28
2.03
0.63
0.7
?
32.63
10.58
437.12
?
43.50
29.25
0.38
93.27
0.15
0.15
0.12
31.5
15.75
Nom
(nom fournisseur)
SCOM
LE PIGNON
STE MECANIQUE
KIVISS
VISSERIE DE L''EST
STE DES BOULONS
COROLEC ET CIE
Adresse
(adresse fournisseur)
AV DE SEVRES ST CLOUD
9, RUE DE LA GARE CAEN
3, RUE L TOURNE MAMERS
RUE DES POINTES DIJON
AV DU NORD LYON
17, PLACE DES VENTS PARIS
10, PLACE DUPONT SEVRES
Page 72 sur 97
52
61
55
64
61
51
53
51
53
51
54
53
51
53
54
57
64
64
52
52
64
54
64
51
54
61
53
61
51
54
53
53
61
57
57
Noart
(no article)
105
105
105
106
106
124
124
125
125
134
134
134
135
135
171
172
181
182
205
206
207
209
209
221
221
221
222
222
231
231
232
241
241
285
295
Pra
(prix dachat)
Delreap
(dlai de
rapprovisio
nnement)
7.5
9.95
12.22
4.95
4.35
1.25
1.35
0.55
0.58
0.4
0.47
0.38
0.39
0.42
21.75
45.15
5.65
7.05
0.15
0.15
29
18
19.5
0.3
0.1
0.2
0.25
0.2
0.1
0.04
0.1
0.08
0.05
21
8.5
10
8
3
10
8
5
3
5
3
5
4
3
5
3
20
25
15
10
20
20
14
21
7
10
30
21
15
21
10
30
15
10
21
14
21
Qtencde
(quantit
commande
cumule)
200
400
100
?
300
400
500
0
0
500
0
200
1000
1000
200
300
400
400
0
0
2000
200
800
10000
5000
5000
10000
10000
5000
15000
20000
6000
4000
0
2400
Page 73 sur 97
NOART DESIGN
QTSTOCK
PRV
--------------- -------------------- --------------- ---------124 BOULON
900
2.03
125 BOULON
1000
.63
221 BOULON
125000
.38
NOART DESIGN
QTSTOCK
PRV
--------------- ----------------------- --------------- ---------171 GENERATEUR
500 32.63
205 CARBURATEUR
437.12
295 COURROIE
8500 15.75
NOART DESIGN
QTSTOCK
PRV
--------------- -------------------- --------------- ---------135 BOUGIE
206
Page 74 sur 97
5 - Lister les fournisseurs et les articles dont la commande par article est
infrieure 1000.
Ordonner les rsultats sur article et cot.
Faire sans, puis en utilisant value(qtencde, 0) ou coalesce(qtencde, 0) pour remplacer le null par 0.
NOFOURN
NOART PRA*QTENCDE
------------------ --------------- ---------------------64
106
0
51
124
500
53
124
675
51
125
0
53
125
0
54
134
0
53
134
76
51
134
200
51
135
390
53
135
420
52
205
0
52
206
0
54
221
500
51
231
500
54
231
600
61
241
200
53
241
480
57
285
0
17 records selected.
6 - Quel est le montant total payer au fournisseur 51 ?
TOTAL F51
----------------4590
7 - Combien y-a-t-il de dsignations d'article diffrentes ?
NB_DES
---------------13
(si comptage simple rsultat = 19)
Page 75 sur 97
Page 76 sur 97
Page 77 sur 97
0
2000
1000
20000
20000
20000
20000
10000
0
2400
21 records selected.
4 - Lister les achats concernant l'article "BOULON".
NOFOURN
NOART PRA DELREAP QTENCDE
------------------ -------------- -------- -------------- --------------51
124 1.25
5
400
53
124 1.35
3
500
51
125
.55
5
0
53
125
.58
3
0
51
221
.3
10
10000
61
221
.2
21
5000
54
221
.1
30
5000
7 records selected.
Page 78 sur 97
Page 79 sur 97
NOFOURN NOM
ADRESSE
------------------ -------------------- ---------------------------------------54 KIVISS
RUE DES POINTES DIJON
NOART
--------106
124
125
134
135
171
182
205
206
207
209
221
222
231
232
241
285
295
NOM
------ ----------------------------SCOM
VISSERIE DE L'EST
VISSERIE DE L'EST
KIVISS
VISSERIE DE L'EST
KIVISS
SCOM
STE MECANIQUE
STE MECANIQUE
SCOM
SCOM
STE DES BOULONS
VISSERIE DE L'EST
STE DES BOULONS
VISSERIE DE L'EST
VISSERIE DE L'EST
COROLEC ET CIE
COROLEC ET CIE
NOFOURN
---------------64
53
53
54
53
54
64
52
52
64
64
51
53
51
53
53
57
57
18 records selected.
Page 80 sur 97
NOART
-----------124
124
125
125
221
221
221
PRA
--- ---------1.25
1.35
.55
.58
.3
.2
.1
DELREAP
--------------5
3
5
3
10
21
30
QTENCDE
---------------400
500
0
0
10000
5000
5000
7 records selected.
4 - Lister les fournisseurs qui livrent des articles dont le prix d'achat
est suprieur ou gal au prix d'achat moyen de tous les articles.
4a - version 1
NOFOURN
-----------------52
54
55
57
61
64
6 records selected.
4b - version 2
NOFOURN NOM
------------------ --------------------------52 STE MECANIQUE
54 KIVISS
57 COROLEC ET CIE
61 LE PIGNON
64 SCOM
Page 81 sur 97
STE MECANIQUE
VISSERIE DE L'EST
KIVISS
LE PIGNON
5 records selected.
Vrifiez le rsultat de la requte en la modifiant pour lister en plus le numro darticle.
Exemple :
52 STE MECANIQUE
61 LE PIGNON
105
106
Page 82 sur 97
NOM
----------------------------STE DES BOULONS
STE MECANIQUE
VISSERIE DE L'EST
KIVISS
NOART DESIGN
SUM
-------------------------- -------------------------182 ROUE
400
285 ROUE
0
NOART DESIGN
QTSTOCK
NOART DESIGN
--------------- -------------------- ---------------- --------------- --------------------285 ROUE
0
105 ENGRENAGE
134 ECROU
900
124 BOULON
10 - Existe-t-il un fournisseur inconnu ?
NOFOURN
-----------------55
Page 83 sur 97
Pour faire cette suite dexercices, commencer par ajouter une colonne Ville la table Pilote : ville o
rside le pilote. Remplir cette colonne avec un jeu de test, qui comprend certaines des villes o sont
localiss des avions
1 Noms des pilotes qui habitent dans la ville de localisation d'un A320 (dans une ville
desservie par un aroport o sont bass des A320)
3 Noms des pilotes planifis sur A320, qui habitent dans la ville de localisation d'un A320
4 Noms des pilotes planifis sur A320, qui nhabitent pas la ville de localisation d'un A320
5 Noms des pilotes planifis sur A320 ou qui habitent la ville de localisation d'un A320
6 Pour chaque ville desservie, donner la moyenne, le minimum et le maximum des capacits
des avions qui sont localiss dans un aroport desservant cette ville
7 Mme question, limite aux villes o sont localiss plus de deux avions
8 Afficher les noms des pilotes qui ne pilotent que des A320
9 Afficher les noms des pilotes qui pilotent tous les A320 de la compagnie
Page 84 sur 97
ANNEXES
Page 85 sur 97
GLOSSAIRE
Alias : Nom temporaire donn une table ou un attribut du rsultat d'une requte. Un alias
dure le temps de l'excution de la requte, et n'a de sens que dans la requte o il est dfini.
Attribut (attribute) : Chaque colonne d'une relation. Les attributs d'une relation doivent tre
uniques et sont normalement non ordonns. Un attribut est toujours au moins caractris par
son type et sa longueur. L'ensemble des valeurs que peut prendre un attribut est le domaine de
l'attribut. Le degr d'une relation est le nombre d'attributs de la relation.
Base de donnes (Data Base) : Ensemble logique de donnes constitu de tables ou de fichiers
avec leur index, et d'un dictionnaire centralis permettant une gestion efficace des donnes.
Base de donnes relationnelle (Relational Data Base) : Base de donnes perue par ses
utilisateurs comme une collection de tables. Ces tables sont manipules par un langage d'accs
de quatrime gnration, ou en SQL. L'utilisateur prcise ce qu'il cherche dans la base et non
comment il faut l'obtenir. Dans une base de donnes relationnelle, le SGBDR choisit le meilleur
chemin d'accs pour optimiser l'utilisation des ressources (mmoire, disque, temps).
Champ (Field) : Synonyme d'attribut mais s'applique plutt pour un enregistrement dans un
systme de gestion de fichiers classique (aussi appel zone).
Clause (Clause) : Mot rserv du langage SQL utilis pour spcifier ce qu'une commande doit
faire, et souvent suivi d'une valeur. Dans la commande :
'SELECT DISTINCT clt_nom FROM clients'
les mots SELECT, DISTINCT et FROM sont des clauses.
Cl (Key) : Attribut ou combinaison d'attributs utilis pour accder une table sur un critre
particulier. Un index est construit sur une cl.
Cl trangre (Foreign Key) : Attribut ou groupe d'attributs d'une relation, cl primaire dans
une autre relation, et constituant un lien privilgi entre relations.
Cl primaire (Primary Key) : Cl donnant accs de faon univoque, pour chacune de ses
valeurs, un tuple de la table, (on dit parfois aussi identifiant ).
Cl secondaire (Secondary Key) : Cl donnant accs pour chacune de ses valeurs, un
ensemble de tuples de la table, ceux-ci sont alors accds en squence.
SQL -AFPA Vnissieux
Page 86 sur 97
Page 87 sur 97
Page 88 sur 97
Page 89 sur 97
A titre dexemple : lire le script de cration de la base PUBLI utilis au dbut de ce cours (Extrait)
Faire des recherches documentaires sur les syntaxes qui nont pas t vues dans la construction
guide. Ce script peut aussi vous servir dexemples pour la plupart des syntaxes.
-- -
InstPubli.SQL
2001
Page 90 sur 97
Page 91 sur 97
Page 92 sur 97
NOT NULL
)
go
raiserror('Etape de cration de la section de trigger ....',1,1)
GO
CREATE TRIGGER employ_insupd
ON employ
FOR INSERT, UPDATE
AS
--Get the range of level for this job type from the jobs table.
DECLARE @niv_min tinyint,
@niv_max tinyint,
@niv_emploi tinyint,
@id_emploi smallint
SELECT @niv_min = niv_min,
@niv_max = niv_max,
@niv_emploi = i.position_employ,
@id_emploi = i.id_emploi
FROM employ e, emplois j, inserted i
WHERE e.id_employ = i.id_employ AND i.id_emploi = j.id_emploi
IF (@id_emploi = 1) and (@niv_emploi <> 10)
BEGIN
RAISERROR ('L''identificateur d''emploi 1 attend le niveau par dfaut 10.',16,-1)
ROLLBACK TRANSACTION
END
ELSE
IF NOT (@niv_emploi BETWEEN @niv_min AND @niv_max)
BEGIN
RAISERROR ('Le niveau de id_emploi:%d doit se situer entre %d et %d.',
16, -1, @id_emploi, @niv_min, @niv_max)
ROLLBACK TRANSACTION
END
go
raiserror('Etape d''insertion des auteurs ....',1,1)
GO
INSERT auteurs
VALUES('807-91-6654','Bec','Arthur','22.47.87.11','4, chemin de la Tour de Campel',
'Bruges','BE','05006',1)
go
raiserror('Etape d''insertion des diteurs ....',1,1)
GO
INSERT diteurs VALUES('9901', 'GGG&G', 'Munich', NULL, 'GER')
Page 93 sur 97
Page 94 sur 97
Page 95 sur 97
1. ) ;
Page 96 sur 97
Ressources ..................................................................................................................... 3
1.2
1.3
1.4
2.2
2.3
2.4
Introduction ................................................................................................................ 36
3.2
3.3
3.4
3.5
Dfinition des permissions sur les objets dune base de donne ............................ 49
3.6
3.7
3.8
Les index...................................................................................................................... 60
3.9
Rcapitulation............................................................................................................. 62
4. LES TRANSACTIONS...................................................................................................... 64
ANNEXES............................................................................................................................... 85
GLOSSAIRE........................................................................................................................... 86
Page 97 sur 97