Databases SQL - meerdere tabellen Nut van een database Dilbert 1
Reservering Lezer Uitgave Filiaal Basis zaken Uitlening Exemplaar NB: er kan verschil in smaak zitten tussen M1a en S1a notatie 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 = 10000 rijen Zinvol: goed gebruik maken van de -clausule Het 1e voorbeeld Namen en telefoon nummers van de lezers die in Breda hun boeken lenen Reservering Uitgave Lezer Filiaal Oplossing? Tabellen koppelen Uitlening Exemplaar Welke tabellen? LEZER + FILIAAL Welke gegevens? Namen en telefoonnummers Wat is de voorwaarde? Filplaats = 'Breda' Welke sleutels zijn hetzelfde? Filiaalnr (straks het bewijs) Hoe? Kijken naar de sleutels primair én secudair 2
De SQL Statement statement Alle gegevens die je wilt laten zien op het beeldscherm, met een verwijzing naar de tabel statement De tabellen van de gegevens die in de staan statement Het leggen van de koppelingen tussen de tabellen en de voorwaarden waaraan voldaan moet worden Het 1e voorbeeld LEZER Naam Adres Postcode Plaats Telefoon Geboortedatm FILIAAL filiaalnummer FilAdres FilPostcode FilPlaats FilTelefoon Namen en telefoon nummers van de lezers die in Breda hun boeken lenen Gegevens Tabellen Voorwaarde Naam, telefoonnummer LEZER, FILIAAL Filplaats = 'Breda' Zelfde sleutels Filiaalnr 3
Het 1e voorbeeld LEZER Naam Adres Postcode Plaats Telefoon Geboortedatm FILIAAL filiaalnummer FilAdres FilPostcode FilPlaats FilTelefoon Namen en telefoon nummers van de lezers die in Breda hun boeken lenen Naam, telefoonnummer LEZER, FILIAAL Filplaats = 'Breda' Zelfde sleutels Filiaalnr Afronden SQL statement Het 1e voorbeeld LEZER Naam Adres Postcode Plaats Telefoon Geboortedatm FILIAAL filiaalnummer FilAdres FilPostcode FilPlaats FilTelefoon Namen en telefoon nummers van de lezers die in Breda hun boeken lenen LEZERnaam, LEZERtelefoonnummer LEZER, FILIAAL LEZERFiliaalnummer = FILIAALfiliaalnummer AND FILIAALFilplaats = 'Breda' Zelfde sleutels Filiaalnr 4
Het 2e voorbeeld Alle titels die lezer 355267 in januari 2011 gehuurd heeft Reservering Uitgave Titels Lezer Filiaal Lezernummer Uitlening Exemplaar Tabellen UITGAVE + UITLENING via EXEMPLAAR Het 2e voorbeeld Alle titels die lezer 355267 in januari 2011 gehuurd heeft UITGAVE ISBN Titel Schrijver Uitgeverij Prijs EXEMPLAAR ISBN * UITLENING Retourdatum Gegevens Tabellen Voorwaarde Titel UITGAVE, UITLENING, EXEMPLAAR = 355267 AND BETWEEN 01-01-2011 AND 31-01-2011 Zelfde sleutels + ISBN 5
Het 2e voorbeeld Alle titels die lezer 355267 in januari 2011 gehuurd heeft UITGAVE ISBN Titel Schrijver Uitgeverij Prijs EXEMPLAAR ISBN * UITLENING Retourdatum Titel UITGAVE, UITLENING, EXEMPLAAR = 355267 AND BETWEEN 01-01-2011 AND 31-01-2011 Zelfde sleutels + ISBN Het 2e voorbeeld Afronden SQL statement Alle titels die lezer 355267 in januari 2011 gehuurd heeft UITGAVE ISBN Titel Schrijver Uitgeverij Prijs EXEMPLAAR ISBN * UITLENING Retourdatum UITGAVETitel UITGAVE, UITLENING, EXEMPLAAR UITGAVEISBN = EXEMPLAARISBN AND EXEMPLAAR = UITLENING AND UITLENING = 355267 AND UITLENING BETWEEN 01-01-2011 AND 31-01-2011 Zelfde sleutels + ISBN 6
Moeheid voorkomen In SQL query niet volledige tabelnamen hoeven typen ALIAS gebruiken <tabelnaam> ALIAS, <tabelnaam> ALIAS ALIAS invoegen bij en Het 3e voorbeeld UITGAVETitel UITGAVE, UITLENING, EXEMPLAAR UITGAVEISBN = EXEMPLAARISBN AND EXEMPLAAT = UITLENING AND UITLENING = 355267 AND UITLENING BETWEEN 01-01-2011 AND 31-01-2011 utitel UITGAVE u, UITLENING ul, EXEMPLAAR e uisbn = eisbn AND e = ul AND ul = 355267 AND ul BETWEEN 01-01-2011 AND 31-01-2011 7
Redundantie voorkomen Alle resultaten uit de kolommen genoemd in de 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 mee te geven Het 4e voorbeeld utitel UITGAVE u, UITLENING ul, EXEMPLAAR e uisbn = eisbn AND e = ul AND ul = 355267 AND ul BETWEEN 01-01-2011 AND 31-01-2011 DISTINCT utitel UITGAVE u, UITLENING ul, EXEMPLAAR e uisbn = eisbn AND e = ul AND ul = 355267 AND ul BETWEEN 01-01-2011 AND 31-01-2011 8
Alles op een rij Normaal gesproken is de uitkomst een willekeurige volgorde Onoverzichtelijk Sorteren met ORDER BY na de Van A->Z gebruik ASC (standaard) Van Z->A gebruik DESC Het 5e voorbeeld DISTINCT utitel UITGAVE u, UITLENING ul, EXEMPLAAR e uisbn = eisbn AND e = ul AND ul = 355267 AND ul BETWEEN 01-01-2011 AND 31-01-2011 DISTINCT utitel UITGAVE u, UITLENING ul, EXEMPLAAR e uisbn = eisbn AND e = ul AND ul = 355267 AND ul BETWEEN 01-01-2011 AND 31-01-2011 ORDER BY DESC 9
Dilbert Denk goed na en wees creatief! Vragen 10