3.4 Joins
Je kan terugkeren naar het venster met de eigenschappen van de relatie door op het lijntje te dubbelkliken. Je kan dan o.a. het 'jointype' instellen. Wanneer een relatie gelegd wordt tussen twee tabellen kunnen de gegevens uit die tabellen samengebracht worden in een query. Hierop kan je dan een formulier of rapport baseren. De vraag is echter welke records uit die beide tabellen moeten opgenomen worden in de query. Je hebt -toegepast op ons voorbeeld- de volgende mogelijkheden:
Je stelt het join-type in door bij het gewenste nummer te klikken in onderstaand venster. Het standaard jointype is 1 of 'inner join'.

Je maakt nu een query met de tabellen 'tblUitgeverijen' en 'tblBoeken'. Je ziet dat de relatie die je vroeger hebt gelegd hier terug te vinden is. Je kan nu naar believen velden uit beide tabellen in de query opnemen. Bij een relatie van het type 'inner-join' worden enkel die records getoond waarbij in beide tabellen dezelfde waarde wordt gevonden in het veld waarmee de relatie is gelegd. Merk op dat het niet nodig is het relatieveld zelf in de query op te nemen.

Je kan op de hierboven aangeduide wijze het jointype wijzigen. Keuze 2 wordt afgebeeld met een pijltje naar de tabel waaruit enkel de overeenstemmende records zullen genomen worden. Voer je de onderstaande query uit dan zie je dus alle uitgeverijen, ook die waarvoor géén boeken werden ingevoerd.

Jointype 3 ziet er in het ontwerpscherm van de query zo uit:

Met deze query toon je alle boeken, ongeacht of er een uitgeverijnummer is ingevuld dat in de tabel 'tblUitgeverijen' voorkomt.
De woorden left en right in 'left-outer-join' en 'right-outer-join' zijn ontleend aan de syntaxis van de SQL-instructies om de bedoelde query's te maken. Het is dus niet zo dat bij een left-outer-join alle records zouden worden opgenomen uit de linker tabel in het queryontwerpscherm. Je kan de tabellen immers plaatsen waar je wil...
Een 'left join' geeft alle records weer uit de tabel die in de SQL-instructie links staat, een 'right join' geeft alle records weer uit de tabel die in de SQL-instructie rechts staat. In het query-ontwerpscherm is dus niet te zien met welk van de 2 soorten je te maken hebt. Je kan er wel in het venster 'Jointype' lezen welke records geselecteerd zullen worden bij de keuzen 2 of 3 doch zonder de aanduiding left of right. Volgende query's geven dus niet dezelfde records weer indien er losse records zijn.
SELECT DISTINCTROW tblBoeken.Titel,
tblUitgeverijen.Uitgeverij_benaming
FROM tblUitgeverijen LEFT JOIN tblBoeken ON
tblUitgeverijen.Uitg_Nr = tblBoeken.Uitg_nr;
SELECT DISTINCTROW tblBoeken.Titel,
tblUitgeverijen.Uitgeverij_benaming
FROM tblBoeken LEFT JOIN tblUitgeverijen ON
tblUitgeverijen.Uitg_Nr = tblBoeken.Uitg_nr;
Begrijp je dat onze query in het eerste en het derde geval precies dezelfde records oplevert indien vanaf het begin referentiële integriteit werd afgedwongen? Proficiat!
Je kan m.b.v. de relatie tussen 'tblUitgeverijen' en 'tblBoeken' reeds achterhalen bij welke uitgeverij een bepaald boek kan besteld worden. Meerbepaald kan je van de uitgeverij de naam, het adres en de postcode terugvinden. Blijft nog de gemeente. Je maakt hiertoe een relatie aan tussen 'tblUitgeverijen' en 'tblPostnummers'. Dwing referentiële integriteit af. Het scherm 'relaties' ziet er dan zo uit:
