1. Inleiding ......................................................................................................................................... 2
1.1. Inleiding
SQL..................................................................................................................... 3
1.1.1. Inleiding.................................................................................................................... 3
1.1.2. Database,
databaseserver
en
databasetaal ............................................... 4
1.1.3. Het
relationele
model ......................................................................................... 4
1.1.4. Wat
is
SQL?.............................................................................................................. 6
1.1.5. Verschillende
categorieên
SQL‐programma’s.......................................... 6
1.1.6. De
geschiedenis
van
SQL................................................................................... 7
1.1.7. Van
monolitisch
naar
client/server
naar
internet ................................. 7
1.1.8. Transactiedatabase
en
datawarehouses .................................................... 8
1.1.9. Standaardisatie
van
SQL.................................................................................... 8
1.1.10. De
markt
van
SQL‐databaseservers ............................................................. 9
1.1.11. Welk
SQL
dialect? ................................................................................................. 9
1.2. Voorbeeld:
Tennisvereniging ..................................................................................10
1.2.1. Inleiding..................................................................................................................10
1.2.2. Beschrijving
van
de
tennisvereniging .......................................................11
1.2.3. De
inhoud
van
de
tabellen ..............................................................................11
1.2.4. Integriteitsregels ................................................................................................13
1.3. Installatie
van
de
software.........................................................................................??
1.4. SQL
in
vogelvlucht ........................................................................................................14
1.4.1. Creëren
van
tabellen .........................................................................................15
1.4.2. NULL‐waarde .......................................................................................................15
1.4.3. Vullen
van
tabellen
met
gegevens...............................................................16
1.4.4. Raadplegen
van
tabellen .................................................................................16
1.4.5. Wijzigen
en
verwijderen
van
rijen..............................................................17
1.4.6. Versnellen
van
het
raadplegen
met
indexen ..........................................18
1.4.7. Views........................................................................................................................18
1.4.8. Gebruikers
en
gegevensbeveiliging............................................................19
1.4.9. Verwijderen
van
database‐objecten ..........................................................20
1.4.10. Systeemparameters...........................................................................................20
1.4.11. Groepen
SQL‐instructies .................................................................................21
1.4.12. Catalogustabellen ...............................................................................................22
1.4.13. Definities
van
SQL‐instructies ......................................................................23
2. Raadplegen
en
muteren
van
gegevens ...........................................................................23
2.1. SELECT:
basisbegrippen ............................................................................................24
2.1.1. Inleiding..................................................................................................................25
2.1.2. Constanten
en
hun
datatypes........................................................................25
2.1.3. Expressies..............................................................................................................27
2.1.4. Toekennen
van
namen
aan
kolommen.....................................................27
2.1.5. Kolomspecificaties .............................................................................................28
2.1.6. Gebruikersvariabele
en
de
SET‐instructie ..............................................28
2.1.7. Systeemvariabele ...............................................................................................29
2.1.8. Case‐expressie .....................................................................................................29
2.1.9. Scalaire
expressie
tussen
haakjes ...............................................................30
2.1.10. Scalaire
functie ....................................................................................................31
2.1.11. Casting
van
expressies .....................................................................................31
2.1.12. NULL‐waarde
als
expressie ...........................................................................32
2.1.13. Samengestelde
scalaire
expressie...............................................................32
2.1.14. Aggregatiefunctie
en
de
scalaire
subquery .............................................34
i
2.1.15. Rijexpressie...........................................................................................................34
2.1.16. Tabelexpressie.....................................................................................................35
2.2. SELECT:
tabelexpressies
en
subquery’s..............................................................35
2.2.1. Inleiding..................................................................................................................36
2.2.2. Definitie
van
de
SELECT‐instructie ............................................................36
2.2.3. Verwerking
van
de
componenten ...............................................................37
2.2.4. Mogelijke
vormen
van
de
tabelexpressie.................................................38
2.2.5. Wat
is
een
SELECT‐instructie? .....................................................................39
2.2.6. Wat
is
een
subquery?........................................................................................39
2.3. SELECT:
FROM‐component ......................................................................................40
2.3.1. Inleiding..................................................................................................................41
2.3.2. Tabelspecificaties
in
de
FROM......................................................................42
2.3.3. Kolomspecificaties .............................................................................................42
2.3.4. Meerdere
tabelspecificaties...........................................................................43
2.3.5. Pseudoniemen
voor
tabelnamen.................................................................44
2.3.6. Voorbeelden .........................................................................................................44
2.3.7. Verplicht
gebruik
van
pseudoniemen .......................................................45
2.3.8. Tabellen
van
verschillende
databases.......................................................45
2.3.9. Expliciete
joins.....................................................................................................46
2.3.10. Joins
met
using ....................................................................................................47
2.3.11. Outer‐joins.............................................................................................................47
2.3.12. Extra
condities
in
de
join‐conditie ..............................................................48
2.3.13. Cross‐join ...............................................................................................................49
2.3.14. Union‐join
en
natural‐join ..............................................................................49
2.3.15. Equi‐joins
en
thera‐joins.................................................................................50
2.3.16. FROM‐component
met
tabelexpressies....................................................50
2.4. SELECT:
WHERE‐component ..................................................................................52
2.4.1. Inleiding..................................................................................................................53
2.4.2. Condities
met
een
vergelijkingsoperator.................................................53
2.4.3. Vergelijkingsoperatoren
met
subquery’s ................................................54
2.4.4. Vergelijkingsopertoren
met
gecorreleerde
subquery’s.....................55
2.4.5. Condities
koppelen
met
AND,
OR
en
NOT ...............................................56
2.4.6. IN‐operator
met
expressielijst......................................................................56
2.4.7. IN‐operator
met
subquery .............................................................................57
2.4.8. BETWEEN‐operator ..........................................................................................58
2.4.9. LIKE‐operator ......................................................................................................59
2.4.10. IS
NULL‐operator ...............................................................................................59
2.4.11. EXISTS‐operator .................................................................................................60
2.4.12. ALL‐en
ANY‐operatoren..................................................................................60
2.4.13. Reikwijdte
van
de
kolommen
bij
subquery’s .........................................61
2.4.14. Voorbeelden
met
gecorreleerde
subquery’s ..........................................63
2.4.15. Condities
met
ontkenning...............................................................................64
2.4.16. Toekomstige
condities .....................................................................................64
2.5. SELECT:
SELECT‐component
en
aggregatiefuncties .....................................65
2.5.1. Inleiding..................................................................................................................66
2.5.2. Opvragen
van
alle
kolommen
(*).................................................................66
2.5.3. Expressies
in
de
SELECT‐component ........................................................67
2.5.4. Verwijderen
van
identieke
rijen
met
DISTINCT ...................................67
2.5.5. Wanneer
zijn
twee
rijen
gelijk?....................................................................68
ii
2.5.6. Een
inleiding
tot
aggregatiefuncties...........................................................68
2.5.7. COUNT‐functie.....................................................................................................69
2.5.8. MAX‐
en
MIN‐functies ......................................................................................69
2.5.9. SUM‐
en
AVG‐functie.........................................................................................70
2.5.10. De
VARIANCE‐en
STDDEV‐functies............................................................70
2.6. SELECT:
GROUP
BY
component .............................................................................71
2.6.1. Inleiding..................................................................................................................72
2.6.2. Groeperen
op
één
kolom.................................................................................72
2.6.3. Groepeneren
op
twee
of
meer
kolommen...............................................73
2.6.4. Groeperen
op
expressies.................................................................................73
2.6.5. Groeperen
op
NULL‐waarden.......................................................................74
2.6.6. Algemene
regels
voor
de
GROUP
BY‐component.................................74
2.6.7. Complexe
voorbeelden
met
GROUP
BY ....................................................75
2.6.8. Groeperen
met
WITH
ROLLUP .....................................................................76
2.6.9. Groeperen
met
WITH
CUBE...........................................................................76
2.6.10. Grouping
sets .......................................................................................................77
2.6.11. Groeperen
met
ROLLUP
en
CUBE ...............................................................77
2.6.12. Combineren
van
grouping
sets.....................................................................78
2.7. SELECT:
HAVING‐component..................................................................................78
2.7.1. Inleiding..................................................................................................................79
2.7.2. Voorbeelden
van
de
HAVING‐component ...............................................79
2.7.3. Algemene
regel
voor
de
HAVING‐component........................................80
2.8. SELECT:
ORDER
BY‐component.............................................................................80
2.8.1. Inleiding..................................................................................................................81
2.8.2. Sorteren
op
kolomnamen ...............................................................................81
2.8.3. Sorteren
op
expressies.....................................................................................82
2.8.4. Sorten
mbv.
volgnummers
en
kolomkoppen .........................................82
2.8.5. Oplopend
en
aflopend
sorteren ...................................................................83
2.8.6. Sorteren
op
NULL‐waarden...........................................................................83
2.9. Combineren
van
tabelexpressies ...........................................................................84
2.9.1. Inleiding..................................................................................................................84
2.9.2. Koppelen
met
UNION .......................................................................................85
2.9.3. Regels
voor
gebruik
van
UNION ..................................................................85
2.9.4. Koppelen
met
INTERSECT..............................................................................86
2.9.5. Koppelen
met
EXCEPT .....................................................................................87
2.9.6. Behouden
van
dubbele
rijen..........................................................................87
2.9.7. Set‐operatoren
en
de
NULL‐waarde ..........................................................88
2.9.8. Meerdere
Set‐operatoren
combineren .....................................................88
2.9.9. Set‐operatoren
en
de
theorie ........................................................................89
2.10. Muteren
van
tabellen ..................................................................................................89
2.10.1. Inleiding..................................................................................................................90
2.10.2. Invoeren
van
nieuwe
rijen .............................................................................90
2.10.3. Tabel
vullen
met
rijen
van
andere
tabel...................................................91
2.10.4. Wijzigen
van
waarden
in
rijen......................................................................92
2.10.5. Verwijderen
van
rijen
uit
een
tabel............................................................92
3. Creëren
van
database‐objecten .........................................................................................93
3.1. Creëren
van
tabellen....................................................................................................93
3.1.1. Inleiding..................................................................................................................94
3.1.2. Opzetten
van
nieuwe
tabellen ......................................................................94
iii
3.1.3. Datatypes
van
kolommen ...............................................................................95
3.1.4. Creëren
van
tijdelijke
tabellen......................................................................96
3.1.5. Kopiëren
van
tabellen ......................................................................................96
3.1.6. Naamgeving
van
tabellen
en
kolommen ..................................................97
3.1.7. Kolomopties:
default
en
comment..............................................................98
3.1.8. Afgeleide
kolommen .........................................................................................99
3.1.9. Tabellen
en
de
catalogus .................................................................................99
3.2. Specificeren
van
integriteitsregels.....................................................................100
3.2.1. Inleiding...............................................................................................................100
3.2.2. Primaire
sleutels..............................................................................................101
3.2.3. Alternatieve
sleutels ......................................................................................102
3.2.4. Refererende
sleutels ......................................................................................102
3.2.5. De
refererende
actie.......................................................................................104
3.2.6. Check‐integriteitsregels ...............................................................................104
3.2.7. Namen
toekennen
aan
integriteitsregels..............................................105
3.2.8. Verwijderen
van
integriteitsregels..........................................................105
3.2.9. Integriteitsregels
en
de
catalogus ............................................................106
3.3. Karaktersets
en
collating
sequences .................................................................106
3.3.1. Inleiding...............................................................................................................107
3.3.2. Beschikbare
karaktersets
en
collating
sequences.............................107
3.3.3. Toekennen
van
karaktersets
aan
kolommen ......................................108
3.3.4. Toekennen
van
collating
sequences
aan
kolommen........................108
3.3.5. Expressies
met
karaktersets
en
collating
sequences.......................109
3.3.6. Sorteren
en
groeperen
met
collating
sequences ...............................109
3.3.7. De
coercibility
van
expressies ...................................................................110
3.4. Veranderen
en
verwijderen
van
tabellen........................................................110
3.4.1. Inleiding...............................................................................................................111
3.4.2. Verwijderen
van
gehele
tabellen ..............................................................111
3.4.3. Hernoemen
van
tabellen ..............................................................................112
3.4.4. Wijzigen
van
de
tabelstructuur .................................................................112
3.4.5. Wijzigen
van
kolommen...............................................................................113
3.4.6. Wijzigen
van
integriteitsregels..................................................................113
3.5. Ontwerpen
van
tabellen..........................................................................................114
3.5.1. Inleiding...............................................................................................................114
3.5.2. Welke
tabellen
en
welke
kolommen? .....................................................115
3.5.3. Toevoegen
van
redundante
gegevens ....................................................116
3.5.4. Kiezen
van
een
datatype
voor
een
kolom .............................................116
3.5.5. Wanneer
NOT
NULL?.....................................................................................117
3.6. Gebruik
van
indexen.................................................................................................118
3.6.1. Inleiding...............................................................................................................119
3.6.2. Rijen,
tabellen
en
bestanden.......................................................................119
3.6.3. De
werking
van
een
index ...........................................................................120
3.6.4. SELECT:
verwerkingsstappen....................................................................121
3.6.5. Creêren
van
indexen ......................................................................................121
3.6.6. Verwijderen
van
indexen.............................................................................122
3.6.7. Indexen
en
primaire
sleutels......................................................................122
3.6.8. De
grote
SPELERS_XXL‐tabel .....................................................................123
3.6.9. Op
welke
kolom
moet
een
index
staan? ................................................123
3.6.10. Speciale
indexvormen ...................................................................................124
iv
3.6.11. Indexen
en
de
catalogus ...............................................................................125
3.7. Views ...............................................................................................................................125
3.7.1. Inleiding...............................................................................................................126
3.7.2. Creêren
van
views...........................................................................................126
3.7.3. Kolomnamen
van
view..................................................................................127
3.7.4. Muteren
van
views,
WITH
CHECK
OPTION .........................................127
3.7.5. Verwijderen
van
views .................................................................................128
3.7.6. Views
en
de
catalogus....................................................................................128
3.7.7. Beperkingen
van
views
bij
raadplegen..................................................129
3.7.8. Beperkingen
bij
muteren .............................................................................130
3.7.9. Verwerken
van
instructies
op
views.......................................................130
3.7.10. Toepassingen
van
views...............................................................................131
3.8. Creëren
van
databases.............................................................................................131
3.8.1. Inleiding...............................................................................................................132
3.8.2. Database
of
schema?......................................................................................132
3.8.3. Creêren
van
databases ..................................................................................133
3.8.4. Wijzigen
van
databases ................................................................................133
3.8.5. Verwijderen
van
databases.........................................................................134
3.9. Gebruikers
en
gegevensbeveiliging ...................................................................134
3.9.1. Inleiding...............................................................................................................135
3.9.2. Invoeren
en
verwijderen
van
gebruikers .............................................135
3.9.3. Verstrekken
van
tabel‐
en
kolombevoegdheden...............................136
3.9.4. Verstrekken
van
databasebevoegdheden.............................................136
3.9.5. Verstrekken
van
gebruikersbevoegdheden.........................................137
3.9.6. WITH
GRANT
OPTION...................................................................................138
3.9.7. Werken
met
rollen ..........................................................................................138
3.9.8. Registreren
van
bevoegdheden
...............................................................139
3.9.9. Intrekken
van
bevoegdheden ....................................................................139
3.9.10. Beveiliging
van
en
met
views.....................................................................140
4. Programmeren
met
SQL ....................................................................................................140
4.1. Inleiding
embedded
SQL.........................................................................................141
4.1.1. Inleiding...................................................................................................................??
4.1.2. Pseudo‐programmeertaal................................................................................??
4.1.3. DDL‐
en
DCL‐instructies
en
embedded
SQL ............................................??
4.1.4. Verwerken
van
programma’s ....................................................................142
4.1.5. Gebruik
van
host‐variabelen
in
SQL‐instructies....................................??
4.1.6. SQLCODE‐host‐variabele .................................................................................??
4.1.7. Executeerbare
en
niet‐executeerbare
SQL‐instructies .......................??
4.1.8. De
WHENEVER‐instructie ...............................................................................??
4.1.9. Inloggen
op
SQL ...................................................................................................??
4.1.10. SELECT‐instructies
met
één
rij......................................................................??
4.1.11. NULL‐waarden
en
de
NULL‐indicator........................................................??
4.1.12. Cursors
voor
het
raadplegen
van
vele
rijen.............................................??
4.1.13. De
richting
van
het
doorlopen
van
een
cursor .......................................??
4.1.14. Verwerken
van
cursors.....................................................................................??
4.1.15. De
FOR‐component ............................................................................................??
4.1.16. Verwijderen
van
rijen
via
cursors................................................................??
4.1.17. Dynamisch
SQL.....................................................................................................??
4.2. Transacties
en
multi‐user
gebruik .....................................................................143
v
4.2.1. Inleiding...............................................................................................................143
4.2.2. Wat
is
een
transactie?....................................................................................144
4.2.3. Starten
van
transacties .................................................................................145
4.2.4. Embedded
SQL
en
transacties ...................................................................145
4.2.5. Savepoints ..........................................................................................................146
4.2.6. Problemen
met
multi‐usergebruik ..........................................................146
4.2.7. Locking.................................................................................................................147
4.2.8. Deadlocks............................................................................................................148
4.2.9. Granulariteit
van
het
blokkeren................................................................148
4.2.10. LOCK
TABLE‐instructie ................................................................................149
4.2.11. Het
isolation
level............................................................................................149
4.3. Inleiding
ODBC............................................................................................................150
4.3.1. Inleiding...................................................................................................................??
4.3.2. De
geschiedenis
van
ODBC..............................................................................??
4.3.3. Hoe
werkt
ODBC? ............................................................................................151
4.3.4. Eenvoudig
voorbeeld
met
ODBC...............................................................152
4.3.5. Returncodes...........................................................................................................??
4.3.6. Opvragen
van
gegevens
over
SQL ................................................................??
4.3.7. DDL‐instructies
en
ODBC.................................................................................??
4.3.8. DML‐instructies
en
ODBC ................................................................................??
4.3.9. Gebruik
van
host‐variabelen
in
SQL‐instructies....................................??
4.3.10. Settings
voor
een
instructie‐handle ............................................................??
4.3.11. SELECT‐instructies .............................................................................................??
4.3.12. Asynchroon
verwerken
van
SQL‐instructies...........................................??
4.3.13. De
FOR‐component ............................................................................................??
4.3.14. Benaderen
van
catalogustabellen
met
ODBC..........................................??
4.3.15. Levels
en
ondersteuning ..................................................................................??
4.3.16. Concurrentie
van
ODBC................................................................................154
4.4. Optimaliseren
van
instructies ..............................................................................155
4.4.1. Inleiding...............................................................................................................156
4.4.2. Vermijd
de
OR‐operator ...............................................................................156
4.4.3. Vermijd
onnodig
gebruik
van
de
UNION‐operator...........................157
4.4.4. Vermijd
de
NOT‐operator............................................................................157
4.4.5. Isoleer
kolommen
in
condities ..................................................................158
4.4.6. Gebruik
de
BETWEEN‐operator ...............................................................158
4.4.7. Vermijd
bepaalde
vormen
van
de
LIKE‐operator .............................159
4.4.8. Voeg
bij
joins
redundante
condities
toe ................................................159
4.4.9. Vermijd
de
HAVING‐component...............................................................160
4.4.10. Maak
de
SELECT‐component
zo
smal
mogelijk .................................160
4.4.11. Vermijd
DISTINCT...........................................................................................161
4.4.12. Vermijd
onnodig
gebruik
van
de
ALL‐optie.........................................161
4.4.13. Prefereer
OUTER
JOINS
boven
UNION‐operatoren..........................162
4.4.14. Vermijd
datatype‐conversies .....................................................................163
4.4.15. De
grootste
tabel
als
laatste........................................................................163
4.4.16. Vermijd
de
ANY‐
en
ALL‐operatoren......................................................164
4.4.17. De
toekomst
van
de
optimizer...................................................................165
5. Procedurele
database‐objecten ......................................................................................165
5.1. Stored
procedures .....................................................................................................166
5.1.1. Inleiding...............................................................................................................167
vi
5.1.2. Voorbeeld
van
een
stored
procedure .....................................................167
5.1.3. De
parameters
van
een
stored
procedure ............................................168
5.1.4. De
body
van
een
stored
procedure..........................................................169
5.1.5. Lokale
variabelen ............................................................................................169
5.1.6. De
SET‐instructie.............................................................................................170
5.1.7. Flow‐control‐instructies ..............................................................................170
5.1.8. Aanroepen
van
stored
procedures ..........................................................171
5.1.9. Stored
procedures
met
SELECT
INTO ....................................................171
5.1.10. Foutboodschappen,
handlers
en
conditions........................................172
5.1.11. Stored
procedures
met
een
cursor ..........................................................172
5.1.12. Stored
procedures
en
transacties ............................................................173
5.1.13. Stored
procedures
en
de
catalogus..........................................................173
5.1.14. Verwijderen
van
stored
procedures .......................................................174
5.1.15. Compileren
en
hercompileren...................................................................174
5.1.16. Beveiligen
met
stored
procedures...........................................................175
5.1.17. Voordelen
van
stored
procedures............................................................175
5.2. Stored
functions .........................................................................................................176
5.2.1. Inleiding...............................................................................................................176
5.2.2. Voorbeelden
van
een
stored
function ....................................................177
5.2.3. Verwijderen
van
stored
functions............................................................178
5.3. Triggers ..........................................................................................................................179
5.3.1. Inleiding...............................................................................................................179
5.3.2. Voorbeeld
van
een
trigger ...........................................................................180
5.3.3. Complexere
voorbeelden.............................................................................181
5.3.4. Triggers
als
integriteitsregels ....................................................................182
5.3.5. Verwijderen
van
triggers .............................................................................182
5.3.6. Verschillen
tussen
SQL‐producten...........................................................183
6. Objectrelationele
concepten ................................................................................................??
vii