SQL Server - Telenet Users

advertisement
Overzicht databanken - Oefeningen
• SQL - SQL Server 2000
Werken met 1 tabel : SELECT, Statistische functies,
GROUP BY
Werken met meerdere tabellen : JOIN, UNION,
subselects, gecorreleerde subqueries
Definitie van tabellen, indexen
Wijzigen van tabellen : insert, update, delete
Views
Rechten en rollen
De catalogus
Triggers en stored procedures
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 1
Overzicht databanken - Oefeningen
Cursus
 Slides : op Dokeos
 Syllabus
Punten
 Permanente evaluatie : 20%
– 1 gequoteerde oefening
 Examen
– Theorie : 40%
– Oefeningen : 40%
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 2
Overzicht databanken - Oefeningen
Voor de oefeningen en voorbeelden wordt gebruik gemaakt
van Microsoft SQL Server 2000
Downloaden software http://www.ma3d.com/
“De hogeschool heeft met Signpost een overeenkomst i.v.m. het Microsoft
MSDN Academic Alliance programma afgesloten. Het betreft hier het
(zonder licentiekosten) ter beschikking stellen van de Microsoft serveren ontwikkelingsprogrammatuur voor studenten en docenten uit
"informatica"-opleidingen. Het gebruik is uitdrukkelijk beperkt tot zuiver
pedagogische toepassingen(op de hogeschool en thuis).
Signpost staat in voor de distributie van de software via internet. Voor de
aanbieding MSDNAA wordt per gebruiker een jaarlijkse bijdrage van €
27.50, excl. BTW gevraagd met een downloadlimiet van 12.5 Gbytes.
Deze bevat o.a. SQL Server 2000, Visual Studio.Net,… Studenten
registreren zich rechtstreeks bij Signpost via
http://www.ma3d.com/msdnaa en betalen het bedrag rechtstreeks aan
Signpost. Ook alle info kan op deze site gevonden worden.”
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 3
Overzicht databanken - Oefeningen
Hardware en Software vereisten + uitleg verschillende
SQL server edities en vereisten qua OS :
http://msdn.microsoft.com/library/default.asp?url=/library/e
n-us/instsql/in_overview_74vn.asp
Installatie procedure :
http://msdn.microsoft.com/library/default.asp?url=/library/e
n-us/howtosql/ht_install_1xwl.asp
SQL Server Home : http://www.microsoft.com/sql
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 4
Overzicht databanken - Oefeningen
• SQL Server :
Beheer
 Installatie, configuratie en beveiliging van SQL Server.
 Aanmaken van databanken
 Beheer van databanken : backup, restore, ...
 Gebeurt adhv Enterprise manager
– Client tool
– Is een Microsoft Management Console snap-in
– Toegankelijk via Programs > Microsoft SQL Server 2000 > Enterprise Manager
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 5
Overzicht databanken - Oefeningen
 Voor de oefening maken we gebruik van de planten database
die deel uitmaakt van de SQL Server, geinstalleerd op de
SQLSERVER server. Om vanop je client deze server te kunnen
bekijken dien je
 Start Enterprise Manager
 In linker venster, rechtermuisklik op SQL Server Group. Selecteer New SQL
Server Registration
 Vul de gegevens in
– Op eigen PC
» SQL Server = naam PC of localhost
» “Use Windows Authentication”
– Op school
» SQL Server = SQLSERVER
» “Use SQL Server Authentication”
» Login Name : studentsql
» paswoord : studentsql
 Nu is de database server beschikbaar
en kan je de verschillende databanken
beheren
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 6
Overzicht databanken - Oefeningen
 Bevragen gegevens in SQL Server : via de Query Analyzer
 Programs > Microsoft SQL Server 2000 > Query Analyzer
 Connecteer met
– Op eigen PC
» SQL Server = naam PC of localhost
» Connecting using “Use Windows Authentication”
– Op school
» SQL Server = SQLSERVER
» SQL Server Authentication
» Login Name : studentsql, paswoord : studentsql
 In de Query Analyzer
– Selecteer eerste de gewenste database in de DB listbox, bvb Northwind
– Typ de query in
– Selecteer de Execute query –knop (F5)
– Transact SQL-help :
selecteer een instructienaam
en druk op SHIFT+F1 of via Programs >
SQL Server 2000 > Books Online
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 7
Overzicht databanken - Oefeningen
Oefeningen maken gebruik van
 planten database
 Installatie procedure : zie Dokeos
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 8
Overzicht databanken - Oefeningen
 De voorbeelden in de theorie maken gebruik van de Products tabel
uit de Northwind databank
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 9
SQL - standaarden en dialecten
• Definitie
Relationele gegevenstaal voor relationele database
systemen.
Niet procedurele taal
• Standaard : ANSI/ISO-1992
• Database systemen
Oracle : PL/SQL
SQL Server : TRANSACT-SQL
DB2 (IBM)
Informix
Sybase
Access
MySQL
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 10
SQL - Overzicht
• SQL bestaat uit 3 subtalen
Data Definition Language (DDL) : creatie van een database,
en het definiëren van database objecten (tabellen, stored
procedures, views,…)
 CREATE, ALTER, DROP
Data Manipulation Language (DML) : opvragen en
manipuleren van de gegevens in een database
 SELECT, INSERT, UPDATE, DELETE
Data Control Language (DCL) : gegevensbeveiliging en
authorisatie
 GRANT, REVOKE, DENY
Bijkomende taal elementen : operatoren, functies , control
of flow (dialect gebonden)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 11
SQL - DML
•
Eén tabel raadplegen
1. Basisvorm
2. SELECT clausule
3. WHERE clausule
4. Formatteren van rijen
5. Statistische functies
6. Groeperen
•
Meerdere tabellen raadplegen
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 12
SQL - DML
•
Eén tabel raadplegen
1. Basisvorm
SELECT [ALL | DISTINCT] {*|uitdrukking [,uitdrukking ...]}
FROM tabelnaam
[WHERE voorwaarde(n)]
[GROUP BY kolomnaam [,kolomnaam ...]
[HAVING voorwaarde(n)]
[ORDER BY {kolomnaam|volgnr}{ASC|DESC}[,...]
Toont een lijst
–
SELECT clausule : specifieert de kolommen die je wenst te zien. DISTINCT zorgt
ervoor dat de getoonde rijen alle uniek zijn
–
FROM clausule : geeft aan uit welke tabel de gegevens afkomstig zijn
–
WHERE clausule : opgave van de voorwaarden waaraan de getoonde rijen moeten
voldoen
–
ORDER BY clausule : bepaalt de volgorde waarin de rijen getoond moeten worden
–
GROUP BY en HAVING clausule : groeperen van de gegevens
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 13
SQL - DML
2. SELECT clausule : Specificatie van de kolommen
a) * : Ophalen van alle kolommen uit 1 tabel
– Voorbeeld : Toon alle gegevens van de producten
SELECT *
FROM products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 14
SQL - DML
b) Ophalen van een aantal kolommen uit 1 tabel : door opgave van
kolomnaam of uitdrukking
– Voorbeeld : Toon van alle producten het productID, de naam
en eenheidsprijs
SELECT productid, productname, unitprice
FROM products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 15
SQL - DML
3. WHERE clausule : Specificatie van voorwaarden waaraan
de getoonde rijen moeten voldoen
 Voorbeeld : Toon productID, naam en eenheidsprijs van de
producten die behoren tot categorie 1
SELECT productid, productname, unitprice
FROM products
WHERE categoryid = 1
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 16
SQL - DML
 Gebruik van literals
– Numerische waarden : ... WHERE categoryID = 1
– Alfanumerische waarden : ... WHERE productName = ‘Chai’
– Datums : ... WHERE orderDate = ‘4/15/1998’ (15 april 1998)
 Voorwaarden aan rijen adhv
a)
b)
c)
d)
e)
f)
g)
Vergelijkingsoperatoren
Wildcards
Logische operatoren
Een interval van specifieke waarden
Een lijst van waarden
Onbekende waarden
Je kan haakjes gebruiken om de prioriteitsregels te doorbreken
of het geheel leesbaarder te maken
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 17
SQL - DML
a) Vergelijkingsoperatoren
 =, >, >=, <, <=, <>
 Voorbeelden
– Toon productID, naam, aantal in
stock van de producten waarvan
er minder dan 5 in stock
select productid, productname, unitsinstock
from products
where unitsinstock < 5
– Toon productID, naam, aantal in
stock van de producten waarvan
naam begint met een A
select productid, productname
from products
where productname >= 'A' and
productname < 'B'
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 18
SQL - DML
b) Wildcards (zoeken naar patronen)
 De operator LIKE, NOT LIKE
 In combinatie met wildcards:
% : willekeurige tekenrij met 0 of meerdere tekens
_ : 1 teken
[ ] : 1 teken binnen de gespecifieerde range of verzameling
[^] : elk teken niet binnen de gespecifieerde range of verzameling
 Voorbeeld
– Toon productID, naam van de producten waarbij de tekenreeks anton
voorkomt in de naam
SELECT productid, productname
FROM products
WHERE productname LIKE '%anton%'
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 19
SQL - DML
c) Logische operatoren
 OR, AND, NOT
(volgens stijgende prioriteit)
 Voorbeelden
SELECT productid, productname, supplierid, unitprice
FROM products
WHERE (productname LIKE ’T%’ OR productid = 46) AND unitprice > 16.00
SELECT productid, productname, unitprice
FROM products
WHERE (productname LIKE ’T%’) OR (productid = 46 AND unitprice > 16.00)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 20
SQL - DML
d) Waarden in een interval
 BETWEEN, NOT BETWEEN
 Voorbeeld
– Selecteer de producten (naam en eenheidsprijs) waarvan de eenheidsprijs
tussen 10 en 15 euro (grenzen inbegrepen)
SELECT productid, unitprice
FROM products
WHERE unitprice BETWEEN 10 AND 15
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 21
SQL - DML
e) Lijst van waarden
 IN, NOT IN
 Voorbeeld
– Geef productID, naam, supplierID van de producten die geleverd worden
door de suppliers met ID 1, 3 of 5
SELECT productid, productname, supplierid
FROM products
WHERE supplierid in (1,3,5)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 22
SQL - DML
f) Onbekende waarden (niet ingevulde waarden)
 IS NULL, IS NOT NULL
 Komen voor wanneer er bij input in een bepaalde kolom geen waarde
werd ingebracht en er geen defaultwaarde voor die kolom voorzien was.
 Een NULL waarde verschilt van 0 (numerische waarden) en blanco
(character waarden) !
 NULL velden worden onderling gelijk beschouwd (voor testen met
DISTINCT)
 Als in een rekenkundige uitdrukking een NULL-veld wordt verwerkt is het
resultaat ook NULL
 Voorbeeld
– Selecteer de klanten waarvan region
onbekend
SELECT companyname, region
FROM suppliers
WHERE region IS NULL
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 23
SQL - DML
 Opmerking
SELECT companyname, region
FROM suppliers
WHERE region <> ‘OR’
SELECT companyname, region
FROM suppliers
WHERE region <> ‘OR’
OR region IS NULL
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 24
SQL - DML
g) Oefeningen :
 tabel Werknemer
NR VNAAM
INIT
FNAAM
AFD
IN
10 Christine
I
Haas
A00
DIENST
650101
66
18 V
330814
52750
20 Michel
L
Theunis
B01
731001
61
18 M
480202
41250
30 Sally
A
Kramer
C01
750405
60
20 V
410511
38250
50 Johan
B
Geysen
E01
490817
58
16 M
250915
40175
60 Irving
F
Steur
D11
730914
55
16 M
450707
32250
70 Eva
D
Pulanski
D21
800930
56
16 V
530526
36170
90 Evelien
W
Hendriks
E11
700815
55
16 V
410515
29750
100 Theo
Q
Spencer
E21
800619
54
14 M
561218
26150
110 Vincent
G
Leman
A00
631205
58
19 M
291105
46500
Connors
A00
580516
58
14 M
421018
29250
120 Sean
CODE NIV GESL GEBDAT SALARIS
130 Danielle
M
Scheire
C01
710728
55
16 V
250915
23800
140 Hilde
A
Nagels
C01
761215
56
18 V
460119
28420
Adams
D11
720212
55
16 M
470517
25280
150 Bruno
160 Els
R
Placke
D11
771011
54
17 V
550412
22250
170 Mats
J
Sierens
D11
780915
54
16 M
510105
24680
180 Marleen
S
Schouters
D11
730707
53
17 V
490221
21340
190 Jan
E
Wauters
D11
740726
53
16 M
520625
20450
De Bruyn
D11
660303
55
16 M
410529
27740
Jansens
D11
790411
25
17 M
530223
18270
220 Jennifer
K
Luyckx
D11
680829
academiejaar 2005-2006 A.Sennesael, A. Van Achter
55
18 V
200 David
210 Willem
T
 tabel Afdeling
AFDNR
A00
B01
C01
D01
E01
D11
D21
E21
480319
29840
Karine Samyn - Databanken oefeningen
AFDNAAM
MANNR
Computer
10
Planning
20
Informatie
30
Ontwikkelingsc
50
Support
60
Administratie
70
Software
80
Tools
90
Pag. 25
SQL - DML
 Geef voornaam en achternaam van werknemers geboren voor
01/01/49
 Geef voornaam en familienaam van werknemers met code 54, die in
een willkeurige afdeling werken met uitsluiting van afdeling D11
 Geef nummer, naam en afdelingsnummer van alle werknemers met
salaris tussen 15000 en 24000 en niveau tussen 17 en 20
 Geef nummer, naam en opleidingsniveau van alle werknemers met
niveau 16, 18 of 20
 Geef nummer, naam van vrouwelijke werknemers waarvan
familienaam start met een ‘S’ of ‘T’
 Geef nummer, naam van alle werknemers met onbekende jobcode
 Geef nummer, naam en afdelingsnummer van alle werknemers,
waarvan de familienaam start met een P en die in een afdeling werken
beginnend met D en als 3° karakter een 1 hebben.
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 26
SQL - DML
4. Formatteren van de resultaten
a) Sorteren data
b) Eliminatie van duplicaten
c) Wijzigen van kolomnaam
d) Berekende resultaatkolommen
e) Commentaar
– /* commentaar */
– -- commentaar (beperkt zich tot 1 lijn)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 27
SQL - DML
a) Sorteren van de data
 ORDER BY clausule
– Kan 1 of meerdere sorteervelden bevatten
– Een sorteerveld kan gespecifieerd worden via de kolomnaam, of door een
volgnummer op te geven dat overeenkomt met de volgorde van het
gegeven achter de SELECT clausule (startend vanaf 1)
– Indien meerdere sorteervelden voorkomen, gebeurt het sorteren eerst op
basis van het eerste veld, bij gelijkheid op basis van het tweede,...
– Standaard gebeurt het sorteren in stijgende volgorde (volgens numerieke
waarde, of volgens computercode bvb ASCII). Een dalende volgorde moet
expliciet vermeld worden met DESC
 Voorbeeld :
– Toon een alfabetische lijst van de productnamen
SELECT productname
FROM products
ORDER BY productname
academiejaar 2005-2006 A.Sennesael, A. Van Achter
(of ORDER BY 1)
Karine Samyn - Databanken oefeningen
Pag. 28
SQL - DML
– Toon productid,naam, categoryid en eenheidsprijs van de producten
gesorteerd op categoryid. Indien binnen 1 categorie producten dezelfde
prijs hebben, dan dient het product met de hoogste prijs bovenaan te staan.
SELECT productid, productname, categoryid, unitprice
FROM products
ORDER BY categoryid, unitprice DESC
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 29
SQL - DML
b) Distinct/ALL
 Distinct : produceert een lijst waar alle rijen uniek zijn, gelijke rijen
worden uit resultaat verwijderd
 ALL(default) : toont alle rijen, ook duplicaten
 Voorbeeld
– Toon de leveranciers die producten leveren
SELECT supplierid
SELECT DISTINCT supplierid
FROM products
FROM products
ORDER BY supplierid
ORDER BY supplierid
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 30
SQL - DML
c) Gebruiken van leesbare namen voor de kolommen
 Standaard : kolomtitel = naam van kolom in tabel; Berekende
kolommen krijgen geen kolomnaam
 Via “AS” keyword kan je een kolom een andere titel geven, of door
opgave van kolom, dan een spatie en vervolgens de uitdrukking
– Opm. Die nieuwe kolomnaam kan je enkel gebruiken in ORDER BY
(niet in WHERE, HAVING, GROUP BY)
 Voorbeeld : Selecteer ProductID en ProductNaam van de producten
en geef als kolomtitel ProductNummer en Naam Product.
SELECT productid AS ProductNummer,
productname AS ‘Naam Product’
FROM products
SELECT productid ProductNummer,
productname ‘Naam Product’
FROM products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 31
SQL - DML
d) Berekende resultaatkolommen
 Wiskundige operatoren : +,-,/,*
 Voorbeeld : Geef naam en inventariswaarde van de producten
SELECT ProductName, Unitprice * UnitsInStock AS InventoryValue
FROM Products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 32
SQL - DML
 Functies
– String functies : left, right, len, ltrim, rtrim, substring, replace,...
– DateTime functies : DateAdd, DateDiff, DatePart, Day, Month, Year, ...
» GETDATE() : functie die huidige datum en tijd retourneert in
DATETIME format van MS-SQL Server.
– Rekenkundige functies : round, floor, ceiling, cos, sin,...
– Aggregate functies : AVG, SUM,...
– System functies
» CONVERT (<data type> [(<length>)], <data to convert> [, <style>])
Voorbeeld : CONVERT(VARCHAR,getdate(),6) -> 20 jan 2004
» CAST : conversie van 1 data type naar een ander
CAST (<value expression> AS <data type>)
Voorbeeld : PRINT CAST(-25.25 AS INTEGER) -> -25
» ISNULL : vervangt NULL waarde met opgegeven waarde
Voorbeeld :SELECT ISNULL(unitprice, 10.00) FROM products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 33
SQL - DML
» CASE
SELECT
CASE
WHEN price IS NULL THEN 'Not yet priced'
WHEN price < 10 THEN 'Very Reasonable Title'
WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
ELSE 'Expensive book!'
END AS "Price Category",
CONVERT(varchar(20), title) AS "Shortened Title"
FROM pubs.dbo.titles
ORDER BY price
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 34
SQL - DML
 Stringoperator : concatenatie
SELECT STR(productid) + ‘,’ + productname AS Product
FROM Products
 Gebruik maken van tekst (literals)
SELECT ProductName, ‘$’,Unitprice
FROM Products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 35
SQL - DML
5. Statistische functies (Aggregate functies)
 SQL voorziet 5 standaardfuncties
a) SUM (uitdrukking) : som
b) AVG (uitdrukking) : gemiddelde
c) MIN (uitdrukking) : minimum
d) MAX (uitdrukking) : maximum
e) COUNT (*|[DISTINCT] kolomnaam) : aantal
 Deze functies geven 1 antwoord per kolom (en mogen dus niet
in een WHERE clause gebruikt worden)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 36
SQL - DML
a) SUM
– Retourneert het totaal van NIET NULL numerieke waarden in één
kolom
– Enkel te gebruiken met numerieke argumenten
– Voorbeeld : Geef de totale stock waarde
SELECT SUM(UnitsInStock * UnitPrice) as inventoryvalue
FROM products
b) AVG
–
–
–
Retourneert het gemiddelde van NIET NULL numerieke
waarden in een kolom
Enkel te gebruiken met numerieke argumenten
Voorbeeld : Hoeveel producten zijn er gemiddeld in stock?
SELECT AVG(unitsinstock) AS AverageStock
FROM products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 37
SQL - DML
c) COUNT
– Retourneert het aantal rijen, of een aantal waarden in een kolom
– COUNT(*) : telt het aantal rijen van de selectie
» Tel het aantal producten (= het aantal rijen)
SELECT COUNT(*) AS Aantal
FROM products
– COUNT(kolomnaam) : telt het aantal niet-lege velden in een kolom
» Tel het aantal NIET NULL waarden in de kolom categoryid
SELECT COUNT(categoryid) AS cat_count
FROM products
– COUNT(DISTINCT kolomnaam) : telt het aantal verschillende nietlege velden in een kolom
» Tel het aantal verschillende NIET NULL categoriën in products
SELECT COUNT(DISTINCT categoryid) AS cat_count
FROM products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 38
SQL - DML
d) MIN en MAX
– retourneert de kleinste en de grootste waarde in een kolom
– Gelden zowel op numerieke als alfanumerieke argumenten
– Voorbeeld : Wat is de goedkoopste en duurste eenheidsprijs?
SELECT MIN(unitprice) AS Minimum,
MAX(unitprice) AS Maximum
FROM products
Opmerkingen :
 Omdat een statistische functies maar 1 antwoord oplevert, moeten ofwel alle
uitdrukkingen in de SELECT clausule een statische functie bevatten, ofwel geen
enkele!
Statistische functies en NULL waarden : Houden geen rekening met NULL
waarden. Uitzondering : COUNT(*) (telt ook rijen die null waarden bevatten)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 39
SQL - DML
e) Een aantal dialecten in SQL Server
– STDEV : spreiding van kolomwaarden uitgedrukt in de
standaardafwijking
– VAR : Spreiding van kolomwaarden uitgedrukt in de variantie
– TOP :
» Selecteer de 5 goedkoopste producten
SELECT TOP 5 productid, unitprice
FROM products
ORDER BY unitprice
» Igv de 5 duurste producten sorteren op unitprice DESC
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 40
SQL - DML
6. Groeperen : Statistische functies over meerdere groepen.
 GROUP BY clausule :
 Indeling van tabel in groepen van rijen
met gemeenschappelijke kenmerken.
 Per groep onstaat 1 unieke rij!
 Voorbeeld :
– Tot welke categoriën behoren
de producten?
SELECT CategoryID
FROM Products
GROUP BY CategoryID
 Elke groep is een afzonderlijke verzameling waarop eventueel
statistische functies gebruikt kunnen worden. De kolomnamen vermeld
in de GROUP BY mogen nu ook samen met de statistische functies in
de SELECT voorkomen.
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 41
SQL - DML
 Voorbeelden
– Toon per category het aantal producten
SELECT CategoryID, COUNT(productID) AS number
FROM Products
GROUP BY CategoryID
–Toon per categorie het aantal
producten, waarvan er meer dan 10 in
stock
SELECT CategoryID, COUNT(productID) AS number
FROM Products
WHERE UnitsInStock > 10
GROUP BY CategoryID
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 42
SQL - DML
 HAVING clausule
 Selecteren of verwerpen van groepen op basis van bepaalde
groepseigenschappen
 Voorbeelden
– Toon per category die meer dan 10 producten
bevat, het aantal producten
SELECT CategoryID, COUNT(productID) AS number
FROM Products
GROUP BY CategoryID
HAVING COUNT(productID) > 10
– Toon per category die meer dan 10 producten bevat, waarvan er meer dan
10 in stock, het aantal producten
SELECT CategoryID, COUNT(productID) as number
FROM Products
WHERE UnitsInStock >10
GROUP BY CategoryID
HAVING COUNT(productID) > 10
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 43
SQL - DML
 Opmerkingen
 Verschil tussen WHERE en HAVING
– WHERE : heeft betrekking op rijen
– HAVING : heeft betrekking op groepen
 Statistische functies enkel gebruiken in SELECT, HAVING, ORDER
BY niet in WHERE, GROUP BY
 Indien er functies voorkomen in de select-clausule, dan moeten alle
items van de SELECT-lijst, als argument van één of andere functie
optreden met uitzondering van de items van SELECT die
voorkomen in de GROUP BY!!!
SELECT categoryID, MIN(unitprice) AS Minimum
FROM products
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 44
SQL - DML
 Oefeningen
 Tel het aantal werknemers uit de afdeling D11 en geef het
maximum, minimum en gemiddeld salaris voor deze afdeling,
alsook het aantal verschillende jobcodes uit deze afdeling. Geef
ook de som van alle lonen betaald in D11.
 Geef per afd, het afdnr en het aantal werknemers, gesorteerd
volgens afdelingsnummer.
 Idem, maar nu gesorteerd volgens aantal werknemers.
 Idem maar nu wens je het aantal werknemers te kennen per
afdeling en per jobcode
 Tel per afd het aantal mannen en vrouwen en sorteer volgens
opklimmende afdeling en afdalend geslacht.
 Geef een overzicht van de afdelingen die tenminste 2 werknemers
hebben die meer dan 1000 verdienen.
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 45
SQL - DML
•
Eén tabel raadplegen
•
Meerdere tabellen raadplegen
1. JOIN
a) Inner join
b) Outer join
c) Cross join
2. UNION
3. Subqueries
a) Geneste subqueries
b) Gecorreleerde subqueries
c) Operator EXISTS
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 46
SQL - DML
• Meerdere tabellen raadplegen
1) JOIN
 Selecteren van kolommen uit meerdere tabellen
JOIN keyword : specifieert de tabellen die samengevoegd moeten worden, en
hoe ze moeten worden samengevoegd
Inner join
Outer join
Cross join
ON keyword : specifieert de JOIN voorwaarde
 Produceert 1 resultaatset, waarin de rijen uit die tabellen gekoppeld
worden
 Basisvorm (ANSI JOIN (SQL-92) <-> Old style join)
SELECT uitdrukking
SELECT uitdrukking
FROM tabel JOIN tabel ON voorwaarde
FROM tabel, tabel [, tabel...]
[JOIN tabel ON voorwaarde...]
academiejaar 2005-2006 A.Sennesael, A. Van Achter
WHERE voorwaarde
Karine Samyn - Databanken oefeningen
Pag. 47
SQL - DML
De voorbeelden maken gebruik van de Pubs database
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 48
SQL - DML
a) Inner Join
 Koppelen van rijen uit 1 tabel met rijen uit een andere tabel op basis
van gemeenschappelijke waarden in de overeenkomstige
kolommen.
 De relatie tussen de velden in de verschillende tabellen kan je
uitdrukken a.d.h.v. = (equi-join), <,>,<>,>=,<=
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 49
SQL - DML
 Voorbeeld van equi-join
 Geef een overzicht van de auteurs (naam, voornaam) die niet in California
wonen en de boeken (titelID) die ze geschreven hebben.
– ANSI JOIN (SQL-92)
SELECT au_lname, au_fname, title_id
FROM authors
JOIN titleauthor ON authors.au_id = titleauthor.au_id
WHERE state <> 'CA'
– OF “old style join”
SELECT au_lname, au_fname, title_id
FROM authors, titleauthor
WHERE authors.au_id = titleauthor.au_id
AND state <> 'CA'
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 50
SQL - DML
 Gebruiken van tabel aliassen (via ‘AS’ of spatie)
– SQL-92
SELECT au_lname, au_fname, title_id
FROM authors AS A
JOIN titleauthor AS TA ON A.au_id = TA.au_id
WHERE state <> 'CA'
– “old style join”
SELECT au_lname, au_fname, title_id
FROM authors A, titleauthor TA
WHERE A.au_id = TA.au_id
AND state <> 'CA'
Opmerkingen :

als een kolomnaam in meerdere tabellen (gebruikt in de query) voorkomt, dan dient die steeds te
worden voorafgegaan door de tabelnaam (of alias)

Inner joins geven enkel die rijen terug die voldoen aan de ON conditie. Dit betekent dat als een rij in
de eerste tabel niet matcht met een rij uit de tweede tabel (vb. een auteur die niet in California woont,
en die nog geen boeken geschreven heeft) de rij niet zal geretourneerd worden en omgekeerd.

Als
je in A.Sennesael,
de old style
joinAchter
de where
academiejaar
2005-2006
A. Van
clause vergeet,
dan
krijg- Databanken
je de cross
join (zie verder).
Karine
Samyn
oefeningen
Pag. 51
SQL - DML
 JOIN van meer dan 2 tabellen
- Voorbeeld : Geef een overzicht van de auteurs (naam, voornaam) die niet
in California wonen en de boeken (titel) die ze geschreven hebben.
- SQL-92 :
SELECT au_lname, au_fname, title
FROM authors A
JOIN titleauthor TA ON A.au_id = TA.au_id
JOIN titles T ON TA.title_id = T.title_id
WHERE state <> ‘CA’
Opm : Gegevens kunnen over meer
dan 2 tabellen verspreid zitten.
Soms worden enkel gegevens uit 2
tabellen getoond, maar zijn toch
extra tabellen nodig zijn daar geen
directe koppeling tussen de 2
tabellen waaruit de informatie moet
komen.
- OF “old style join”
SELECT au_lname, au_fname, title
FROM authors A, titleauthor TA, titles T
WHERE A.au_id = TA.au_id
AND TA.title_id = T.title_id
AND state <> ‘CA’
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 52
SQL - DML
 Joining van een tabel met zichzelf
– Toon van alle werknemers naam en voornaam, en naam en voornaam van
hun manager
SELECT X.Lastname, X.FirstName,Y.Lastname, Y.FirstName
FROM Employees AS X
JOIN Employees AS Y ON X.Reportsto = Y.EmployeeID
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 53
SQL - DML
b) Outer join
 Retourneert alle records van 1 tabel, zelfs als er geen gerelateerd
record bestaat in de andere tabel.
 Er zijn 3 types van outer join
– LEFT OUTER JOIN : retourneert alle rijen van de eerst genoemde
tabel in de FROM clause (SQL-92)
– RIGHT OUTER JOIN : retourneert alle rijen van de tweede tabel in
de FROM clause (SQL-92)
– FULL OUTER JOIN : retourneert ook rijen uit de eerste en tweede
tabel die geen corresponderende entry hebben in andere tabel
(SQL-92)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 54
SQL - DML
 Voorbeeld left outer join
– Geef een overzicht van de auteurs (naam, voornaam), die niet wonen in
California, en de boeken (titel) die ze geschreven hebben. Ook de auteurs
die GEEN boeken geschreven hebben dienen op de lijst voor te komen
SELECT au_lname, au_fname, title
FROM authors A
LEFT JOIN titleauthor TA ON A.au_id = TA.au_id
LEFT JOIN titles T ON TA.title_id = T.title_id
WHERE state <> 'CA'
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 55
SQL - DML
 Voorbeeld right outer join
– Toon een lijst van de boeken, met naam en voornaam van de auteurs.
Enkel de boeken geschreven door auteurs die niet in CA wonen of de
boeken waarvoor de auteur niet bekend is mogen op het overzicht
voorkomen.
SELECT au_lname, au_fname, title
FROM authors AS A
JOIN titleauthor AS TA ON A.au_id = TA.au_id
RIGHT JOIN titles AS T ON TA.title_id = T.title_id
WHERE state <> 'CA' OR A.state IS NULL
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 56
SQL - DML
c) Cross join
 Het aantal rijen in de resultaattabel is gelijk aan het aantal rijen in de
eerste tabel maal het aantal rijen in de tweede tabel.
– SQL-92
SELECT au_lname, au_fname, title_id
FROM authors CROSS JOIN titleauthor
– “old style join”
SELECT au_lname, au_fname, title_id
FROM authors, titleauthor
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 57
SQL - DML
2) UNION
 Combineert het resultaat van 2 of meerdere queries in 1 resultaattabel
 Basisvorm
SELECT ... FROM ... WHERE ...
UNION
SELECT ... FROM ... WHERE ...
ORDER BY ...
 De regels die bij een UNION gelden
– De resultaten van de 2 SELECT opdrachten moeten evenveel kolommen bevatten.
– Overeenkomstige kolommen uit beide SELECT’s moeten van hetzelfde data type zijn
en beide NOT NULL toelaten of niet.
– Kolommen komen voor in dezelfde volgorde
– De kolomnamen/titels van de UNION zijn deze van de eerste SELECT
– Het resultaat bevat echter steeds alleen unieke rijen
– Aan het einde van de UNION kan je een ORDER BY toevoegen. In deze clausule mag
geen kolomnaam of uitdrukking voorkomen indien kolomnamen van beide select’s
verschillend. Gebruik in dat geval kolomnummers.
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 58
SQL - DML
 Voorbeeld
– Geef een overzicht van alle bedienden (naam en voornaam, stad en
postcode) en alle klanten (naam, stad en postcode)
SELECT firstname + ‘ ‘ + lastname as name, city, postalcode
FROM Employees
UNION
SELECT companyname, city, postalcode
FROM Customers
Opm. Daar kolomnamen van
UNION deze zijn van de eerste
select, dien je de titel ‘name’ in de
2de select niet meer te herhalen
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 59
SQL - DML
3) Subqueries (subvragen)
 Betekent dat een selectie voorkomt als onderdeel van een andere selectie
 Basisvorm
SELECT
FROM
WHERE voorwaarde
Bevat in het rechterlid tussen ronde haakjes
een SELECT (kan in SELECT, FROM,
WHERE, HAVING)
 Waarom gebruiken?
 Retourneren van resultaat waarbij subquery een procesgegeven bevat
 Of waarbij gegevens nodig zijn uit meerdere tabellen. Kan je ook oplossen met een
JOIN, maar nu worden de tabellen afzonderlijk verwerkt. De relatie tussen de rijen
wordt hier bepaald door de opdrachthiërarchie. Gebruik zoveel mogelijk JOIN, ipv
subqueries
 3 vormen in WHERE clause
 Geneste subvragen
 Gecorreleerde subvragen
 Operator Exists
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Overige
Tabel subquery in FROM clause
Scalaire subquery in SELECT clause
Karine Samyn - Databanken oefeningen
Pag. 60
SQL - DML
De voorbeelden werken met
de Werknemers database
AfdNr
A00
B01
C01
D01
E01
D11
D21
E21
Nr
AfdNaam
Computer Service
Planning
Informatie Centr.
Ontwikkelingscentr.
Support Services
Administratie
Software support
Tools
ManagerNr
10
20
30
50
60
70
100
90
10
20
30
50
60
70
90
100
110
120
130
140
150
160
170
180
Vnaam
Christine
Michel
Sally
Johan
Irving
Eva
Evelien
Theo
Vincent
Sean
Danielle
Hilde
Bruno
Els
Mats
Marleen
Fnaam
Haas
Theunis
Kramer
Geysen
Steur
Pulanski
Hendriks
Spencer
Leman
Connors
Scheire
Nagels
Adams
Placke
Sierens
Schouters
Afdnr
A00
B01
C01
E01
D11
D21
E01
E01
A00
A00
C01
C01
D11
D11
D11
D11
InDienst
Jobcode
1/01/1965
66
1/10/1973
61
5/04/1975
60
7/08/2000
58
4/09/1973
66
30/09/1996
56
15/08/2001
55
16/08/1985
54
5/12/1995
58
16/05/1996
58
28/07/1997
55
15/12/1976
56
2/02/2001
25
11/07/1994
53
15/09/2000
54
7/07/1999
55
190
200
210
220
Jan
David
Willem
Jennifer
Wauters
De Bruyn
Jansens
Luyckx
D11
D11
D11
D11
26/07/2000
3/03/1982
11/04/2003
28/02/2000
academiejaar 2005-2006 A.Sennesael, A. Van Achter
56
58
60
61
Niv
Gesl
18
18
20
16
16
16
16
14
19
14
16
18
16
17
16
17
V
M
V
M
M
V
V
M
M
M
V
V
M
V
M
V
GebDat
2/6/1943
11/6/1951
5/10/1953
9/12/1978
10/10/1951
11/5/1974
9/20/1979
9/21/1963
1/9/1974
6/21/1970
9/2/1975
1/20/1955
3/10/1979
8/15/1972
10/21/1978
8/11/1977
16
16
17
18
M
M
M
V
8/31/1978
4/7/1960
5/16/1981
4/4/1975
Salaris
1308
1023
948
996
799
897
737
648
1153
725
590
705
627
552
612
529
Jobcode
25
53
54
55
56
58
60
61
66
Omschrijving
Analist
Programmeur
Projectleider
Verkoper
Secretaresse
Boekhouder
Marketing
Customer Support
Consultant
507
688
453
740
Karine Samyn - Databanken oefeningen
Pag. 61
SQL - DML
a) Geneste subvragen
 Basisvorm
SELECT
FROM
WHERE voorwaarde
Bevat in het rechterlid tussen ronde haakjes
een SELECT
–
Outer level query = de eerste SELECT. Deze bevat de hoofdvraag.
–
Inner level query = de SELECT in de WHERE clause (of HAVING clause).
D.i. De subvraag.
–
»
Deze wordt altijd eerst uitgevoerd.
»
Ze moeten steeds tussen haakjes staan.
»
Subvragen kunnen in meerdere niveau’s genest zijn.
Subquery kan
i.
1 waarde retourneren
ii.
Of een lijst van waarden retourneren
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 62
SQL - DML
i) Retourneren 1 waarde
– Operatoren : =, >, <, <=,>=,<>
– Voorbeeld :
» Wat is de hoogste wedde?
SELECT MAX(salaris)
FROM werknemer
» Wie heeft de hoogste wedde? -> oplossen met subqueries
SELECT FNaam, VNaam
FROM werknemer
WHERE Salaris =
(SELECT MAX(salaris)
FROM werknemer)
De tabel werknemer wordt de eerste keer doorlopen om het hoogste salaris
te bepalen (subvraag). Vervolgens een tweede keer (hoofdvraag), waarbij
voor elke rij (elke werknemer) het salaris wordt vergeleken met het
berekende maximum
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 63
SQL - DML
» Geef salaris van werknemers waarvan salaris groter is dan gemiddelde salaris
SELECT Vnaam, Fnaam, salaris, afdnr
FROM werknemer
WHERE salaris >
(SELECT AVG(salaris)
FROM werknemer)
» Wie is de jongste vrouwelijke werknemer
SELECT FNaam, VNaam, Gebdat
FROM werknemer
WHERE Gesl= 'V‘ AND Gebdat =
(SELECT max(gebdat)
FROM werknemer
WHERE Gesl = ‘V’)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 64
SQL - DML
ii) Retourneren lijst van waarden
– Operatoren IN, NOT IN, ANY, ALL
– IN / =ANY operator
» Geef naam en voornaam van de managers (kan ook met join)
SELECT Vnaam, Fnaam
FROM werknemer
WHERE nr IN (SELECT ManagerNr
FROM afdeling)
» Geef naam en voornaam van de werknemers die op dezelfde afdeling
werken als Bruno Adams (kan je ook oplossen met JOIN)
SELECT FNaam, Vnaam
FROM werknemer
WHERE afdnr IN
(SELECT afdnr
FROM werknemer
Where Vnaam = “Bruno” AND Fnaam=“Adams”)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 65
SQL - DML
– NOT IN / <>ALL operator
» Geef naam en voornaam van alle niet managers (niet oplosbaar met
INNER JOIN wel met LEFT JOIN of exists (zie verder)))
SELECT Vnaam, Fnaam
FROM werknemer
WHERE nr NOT IN
(SELECT ManagerNr
FROM afdeling)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 66
SQL - DML
– ANY/ALL operator
» Worden gebruikt in combinatie met de relationele operatoren
» ALL : retourneert TRUE als alle waarden geretourneerd in de
subquery voldoen aan de voorwaarde
» ANY : retourneert TRUE als minstens 1 waarde geretourneerd
in de subquery voldoet aan de voorwaarde
» Voorbeeld : Selecteer alle werknemers die langer werkzaam in het
bedrijf, dan alle werknemers uit de afdeling C01 en die jonger zijn dan
tenminste 1 werknemer uit afdeling E21.
SELECT Vnaam, Fnaam
FROM werknemer
WHERE InDienst < ALL
(SELECT InDienst
FROM werknemer
WHERE Afdnr = 'C01')
AND GebDat > ANY
(SELECT GebDat
FROM werknemer
WHERE Afdnr = ‘E21')
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 67
SQL - DML
 Oefeningen
– Welke werknemer is het langst in dienst
– Welke werknemers zijn jonger dan de gemiddelde leeftijd
– Wie is de oudste programmeur
– Welke afdeling heeft het meest aantal werknemers
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 68
SQL - DML
b) Gecorreleerde subqueries
 De Inner Query hangt af van informatie van de Outer Query : De
subvraag bevat een zoekconditie dat relateert naar de hoofdvraag,
waardoor de subvraag van de hoofdvraag afhankelijk wordt.
 Voor elke rij uit hoofdvraag wordt de subvraag opnieuw uitgevoerd. De
volgorde is hier dus niet van onder naar boven, maar van boven naar
onder ( per rij)
 Gebruik joins indien mogelijk
 Principe
SELECT
FROM tabel a
WHERE uitdrukking operator
(SELECT ...
FROM tabel
WHERE uitdrukking operator a.kolomnaam)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 69
SQL - DML
 Voorbeeld :
– Geef werknemers waarvan salaris
groter is dan gemiddeld salaris
SELECT Vnaam, Fnaam
FROM Werknemer
WHERE sal > (SELECT AVG(sal)
FROM Werknemer)
– Geef werknemers waarvan salaris
groter is dan gemiddeld salaris van zijn afdeling
SELECT Vnaam, Fnaam
FROM Werknemer W1
WHERE sal > (SELECT AVG(sal)
FROM Werknemer W2
WHERE W1.afdnr = W2.afdnr)
0. Rij 1 in de outer query
1. Outer query geeft
kolomwaarden van die rij door
aan inner query
2. Inner query gebruikt die
waarden om inner query te
evalueren
3. Inner query retourneert een
waarde naar de Outer query,
en de rij in de Outer query
wordt al dan niet weerhouden.
4. Dit proces wordt herhaald
voor de volgende rij in de
outerquery
Opm : in de inner query mag je velden gebruiken uit de tabellen die
voorkomen in zijn outer queries, en in de query zelf, MAAR niet van
zijn inner queries (di. In de hoofdvraag mag je geen velden gebruiken
uit de subvraag, maar wel omgekeerd)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Terug naar stap 1
Pag. 70
SQL - DML
 Oefeningen
– Geef naam en voornaam van de werknemers die het hoogste salaris hebben
in hun jobcode.
– Geef per departement de werknemer die het laatst in dienst gekomen is
– Geef naam en voornaam op van de mannelijke en vrouwelijke werknemer
die het meeste verdienen
– Welke afdeling heeft het meest aantal werknemers
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 71
SQL - DML
c) De operator EXISTS (NOT EXISTS)
 Testen op het bestaan van iets of het niet bestaan van iets
 Voorbeeld
– Selecteer de afdelingen zonder werknemers
SELECT afdnaam
FROM afdeling
WHERE NOT EXISTS (SELECT *
FROM werknemers
WHERE werknemers.afdnr = afdeling.afdnr)
– Selecteer de afdelingen met werknemers
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 72
SQL - DML
 Nog een stapje verder
– In welke afdeling komen alle jobcodes voor?
SELECT afdnaam
FROM afdeling
WHERE NOT EXISTS
(SELECT *
FROM job
WHERE NOT EXISTS
(SELECT *
FROM werknemer
WHERE afdeling.afdnr = werknemer.afdnr
AND job.jobcode = werknemer.jobcode))
(Aanwijzing : Ga uit van de formulering met dubbele ontkenning : Welke afdelingen bevatten geen
enkele job die niet wordt uitgevoerd door 1 van de werknemers van die afdeling)
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 73
SQL - DML
– Een andere mogelijke oplossing
SELECT afdnaam
FROM afdeling
JOIN werknemer ON afdeling.afdnr = werknemer.afdnr
GROUP BY afdnaam
HAVING COUNT(DISTINCT jobcode) =
(SELECT COUNT(*) FROM job)
– Oefening :
» Welke afdelingen hebben TEN MINSTE dezelfde jobcodes
als afdeling A00
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 74
SQL - DML
– Oefeningen :
President
PRES_NAAM
GEBJAAR
OVERLIJDEN
GEBOORTESTAAT
Administratie
ADMIN_NR
PRES_NAAM
JAAR_INHULDIG
Pres_Huwelijk
PRES_NAAM
NAAM_ECHTGEN
PR_LFT
AANT_KIND
Verkiezing
VERKIES_JAAR
KANDIDAAT STEMMEN
WIN_VERLIES_INDEX
Hobby
PRES_NAAM
academiejaar 2005-2006 A.Sennesael, A. Van Achter
HOBBY
Karine Samyn - Databanken oefeningen
Pag. 75
SQL - DML
» Geef naam en geboortejaar van de presidenten, die ingehuldigd werden voor
hun 45° jaar.
» Geef verkiezingsjaar, en winnaar van die verkiezingen waarbij de winnaar meer
dan 80% van de stemmen behaalde in die verkiezing.
» Selecteer de naam van de presidenten, geboortejaar en installatiejaar van hun
eerste ambtsperiode. Rangschik in volgorde van installatiejaar.
» Zoek die presidenten van wie het aantal huwelijken gelijk is aan het aantal
ambtsperiodes als president. Geef naam, alsook dit aantal.
» Geef de namen en sterfdata van alle presidenten die gehuwd waren.
» Geef de namen en sterfdata van die presidenten die ongehuwd bleven.
» Geef verkiezing en naam van de winnende kandidaten die nooit president
werden
» Geef de kandidaten die zich ten minste in dezelfde jaren als president Clinton
kandidaat gesteld hebben
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 76
SQL - DML
d) SELECT instructie met tabel subquery in FROM clause
 Als resultaat van een subquery terug een tabel is, mag die ook in de
FROM clause gespecifieerd worden. De tabel die de subquery oplevert
krijgt een naam
 Voorbeeld
– Toon de afdelingen waarvan het leeftijdsverschil tussen de oudste en
jongste werknemer groter is dan 20 jaar.
select afd, minprijs, maxprijs
from (select afdnr, min(gebdat), max(gebdat)
from werknemer
group by afdnr)
as leeftijden(afd, mingebdat, maxgebdat)
where datediff(year, mingebdat, maxgebdat) > 20
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 77
SQL - DML
e) SELECT instructie met scalaire subquery in SELECT clause
 In SELECT clause van de SELECT instructie mogen scalaire
subqueries gebruikt worden
 Voorbeeld
– Toon per afdeling de som van de salarissen
select afdnr, afdnaam, (select sum(sal)
from werknemer W
where W.afdnr=A.afdnr) as TotaalSalaris
from afdeling A
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 78
SQL - DML
• Pubs database
academiejaar 2005-2006 A.Sennesael, A. Van Achter
Karine Samyn - Databanken oefeningen
Pag. 79
Related documents
Download