Sie sind auf Seite 1von 27

##################>###

#######################################}###~#########################
##################################################

##b##
##

#I#

#####################8####bjbj##################

###
#####y######>##########################################################
##]###################
######X#######X#######X###############l#######l#######l#######l###8#########`###
###l#######~#######0"##6###f&######|&######|&######&######Ot#####
############W#######Y#######Y#######Y###`######P###
###P###Y#######
%#####v'##<###Y###%###################X#############################f##
##Ot##################Y#######y##################|
&##############&###@##0"######y######y######y########`#######|
&##(###X#######&######W#######################l#######l###################
##################W#######y#####y######W#####g
###########X###############################################################W####
###&##############00)##l#######l#######y#########\###########################
###################################################################################
############################Bases de donnes: SQLSupport de Formation n1Mise
jour 3 mai 2001 (LR, PG, MF)ObjectifsPrsentation du langage SQL et de lalgbre
relationnelInterrogation et mise jour dune base de donnes en SQL interactif
Construction complte dune base de donnesNotions dadministration dune base de
donnes en Client/ServeurPrsentation du modle client/serveurLa connexion ODBC et
lutilisation dACCESS comme clientMode demploiPour chacun des thmes abords, ce
support# #d#e# #f#o#r#m#a#t#i#o#n##:###p#r##s#e#n#t#e# #l#e#s# #p#o#i#n#t#s#
#e#s#s#e#n#t#i#e#l#s###r#e#n#v#o#i#e# ## #d#e#s# #s#u#p#p#o#r#t#s# #d#e#
#c#o#u#r#s#,# #d#e#s# #l#i#v#r#e#s# #o#u# ## #l#a# #d#o#c#u#m#e#n#t#a#t#i#o#n#
#e#n# #l#i#g#n#e# #c#o#n#s#t#r#u#c#t#e#u#r#,# #p#a#r# #l#e# ##s#y#m#b#o#l#e##:#
#& ##-# # # # #p#r#o#p#o#s#e# #d#e#s# #e#x#e#r#c#i#c#e#s# #p#r#a#t#i#q#u#e#s#
#p#a#r# #l#e# #s#y#m#b#o#l#e##:# #:##A#u#t#r#e#s#
#s#y#m#b#o#l#e#s##u#t#i#l#i#s##s##:# ###% P#o#i#n#t# #i#m#p#o#r#t#a#n#t#
#q#u#i# #m##r#i#t#e# #d## #t#r#e# #s#o#u#l#i#g#n####A# ##v#i#t#e#r###
#t#o#u#t# #p#r#i#x# #!####J #M#a#n#i#p# ## #r##a#l#i#s#e#r# #a#v#e#c# #u#n#
#u#t#i#l#i#t#a#i#r#e# #g#r#a#p#h#i#q#u#e# #(#q#u#i# #d#e#v#r#a#i#t#
#n#o#r#m#a#l#e#m#e#n#t# #s#i#m#p#l#i#f#i#e#r# #l#e# #t#r#a#v#a#i#l##!#)###

#######A#p#p#r#o#f#o#n#d#i#s#s#e#m#e#n#t##:# #t#r#a#v#a#i#l# #d#e#


#d#o#c#u#m#e#n#t#a#t#i#o#n# #o#u# #e#x#e#r#c#i#c#e# #s#u#p#p#l##m#e#n#t#a#i#r#e#,#
## #f#a#i#r#e# #i#n#d#i#v#i#d#u#e#llement (non intgr dans le temps de formation
moyen)Presentation du langage sql Ressources Pour la syntaxe du langage SQL:
consulter le livre SQL2 Initiation/Programmation de Christian Mare et Guy
Ledant Pour lutilisation de lenvironnement SQL Server: utiliser Documentation
en ligne de SQL Server et Aide de Transact SQL sous Analyseur de requte
SQL Historique du langage S.Q.L. (Structured Query Language) est un langage
structur permettant dinterroger et de modifier les donnes contenues dans une
base de donnes relationnelle.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
Microso#f#t#,# #e#n# #e#s#s#a#y#a#n#t# #d#e# #r#e#s#t#e#r# #l#e# #p#l#u#s#
#s#t#a#n#d#a#r#d# #p#o#s#s#i#b#l#e#.### # #N#o#t#i#o#n# #d#e# #r#e#l#a#t#i#o#n###&
#S#Q#L# #2##:# #P#a#r#t#i#e# #I# # #A#p#p#r#o#c#h#e# #p#.# #1# ## #2#5##
#S#Q#L# #e#s#t# #b#a#s## #s#u#r# #l#a# #t#h##o#r#i#e# #d#e#s#
#e#n#s#e#m#b#l#e#s##:# #i#l# #m#a#n#i#p#u#l#e# #d#e#s# # ###t#a#b#l#e#s###
#q#u#i# #r#e#p#r##s#e#n#t#e#n#t# #l#e# #g#r#a#p#h#e# #d## u#n#e# #r#e#l#a#t#i#o#n#
#e#n#t#r#e# #p#l#u#s#i#e#u#r#s# #e#n#s#e#m#b#l#e#s# (colonnes).Chaque ligne ou
tuple est un lment du graphe de la relation
IdPilote#NomPilote#PrenomPilote##1#GAINSBOURG#Serge####2#FERRAT#Jean##3#NOUGARO#Cla
ude##4#SCHUMMAN#Robert##5#STROGOFF#Michel##6#SORREL#Lucien##7#TAVERNIER#Bertrand##8
#FAYOLLE#Marc###9#LECU#Rgis#########Exemple: la base de donnes Compagnie
arienne que lon crera sous SQL Server dans la suite de ce cours:Schma
gnral de la base Structure et contenu des tablesAVION ( NumAvion, TypeAvion,
BaseAeroport)NumAvion
: numro davion (cl primaire, numrique)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
IdAeroport de la table AEROPORT, 3 lettres)
NumAvion#TypeAvion#BaseAeroport##100#A320#NIC##101#B707#CDG##102#A320#BLA##103#DC10
#BLA##104#B747#ORL##105#A320#GRE##106#ATR42#CDG##107#B727#LYS##108#B727#NAN##109#A3
40#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.TYPE ( TypeAvion,
Capacite, IdConstructeur)TypeAvion
: type davion (cl primaire,
alphanumrique)Capacit
: nombre de places (numrique)IdConstructeur :
identificateur du constructeur (cl trangre vers la colonne
IdConstructeur de
la table CONSTRUCTEUR, numrique)
TypeAvion#Capacite#idConstructeur##A320#300#1##A340#350#1##ATR42#50#1##B707#250#2##
B727#300#2##B747#400#2##DC10#200#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)CONSTRUCTEUR
( IdConstructeur, NomConstructeur)IdConstructeur
: identificateur du
constructeur (cl primaire, numrique)NomConstructeur : nom du constructeur
(alphanumrique)
IdConstructeur#NomConstructeur##1#Arospatiale##2#Boeing##3#Cessna##4#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 desservieAEROPORT ( IdAeroport, NomAeroport,
NomVilleDesservie)IdAeroport
: identificateur de laroport (cl primaire,
3 lettres)NomAeroport
: nom de laroport (alphanumrique)
NomVilleDesservie : ville desservie par laroport (alphanumrique)

IdAeroport#NomAeroport#NomVilleDesservie##BAS#Poretta#Bastia##BLA#Blagnac#Toulouse#
#BRI#Brive#Brive##CDG#Roissy#Paris##GRE#Saint Geoir#Grenoble##LYS#Saint
exupry#Lyon##NAN#Saint Herblain#Nantes##NIC#Nice cote d'azur#Nice##ORL#Orly#
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
: numro de vol (cl primaire, "IT" + 3 chiffres)AeroportDept
:
identificateur de laroport de dpart (cl trangre vers la colonne
IdAeroport de la table AEROPORT, 3 lettres)Hdpart
: heure de dpart
(type heure)AeroportArr : identificateur de laroport darrive (cl trangre
vers la colonne
IdAeroport de la table AEROPORT, 3 lettres)Harrive
:
heure darrive (type heure)
NumVol#AeroportDept#Hdpart#AeroportArr#HArrive##IT100#NIC#7:00#CDG#9:00##IT101#OR
L#11:00#BLA#12:00##IT102#CDG#12:00#NIC#14:00##IT103#GRE#9:00#BLA#11:00##IT104#BLA#1
7:00#GRE#19:00##IT105#LYS#6:00#ORL#7:00##IT106#BAS#10:00#ORL#13:00##IT107#NIC#7:00#
BRI#8:00##IT108#BRI#19:00#ORL#20:00##IT109#NIC#18:00#ORL#19:00##IT110#ORL#15:00#NIC
#16:00##IT111#NIC#17:00#NAN#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
: numro de
vol (cl trangre vers la colonne NumVol de la table VOL)DateVol
: date du
vol (type date). Cl primaire: NumVol + DateVolNumAvion
: numro de lavion qui
assure le vol (cl trangre vers la colonne NumAvion
de la table Avion,
numrique)IdPilote
: identificateur du pilote en charge du vol (cl trangre
vers la colonne
IdPilote de la table
Pilote, numrique)NumVol#DateVol#NumAvion#IdPilote##IT100#6 avril
2001#100#1##IT100#7 avril 2001#101#2##IT101#6 avril 2001#100#2##IT101#7 avril
2001#103#4##IT102#6 avril 2001#101#1##IT102#7 avril 2001#102#3##IT103#6 avril
2001#105#3##IT103#7 avril 2001#104#2##IT104#6 avril 2001#105#3##IT104#7 avril
2001#107#8##IT105#6 avril 2001#107#7##IT105#7 avril 2001#106#7##IT106#6 avril
2001#109#8##IT106#7 avril 2001#104#5##IT107#6 avril 2001#106#9##IT107#7 avril
2001#103#8##IT108#6 avril 2001#106#9##IT108#7 avril 2001#106#5##IT109#6 avril
2001#107#7##IT109#7 avril 2001#105#1##IT110#6 avril 2001#102#2##IT110#7 avril
2001#104#3##IT111#6 avril 2001#101#4##IT111#7 avril 2001#100#8##Les lments dune
colonne appartiennent tous au mme ensemble appel domaineUne cl qui fait
rfrence la cl primaire dune autre table est appele cl trangre:
NumAvion dans Affectation Rappels dalgbre relationnelToutes les requtes SQL
correspondent une combinaison des 7 oprateurs dalgbre relationnel.Les
Oprateurs Ensemblistes Ne sappliquent qu des relations unicompatibles:
possdant le mme nombre dattributs sur les mmes domaines:#CARSPECIAUX 108 \f
"Wingdings" \s 12 \h# l'union permet le regroupement de tuples :R1#Vols
destination de Paris charles de
Gaulle###########NumVol#AeroportDept#Hdpart#AeroportArr#HArrive##IT100#NIC#7:00#C
DG#9:00##R2#Vols destination de Paris
Orly###########NumVol#AeroportDept#Hdpart#AeroportArr#HArrive##IT105#LYS#6:00#ORL
#7:00##IT106#BAS#10:00#ORL#13:00##IT108#BRI#19:00#ORL#20:00##IT109#NIC#18:00#ORL#19
:00##R3 = R1 U R2#Vols destination de
Paris###########NumVol#AeroportDept#Hdpart#AeroportArr#HArrive##IT100#NIC#7:00#CD
G#9:00##IT105#LYS#6:00#ORL#7:00##IT106#BAS#10:00#ORL#13:00##IT108#BRI#19:00#ORL#20:
00##IT109#NIC#18:00#ORL#19:00###CARSPECIAUX 108 \f "Wingdings" \s 12 \h#
l'intersection permet la cration d'une table partir de tuples communs 2
tables:R4#Vols Dpart
Nice###########NumVol#AeroportDept#Hdpart#AeroportArr#HArrive##IT100#NIC#7:00#CDG
#9:00##IT107#NIC#7:00#BRI#8:00##IT109#NIC#18:00#ORL#19:00##IT111#NIC#17:00#NAN#19:0
0##R5#Vols Arrive Paris

Orly###########NumVol#AeroportDept#Hdpart#AeroportArr#HArrive##IT105#LYS#6:00#ORL
#7:00##IT106#BAS#10:00#ORL#13:00##IT108#BRI#19:00#ORL#20:00##IT109#NIC#18:00#ORL#19
:00##R6 = R4 ^ R5#Vols dpart Nice, arrive
Orly###########NumVol#AeroportDept#Hdpart#AeroportArr#HArrive##IT109#NIC#18:00#OR
L#19:00###CARSPECIAUX 108 \f "Wingdings" \s 12 \h# la diffrence slectionne les
tuples d'une table en liminant les tuples prsents dans une autre table. R7 = R4
-R3#Vols dpart Nice, arrive
Province###########NumVol#AeroportDept#Hdpart#AeroportArr#HArrive##IT107#NIC#7:00
#BRI#8:00##IT111#NIC#17:00#NAN#19:00## Oprateurs Relationnels Unaires#CARSPECIAUX
108 \f "Wingdings" \s 12 \h# la slection ralise un dcoupage horizontal de la
table en ne conservant que les tuples satisfai#sant une condition dfinie sur les
valeurs d'un attribut.Certains enregistrements et tous les attributs.#Exemples
:Descriptif complet des vols pour Nice: toutes les lignes de la table VOL telles
que AeroportArr = 'NIC'.Descriptif complet des avions de type A320: toutes les
lignes de la table AVION telles que TypeAvion = 'A320'#CARSPECIAUX 108 \f
"Wingdings" \s 12 \h# la projection permet de ne conserver que les attributs
(colonnes) intressants ; c'est un dcou#page vertical de la table.Certains
attributs et tous les enregistrements.#Exemples :liste de tous les numros davions
liste des noms et des prnoms des pilotesOprateurs Relationnels Binaires
#CARSPECIAUX 108 \f "Wingdings" \s 12 \h# le produit cartsien ralise la
juxtaposition ou concatnation de tous les tuples d'une table avec tous les tuples
d'une autre table. Si les 2 tables ont M et N tuples le rsultat aura M * N tuples.
A1##B1##A1#B1##A2##B2##A2#B1##A3####A3#B1######A1#B2######A2#B2######A3#B2##
#CARSPECIAUX 108 \f "Wingdings" \s 12 \h# Le jointure (join), est possible
seulement sur 2 tables possdant un domaine commun. La jointure consiste
juxtaposer les tuples dont la valeur dun attribut est identique dans les deux
tables. On constate que souvent, la jointure porte sur des cls trangre et
primaire lies.Exemple: Faire un Planning des Vols indiquant le nom et le prnom
des PilotesIl faut concatner les lignes de la table Affectation avec celles de la
table Pilote, pour lesquelles Affectation.IdPilote = Pilote.IdPilote
Table Affectation#####NumVol#DateVol#NumAvion#IdPilote##IT100#6 avril
2001#100#1##IT100#7 avril 2001#101#2##IT101#6 avril 2001#100#2##IT101#7 avril
2001#103#4##IT102#6 avril 2001#101#1##IT102#7 avril 2001#102#3##IT103#6 avril
2001#105#3##IT103#7 avril 2001#104#2##IT104#6 avril 2001#105#3##IT104#7 avril
2001#107#8##IT105#6 avril 2001#107#7##IT105#7 avril 2001#106#7##IT106#6 avril
2001#109#8##IT106#7 avril 2001#104#5##IT107#6 avril 2001#106#9##IT107#7 avril
2001#103#8##IT108#6 avril 2001#106#9##IT108#7 avril 2001#106#5##IT109#6 avril
2001#107#7##IT109#7 avril 2001#105#1##IT110#6 avril 2001#102#2##IT110#7 avril
2001#104#3##IT111#6 avril 2001#101#4##IT111#7 avril 2001#100#8##Table
Pilote####IdPilote#NomPilote#PrenomPilote##1#GAINSBOURG#Serge##2#FERRAT#Jean##3#NOU
GARO#Claude##4#SCHUMMAN#Robert##5#STROGOFF#Michel##6#SORREL#Lucien##7#TAVERNIER#Ber
trand##8#FAYOLLE#Marc##9#LECU#Rgis##Planning: jointure Affectation Pilotes############NumVol#DateVol#NumAvion#NomPilote#PrenomPilote##IT100#6 avril
2001#100#GAINSBOURG#Serge##IT100#7 avril 2001#101#FERRAT#Jean##IT101#6 avril
2001#100#FERRAT#Jean##IT101#7 avril 2001#103#SCHUMMAN#Robert##IT102#6 avril
2001#101#GAINSBOURG#Serge##IT102#7 avril 2001#102#NOUGARO#Claude##IT103#6 avril
2001#105#NOUGARO#Claude##IT103#7 avril 2001#104#FERRAT#Jean##IT104#6 avril
2001#105#NOUGARO#Claude##IT104#7 avril 2001#107#FAYOLLE#Marc##IT105#6 avril
2001#107#TAVERNIER#Bertrand##IT105#7 avril 2001#106#TAVERNIER#Bertrand##IT106#6
avril 2001#109#FAYOLLE#Marc##IT106#7 avril 2001#104#STROGOFF#Michel##IT107#6 avril
2001#106#LECU#Rgis##IT107#7 avril 2001#103#FAYOLLE#Marc##IT108#6 avril
2001#106#LECU#Rgis##IT108#7 avril 2001#106#STROGOFF#Michel##IT109#6 avril
2001#107#TAVERNIER#Bertrand##IT109#7 avril 2001#105#GAINSBOURG#Serge##IT110#6 avril
2001#102#FERRAT#Jean##IT110#7 avril 2001#104#NOUGARO#Claude##IT111#6 avril
2001#101#SCHUMMAN#Robert##IT111#7 avril 2001#100#FAYOLLE#Marc##

Place de SQL dans les SGBDRLa plupart des SGBDR du march (DB2-IBM, ORACLE,
INFORMIX, SYBASE...) offrent plus qu'un langage de requte puissant (en gnral
SQL). On y trouve toute une panoplie d'outils dits de 4me gnration :#CARSPECIAUX
45 \f "Symbol" \s 10 \h#
gnrateur d'crans : facilitant la saisie et
l'affichage de donnes par imbrication de requtes,#CARSPECIAUX 45 \f "Symbol" \s
10 \h#
gnrateur d'tats : pour la sortie d'tat de la BD sur papier ou
cran,#CARSPECIAUX 45 \f "Symbol" \s 10 \h#
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).#CARSPECIAUX 45 \f "Symbol" \s 10 \h#
gnrateur de schma conceptuel : pour la description de la structure des donnes
(entits, attributs, liens...). A tous les niveaux, le langage SQL normalis par
l'ANSI est reconnu comme le langage de requte par excellence qui permet la
cration, la manipulation et le contrle des donnes ; il constitue le lien entre
les divers composants du SGBDR comme le montre le schma suivant :#INCORPORER
MSDraw###Dcouverte PRATIQUE du LANGAGE SQL Connexion la base de donnes PUBLI
Outils disponiblesdans le menu Microsoft SQL Server 7.0: Analyseur de requte
SQL (interprteur SQL interactif), Enterprise Manager (administration des bases
de donnes en rseau)Pour linitiation SQL, utilisez Analyseur de requte SQL
Choisissez Utilisez lauthentification SQL Server: Nom de connexion: Stage
Mot de passe: stageA la connexion, vous tes dans la base de donnes par dfaut
masterPour accder la base de donnes de dmonstration publi,slectionnez la dans
la liste droulante, ou utilisez l'instruction USE:USE pubLI Pour vrifier la
connexion, faites une interrogation simple: Dans longlet Requte tapez:select *
from magasinsCliquez 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 Description de la base de donnes PUBLI
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 simplesA 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

# Publi dcrit la base de donnes dun groupe ddition.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)Diffrents types de remise sont consentis sur les livres vendus
(table remises)Les commentaires de dtail seront donns table par table.Table
diteursNom_colonne
Type de donnes
NULL Par dfaut
Check Cl/index
id_diteur
char(4)
non
oui (1)
CP, ordonn.
nom_diteur varchar(40) oui
ville
varchar(20) oui
rgion
char(2)
oui
pays
varchar(30) oui
'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
pays0736
New Moon Books
Boston
MA
USA0877
Binnet & Hardley
Washington
DC
USA1389
Algodata Infosystems
Bruxelles
NULL BE1622
Five Lakes Publishing
Chicago
IL
USA1756
Ramona
diteur
Lausanne
NULL CH9901
GGG&G
Munich
NULL GER9952
Scootney Books
New York
NY
USA9999
Editions Lucerne
Paris
NULL FR
Table pub_infoNom_colonne
Type de donnes
NULL Par dfaut Check Cl/index
pub_id
char(4)
non
CP, ordonn., CE
diteurs(id_diteur)logo
image
oui
pr_info
text
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.1389
ALGODATA.BMP
Exemple de donnes de type
text pour Algodata Infosystems, diteur 1389 dans la base de donnes pubs. Algodata
Infosystems est situ Bruxelles, Belgique.1622
5LAKES.BMP Exemple de
donnes de type text pour Five Lakes Publishing, diteur 1622 dans la base de
donnes 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
Exemple de donnes de type text pour GGG&G, diteur 9901 dans la
base de donnes pubs. GGG&G est situ Munich, Allemagne.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.
Table employTous 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 Type de donnes
NULL Par dfaut Check
Cl/indexid_employ
empid
non
oui (1)
CP, non ordonn.
pn_employ varchar(20) non
Compos, ordonn. (2) init_centrale
char(1)
oui
Compos, ordonn. (2) nom_employ
varchar(30) non
Compos, ordonn. (2) id_emploi
smallint
non
1
CE emplois(id_emploi)position_employ

tinyint
non
10
id_diteur
char(4)
non
'9952'
CE diteurs(id_diteur)date_embauche
datetime
non
GETDATE( )
(1) La contrainte
CHECK est dfinie comme (id_employ LIKE '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9]
[FM]') OR #(id_employ LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]') (2)
L'index compos, ordonn est dfini sur nom_employ, pn_employ, init_centrale.
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 Paolo
M
Accorti
13PSA89086M
Pedro
S
Alfonso
14VPA30890F Victoria
P
Ashworth
6PHB50241M Patrick
H
Brognon
9L-B31947F
Lesley
NULL
Brown
7F-C16315M
Francisco
NULL
Chang
4PTC11962M Philip
T
Cramer
2A-C71970F Aria
NULL
Cruz
10PJD25939M
Philippe
J
De Bueger
5R-D39728F Renelde
NULL
Depr
8AMD15433F Ann
M
Devon
3
ARD36773F
Anabela
R
Domingues
8PHF38899M Peter
H
Franken
10PXH22250M Paul
X
Henriot
5
PDI47470M
Palle
D
Ibsen
7KFJ64308F Karin
F
Josephs
14MGK44605M Matti
G
Karttunen
6
POK93028M
Pirkko
O
Koskitalo
10JYL26161F Janine
Y
Labrune
5M-L67958F Maria
NULL
Larsson
7Y-L77953M Yoshi
NULL
Latimer
12LAL21447M Laurence
A
Lebihan
5ENL44273F Elizabeth
N
Lincoln
14PCM98509F Patricia
C
McKenna
11R-M53550M Roland
NULL
Mendel
11HAN90777M
Helvetius
A
Nagy
7TPO55093M Timothy
P
O'Rourke
13SKO22412M Sven
Ottlieb
5
MAP77183M
Miguel
A
Paolino
11PSP68661F Paula
S
Parente
8M-P91209M Manuel
NULL
Pereira
8LCQ23061M Luc
C
Querton
5
LJR92907F
Laurence
J
Radoux
9M-R38834F Martine
Ranc
9DWR65030M Diego
W
Roel
6AR89858F
Annette
NULL
Roulet
6CAS28514M Carlos
A
Santana
5MMS49649F Mary
M
Saveley
8CGS88322F Carine
G
Schmitt
13MAS70474F
Margaret
A
Smith
9HAS54740M Howard
A
Snyder
12MFS52347M Martn
F
Sommer
10DBT39435M Daniel
B
Tonini
11id_employ (#1)
position_employ (#6)
id_diteur (#7)
date_embauche (#8)PMA42628M
35
0877
08/12/92PSA89086M 89
1389
12/12/90
VPA30890F
140
0877
09/10/90PHB50241M 170
0736
08/09/88L-B31947F
120
0877
02/11/91F-C16315M 227
9952
11/02/90PTC11962M 215
9952
11/11/89AC71970F
87
1389
10/12/91PJD25939M 246
1756
03/01/89R-D39728F 35
0877
09/11/89AMD15433F 200
9952
07/12/91ARD36773F 100
0877
01/12/93PHF38899M
75
0877
05/12/92PXH22250M 159
0877
08/11/93PDI47470M 195
0736
05/09/93KFJ64308F 100
0736
10/12/92MGK44605M 220
0736
05/01/94POK93028M
80
9999
11/11/93JYL26161F 172
9901
05/12/91M-L67958F 135
1389
03/12/92Y-L77953M 32
1389
06/11/89LAL21447M 175
0736
06/03/90ENL44273F
35
0877
07/12/90PCM98509F 150
9999
08/01/89R-M53550M 150
0736
09/05/91HAN90777M 120
9999
03/11/93TPO55093M 100
0736
06/11/88SKO22412M
150
1389
04/05/91MAP77183M 112
1389

12/07/92PSP68661F 125
1389
01/12/94M-P91209M 101
9999
01/09/89LCQ23061M 198
1622
10/09/93LJR92907F
170
9999
03/11/94M-R38834F 75
0877
02/05/92DWR65030M 192
1389
12/12/91A-R89858F 152
9999
02/11/90CAS28514M 211
9999
04/11/89MMS49649F
175
0736
06/12/93CGS88322F 64
1389
07/07/92MAS70474F 78
1389
09/11/88HAS54740M 100
0736
11/11/88MFS52347M 165
0736
04/11/90DBT39435M
75
0877
01/01/90Table emploisA chaque type demploi,
correspond un coefficient minimal (niv_min) et un coefficient maximal (niv_max)
Nom_colonne Type de donnes
NULL Par #d##f#a#u#t# #C#h#e#c#k#
#C#l##/#i#n#d#e#x##i#d#_#e#m#p#l#o#i#
#
#s#m#a#l#l#i#n#t# #
#n#o#n#
#I#D#E#N#T#I#T#Y#(#1#,#1#)#
#C#P#,# #o#r#d#o#n#n##.#
#d#e#s#c#_#e#m#p#l#o#i# #v#a#r#c#h#a#r#(#5#0#)# #n#o#n#
#o#u#i# #(#1#)# # #
#
##n#i#v#_#m#i#n# #
#t#i#n#y#i#n#t#
#
#n#o#n#
#o#u#i#
#(#2#)# #
##n#i#v#_#m#a#x# #
#t#i#n#y#i#n#t#
#
#n#o#n#
#o#u#i#
#(#3#)# #
####i#d#_#e#m#p#l#o#i# #d#e#s#c#_#e#m#p#l#o#i# #
#
#n#i#v#_#m#i#n#
#n#i#v#_#m#a#x###1#
#N#o#u#v#e#a#u#
#c#o#l#l#a#b#o#r#a#t#e#u#r# # #P#o#s#t#e# #n#on spcifi 10
102
Directeur
gnral
200
2503 Directeur des oprations commerciales
175
2254 Responsable financier
175
2505 Editeur
150
2506 Editeur en chef
140
2257 Directeur du marketing
120
2008 Directeur des relations publiques
100
1759 Directeur
des achats
75
17510 Directeur de la productionr
75
16511
Directeur des oprations
75
15012 Rdacteur
25
10013 Reprsentant commercial
25
10014 Graphiste
25
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). Table auteurs
Certains
auteurs travaillent sous contrat avec leur diteur ( colonne contrat de type bit)
Nom_colonne Type de donnes
NULL Par dfaut
Check Cl/Indexid_auteur
id
non
oui (1)
CP, .nom_auteur
varchar(40) non
Compos, non ordonn (3) pn_auteur
varchar(20) non
Compos, non ordonn (3) tlphone
char(12)
non
'INCONNU'
adresse
varchar(40) oui
ville
varchar(20) oui
pays
char(2)
oui
code_postal char(5)
oui
oui (2)
contrat
bit
non
(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
Bourne
Stphanie
45.33.08.49
213-46-8915 Mathieu
Charles
93.11.73.35238-95-7766 Chartier
Laurent
38.66.24.53267-41-2394 Mdina
Marguerite
48.96.77.44274-80-9391 Merrell
Patricia
42.27.44.35341-221782 Lorense
Danielle
02.32.89.34409-56-7008 Bucchia
Patrice
42.01.84.27427-17-2319 Logerot
Philippe
42.24.89.91472-27-2349 Schildwachter
Xavier
47.04.44.77486-291786 Vue
Jessica
42.71.09.71527-72-3246 Posey
William
69.15.11.00648-92-1872 Sorense
Christophe
56.79.96.29672-713249 De Verne
Vincent
45.48.12.23712-45-1867 Vilc
Benjamin
93.30.24.68722-51-5454 Hall
Catherine
54.43.36.78724-08-9931 D'Autricourt
Alain
46.36.37.99724-80-9391
Lacouture
Gilles
45.04.48.78756-30-7391 Jalabert

Marc
45.22.88.91807-91-6654 Bec
Arthur
22.47.87.11
846-92-7186 Letournec
Benot
48.54.31.99893-72-1158 Facq
Jean-Rmy
56.48.05.44899-46-2035 Chevalier
Anne
20.24.54.21
998-72-3567 Chevalier
Bernard
20.24.54.20id_auteur (#1)
adresse (#5)
ville (#6)
pays(#7)
code_postal (#8)
contrat (#9)172-32-1176 4, square Gauguin
Nice
FR
06014
1213-46-8915
18, avenue Arbabi
Paris
FR
75017
123895-7766
4, impasse Lamoix
Bordeaux
FR
33000
1267-41-2394
48, passage Sainte Anne Toulouse
FR
31002
1274-80-9391
2, place du Gnral Catroux
Paris
FR
75015
1341-22-1782
14, impasse Lacarte
Lige
BE
01548
0409-56-7008
201, boulevard de Clichy
Bordeaux
FR
33000
1427-17-2319
32, rue de l'Amiral Clou
Luxembourg LU
01016
1472-27-2349
11, rue Buffon
Bruxelles
BE
02530
1486-29-1786
62-64, rue Vieille du Temple Chevrette
FR
91450
1527-72-3246
57, avenue des tapis
Zurich
CH
91450
0648-92-1872
55 , rue Pierre-Louis Coll
Zurich
CH
91450
1672-71-3249
113, rue du Cherche-Midi
Vers-La-Petite
FR
91712
1712-45-1867
18, faubourg Saint Jean Monte Carlo MC
98000
1722-51-5454
12,
rue Astarte
Luxembourg LU
02016
1724-08-9931
75, rue des
Couronnes
Paris
FR
75017
0724-80-9391
20, rue de la Pompe
Marseille
FR
13016
1756-30-7391
94, rue de la Condamine
Paris
FR
75020
1807-91-6654
4, chemin de la Tour de
Campel
Bruges
BE
05006
1846-92-7186
32, rue du Mont
Thabor
Lille
FR
59000
1893-72-1158
59, rue Lisleferme
Paris
FR
75018
0899-46-2035
48, rue de Valmy
Genve
CH
91712
1998-72-3567
48, rue de Valmy
Genve
CH
91712
1Table titreauteurAttention: 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 Type de donnes
NULL Par dfaut Check Cl/indexid_auteur
id
non
Compos CP, ordonn., (1) CE
auteurs(id_auteur) (2) id_titre
tid
non
Compos CP,
ordonn., (1) CE titres(id_titre) (3) cmd_auteur
tinyint
oui
droits_pourcent
int
oui
(1)
L'index compos, cl primaire, ordonn est dfini sur id_auteur, id_titre.
Cette cl trangre a galement un index non ordonn sur id_auteur. (3)
Cette
cl trangre a galement un index non ordonn sur id_titre.
id_auteur
id_titre
cmd_auteur droits_pourcent172-32-1176
PS3333
1
100213-46-8915
BU1032
2
40213-46-8915
BU2075
1
100238-95-7766
PC1035
1
100267-41-2394
BU1111
2
40274-80-9391
BU7832
1
100409-56-7008
BU1032
1
60427-17-2319
PC8888
1
50486-29-1786
PC9999
1
100486-29-1786
PS7777
1
100712-45-1867
MC2222
1
100722-51-5454
MC3021
1
75724-80-9391
BU1111
1
60724-80-9391
PS1372
2
25756-30-7391
PS1372
1
75846-92-7186
PC8888
2
50899-46-2035
MC3021
2
25899-46-2035
PS2091
2
50998-72-3567
PS2091
1
50998-72-3567
PS2106
1
100Table titresCertains
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 Type de donnes
NULL
Par dfaut Check Cl/indexid_titre
tid
non
CP,
ordonn.titre
varchar(80) non
Non ordonn.type
char(12)
non
UNDECIDED'
id_diteur
char(4)
oui
CE diteurs(id_diteur)prix
money
oui
avance
money
oui
droits
int
oui
cumulannuel_ventes
int
oui
notes

varchar(200)
oui
datepub
datetime
non
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)
titre (#2) t
type (#3)
id_diteur (#4)
prix (#5)BU1032
Guide des
bases de donnes du gestionnaire press
gestion
1389
140,00
BU1111
La cuisine - l'ordinateur : bilans clandestins
gestion
1389
82,00BU2075
Le stress en informatique
n'est pas une fatalit!
gestion
0736
24,00BU7832
Toute
la vrit sur les ordinateurs
gestion
1389
136,00
MC2222
Les festins de Parly 2
cui_moderne 0877
136,00MC3021
Les micro-ondes par gourmandise
cui_moderne 0877
21,00MC3026
La psychologie des ordinateurs de
cuisine
SANS TITRE 0877
NULLPC1035
Est-ce vraiment
convivial?
informatique
1389
156,00PC8888
Les secrets de la Silicon Valley
informatique
1389
136,00PC9999
Guide des bonnes manires sur un rseau
informatique
1389
NULLPS1372
Phobie et passion
informatique : ventail de comportements psychologie 0877
147,00PS2091
La colre : notre ennemie?
psychologie 0736
76,00
PS2106
Vivre sans crainte
psychologie 0736
49,00PS3333
Privation durable d'informations : tude de quatre cas
reprsentatifs
psychologie 0736
136,00PS7777
Equilibre
motionnel : un nouvel algorithme
psychologie 0736
54,00
id_titre (#1)
avance (#6) droits (#7)
cumulannuel_ventes (#8)BU1032
35.000
10
4095BU1111
34.000
10
3876BU2075
69.000
24
18722BU7832
34.000
10
4095MC2222
0.00
12
2032MC3021
102.000
24
22246MC3026
NULL
NULL
NULL
PC1035
48.000
16
8780PC8888
54.000
10
4095PC9999
NULL
NULL
NULLPS1372
48.000
10
375PS2091
15.000
12
2045PS2106
41.000
10
111PS3333
14.000
10
4072PS7777
27.000
10
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/85BU1111
Conseils utiles vous permettant de tirer le meilleur parti possible de vos
ressources informatiques.
06/09/85BU2075
Expos des techniques
mdicales et psychologiques les plus rcentes permettant de survivre dans le bureau
lectronique. Explications claires et dtailles.
06/12/85BU7832
Analyse commente des possibilits
offertes par les ordinateurs : un guide impartial pour l'utilisateur critique.
06/12/85MC2222
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/85MC3021
Adaptation de recettes traditionnelles des provinces
franaises - la cuisine au micro-ondes.
06/09/85MC3026
NULL
17/05/96PC1035
Etude
comparative des progiciels les plus rpandus. S'adressant aux utilisateurs
dbutants, cet ouvrage tablit un palmars des logiciels en fonction de leur
convivialit.
06/12/85PC8888
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/85PC9999
La bible des dbutants dans un environnement rseau.
17/05/96PS1372
Lecture indispensable pour le

spcialiste : cet ouvrage tudie les diffrences entre ceux qui dtestent et
craignent les ordinateurs et ceux qui les trouvent patants.
10/11/85PS2091
Etude approfondie des
consquences somatiques des motions fortes. De nombreux schmas du mtabolisme
illustrent l'expos et en facilitent la comprhension.
06/11/85PS2106
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/85PS3333
Que se passe-t-il
quand les donnes viennent manquer? Analyse scientique des effets du manque
d'information sur les grands consommateurs.
06/12/85PS7777
Comment se protger contre le stress
exagr du monde moderne. Parmi les remdes proposs : utilisation de l'ordinateur
et alimentation judicieusement choisie.
06/12/85Table droits_prvusLes 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 Type de donnes
NULL Par dfaut Check
Cl/indexid_titre
idt
non
CE titres(id_titre)
minimum
int
oui
maximum
int
oui
droits
int
oui
id_titre
minimum
maximum
droitsBU1032
0
5000 10BU1032
5001 50000 12PC1035
0
2000 10PC1035
2001 3000 12PC1035
3001 4000 14PC1035
4001
10000 16PC1035
10001 50000 18BU2075
0
1000 10BU2075
1001 3000
12BU2075
3001 5000 14BU2075
5001 7000 16BU2075
7001 10000 18
BU2075
10001 12000 20BU2075
12001 14000 22BU2075
14001 50000 24PS2091
0
1000 10PS2091
1001 5000 12PS2091
5001 10000 14PS2091
10001
50000 16PS2106
0
2000 10PS2106
2001 5000 12PS2106
5001 10000
14PS2106
10001 50000 16MC3021
0
1000 10MC3021
1001 2000 12
MC3021
2001 4000 14MC3021
4001 6000 16MC3021
6001 8000 18MC3021
8001 10000 20MC3021
10001 12000 22MC3021
12001 50000 24PC8888
0
5000 10PC8888
5001 10000 12PC8888
10001 15000 14PC8888
15001 50000
16PS7777
0
5000 10PS7777
5001 50000 12PS3333
0
5000 10
PS3333
5001 10000 12PS3333
10001 15000 14PS3333
15001 50000 16BU1111
0
4000 10BU1111
4001 8000 12BU1111
8001 10000 14BU1111
12001
16000 16BU1111
16001 20000 18BU1111
20001 24000 20BU1111
24001 28000
22BU1111
28001 50000 24MC2222
0
2000 10MC2222
2001 4000 12
MC2222
4001 8000 14MC2222
8001 12000 16MC2222
12001 20000 18MC2222
20001 50000 20BU7832
0
5000 10BU7832
5001 10000 12BU7832
10001
15000 14BU7832
15001 20000 16BU7832
20001 25000 18BU7832
25001 30000
20BU7832
30001 35000 22BU7832
35001 50000 24PS1372
0
10000 10
PS1372
10001 20000 12PS1372
20001 30000 14PS1372
30001 40000 16PS1372
40001 50000 18Table ventesLes 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.Nom_colonne
Type de donnes
NULL Cl/indexid_mag
char(4)
non
Compos CP, ordonn. (1) , CE magasins(id_mag)num_cmd
varchar(20) non
Compos CP, ordonn. (1) date_cmd
datetime
non
qt
smallint
non
modepaiements
varchar(12) non
id_titre
idt
non
Compos CP, ordonn., (1) CE titres(id_titre)
(1) L'index compos, cl primaire, ordonn est dfini sur
id_mag, num_cmd, id_titre.
id_mag
num_cmd
date_cmd
qt
modepaiements
id_titre63
6380 722a
09/11/94
3
Net 60
PS20917066 A2976

05/12/93
50
Net 30
PC88887066 QA7442.3
09/12/94
75
Comptant
PS20917067 D4482
09/12/94
10
Net 60
PS20917131 N914008
09/12/94
20
Net 30
PS20917131 N914014
09/12/94
25
Net 30
MC30217131 P3087a
05/12/93
20
Net 60
PS13727131 P3087a
05/12/93
25
Net 60
PS2106
7131 P3087a
05/12/93
15
Net 60
PS33337131 P3087a
05/12/93
25
Net 60
PS77777896 QQ2299
10/12/93
15
Net 60
BU78327896 TQ456
12/12/93
10
Net 60
MC22227896 X999
02/11/93
35
Comptant
BU20758042 423LL922
09/12/94
15
Comptant
MC30218042 423LL930
09/12/94
10
Comptant
BU10328042 P723
03/11/93
25
Net 30
BU11118042 QA879.1
05/11/93
30
Net 30
PC1035
Table magasinsNom_colonne
Type de donnes
NULL Par dfaut Check Cl/index
id_mag
char(4)
non
CP, ordonn.nom_mag
varchar(40) oui
adresse_mag varchar(40) oui
ville
varchar(20) oui
pays
char(2)
oui
code_postal char(5)
oui
id_mag
nom_mag
adresse_mag
ville pays code_postal6380
Eric the Read Books
788 Catamaugus Ave.
Seattle
WA
980567066
Librairie
spcialise
567, Av. de la Victoire
Paris FR
750167067
Moissons livresques
577, Boulevard Anspach. Bruxelles
BE
10007131
Doc-U-Mat: Quality Laundry and Books
24-A Avrogado Way
Remulade
WA
980147896
Fricative Bookshop
89 Madison
St.
Fremont
CA
900198042
Bookbeat
679 Carson
St.
Portland
OR
89076Table remisesLes 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
Type de donnes
NULL Par dfaut Check
Cl/indextyperemise
varchar(40) non
id_mag
char(4)
oui
CE magasins(id_mag)qtmin
#s#m#a#l#l#i#n#t# #
#o#u#i#
#
#
##q#t##m#a#x#
#
#s#m#a#l#l#i#n#t# #
#o#u#i#
#
#
##r#e#m#i#s#e#
#
#d#e#c#i#m#a#l#
#
#n#o#n#
#
#
####t#y#p#e#r#e#m#i#s#e#
#i#d#_#m#a#g#
#q#t##m#i#n#
#q#t##m#a#x#
#r#e#m#i#s#e#
#R#e#m#i#s#e# #i#n#i#t#i#a#l#e#
#N#U#L#L#
#N#U#L#L#
#N#U#L#L#
#1#0#.#5#
#R#e#m#i#s#e# #V#o#l#u#m#e#
#N#U#L#L#
#1#0#0#
#1#0#0#0#
#6#.#7#
#R#e#m#i#s#e# #c#l#i#e#n#t#
#8#0#4#2#
#N#U#L#L#
#N#U#L#L#
#5#.#0#####
#C#o#n#s#u#l#t#a#t#i#o#n# #d## u#n#e# #b#a#s#e# #d#e# #d#o#n#n##e#s###&
#D#o#c#.# #e#n# #L#i#g#n#e##:# #c#h#a#p#i#t#r#e# ###A#c#c##d#e#r# #a#u#x#
#d#o#n#n##e#s# #e#t# #l#e#s# #m#o#d#i#f#i#e#r####### #R#e#q#u##t#e#
#S#e#l#e#c#t# #s#i#m#p#l#e# #s#u#r# #u#n#e# #s#e#u#l#e# #t#a#b#l#e##& #D#o#c#.#
#e#n# #L#i#g#n#e##:# ###P#r#i#n#c#i#p#e# #d#e# #b#a#s#e#s# #d#e#s#
#r#e#q#u##t#e#s###S#Q#L# #2##:# #p#.# #4#3#-#6#0####L#'#i#n#s#t#r#u#c#t#i#o#n#
#S#E#L#E#C#T# #s#p##c#i#f#i#e# #l#e#s# #c#o#l#o#n#n#e#s# #q#u#e# #v#o#u#s#
#v#o#u#l#e#z# #r##c#u#p##r#e#r#.# #L#a# #c#l#a#u#s#e# 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_slectionPar exemple, l'instruction SELECT suivante extrait les nom et
prnom des crivains de la table auteurs vivant Paris.SELECT pn_auteur,
nom_auteurFROM auteursWHERE ville = 'Paris' pn_auteur
nom_auteur
--------# # # # #-#-#-#-#-#-#-#-#-#-#-#-#-#-##C#h#a#r#l#e#s# # # # # #
# # # # # # # # # # #M#a#t#h#i#e#u##P#a#t#r#i#c#i#a# # # # # # # # # # # # # # #
#M#e#r#r#e#l#l##A#l#a#i#n# # # # # # # # # # # # # # # # # # #
#D#'#A#u#t#r#i#c#o#u#r#t##M#a#r#c# # # # # # # # # # # # # # # # # # #
#J#a#l#a#b#e#r#t##J#e#a#n#-#R##m#y# # # # # # # # # #F#a#c#q###:

#E#x#e#r#c#i#c#e# #1##:# # #A#f#f#i#c#h#e#r# #l#e# #n#o#m#,# #l#a# #v#i#l#l#e#


#e#t# #l#a# #r##g#i#o#n# #d#e# #t#o#u#s# #l#e#s# ##d#i#t#e#u#r#s## # ##L#a
syntaxe complte de l'instruction SELECT: SELECT [ALL | DISTINCT]
liste_de_slection #
[INTO [nouveau_nom_de_table]] #[FROM {nom_de_table |
nom_de_vue}[(conseils-optimiseur)] #
[[, {nom_de_table2 | nom_de_vue2}
[(conseils-optimiseur)] #
[..., {nom_de_table16 | nom_de_vue16}[(( conseilsoptimiseur)]]] #[clause WHERE]#[clause GROUP BY]#[clause HAVING]#[clause ORDER
BY]#[clause COMPUTE]#[FOR BROWSE ]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_colonnePar 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.villeVous 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_auteurFROM auteursORDER BY
nom_auteurORDER BY 2Pour plus d'informations sur SELECT, consultez l'instruction
SELECT dans le Manuel de rfrence Transact-SQL (choisissez Select Examples (T-SQL)
) Slection de lignes: clause Where Les critres de slecti#o#n#,# #o#u#
#c#o#n#d#i#t#i#o#n#s#,# #d#e# #l#a# #c#l#a#u#s#e# #W#H#E#R#E# #p#e#u#v#e#n#t#
#i#n#c#l#u#r#e#:## #D#e#s# #o#p##r#a#t#e#u#r#s# #d#e# #c#o#m#p#a#r#a#i#s#o#n#
#(#t#e#l#s# #q#u#e# #=#,# #<# #>#,# #<#,# #e#t# #>#)##W#H#E#R#E# #a#v#a#n#c#e# #*#
#2# #># #c#u#m#u#l#a#n#n#u#e#l#_#v#e#n#t#e#s# #*# #p#r#i#x## # ## D#e#s#
#i#n#t#e#r#v#a#l#l#e#s# #(#B#E#T#W#E#E#N# #e#t# #N#O#T# #B#E#T#W#E#E#N#)#
#W#H#E#R#E# #c#u#m#u#l#a#n#n#u#e#l#_#v#e#n#t#e#s# #b#e#t#w#e#e#n# #4#0#9#5# #a#n#d#
#1#2#0#0#0## # ## D#e#s# #l#i#s#t#e#s# #(#I#N#,# #N#O#T# #I#N#)##W#H#E#R#E#
#s#t#a#t#e# #i#n# #(#'#B#E#'#,# #'#C#H#'#,# #'#L#U#'#)## # ## D#e#s#
#c#o#n#c#o#r#d#a#n#c#e#s# #a#v#e#c# #d#e#s# #m#o#d##l#e#s# #(#L#I#K#E# #e#t#
#N#O#T# #L#I#K#E#)##W#H#E#R#E# #t##l##p#h#o#n#e# #n#o#t# #l#i#k#e# #'#4#5#%#'###
%#
#
#T#o#u#t#e# #c#h#a##n#e# #d#e# #z##r#o# #c#a#r#a#c#t##r#e# #o#u#
#p#l#u#s##_# #
#
#T#o#u#t# #c#a#r#a#c#t##r#e# #u#n#i#q#u#e##[#a#-#f#]#
#
#T#o#u#t# #c#a#r#a#c#t##r#e# #d#e# #l#'#i#n#t#e#r#v#a#l#l#e# #(#[#a##f#]#)# #o#u# #d#e# #l#'#e#n#s#e#m#b#l#e# #s#p##c#i#f#i## #(#[#a#b#c#d#e#f#]#)#
#[#^#a#-#f#]#
#T#o#u#t# #c#a#r#a#c#t##r#e# #e#n# #d#e#h#o#r#s# #d#e#
#l#'#i#n#t#e#r#v#a#l#l#e# #(#[#^#a#-#f#]#)# #o#u# #d#e# #l#'#e#n#s#e#m#b#l#e#
#s#p##c#i#f#i## #(#[#^#a#b#c#d#e#f#]#)### D#e#s# #v#a#l#e#u#r#s#
#i#n#c#o#n#n#u#e#s# #(#I#S# #N#U#L#L# #e#t# #I#S# #N#O#T# #N#U#L#L#)##w#h#e#r#e#
#a#v#a#n#c#e# #i#s# #n#u#l#l## # ## D#e#s# #c#o#m#b#i#n#a#i#s#o#n#s# #d#e#
#c#e#s# #c#r#i#t##r#e#s# #(#A#N#D#,# #O#R#)##w#h#e#r#e# #a#v#a#n#c#e# #<#
#3#0#0#0#0# #o#r# #(#c#u#m#u#l#a#n#n#u#e#l#_#v#e#n#t#e#s# #># #2#0#0#0# #a#n#d#
#c#u#m#u#l#a#n#n#u#e#l#_#v#e#n#t#e#s# #<# #2#5#0#0#)###:
#E#x#e#r#c#i#c#e##2##:# #L#I#K#E#,# #B#E#T#W#E#E#N#,# #A#N#D# # ##
#A#f#f#i#c#h#e#r# #l#e# #n#o#m#,# #l#e# #p#r##n#o#m#,# #e#t# # #l#a# #d#a#t#e#
#d## e#m#b#a#u#c#h#e# #d#e#s# #e#m#p#l#o#y##s# #e#m#b#a#u#c#h##s# #e#n# #9#0#,#
#d#o#n#t# #l#e# #n#o#m# #c#o#m#m#e#n#c#e# #p#a#r# ## L## ,# #e#t# #l#a#
#p#o#s#i#t#i#o#n# #e#s#t# #c#o#mprise entre 10 et 100Exercice 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)Exercice 4: IN, ORDER BY
Afficher le nom, le pays et ladresse des auteurs Franais, Suisse ou Belge,
classs par pays. Expressions et fonctionsLes 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, avanceFROM titresWHERE avance > = 500 *
prixSuivant 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, datepu#b#,# #g#e#t#d#a#t#e#(#)#)## #F#R#O#M# #t#i#t#r#e#s##
## #R#e#q#u##t#e# #s#u#r# #l#e#s# #g#r#o#u#p#e#s##:# # # #G#R#O#U#P# #B#Y#,#
#f#o#n#c#t#i#o#n#s# #d#e# #g#r#o#u#p#e#,# #H#A#V#I#N#G##& D#o#c#.# #e#n#
#l#i#g#n#e####C#o#n#c#e#p#t#s# #d#e# #r#e#q#u##t#e#s# #a#v#a#n#c##e#s####:#
###R#e#g#r#o#u#p#e#m#e#n#t# #d#e# #l#i#g#n#e#s# ## #l## a#i#d#e# #d#e# ## # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # #
Group
byLa 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:SELECT type, AVG(avance),
SUM(cumulannuel_ventes)
FROM titres
GROUP BY type
type
---------------------------------- ----------- cui_moderne
51,000.00
24278
cui_traditio
43,000.00
19566
gestion
43,000.00
30788
informatique
51,000.00
12875
psychologie
29,000.00
9939
SANS TITRE
(null)
(null)
(6 ligne(s) affecte(s))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.#CARSPECIAUX 45 \f
"Symbol" \s 10 \h#
COUNT, compte les occurrences pour un attribut,
#CARSPECIAUX 45 \f "Symbol" \s 10 \h#
SUM, somme les valeurs de l'attribut (de
type numrique),#CARSPECIAUX 45 \f "Symbol" \s 10 \h# AVG, fait la moyenne
(Average) des valeurs de l'attribut,#CARSPECIAUX 45 \f "Symbol" \s 10 \h#
MAX,
MIN, donne la valeur MAX et la valeur MIN de l'attribut.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 typeFROM titresGROUP BY
typeHAVING COUNT(*) > 1type
------------ cui_moderne cui_traditio gestion
informatique psychologie Regrouper les titres en fonction du type, en se limitant
aux types qui dbutent pas par la lettre cSELECT typeFROM titresGROUP BY type
HAVING type LIKE 'c%'type------------cui_modernecui_traditioRegrouper 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 titresGROUP BY id_diteurHAVING
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 titresWHERE prix >= 60GROUP BY id_diteur
HAVING SUM(avance) > 90000
AND AVG(prix) < 150
AND id_diteur > '0800'ORDER
BY id_diteur
###################################################################################
##################################################: #E#x#e#r#c#i#c#e##5##:#
#G#R#O#U#P# #B#Y#,# #C#O#U#N#T#,# #M#I#N#,# #M#A#X# ##P#o#u#r# #c#h#a#q#u#e#
#n#i#v#e#a#u# #d## e#m#p#l#o#i# #(#t#a#b#l#e# #e#m#p#l#o#y##s#,# #c#o#l#o#n#n#e#
#p#o#s#i#t#i#o#n#_#e#m#p#l#o#y##)# #a#f#f#i#c#h#e#r# #l#e# #n#o#m#b#r#e# #d##
e#m#p#l#o#y##s# #d#e# #c#e# #n#i#v#e#a#u#,# # #l#a# #d#a#t#e# #d##
e#m#b#a#u#c#h#e# #d#u# #s#a#l#a#r#i## #l#e# #p#l#u#s# #a#n#c#i#e#n# #e#t# #d#u#

#p#l#u#s# #r##c#e#n#t# #d#a#n#s# #l#e# #n#i#v#e#a#u###E#x#e#r#c#i#c#e# #6##:#


#G#R#O#U#P# BY, MAXPour chaque Identificateur de titre, calculer les droits prvus
maximum (table droits_prvus, colonne droits) Exercice 7: GROUP BY, clause sur un
sous-ensemble HAVING Afficher le nombre des diteurs regroups par pays, en se
limitant aux pays dont le nom contient un 'S' ou un 'R' Infos de dtails ET infos
globales: COMPUTELa clause COMPUTE est employe dans des instructions SELECT avec
des fonctions d'agrgation ligne
###################################################################### #S#U#M#,#
#A#V#G#,# #M#I#N#,# #M#A#X# #e#t# #C#O#U#N#T# # #p#o#u#r# #g##n##r#e#r# #d#e#s#
#v#a#l#e#u#r#s# #s#t#a#t#i#s#t#i#q#u#e#s# ## #p#a#r#t#i#r# #d#e# #v#a#l#e#u#r#s#
#c#o#n#t#e#n#u#e#s# #d#a#n#s# #d#e#s# #g#r#o#u#p#e#s# #d#e# #l#i#g#n#e#s#.##C#e#s#
#v#a#l#e#u#r#s# #s#t#a#t#i#s#t#i#q#u#e#s# #a#p#p#a#r#a#i#s#s#e#n#t# #s#o#u#s#
#f#o#r#m#e# #d#e# #l#i#g#n#e#s# #s#u#p#p#l##m#e#n#t#a#i#r#e#s# #d#a#n#s# #l#e#s#
#r##s#u#l#t#a#t#s# #d#e# #l#a# #r#e#q#u##t#e#,# #c#e# #q#u#i# #v#o#u#s#
#p#e#r#m#e#t# #de visualiser les lignes dtail et les lignes de statistiques dans
un seul ensemble de rsultats..Exemple: somme des prix des diffrents types de
livres de cuisineSELECT type, prixFROM titresWHERE type like 'cui%'ORDER BY type,
prixCOMPUTE SUM(prix) BY typetype
prix
------------------------------------- cui_moderne 21.00
cui_moderne
136.00
sum
==========================
157.00
# # # # # # # # # # # # # # # #####: E#x#e#r#c#i#c#e##8##:#
#C#O#M#P#U#T#E###P#o#u#r# #c#h#a#q#u#e# #n#i#v#e#a#u# #d#e# #d#r#o#i#t#s#,#
#a#f#f#i#c#h#e#r# #l#e#s# #i#d#e#n#t#i#f#i#c#a#t#e#u#r#s# #d#e#s# #l#i#v#r#e#s#
#c#o#r#r#e#s#p#o#n#d#a#n#t#,# #l#e# #m#i#n# #e#t# #l#a# #m#a#x# #d#e# #v#e#n#t#e#s#
#d#o#n#n#a#n#t# #d#r#o#i#t# ## #c#e# #n#i#v#e#a#u# #(#i#n#f#o#s# #d#e#
#d##t#a#i#l#s#)#,# #e#t# #l#e# #n#o#m#b#r#e# #d#e# #l#i#v#r#e#s# #d#a#n#s# #l#e#
#n#i#v#e#a#u# # #(#r##c#a#p#i#t#u#l#a#t#i#f#)#droits
id_titre minimum
maximum
----------- -------- ----------- ----------- 10
BU1032
0
5000
10
PC1035
0
2000
10
BU2075
0
1000
count
========
3..etc Afficher les
noms dauteurs, leur pays et leur ville en les classant par ville (infos de
dtail), et le nombre dauteurs par pays (rcapitulatif) Travail sur plusieurs
tables: les jointures ######################& D#o#c#.# #e#n# #l#i#g#n#e##:# #
###P#r#i#n#c#i#p#e# #d#e# #b#a#s#e# #d#e#s# #j#o#i#n#t#u#r#e#s#### # # # # # #
# #S#Q#L#2##:# #p#.# #6#1# ## #7#8###L#e#s# #o#p##r#a#t#i#o#n#s# #d#e#
#j#o#i#n#t#u#r#e# #p#e#r#m#e#t#t#e#n#t# #d#'#e#x#t#r#a#i#r#e# #d#e#s#
#d#o#n#n##e#s# ## #p#a#r#t#i#r# #d#e# #p#l#u#s#i#e#u#r#s# #t#a#b#l#e#s# #o#u#
#v#u#e#s# #d#a#n#s# #l#a# #m##m#e# #b#a#s#e# #d#e# #d#o#n#n##e#s# #o#u# #d#a#n#s#
#d#e#s# #b#a#s#e#s# #d#i#f#f##r#e#n#t#e#s# #e#n# #n#'#e#f#f#e#c#t#u#a#n#t#
#q#u#'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_diteurFROM auteurs, diteursWHERE auteurs.ville
= diteurs.villepn_auteur
nom_auteur
nom_diteur----------------------------- -------------------Xavier
Schildwachter
Algodata
Infosystems Alain
D'Autricourt
Editions Lucerne
Charles
Mathieu
Editions Lucerne Jean-Rmy
Facq
Editions LucerneMarc
Jalabert
Editions Lucerne
# # # # # # # # #
# # # # # # # # # # # # # ##P#a#t#r#i#c#i#a# # # # #M#e#r#r#e#l#l# # # # # # # # #
# # # #E#d#i#t#i#o#n#s# #L#u#c#e#r#n#e####O#u# #a#v#e#c# #l## o#p##r#a#t#e#u#r#
#J#O#I#N# #d#a#n#s# #l#a# #s#y#n#t#a#x#e# #S#Q#L# #2##:###S#E#L#E#C#T#
#p#n#_#a#u#t#e#u#r#,# #n#o#m#_#a#u#t#e#u#r#,# #n#o#m#_##d#i#t#e#u#r##F#R#O#M#
#a#u#t#e#u#r#s# ##J#O#I#N# ##d#i#t#e#u#r#s# #o#n# #a#u#t#e#u#r#s#.#v#i#l#l#e# #=#
##d#i#t#e#u#r#s#.#v#i#l#l#e####: E#x#e#r#c#i#c#e# #9##:# #J#o#i#n#t#u#r#e#
#e#n#tre trois tables Afficher les noms des auteurs parisiens, les titres et les

prix de leurs livresExercice 10: Jointure sur quatre tables, ORDER BY, COMPUTE
Pour chaque diteur, afficher le nom de lditeur, les titres des livres quil
publie,
les noms des magasins o ils sont vendus, le nombre dexemplaires vendus dans
chaque magasin, et le nombre dexemplaires vendus au total par chaque diteur:
nom_diteur
titre
nom_mag
qt
-------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ Algodata Infosystems
Guide des
bases de donnes du gestionnaire press
Eric the Read Books
5
Algodata Infosystems
Guide des bases de donnes du gestionnaire press
Bookbeat
10
Algodata Infosystems
La
cuisine - l'ordinateur : bilans clandestins
Bookbeat
25
Algodata Infosystems
Toute la vrit sur les ordinateurs
Fricative Bookshop
15
sum
======
55 nom_diteur
titre
nom_mag
qt
-------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ Binnet & Hardley
Les
festins de Parly 2
Fricative Bookshop
10
Binnet & Hardley
Les micro-ondes par gourmandise
Doc-U-Mat: Quality Laundry and Books
25
sum
======
35 Exercice 11: jointure sur 4 tables, GROUP BY, HAVING, SUMAfficher les noms des
auteurs qui ont vendu au moins 20 livres, et le nombre de livres quils ont vendus
(tables auteurs, titreauteur, titres, ventes) Les sous-requtes
###################################################################################
###################################################################################
########& D#o#c#.# #e#n# #l#i#g#n#e##:# # ###C#o#n#c#e#p#t#s# #d#e#
#r#e#q#u##t#e#s# #a#v#a#n#c##e#s####:# ###P#r#i#n#c#i#p#e# #d#e# #b#a#s#e#
#d#e#s# #s#o#u#s#-# ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #r#e#q#u##t#e#s#####U#n#e# #s#o#u#s#-#r#e#q#u##t#e#
#e#s#t# #u#n#e# #i#n#s#t#r#u#c#t#i#o#n# #S#E#L#E#C#T# #i#m#b#r#i#q#u##e# ##
#l#'#i#n#t##r#i#e#u#r# #d#'#u#n#e# #i#n#s#t#r#u#c#t#i#o#n# #S#E#L#E#C#T#,#
#I#N#S#E#R#T#,# #U#P#D#A#T#E# #o#u# #D#E#L#E#T#E, 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:(SELECT [ALL | DISTINCT] liste_de_slection_de_la_sous-requte
#[FROM {nom_de_table | nom_de_vue}[conseils-optimiseur] # [[, {nom_de_table2 |
nom_de_vue2}[conseils-optimiseur] # [..., {nom_de_table16 | nom_de_vue16}[conseilsoptimiseur]]] #[clause WHERE]#[clause GROUP BY]#[clause HAVING])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,
EXISTSMthode de construction des sous-requtes renvoyant une et une seule valeur
Pour trouver tous les livres de mme prix que le livre Toute la vrit sur les
ordinateurs, on peut procder en deux tapes, en cherchant dabord le prix du
livre Toute la vrit sur les ordinateurs :SELECT prixFROM titresWHERE titre =
'Toute la vrit sur les ordinateurs'prix ------136,00Puis, en utilisant ce
rsultat dans une seconde requte pour trouver les livres qui ont le mme prix:
SELECT titre, prixFROM titresWHERE prix = 136titre
prix
--------------------------------------------- ------------Toute la vrit sur les ordinateurs
136,00
Les festins de
Parly 2
136,00
Les secrets de la Silicon Valley
136,00
Privation durable d'informations : tude
136,00
En substituant la constante 136, la requte qui calcule ce prix, on obtient la
solution avec sous-requte:SELECT titre, prixFROM titresWHERE 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 maximumSELECT max(prix)FROM titres-- => 156.00-- 2) trouver la
moyenne des prixSELECT avg(prix)FROM titres-- => 99.4-- 3) Ecrire la requte
principale avec ces constantesSELECT titreFROM
titresWHERE (prix >= 156.0/3)and
(prix <= 99.4) -- 4) Rcrire la requte principale en substituant les requtes
imbriques aux 2 constantesSELECT titreFROM
titresWHERE prix >= (SELECT
max(prix)
FROM titres ) /3 and
prix <= (SELECT avg(prix)
FROM titres ) Sous-requtes ensemblistes 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:SELECT
nom_auteur, pn_auteurFROM
auteurs auWHERE id_auteur IN (SELECT id_auteur FROM
titreauteur)Order by nom_auteurAvec loprateur EXISTS:SELECT nom_auteur,
pn_auteurFROM
auteurs auWHERE EXISTS (SELECT id_auteur FROM titreauteur
WHERE id_auteur = au#.#i#d#_#a#u#t#e#u#r#)##O#r#d#e#r# #b#y# #n#o#m#_#a#u#t#e#u#r##
#% R#e#m#a#r#q#u#e#r# #l#a# #j#o#i#n#t#u#r#e# #s#u#p#p#l##m#e#n#t#a#i#r#e#
#e#n#t#r#e# #l#a# #t#a#b#l#e# #a#u#t#e#u#r#s# #d#e# #l#a# #r#e#q#u##t#e#
#p#r#i#n#c#i#p#a#l#e# #e#t# #l#a# #t#a#b#l#e# #t#i#t#r#e#a#u#t#e#u#r# #d#e# #l#a#
#r#e#q#u##t#e# #i#m#b#r#i#q#u##e#,# #p#a#r# #r#a#p#p#o#r#t# ## #l#a#
#s#o#l#u#t#i#o#n# #a#v#e#c# #l## o#p##r#a#t#e#u#r# #I#N####D#a#n#s# #c#e# #c#a#s#
#p#a#r#t#i#c#u#l#i#e#r#,# #l#e# #p#r#o#b#l##m#e# #e#st rductible une requte
simple, sans sous-requte:SELECT DISTINCT nom_auteur, pn_auteurFROM
auteurs au,
titreauteur tiWHERE au.id_auteur = ti.id_auteurORDER BY nom_auteur, pn_auteurSousrequtes oprant sur des listes, introduites par un oprateur de comparaison
modifi par ANY ou ALL:Exemple1 : Afficher les noms et les prnoms des auteurs
dont tous les livres ont un prix de 136 F SELECT nom_auteur, pn_auteurFROM
auteurs auWHERE 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
Lorsquune requte imbrique ne renvoie rien, toutes les expressions avec
loprateur ALL sont vraies: on peut tout dire de lensemble vide. La requte cidessus 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 nom_auteur, pn_auteurFROM
auteurs auWHERE id_auteur IN

(SELECT id_auteur FROM titreauteur)and


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_auteurExemple2 : Afficher les noms et les prnoms des auteurs dont au moins un
livre a un prix de 136FSELECT nom_auteur, pn_auteurFROM auteurs auWHERE 136 = ANY
(SELECT prix
FROM
titres t, titreauteur ta
WHERE au.id_auteur = ta.id_auteur
AND
t.id_titre = ta.id_titre)
ORDER BY nom_auteur, pn_auteurSi lensemble construit par la sous-requte est vide,
toutes les comparaisons contruites sur loprateur ANY sont fausses: il est
inutile de doubler les sous-r#e#q#u##t#e#s# #a#v#e#c# #A#N#Y# #d## u#n# #t#e#s#t#
#d## e#x#i#s#t#e#n#c#e#.##
#
###: E#x#e#r#c#i#c#e# #1#2##:# # #2#
#s#o#u#s#-#r#e#q#u##t#e#s#,# #E#X#I#S#T#,# #A#L#L# ##A#f#f#i#c#h#e#r# #l#e#s#
#n#o#m#s# #e#t# #p#r##n#o#m#s# #p#a#r# #o#r#d#r#e# #a#l#p#h#a#b##t#i#q#u#e#
#d#e#s# #a#u#t#e#u#r#s# #q#u#i# #p#o#s#s##d#e#n#t# #1#0#0#%# #d#e# #d#r#o#i#t#s#
#s#u#r# #t#o#u#s# #l#e#u#r#s# #l#i#v#r#e#s# ##!# #
#(#t#i#t#r#e#a#u#t#e#u#r#.#d#r#o#i#t#s#_#p#o#u#r#c#e#n#t# # #=# #1#0#0# #p#o#u#r#
#t#o#u#s# #les livres)Exercice 13 : 1 sous-requte, MAXAfficher le titre du livre
le plus cher (maximum de titre.prix)Exercice 14 : 1 sous-requte utilise dans la
clause SELECT, SUM Afficher la liste des titres dans lordre alphabtique et le
cumul de leurs ventes, tous magasins confondus (tables titres et ventes)Exercice 15
: 1 sous-requte, MAXAfficher le titre du livre le plus vendu de tous les
magasins, et le nom du magasinExercice 15 bis: Afficher le nom et lidentificateur
des diteurs qui dite#n#t# #d#e# #l#a# #g#e#s#t#i#o#n# #e#t# #p#a#s# #d##
i#n#f#o#r#m#a#t#i#q#u#e###A#f#f#i#c#h#e#r# #l#e# #n#o#m# #e#t# #l##
i#d#e#n#t#i#f#i#c#a#t#e#u#r# #d#e#s# ##d#i#t#e#u#r#s# #q#u#i# #n#e# #f#o#n#t#
#p#a#s# #d## a#v#a#n#c#e# #s#u#r# #t#o#u#s# #l#e#u#r#s# #l#i#v#r#e#s##### #L##
o#p##r#a#t#e#u#r# #e#n#s#e#m#b#l#i#s#t#e# #U#N#I#O#N##& D#o#c#.# #e#n#
#l#i#g#n#e##:# ###C#o#n#c#e#p#t#s# #d#e# #r#e#q#u##t#e#s#
#a#v#a#n#c##e#s####:# ###C#o#m#b#i#n#a#i#s#o#n# #d#e#s# #r##s#u#l#t#a#t#s#
#a#v#e#c
UNIONExemple: Noms, prnoms des auteurs habitant Genve ou ParisSELECT
nom_auteur, pn_auteurFROM auteursWHERE ville = 'Genve'UNIONSELECT
nom_auteur,pn_auteurFROM auteursWHERE ville = 'Paris'

Synthse sur les principes dcriture dune requte SELECT#CARSPECIAUX 70 \f


"Wingdings" \s 18 \h#
dterminer les tables utilises et les indiquer dans la
clause FROM,#CARSPECIAUX 70 \f "Wingdings" \s 18 \h# lister les attributs
visualiser dans la clause SELECT,#CARSPECIAUX 70 \f "Wingdings" \s 18 \h#
si la
clause SELECT comporte des fonctions de groupes, utiliser une clause GROUP BY
reprenant tous les attributs cits dans le SELECT, sauf les fonctions de groupe,
#CARSPECIAUX 70 \f "Wingdings" \s 18 \h# fixer les critres de recherche par
HAVING sur les groupes et par WHERE sur des valeurs individuelles,#CARSPECIAUX
70 \f "Wingdings" \s 18 \h#
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,#CARSPECIAUX 70 \f "Wingdings" \s 18 \h# pour fusionner les
rsultats de deux clauses SELECT utiliser l'oprateur UNION,#CARSPECIAUX 70 \f
"Wingdings" \s 18 \h#
prciser l'ordre de rangement des rsultats par une clause
ORDER BY#CARSPECIAUX 70 \f "Wingdings" \s 18 \h#
Jointures ou SELECT
imbriques? #CARSPECIAUX 183 \f "Symbol" \s 14 \h# une jointure est
indispensable pour traduire une requte o il s'agit de visualiser des informations
manant de plusieurs tables.#CARSPECIAUX 183 \f "Symbol" \s 14 \h#
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.

Mise jour dune base de donnes


###################################################################################
###################################################################################
####################& D#o#c#.# #e#n# #l#i#g#n#e##:# ###A#c#c##d#e#r# #a#u#x#
#d#o#n#n##e#s# #e#t# #l#e#s# #m#o#d#i#f#i#e#r####:# # #A#j#o#u#t#,#
#M#o#d#i#f#i#c#a#t#i#o#n#,# #S#u#p#p#r#e#s#s#i#o#n# # # # # # # # # # # # # # # # #
# ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # #d#e# # #d#o#n#n##e#s## # #S#Q#L#2##:#
#p#.# #7#9# ## #8#2###D#a#n#s# #S#Q#L# Server, vous pouvez ajouter ou modifier des
donnes au moyen des instructions de modification de donnes INSERT, DELETE, et
UPDATEINSERT ajoute une nouvelle ligne une table ;DELETE supprime une ou
plusieurs lignes ;UPDATE modifie les lignes ; 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. Ajoutde lignes: INSERT 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, ...)Ajout de toutes les
colonnes dune ligne: INSERT titresVALUES ('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. INSERT INTO magasins (id_mag, nom_mag)VALUES ('1229', 'Les livres de
Marie')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_slectionInsertion de
donnes provenant de la mme table par une instruction SELECT:INSERT diteurs
SELECT '9980', 'test', ville, rgion, paysFROM diteursWHERE nom_diteur = 'New
Moon Books'Nouveau contenu de la table: id_diteur nom_diteur
ville
rgion
pays------ --------------------------------- ----- 0736
New Moon Books
Boston
MA
USA0877
Binnet &
Hardley
Washington DC
USA1389
Algodata Infosystems
Bruxelles
BE1622
Five Lakes Publishing
Chicago
IL
USA1756
Ramona, diteur
Lausanne
CH9901
GGG&G
Munich
(null)
GER9952
Scootney
Books
New York
NY
USA 9980
test
Boston
MA
USA9999
Editions Lucerne
Paris
(null)
FRInsertion de donnes provenant dune autre table, colonnes dans le mme
ordre:INSERT auteursSELECT *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 . INSERT auteurs
(id_auteur, adresse, nom_auteur, pn_auteur)SELECT * FROM nouveaux_auteursouINSERT
auteursSELECT id_auteur,# #p#n#_#a#u#t#e#u#r#,# #n#o#m#_#a#u#t#e#u#r#,#
#a#d#r#e#s#s#e##F#R#O#M# #n#o#u#v#e#a#u#x#_#a#u#t#e#u#r#s## # ##:
E#x#e#r#c#i#c#e# #1#6##:# # ##R#e#n#t#r#e#r# #v#o#s# #n#o#m#s#,#
#p#r##n#o#m#s#,# #d#a#n#s# #l#a# #t#a#b#l#e# #a#u#t#e#u#r#s#,# #a#v#e#c# #u#n#
#i#d#e#n#t#i#f#i#c#a#t#e#u#r# #q#u#i# #n## e#x#i#s#t#e# #p#a#s# #d##j##.#
#T#o#u#s# #l#e#s# #c#h#a#m#p#s# #o#b#l#i#g#a#t#o#i#r#e#s# #(#n#o#n# #N#U#L#L#)#
#d#o#i#v#e#n#t# ##t#r#e# #r#e#n#s#e#i#g#n##s#,# #s#a#u#f# #c#e#u#x# #q#u#i#
#p#o#s#s##dent 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.
Modificationde lignes: UPDATEArthur Bec dcide par exemple de modifier son
nom en Roland Perceval. Voici comment modifier sa ligne dans la table auteurs :
UPDATE auteursSET 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))
###################################################################################
###################################################################################
################: E#x#e#r#c#i#c#e# #1#8##:# # ##A#u#g#m#e#n#t#e#r# #d#e# #1#0#%#
#t#o#u#s# #l#e#s# #p#r#i#x# #d#e#s# #l#i#v#r#e#s# #d#e# #l## #d#i#t#e#u#r#
###A#l#g#o#d#a#t#a# #I#n#f#o#s#y#s#t#e#m#s##.# #V##r#i#f#i#e#r# #l##
o#p##r#a#t#i#o#n# #p#a#r# #u#n#e# #c#o#m#m#a#n#d#e# #S#e#l#e#c#t#
#a#d##q#u#a#t#e#,# #a#v#a#n#t# #e#t# #a#p#r##s# #l## a#u#g#m#e#n#t#a#t#i#o#n#.##
#### #S#u#p#p#r#e#s#s#i#o#n# #d#e# #l#i#g#n#e#s##:# #D#E#L#E#T#E##
#S#u#p#p#o#s#o#n#s# #q#u#'#u#n#e# #o#p##r#a#t#i#o#n# #c#o#m#p#l#e#x#e# 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 titresFROM auteurs, titres, titreauteurWHERE
titres.id_titre = titreauteur.id_titre
AND auteurs.id_auteur =
titreauteur.id_auteur
AND ville = 'Bruxelles'Remarque La relation cl
primaire/cl trangre entre titres.id_titre et titreauteur.id_titre vous empche
d'excuter cet effacement parce que la cl trangre ne permettra pas que vous
effaciez des titres ecore rfrences dans titreauteur: effacez en premier ces
rfrences#######: E#x#e#r#c#i#c#e# #1#9##:# ##D##t#r#u#i#r#e# #l#e#s#
#l#i#g#n#e#s# #c#r###e#s# #d#a#n#s# #l#a# #t#a#b#l#e# #a#u#t#e#u#r#,# #d#a#n#s#
#l#e#s# #e#x#e#r#c#i#c#e#s# #1#6# #e#t# #1#7#,# #a#f#i#n# #d#e# #r#e#m#e#t#t#r#e#
#l#a# #t#a#b#l#e# #d#a#n#s# #s#o#n# ##t#a#t# #i#n#i#t#i#a#l#.# ###
#C#r#e#a#t#i#o#n# #d#e# #l#a# #b#a#s#e# ##c#o#m#p#a#g#n#i#e# #a#e#r#i#e#n#n#e##
#& # #D#o#c#.# #e#n# #l#i#g#n#e##:# # ###C#r##e#r# #e#t# #m#a#i#n#t#e#n#i#r#
#d#e#s# #b#a#s#e#s# #d#e# #d#o#n#n##e#s##### #I#n#troductionDans ce chapitre, on
va construire compltement la base de donnes Compagnie Arienne qui a t
prsente au dbut.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.
###################################################################################
###########################: L#o#g#u#e#z# #v#o#u#s# #a#v#e#c# ###l##
A#n#a#l#y#s#e#u#r# #d#e# #r#e#q#u##t#e###,# #s#o#u#s# #v#o#t#r#e# #n#o#m# #d#e#
#c#o#n#n#e#x#i#o#n# #N#T# #h#a#b#i#t#u#e#l#,# #s#a#n#s# #m#o#t# #d#e# #p#a#s#s#e#,#
#e#t# #t#a#p#e#z# #l#a# #r#e#q#u##t#e# #S#Q#L# #d#e# #c#r##a#t#i#o#n# #d#e#
#b#a#s#e# #d#e# #d#o#n#n##e#s##:##C#R#E#A#T#E# #D#A#T#A#B#A#S#E# #A#i#r#X#X#X###
# #C#r##a#t#i#o#n# #d#e#s# #d#o#m#a#i#n#e#s# ##& D#o#c#.# #e#n# #l#i#g#n#e##:#
###A#c#c##d#e#r# #a#u#x# #d#o#n#n##e#s# #e#t# #les modifier: Elments de
syntaxe Transact
SQL -> Utilisation
des types de donnesLa 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
entier dont la valeur est 1 ou 0. tinyint
entier dont la
valeur est comprise entre 0 et 255. smallint
entier dont la valeur est comprise
entre -215 (-32 768) et 215 - 1 (32 767). int
entier dont la valeur est

comprise entre -231 (-2 147 483 648) et 231 - 1 (2 147 483 647). decimal
Donnes numriques fixes de prcision et d'chelle comprises entre -1038 -1
et 1038 -1. numeric
Synonyme de decimal.smallmoney
Valeurs de donnes
montaires comprises entre - 214 748,3648 et +214 748,3647, avec une prcision d'un
dix-millime d'unit montaire. money
Valeurs de donnes montaires comprises
entre -263 (-922 337 203 685 477,580 8) et 263 - 1 (+922 337 203 685 477,580 7),
avec une prcision d'un dix-millime d'unit montaire. real
Donnes numriques
de prcision en virgule flottante comprises entre -3.40E + 38 et 3.40E + 38. float
Donnes numriques de prcision en virgule flottante comprises entre -1.79E +
308 et 1.79E + 308. 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. #LIENHYPERTEXTE "ia-iz_5.htm"###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 execute sp_addtype TypeNom, 'VARCHAR(50)', 'NOT NULL'
sp_addtype nom_de_type, type_physique [, contrainte_de_valeur_NULL]nom_de_type:
Nom du type de donnes dfini par l'utilisateur. type_physique: Nom du type de
donnes physique prdfini de SQL Server sur lequel repose le type de donnes
dfini par l'utilisateur. contrainte_de_valeur_NULL: Paramtre indiquant comment
grer des valeurs NULL dans un type de donnes dfini par l'utilisateur (vaut NULL
ou NOT NULL). SQL Server ne fait pas de diffrence entre les majuscules et les
minuscules pour les noms de type de donnes systme. ###: E#x#e#r#c#i#c#e#
#2#0####L#e#s# #e#x#e#r#c#i#c#e#s# #q#u#i# #s#u#i#v#e#n#t# #v#o#n#t# #v#o#u#s#
#g#u#i#d#e#r# #p#o#u#r# ##c#r#i#r#e# #u#n# #s#c#r#i#p#t# #d#e# #c#r##a#t#i#o#n#
#d#e# #b#a#s#e# #d#e# #d#o#n#n##e#s##:# #C#r#e#e#r#.#S#Q#L#.# # ###O#n#
#c#o#m#m#e#n#t#e#r#a# #c#h#a#c#u#n#e# #d#e#s# ##t#a#p#e#s# #d#u# #s#c#r#i#p#t#
#(#c#o#m#m#e#n#t#a#i#r#e# #T#r#a#n#s#a#c#t# #S#Q#L##:# # #/#*# #p#l#u#s#i#e#u#r#s#
#l#i#g#n#e#s# #*#/# #o#u# #-#-# #f#i#n# #d#e# #l#i#g#n#e#)###O#n#
#d##v#e#l#o#p#p#e#ra en parallle un script Supprimer.SQL qui supprime tous les
objets que lon vient de traiter. Aprs chaque exercice, on relancera les scripts
de suppression et de cration, pour sassurer que tous les objets se crent
correctement.
A la fin de ce chapitre, on doit donc aboutir deux scripts
complets qui permettent de maintenir la base (en la recrant compltement en cas de
crash systme) 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)TypeIdConstructeur : entier (smallint). Obligatoire (=>
identificateur du constructeur dans la table Constructeur)TypeIdAeroport : chane
fixe de 3 caractres. Obligatoire. (=> identificateur de laroport dans la table
Aroport) TypeIdPilote
: entier (smallint). Obligatoire ( => identificateur du
pilote dans la table Pilote)TypeNumVol : chane fixe de 5 caractres. Obligatoire
(=> identificateur du vol dans la table Vol)TypeVille : chane variable limite
50 caractres. Optionnel. (=># #n#o#m# #d#e# #l## a##r#o#p#o#r#t# #e#t# #d#e#
#l#a# #v#i#l#l#e## # # # # # # # # # # # # # # # # # # #d#e#s#s#e#r#v#i#e#
#d#a#n#s# #l#a# #t#a#b#l#e# #A#e#r#o#p#o#r#t#)###
# ##J A#v#e#c#

#E#n#t#e#r#p#r#i#s#e# #M#a#n#a#g#e#r# ##l#a#n#c#e#r# #l## o#u#t#i#l# #p#a#r# #l#e#


#m#e#n#u# ###S#Q#L# #S#e#r#v#e#r# #7#.#0####M#e#n#u# ###A#c#t#i#o#n###,#
###E#n#r#e#g#i#s#t#r#e#r# #u#n# #n#o#u#v#e#a#u# #s#e#r#v#e#u#r## #S#Q#L#
#S#e#r#v#e#r## #p#o#u#r# #a#c#c##d#e#r# # #a#u# #s#e#r#v#e#u#r##:# # sans
utiliser lassistant, choisir le nom du serveur dans la liste droulante, choisir
Utiliser lauthentification SQL Server, entrer votre nom de connexion et votre
mot de passeFermer 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 #d#e# #d#o#n#n##e#s# #u#t#i#l#i#s#a#t#e#u#r#s###.# ## #C#r##a#t#i#o#n#
#e#t# #s#u#p#p#r#e#s#s#i#o#n# #d#e# #t#a#b#l#e#s#.# #C#o#n#t#r#a#i#n#t#e#s# #d##
i#n#t##g#r#i#t####& D#o#c#.# #e#n# #l#i#g#n#e##:# ###C#r##e#r# #e#t#
#m#a#i#n#t#e#n#i#r# #d#e#s# #b#a#s#e#s# #d#e# #d#o#n#n##e#s####:#
###T#a#b#l#e#s###### #C#l##s# #p#r#i#m#a#i#r#e#s# #e#t# ##t#r#a#n#g##r#e#s#
#L#a# #c#l## #p#r#i#m#a#i#r#e# #e#s#t# #u#n#e# #c#o#l#o#n#n#e# #o#u# #u#n#e#
#c#o#m#b#i#n#a#i#s#o#n# #d#e# #c#o#l#o#n#nes dont les valeurs identifient de faon
unique chaque ligne dans la table: elle ne peut pas tre nulle.On cre une cl
primaire grce la contrainte PRIMARY KEY lors de la cration ou de la
modification dune table. SQL cre automatiquement un objet index pour la cl
primaire: lindex assure lunicit de la cl primaire dans la table, et permet un
accs rapide aux donnes par la cl primaire.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. Intgrit des donnes dans une baseAssurer
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. Pour assurer
lintgrit rfrentielle, SQL Server interdit de :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:# Exemples de cration de table: CreateTableVous 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 utiliseLorsque 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##CREATE TABLE emplois( id_emploi
smallint
PRIMARY KEY,
desc_emploi
varchar(50)
NOT NULL DEFAULT 'Nouveau
poste',
niv_min
tinyint
NOT NULL
CHECK (niv_min >= 10),

niv_max
tinyint
NOT NULL
CHECK (niv_max <= 250))#
FOREIGN KEY: la cl fait rfrence la cl primaire dune autre table. id_emploi
smallint NOT NULL DEFAULT 1 REFERENCES emplois(id_emploi)ou
id_emploi smallint et
plus loin FOREIGN KEY (id_emploi) REFERENCES emplois (id_emploi)UNIQUE: assure
lunicit dune cl secondairepseudonyme varchar(30) NULL UNIQUE DEFAULT: valeur
par dfaut lorquaucune valeur nest donne dans INSERT ou UPDATECHECK:CHECK
(id_diteur IN ('1389', '0736', '0877', '1622', '1756')
OR id_diteur LIKE
'99[0-9][0-9]')#CHECK (niv_min >= 10)ou avec mot cl CONSTRAINT: CONSTRAINT
CK_id_employ CHECK (i#d#_#e#m#p#l#o#y## #L#I#K#E# #'#[#0#-#9#]#[#0#-#9#]#[#0##9#]#[#0#-#9#]#[#F#M#]#'# #)### #I#D#E#N#T#I#T#Y##:# #v#a#l#e#u#r#
#n#u#m##r#i#q#u#e# #a#u#t#o#i#n#c#r##m#e#n#t#a#l#e# #(#v#a#l#e#u#r#
#i#n#i#t#i#a#l#e# #e#t# #v#a#l#e#u#r# #d#e# #l## i#n#c#r##m#e#n#t#)#
#I#D#E#N#T#I#T#Y#(#1#0#,#3#)# # # # # # #(#=#># #v#a#l#e#u#r#s#:# #1#0#,# #1#3#,#
#1#6#& )####: E#x#e#r#c#i#c#e# #2#1##:# # #C#r##a#t#i#o#n# #d#e#s#
#t#a#b#l#e#s# #e#t# #d#e#s# #c#o#n#t#r#a#i#n#t#e#s###C#o#m#p#l##t#e#r# #l#e#
#s#c#r#ipt 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
la capacit est comprise entre
50 et 400: cette colonne est obligatoire, avec un dfaut de 100CONSTRUCTEUR: la
cl primaire IdConstructeur est autoincrmente partir de 1, par pas de 1PILOTE:
la cl primaire IdPilote est autoincrmente partir de 1, par pas de 1AEROPORT:
la cl primaire IdAeroport ne comporte que des lettres
la
colonne NomVilleDesservie est optionnelle
la colonne
NomAeroport est obligatoireVOL: la cl primaire NumVol est constitue du prfixe
"IT" suivi de trois chiffresAFFECTATION: la cl primaire est compose des
colonnes NumVol et DateVol
la cl trangre IdPilote peut tre NULL (en
attente daffectation un pilote)Commencer par tablir la liste de dpendance:
numroter 0 les tables indpendantes, 1 les tables qui ne dpendent que de tables
indpendantes, 2 celles qui dpendent des prcdentescrer les tables en
commenant par les indpendantes, et en suivant lordre de la liste de dpendance.
Vrifier la cration des tables sous Entreprise ManagerExercice 22: Script de
testTester les contraintes dintgrit en faisant des essais de remplissage par
linstruction INSERT et des suppressions par DELETE: vrifier les valeurs par
dfaut, les domaines de validit des colonnesPartir des valeurs dcrites dans le
chapitre I, en remplissant les tables dans lordre de la liste de dpendance.
Exercice 23: Script de destruction des types utilisateurs et des tablesPour
dtruire une table: DROP TABLE AVIONGOLe GO oblige le moteur faire la
suppression immdiatement et permet de recrer la table( sinon erreur Il y a
dj un objet Avion dans la base de donnes )Attention: il faut dtruire les
tables dans lordre inverse de la cration, en supprimant dabord les t

Das könnte Ihnen auch gefallen