Tabellen en query's koppelen

Wanneer u meerdere gegevensbronnen in een Access-query op neemt, kunt u met joins de records beperken die u wilt zien, op basis van de manier waarop de gegevensbronnen aan elkaar zijn gerelateerd. U kunt joins ook gebruiken om records uit beide gegevensbronnen te combineren, zodat elk paar records uit de bronnen in één record in de queryresultaten wordt.

In dit artikel worden de verschillende typen joins besproken en wordt beschreven hoe u deze gebruikt in een query. Standaard wordt automatisch een join gemaakt als er al een relatie is tussen twee gegevensbronnen die u in een query gebruikt. Er wordt ook een join gemaakt als er velden zijn die duidelijk met elkaar overeenkomen. U kunt een automatisch gemaakte join verwijderen. In dit artikel vindt u basisinformatie over tabelrelaties, waaronder hoe u een tabel kunt maken.

Opmerking: U kunt query's op dezelfde manier joinen als tabellen, en beide.

In dit artikel

Overzicht

Een database is een verzameling tabellen met gegevens die logische relaties met elkaar hebben. U gebruikt relaties om tabellen te verbinden op velden die ze gemeenschappelijk hebben. Een tabel kan deel uitmaken van een bepaald aantal relaties, maar elke relatie heeft altijd precies twee tabellen. In een query wordt een relatie vertegenwoordigd door een join.

Wanneer u tabellen aan een query toevoegt, Access joins gemaakt die zijn gebaseerd op relaties die zijn gedefinieerd tussen de tabellen. U kunt handmatig joins maken in query's, zelfs als deze geen relaties vertegenwoordigen die al zijn gedefinieerd. Als u andere query's (in plaats van of als aanvulling op tabellen) gebruikt als gegevensbronnen voor een query, kunt u joins maken tussen de bronquery's en ook tussen die query's en de tabellen die u als gegevensbron gebruikt.

Joins werken op dezelfde manier als querycriteria omdat ze regels maken waaraan de gegevens moeten voldoen om in de querybewerkingen te worden opgenomen. In tegenstelling tot criteria, geven joins ook aan dat elk paar rijen die aan de joinvoorwaarden voldoen, in de recordset wordt gecombineerd tot één rij.

Er zijn vier basistypen joins: inner joins, outer joins, cross joins en ongelijke joins. In dit artikel wordt elk type join beschreven dat u kunt gebruiken, waarom u elk type gebruikt en hoe u de joins maakt.

Joins geven aan welke relaties er met tabellen zijn gekoppeld: een indicatie van hoe gegevens in twee bronnen kunnen worden gecombineerd op basis van gegevenswaarden die ze gemeenschappelijk hebben. Hier is een afbeelding van een join in de queryontwerpweergave, met de eigenschappen van de join geopend in een dialoogvenster:

Het venster Joineigenschappen.

Deze lijn tussen de tabellen vertegenwoordigt de join. Dubbelklik op een join om het dialoogvenster Joineigenschappen te openen (weergegeven) en controleer of wijzig de join.

Joins zijn soms directioneel. In dit gedeelte van het dialoogvenster ziet u welke tabel de join is en welke velden worden gebruikt om de tabellen te joinen.

Dit gebied bepaalt het type join: optie 1 is een inner join, 2 is een left outer join en 3 is een right outer join.

Velden uit beide tabellen kunnen worden gebruikt en gegevens die betrekking hebben op een bepaalde taak, worden van beide weergegeven. In een inner join worden geen andere gegevens opgenomen. In een outer join worden niet-gerelateerde records uit één tabel ook opgenomen in de queryresultaten.

Naar boven

Typen joins

Er zijn vier basistypen joins: inner joins, outer joins, cross joins en ongelijke joins. Cross joins en ongelijke joins zijn geavanceerde jointypen en worden zelden gebruikt, maar u moet er zeker van zijn dat u volledig inzicht hebt in hoe joins werken.

Inner joins: alleen gerelateerde gegevens uit beide tabellen gecombineerd

Een inner join is een join waarin access alleen gegevens uit een tabel bevat als er overeenkomende gegevens in de gerelateerde tabel staan en omgekeerd. Meestal zult u inner joins gebruiken. Wanneer u een join maakt en niet opgeeft welk type join dit is, wordt ervan uitgenomen dat u een inner join wilt. Inner joins zijn handig omdat u gegevens uit twee bronnen kunt combineren op basis van gedeelde waarden, zodat u alleen gegevens ziet als er een volledige afbeelding is.

Outer joins: alle gerelateerde gegevens worden correct gecombineerd, plus alle resterende records uit één tabel

Een outer join lijkt op een inner join, maar voegt de resterende rijen uit een van de tabellen toe. Outer joins zijn directioneel: een left outer join bevat alle records uit de linkertabel (de eerste tabel in de join) en een right outer join bevat alle records uit de rechtertabel , de tweede tabel in de join.

Full outer joins: alle gegevens, gecombineerd waar haalbaar

In sommige systemen kan een outer join alle rijen uit beide tabellen bevatten, met rijen gecombineerd wanneer ze overeenkomen. Dit wordt een full outer join genoemd en access ondersteunt deze niet expliciet. U kunt echter wel een cross join en criteria gebruiken om hetzelfde effect te bereiken.

Cross joins: alle gegevens, op elke mogelijke manier gecombineerd

Meestal is een cross join een bijeffect van het toevoegen van twee tabellen aan een query, waarna u vergeet deze te joinen. In Access wordt dit geïnterpreteerd als u elke record uit de ene tabel wilt zien gecombineerd met elke record uit de andere tabel, elke mogelijke combinatie van records. Omdat er geen gegevens kunnen worden gecombineerd, levert dit soort join zelden nuttige resultaten op. Er zijn echter een paar gevallen waarin een cross join precies is wat u nodig hebt.

Ongelijke joins: zoals een gewone join, maar het gebruik van een andere vergelijking om rijen te combineren

Ongelijke joins gebruiken een andere operator dan het gelijkteken (=) om waarden te vergelijken en te bepalen of en hoe de gegevens moeten worden gecombineerd. Ongelijke joins worden niet expliciet ondersteund, maar u kunt een cross join en criteria gebruiken om hetzelfde effect te bereiken.

Rijen weergeven waarin een gemeenschappelijke waarde bestaat in beide samengevoegde tabellen

Als u alleen rijen met overeenkomende waarden in het samengevoegde veld wilt weergeven, gebruikt u een inner join. In Access worden inner joins automatisch gemaakt.

Inner joins komen het meeste voor. Ze laten een query zien dat rijen uit een van de samengevoegde tabellen overeenkomen met rijen in de andere tabel op basis van de gegevens in de samengevoegde velden. Wanneer een query met een inner join wordt uitgevoerd, worden alleen die rijen opgenomen in de querybewerkingen waarin beide samengevoegde tabellen een gemeenschappelijke waarde hebben.

Hoe gebruik ik een inner join?

Meestal hoeft u niets te doen om een inner join te gebruiken. Als de tabellen die u aan een query toevoegt al relaties hebben, wordt in Access automatisch een inner join gemaakt tussen elk paar gerelateerde tabellen wanneer u de tabellen toevoegt. Als referentiële integriteit wordt afgedwongen, ziet u boven de joinlijn ook een '1' bij de tabel aan de 'één'-kant van een een-op-veel-relatie en een oneindigheidsteken () bij de tabel aan de 'veel'-kant.

Zelfs als u geen relaties hebt gemaakt, worden in Access automatisch inner joins gemaakt als u twee tabellen aan een query toevoegt en deze tabellen elk een veld hebben met hetzelfde of compatibele gegevenstype en een van de joinvelden een primaire sleutel. De symbolen 'een' en 'veel' worden in dit geval niet weergegeven, omdat referentiële integriteit niet wordt afgedwongen.

Als u query's aan uw query toevoegt en geen relaties tussen deze query's hebt gemaakt, worden inner joins tussen deze query's of tussen query's en tabellen niet automatisch gemaakt. Over het algemeen moet u ze zelf maken. U maakt een inner join door een veld uit een gegevensbron naar een veld in een andere gegevensbron te slepen. Er wordt een lijn tussen de twee velden weergegeven om aan te geven dat er een join is gemaakt.

SQL-syntaxis voor een inner join

Inner joins worden in SQL opgegeven in de FROM-component, zoals hieronder wordt weergegeven:

FROM tabel1 INNER JOIN tabel2 ON tabel1.veld1 tabel2 vergelijken.veld2

De INNER JOIN-bewerking bevat de volgende onderdelen:

Onderdeel

Beschrijving

tabel1, tabel2

De namen van de tabellen waaruit records worden gecombineerd.

field1, field2

De namen van de velden die worden samengevoegd. Niet-numerieke velden moeten hetzelfde gegevenstype hebben en dezelfde soort gegevens bevatten, maar de naam ervan hoeft niet hetzelfde te zijn.

vergelijken

Een relationele vergelijkingsoperator: "=," "<," ">," "<=," ">=," of "<>."

Zie het onderwerp INNER JOIN Operation voor meer informatie over de syntaxis van inner joins.

Naar boven

Alle rijen uit de ene tabel en de bijbehorende rijen uit de andere tabel weergeven

Outer joins geven aan een query aan dat, hoewel sommige rijen aan beide kanten van de join exact overeenkomen, de query alle rijen uit één tabel moet bevatten, en ook de rijen uit de andere tabel die een gemeenschappelijke waarde aan beide zijden van de join hebben.

Outer joins kunnen left outer joins of right outer joins zijn. In een left outer join bevat de query alle rijen uit de eerste tabel in de SQL-instructie FROM-component en alleen die rijen uit de andere tabel waarin het joinveld waarden bevat die voor beide tabellen hetzelfde zijn. In een right outer join worden alle rijen uit de tweede tabel in de SQL-instructie FROM-component opgenomen en alleen de rijen uit de andere tabel waarin het joinveld waarden bevat die voor beide tabellen hetzelfde zijn.

Opmerking: U kunt gemakkelijk zien welke tabel de linkertabel of de rechtertabel in een bepaalde join is door te dubbelklikken op de join en vervolgens te kijken in het dialoogvenster Joineigenschappen. U kunt ook overschakelen naar de SQL-weergave en vervolgens de FROM-component bekijken.

Omdat sommige rijen aan de ene kant van een outer join geen overeenkomende rijen uit de andere tabel hebben, zijn sommige velden die worden geretourneerd in de queryresultaten van die andere tabel leeg wanneer de rijen niet overeenkomen.

Hoe gebruik ik een outer join?

U maakt een outer join door een bestaande inner join te wijzigen. Als er geen inner join bestaat, maakt u er een en wijzigt u deze in een outer join.

Een inner join wijzigen in een outer join

  1. Dubbelklik in de queryontwerpweergave op de join die u wilt wijzigen.

    Het dialoogvenster Joineigenschappen wordt geopend.

  2. Let in het dialoogvenster Joineigenschappen op de keuzen naast optie 2 en optie 3.

  3. Klik op de optie van uw keuze en klik vervolgens op OK.

  4. De join wordt weergegeven en er wordt een pijl weergegeven die wijst van de gegevensbron waar alle rijen worden opgenomen in de gegevensbron, waar alleen de rijen worden opgenomen die aan de joinvoorwaarde voldoen.

Niet-eenduidige outer joins

Als u een query maakt die een LEFT JOIN en een INNER JOIN bevat, kan Access mogelijk niet bepalen welke joinbewerking als eerste moet worden uitgevoerd. Omdat de resultaten verschillen, afhankelijk van of de linker-join of de inner join als eerste wordt uitgevoerd, wordt in Access een foutbericht weergegeven:

U kunt deze fout alleen corrigeren als u de query wijzigt, zodat duidelijk is welke join als eerste moet worden uitgevoerd.

SQL-syntaxis voor een outer join

Outer joins worden in SQL opgegeven in de FROM-component, zoals hieronder wordt weergegeven:

FROM table1 [ LEFT | RIGHT ] JOIN tabel2
ON table1.field1 compare table2.field2

De LEFT JOIN- en RIGHT JOIN-bewerkingen bevatten de volgende onderdelen:

Onderdeel

Beschrijving

tabel1, tabel2

De namen van de tabellen waaruit records worden gecombineerd.

field1, field2

De namen van de velden die zijn gekoppeld. De velden moeten hetzelfde gegevenstype hebben en dezelfde soort gegevens bevatten, maar de naam ervan hoeft niet hetzelfde te zijn.

vergelijken

Een relationele vergelijkingsoperator: "=," "<," ">," "<=," ">=," of "<>."

Zie het onderwerp LEFT JOIN, RIGHT JOIN Operations voor meer informatie over de syntaxis van outer joins.

Naar boven

Alle rijen uit beide tabellen weergeven en ze verbinden met een gemeenschappelijke waarde

Als u alle rijen uit twee tabellen wilt weergeven en deze wilt verbinden op basis van gemeenschappelijke waarden, gebruikt u een full outer join. Access biedt geen expliciete ondersteuning voor full outer joins, maar u kunt hetzelfde effect bereiken met behulp van een samenvakquery. In de volgende procedure wordt uitgelegd hoe u dit doet, maar als u meer informatie wilt over union-query's, zie dan de sectie Zie ook.

Een full outer join uitvoeren met een samenvingsquery:

  1. Maak een query met een left outer join in het veld dat u wilt gebruiken voor een full outer join.

  2. Klik op het tabblad Start in de groep Weergaven op Weergave en klik vervolgens op SQL-weergave.

  3. Druk op Ctrl+C om de SQL-code te kopiëren.

  4. Verwijder de puntkomma aan het einde van de FROM-component en druk op Enter.

  5. Typ UNION en druk op Enter.

    Opmerking: Gebruik niet het sleutelwoord ALL wanneer u een samenvingsquery gebruikt om een full outer join uit te voeren.

  6. Druk op Ctrl+V om de SQL-code te plakken die u in stap 3 hebt gekopieerd.

  7. Wijzig LEFT JOIN in RIGHT JOIN in de code die u hebt geseerd.

  8. Verwijder de puntkomma aan het einde van de tweede FROM-component en druk op Enter.

  9. Voeg een WHERE-component toe die aangeeft dat de waarde van het joinveld NULL is in de eerste tabel die in de FROM-component (de linkertabel) wordt vermeld.

    Als de FROM-component bijvoorbeeld:

    FROM Products RIGHT JOIN [Order Details] 
    ON Products.ID = [Order Details].[Product ID]

    Voeg dan de volgende WHERE-component toe:

    WHERE Products.ID IS NULL

  10. Typ een puntkomma (;) aan het einde van de WHERE-component om het einde van de union-query aan te geven.

  11. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Cross joins

Cross joins verschillen van inner and outer joins omdat ze niet expliciet worden weergegeven in Access. In een cross join wordt elke rij van de ene tabel gecombineerd met elke rij uit een andere tabel, wat resulteert in een zogenaamd kruisproduct of een Cartesisch product. Elke keer dat u een query uitvoert die tabellen heeft die niet expliciet zijn samengevoegd, is een kruisproduct het resultaat. Kruis joins zijn meestal onbedoeld, maar er zijn gevallen waarin deze nuttig kunnen zijn.

Waarom zou ik een cross join gebruiken?

Als u elke mogelijke combinatie van rijen tussen twee tabellen of query's wilt bekijken, gebruikt u een cross-join. Stel dat uw bedrijf een spectaculair jaar heeft gehad en u overweegt korting te geven aan uw klanten. U kunt een query maken die de aankopen van elke klant optelt, een kleine tabel maakt met verschillende mogelijke kortingspercentages en de twee combineert in een andere query die een cross-join uitvoert. U eindigt op een query met een verzameling hypothetische kortingen voor elke klant.

Hoe gebruik ik een cross join?

Elke keer dat u tabellen of query's in uw query op nemen, wordt een cross join geproduceerd en maakt u niet ten minste één expliciete join voor elke tabel of query. In Access wordt elke rij van elke tabel of query die niet expliciet aan een andere tabel of query is verbonden, gecombineerd met elke andere rij in de resultaten. Kijk eens naar het kortingsscenario uit de vorige alinea. Stel dat u 91 klanten hebt en dat u vijf mogelijke kortingspercentages wilt bekijken. Uw cross join produceert 455 rijen (het product van 91 en 5).

Zoals u zich kan voorstellen, kunnen onbedoelde kruis joins een groot aantal rijen in uw queryresultaten opleveren. Bovendien zijn deze resultaten over het algemeen betekenisloos, omdat als u niet van plan bent om elke rij met elke andere rij te combineren, de meeste gecombineerde rijen die in de resultaten worden weergegeven, niet zinvol zijn. Ten slotte kan het uitvoeren van query's die onbedoelde kruis joins gebruiken, erg lang duren.

Onbedoelde cross join in de ontwerpweergave van de query

1. De omcirkelde velden moeten met elkaar worden verbonden.

Onbedoeld kruisproduct

1. Let op het zeer grote aantal records.

Het gecorrigeerde queryresultaat

1. Houd er rekening mee dat het aantal records veel kleiner is.

Naar boven

Tabellen joinen op basis van een veldwaarde

Joins hoeft niet te zijn gebaseerd op de gelijkwaardigheid van de samengevoegde velden. Een join kan zijn gebaseerd op een vergelijkingsoperator, zoals groter dan (>), kleiner dan (<) of is niet gelijk aan (<>). Joins die niet op gelijkwaardigheid zijn gebaseerd, worden ongelijke joins genoemd.

Als u de rijen met twee gegevensbronnen wilt combineren op basis van veldwaarden die niet gelijk zijn, gebruikt u een ongelijke join. Ongelijke joins zijn meestal gebaseerd op de vergelijkingsoperatoren groter dan (>), kleiner dan (<), groter dan of gelijk aan (>=) of kleiner dan of gelijk aan (<=). Ongelijke joins die zijn gebaseerd op de operator is niet gelijk aan (<>) kan bijna net zoveel rijen retourneren als cross joins, en de resultaten kunnen moeilijk te interpreteren zijn.

Hoe gebruik ik een ongelijke join?

Ongelijke joins worden niet ondersteund in de ontwerpweergave. Als u deze wilt gebruiken, moet u dit doen in de SQL-weergave. U kunt echter een join maken in de ontwerpweergave, overschakelen naar de SQL-weergave, de vergelijkingsoperator gelijk aan(=)zoeken en deze wijzigen in de operator die u wilt gebruiken. Nadat u dit hebt uitgevoerd, kunt u de query alleen opnieuw openen in de ontwerpweergave als u de vergelijkingsoperator eerst wijzigt in gelijk aan (=) in de SQL-weergave.

Een join verwijderen

Als er automatisch een join wordt gemaakt die u niet wilt gebruiken, of als u per ongeluk een join maakt , bijvoorbeeld een join tussen twee velden met verschillende gegevenstypen, kunt u de join verwijderen.

  1. Klik in het queryontwerpraster op de join die u wilt verwijderen.

  2. Druk op Delete.

-of-

  • Klik in het queryontwerpraster met de rechtermuisknop op de join die u wilt verwijderen en klik vervolgens op Verwijderen.

Naar boven

Zie ook

Records toevoegen aan

query

maken,

of

Meer hulp nodig?

Uw Office-vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Office Insiders

Was deze informatie nuttig?

×