15-12-2011
Databases SQL - meerdere tabellen
Nut van een database
Dilbert
1
15-12-2011
Reservering
Uitgave
Basis zaken Lezer
Filiaal
Uitlening
NB: er kan verschil in smaak zitten tussen M1a en S1a notatie.
Exemplaar
Join : het combineren van rijen uit meerdere tabellen Zinloos: alle rijen uit een tabel combineren met alle rijen uit een andere tabel (bijv. 2 tabellen x 100 rijen = 10.000 rijen
Zinvol: goed gebruik maken van de WHERE-clausule
.
Het 1e voorbeeld Namen en telefoon nummers van de lezers die in Breda hun boeken lenen
Oplossing?
Tabellen koppelen
Welke tabellen?
Reservering
Uitgave
Lezer
Filiaal
Uitlening
Exemplaar
LEZER + FILIAAL
Welke gegevens?
Namen en telefoonnummers
Wat is de voorwaarde? Welke sleutels zijn hetzelfde?
Filplaats = 'Breda' Filiaalnr (straks het bewijs)
Hoe? Kijken naar de sleutels ... primair én secudair
.
2
15-12-2011
De SQL Statement
SELECT statement
Alle gegevens die je wilt laten zien op het beeldscherm, met een verwijzing naar de tabel
FROM statement
De tabellen van de gegevens die in de SELECT staan
WHERE statement
Het leggen van de koppelingen tussen de tabellen en de voorwaarden waaraan voldaan moet worden
.
Het 1e voorbeeld LEZER Lezernr Naam Adres Postcode Plaats Telefoon Geboortedatm Filiaalnr *
FILIAAL filiaalnummer FilAdres FilPostcode FilPlaats FilTelefoon
Gegevens
Naam, telefoonnummer
Tabellen
LEZER, FILIAAL
Voorwaarde
Filplaats = 'Breda'
Zelfde sleutels
Namen en telefoon nummers van de lezers die in Breda hun boeken lenen
Filiaalnr
3
15-12-2011
Het 1e voorbeeld LEZER Lezernr Naam Adres Postcode Plaats Telefoon Geboortedatm Filiaalnr *
FILIAAL filiaalnummer FilAdres FilPostcode FilPlaats FilTelefoon
SELECT
Naam, telefoonnummer
FROM
LEZER, FILIAAL
WHERE
Filplaats = 'Breda'
Zelfde sleutels
Namen en telefoon nummers van de lezers die in Breda hun boeken lenen
.
Filiaalnr
Afronden SQL statement
Het 1e voorbeeld LEZER Lezernr Naam Adres Postcode Plaats Telefoon Geboortedatm Filiaalnr *
FILIAAL filiaalnummer FilAdres FilPostcode FilPlaats FilTelefoon
Namen en telefoon nummers van de lezers die in Breda hun boeken lenen
SELECT
LEZER.naam, LEZER.telefoonnummer
FROM
LEZER, FILIAAL
WHERE
LEZER.Filiaalnummer = FILIAAL.filiaalnummer AND FILIAAL.Filplaats = 'Breda'
Zelfde sleutels
Filiaalnr
.
4
15-12-2011
Het 2e voorbeeld Alle titels die lezer 355267 in januari 2011 gehuurd heeft Titels
Lezernummer Huurdatum
Reservering
Uitgave
Lezer
Filiaal
Uitlening
Tabellen
Exemplaar
UITGAVE + UITLENING via EXEMPLAAR
.
Het 2e voorbeeld Alle titels die lezer 355267 in januari 2011 gehuurd heeft UITGAVE ISBN Titel Schrijver Uitgeverij Prijs
Gegevens Tabellen Voorwaarde
EXEMPLAAR Exemplaarnr Filiaalnr * ISBN *
UITLENING Lezernr Exemplaarnr Huurdatum Retourdatum
Titel UITGAVE, UITLENING, EXEMPLAAR Lezernr = 355267 AND Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
Zelfde sleutels
Exemplaarnr + ISBN
.
5
15-12-2011
Het 2e voorbeeld Alle titels die lezer 355267 in januari 2011 gehuurd heeft UITGAVE ISBN Titel Schrijver Uitgeverij Prijs
SELECT FROM WHERE
EXEMPLAAR Exemplaarnr Filiaalnr * ISBN *
UITLENING Lezernr Exemplaarnr Huurdatum Retourdatum
Titel UITGAVE, UITLENING, EXEMPLAAR Lezernr = 355267 AND Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
Zelfde sleutels
.
Exemplaarnr + ISBN
Afronden SQL statement
Het 2e voorbeeld Alle titels die lezer 355267 in januari 2011 gehuurd heeft UITGAVE ISBN Titel Schrijver Uitgeverij Prijs
SELECT FROM WHERE
EXEMPLAAR Exemplaarnr Filiaalnr * ISBN *
UITLENING Lezernr Exemplaarnr Huurdatum Retourdatum
UITGAVE.Titel UITGAVE, UITLENING, EXEMPLAAR UITGAVE.ISBN = EXEMPLAAR.ISBN AND EXEMPLAAR.Exemplaarnr = UITLENING.Exemplaarnr AND UITLENING.Lezernr = 355267 AND UITLENING.Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
Zelfde sleutels
Exemplaarnr + ISBN
.
6
15-12-2011
Moeheid voorkomen In SQL query niet volledige tabelnamen hoeven typen ALIAS gebruiken FROM ALIAS, ALIAS ALIAS invoegen bij SELECT en WHERE
.
Het 3e voorbeeld SELECT FROM WHERE
UITGAVE.Titel UITGAVE, UITLENING, EXEMPLAAR UITGAVE.ISBN = EXEMPLAAR.ISBN AND EXEMPLAAT.Exemplaarnr = UITLENING.Exemplaarnr AND UITLENING.Lezernr = 355267 AND UITLENING.Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
SELECT FROM WHERE
u.Titel UITGAVE u, UITLENING ul, EXEMPLAAR e u.ISBN = e.ISBN AND e.Exemplaarnr = ul.Exemplaarnr AND ul.Lezernr = 355267 AND ul.Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
.
7
15-12-2011
Redundantie voorkomen Alle resultaten uit de kolommen genoemd in de SELECT worden als resultaat weer gegeven Het kan hierbij zo zijn dat bepaalde gegevens dubbel worden weergegeven Probleem: onoverzichtelijk geheel en lange lijst Dubbele (redundante) gegegevens kunnen weggefilterd worden door het DISTINCT statement bij de SELECT mee te geven
.
Het 4e voorbeeld SELECT FROM WHERE
u.Titel UITGAVE u, UITLENING ul, EXEMPLAAR e u.ISBN = e.ISBN AND e.Exemplaarnr = ul.Exemplaarnr AND ul.Lezernr = 355267 AND ul.Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
SELECT FROM WHERE
DISTINCT u.Titel UITGAVE u, UITLENING ul, EXEMPLAAR e u.ISBN = e.ISBN AND e.Exemplaarnr = ul.Exemplaarnr AND ul.Lezernr = 355267 AND ul.Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
.
8
15-12-2011
Alles op een rij Normaal gesproken is de uitkomst een willekeurige volgorde Onoverzichtelijk Sorteren met ORDER BY na de WHERE Van A->Z gebruik ASC (standaard) Van Z->A gebruik DESC
.
Het 5e voorbeeld SELECT FROM WHERE
DISTINCT u.Titel UITGAVE u, UITLENING ul, EXEMPLAAR e u.ISBN = e.ISBN AND e.Exemplaarnr = ul.Exemplaarnr AND ul.Lezernr = 355267 AND ul.Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
SELECT FROM WHERE
DISTINCT u.Titel UITGAVE u, UITLENING ul, EXEMPLAAR e u.ISBN = e.ISBN AND e.Exemplaarnr = ul.Exemplaarnr AND ul.Lezernr = 355267 AND ul.Huurdatum BETWEEN 01-01-2011 AND 31-01-2011
ORDER BY
Huurdatum DESC
.
9
15-12-2011
Dilbert
Denk goed na en wees creatief! .
Vragen .
10