Tabellen en query's koppelen

Van toepassing op
Access voor Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Als u meerdere gegevensbronnen in een Access-query opneemt, gebruikt u joins om de records die u wilt zien te beperken op basis van de onderlinge verwantschap tussen de gegevensbronnen. U gebruikt joins ook om records uit beide gegevensbronnen te combineren, zodat elk paar records uit de bronnen één record in de queryresultaten wordt.

In dit artikel worden de verschillende typen joins besproken en wordt getoond hoe u ze kunt gebruiken in een query. Als er al een relatie bestaat tussen twee gegevensbronnen die u in een query gebruikt, wordt standaard automatisch een join gemaakt. Er wordt ook een join gemaakt als er velden zijn die duidelijk overeenkomen met elkaar. U kunt een automatisch gemaakte join verwijderen. Dit artikel bevat algemene informatie over tabelrelaties, inclusief hoe u een relatie maakt.

Opmerking

U kunt query's op dezelfde manier koppelen als tabellen en u kunt beide koppelen.

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 met behulp van velden die ze gemeenschappelijk hebben. Een tabel kan deel uitmaken van een willekeurig aantal relaties, maar elke relatie heeft altijd exact twee tabellen. In een query wordt een relatie voorgesteld door een join.

Wanneer u tabellen aan een query toevoegt, worden er joins gemaakt die zijn gebaseerd op relaties die tussen de tabellen zijn gedefinieerd. U kunt joins in query's handmatig maken, 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 gegevensbron voor een query, kunt u joins maken tussen de bronquery's en ook tussen deze query's en tabellen die u als gegevensbron gebruikt.

Joins gedragen zich vergelijkbaar met querycriteria, in die zin dat er regels worden vastgesteld waaraan de gegevens moeten voldoen om te worden opgenomen in de querybewerkingen. In tegenstelling tot criteria specificeren joins ook dat elk rijenpaar dat voldoet aan de joinvoorwaarden, wordt gecombineerd in de recordset om één rij te vormen.

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

Joins zijn query's wat relaties zijn met tabellen: een indicatie van hoe gegevens in twee bronnen kunnen worden gecombineerd op basis van gegevenswaarden die ze gemeen hebben. Hier volgt een illustratie van een join in de queryontwerpweergave, waarbij de joineigenschappen zijn geopend in een dialoogvenster:

Het vak Joineigenschappen.

Deze lijn tussen de tabellen vertegenwoordigt de join. Dubbelklik op een join om het dialoogvenster Joineigenschappen (afgebeeld) te openen en de join te bekijken of te wijzigen.

Joins zijn soms directioneel. In dit gebied van het dialoogvenster ziet u welke tabel in de join is opgenomen en van welke velden de tabellen moeten worden samengevoegd.

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.

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

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 ze kennen als u volledig begrijpt hoe joins werken.

Een inner join is een join waarbij Access alleen gegevens uit een tabel opneemt als er overeenkomstige gegevens in de gerelateerde tabel staan en vice versa. Meestal zult u inner joins gebruiken. Wanneer u een join maakt en niet opgeeft welk type join het is, wordt ervan uitgegaan dat u een inner join wilt. Inner joins zijn handig omdat u hiermee gegevens uit twee bronnen kunt combineren op basis van gedeelde waarden, zodat u alleen gegevens ziet als er een compleet beeld is.

Een outer join is vergelijkbaar met 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 omvat alle records uit de rechtertabel (de tweede tabel in de join).

Volledige outer joins: alle gegevens, waar mogelijk gecombineerd

In sommige systemen kan een outer join alle rijen uit beide tabellen bevatten, waarbij rijen worden gecombineerd wanneer ze corresponderen. Dit wordt een volledige outer join genoemd, en deze worden niet expliciet ondersteund door Access. U kunt echter een cross join en criteria gebruiken om hetzelfde effect te bereiken.

Cross joins: alle gegevens, op alle mogelijke manieren gecombineerd

Een cross join is meestal een neveneffect van het toevoegen van twee tabellen aan een query, waarna wordt vergeten deze te koppelen. Access interpreteert dit als een combinatie van alle records uit de ene tabel, dus elke mogelijke combinatie van records. Omdat er geen gegevens kunnen worden gecombineerd, levert dit type join zelden bruikbare 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 met een andere vergelijking om rijen te combineren

Bij ongelijke joins wordt een andere operator dan het gelijkteken (=) gebruikt 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 met een gemeenschappelijke waarde in beide samengevoegde tabellen

Als u alleen de rijen wilt weergeven die overeenkomende waarden in het gekoppelde veld hebben, gebruikt u een inner join. Inner joins worden automatisch gemaakt.

Inner joins komen het meeste voor. Hiermee wordt aan een query doorgegeven dat rijen uit een van de gekoppelde tabellen overeenkomen met rijen in de andere tabel, op basis van de gegevens in de gekoppelde velden. Wanneer er een query met een inner join wordt uitgevoerd, worden alleen de rijen in de query opgenomen waarvoor in beide samengevoegde tabellen een waarde bestaat.

Hoe kan ik een inner join gebruiken?

Meestal hoeft u niets te doen om een inner join te gebruiken. Als er al een relatie bestaat tussen de tabellen die u toevoegt, 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 'een'-kant van een een-op-veel-relatie en een oneindigheidssymbool () bij de tabel aan de 'veel'-kant.

Zelfs als u geen relaties hebt gemaakt, worden er automatisch inner joins gemaakt als u twee tabellen toevoegt aan een query en deze tabellen elk een veld hebben met hetzelfde of een compatibel gegevenstype en een van de joinvelden een primaire sleutel is. 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 relatie tussen de query's hebt gemaakt, worden inner joins tussen deze query's of tussen query's en tabellen niet automatisch gemaakt door Access. Over het algemeen maakt u ze zelf. 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 opgegeven in SQL in de FROM-component, zoals hieronder aangegeven:

FROM table1 INNER JOIN table2 ON table1. veld1 vergelijk tabel2. 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 Elke relationele vergelijkingsoperator: "=," "<," ">," "<=," "=," of> "<>."

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

Naar boven

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

Met outer joins wordt een query aangegeven dat, hoewel sommige rijen aan beide zijden van de join exact overeenkomen, de query alle rijen uit de ene tabel moet bevatten, en ook de rijen uit de andere tabel die aan beide zijden van de join een gemeenschappelijke waarde hebben.

Outer joins kunnen left outer joins zijn of right outer joins. In een left outer join neemt de query alle rijen op uit de eerste tabel in de FROM-component SQL-instructie en alleen de rijen uit de andere tabel waarvoor het joinveld gemeenschappelijke waarden voor beide tabellen bevat. In een right outer join neemt de query alle rijen op uit de tweede tabel in de FROM-component SQL-instructie, en alleen de rijen uit de andere tabel waarvoor het joinveld gemeenschappelijke waarden voor beide tabellen bevat.

Opmerking

U kunt gemakkelijk zien welke tabel de linker- of de rechtertabel is in een bepaalde join door te dubbelklikken op de join en vervolgens in het dialoogvenster Joineigenschappen te kijken. 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 uit die andere tabel leeg wanneer de rijen niet overeenkomen.

Hoe kan ik een outer join gebruiken?

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. Bekijk in het dialoogvenster Joineigenschappen de opties naast optie 2 en optie 3.
  3. Klik op de optie van uw keuze en klik vervolgens op OK.
  4. In Access wordt de join weergegeven en wordt een pijl weergegeven die wijst van de gegevensbron waar alle rijen worden opgenomen in de gegevensbron waar alleen de rijen die voldoen aan de joinvoorwaarde worden opgenomen.

Niet-eenduidige outer joins

Als u een query maakt die een LEFT JOIN en een INNER JOIN bevat, kan in Access mogelijk niet worden bepaald welke join het eerst moet worden uitgevoerd. Omdat de resultaten verschillen, afhankelijk van of eerst de left join of de inner join wordt uitgevoerd, wordt in Access een foutbericht weergegeven:

U kunt deze fout corrigeren door de query zo aan te passen dat duidelijk is welke join eerst moet worden uitgevoerd.

SQL-syntaxis voor een outer join

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

UIT tabel1 [ LINKS | RIGHT ] JOIN TABLE2
ON tabel1.veld1 vergelijk tabel2.veld2

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 worden samengevoegd. De velden moeten van hetzelfde gegevenstype zijn en hetzelfde soort gegevens bevatten, maar de naam ervan hoeft niet hetzelfde te zijn.
vergelijken Elke relationele vergelijkingsoperator: "=," "<," ">," "<=," "=," of> "<>."

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

Naar boven

Alle rijen uit beide tabellen weergeven en ze samenvoegen waar een gemeenschappelijke waarde bestaat

Wanneer u alle rijen uit twee tabellen wilt weergeven en deze wilt samenvoegen op basis van gemeenschappelijke waarden, gebruikt u een volledige outer join. Access biedt geen expliciete ondersteuning voor volledige outer joins, maar u kunt hetzelfde effect bereiken door een samenvoegquery te gebruiken. In de volgende procedure wordt uitgelegd hoe u dit doet, maar als u meer informatie wilt over samenvoegquery's, raadpleegt u de sectie Zie ook .

Een samenvoegquery gebruiken om een volledige outer join uit te voeren:

  1. Maak een query met een left outer join voor het veld dat u wilt gebruiken voor een volledige 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 het sleutelwoord ALL niet wanneer u een samenvoegquery gebruikt om een volledige 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 in de code die u hebt geplakt LEFT JOIN in RIGHT JOIN.

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

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

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

    U voegt 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 samenvoegquery aan te geven.

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

Kruisverbindingen

Cross joins verschillen van inner en outer joins doordat ze niet expliciet worden weergegeven in Access. In een cross join wordt elke rij uit de ene tabel gecombineerd met elke rij uit een andere tabel, wat resulteert in een zogenaamd kruisproduct of een cartesisch product. Telkens wanneer u een query uitvoert met tabellen die niet expliciet zijn gekoppeld, is er een kruisproduct het resultaat. Cross joins zijn meestal onbedoeld, maar er zijn gevallen waarin ze nuttig kunnen zijn.

Waarom zou ik een cross join gebruiken?

Als u elke mogelijke combinatie van rijen tussen twee tabellen of query's wilt onderzoeken, gebruikt u een cross join. Stel dat uw bedrijf een spectaculair jaar achter de rug heeft en u overweegt uw klanten kortingen te geven. U kunt een query maken waarmee de aankopen van elke klant worden opgeteld, een kleine tabel maken met verschillende mogelijke kortingspercentages en deze twee combineren in een andere query waarmee een cross join wordt uitgevoerd. Uiteindelijk resulteert u in een query met een reeks hypothetische kortingen voor elke klant.

Hoe kan ik een cross join gebruiken?

Telkens als u tabellen of query's opneemt in uw query, wordt er een cross-join gemaakt zonder dat er ten minste één expliciete join voor elke tabel of query wordt gemaakt. In Access wordt elke rij uit elke tabel of query die niet expliciet aan een andere tabel of query is gekoppeld, gecombineerd met elke andere rij in de resultaten. Beschouw het kortingsscenario uit de vorige paragraaf. Stel dat u 91 klanten hebt en dat u vijf mogelijke kortingspercentages wilt bekijken. Een kruisverbinding levert 455 rijen op (het product van 91 en 5).

U kunt zich voorstellen dat onbedoelde cross joins leiden tot een groot aantal rijen in uw queryresultaten. Bovendien zijn deze resultaten in het algemeen zinloos, want als u niet elke rij met elke andere rij wilt combineren, hebben de meeste rijen die worden weergegeven geen zin. Ten slotte kan het uitvoeren van query's waarbij onbedoelde cross joins worden gebruikt, erg lang duren.

Onbedoelde cross join in queryontwerpweergave 1. De omcirkelde velden moeten aan elkaar worden gekoppeld.

Onbedoeld kruisproduct 1. Let op het zeer grote aantal records.

Het gecorrigeerde queryresultaat 1. Het aantal records is veel kleiner.

Naar boven

Tabellen samenvoegen op basis van een ongelijkheid in veldwaarden

Joins hoeven niet te zijn gebaseerd op de equivalentie van de gekoppelde velden. Een join kan worden gebaseerd op elke vergelijkingsoperator, zoals groter dan (>), kleiner dan (<) of niet gelijk aan (<>). Joins die niet op equivalentie zijn gebaseerd, worden ongelijke joins genoemd.

Als u de rijen van twee gegevensbronnen wilt combineren op basis van ongelijke veldwaarden, 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 (<>) kunnen bijna evenveel rijen retourneren als cross joins, en de resultaten kunnen moeilijk te interpreteren zijn.

Hoe kan ik een ongelijke join gebruiken?

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, naar de SQL-weergave gaan, de vergelijkingsoperator voor gelijk aan (=) zoeken en deze wijzigen in de operator die u wilt gebruiken. Nadat u dit hebt gedaan, kunt u de query alleen opnieuw in de ontwerpweergave openen als u eerst de vergelijkingsoperator weer gelijk aan (=) wijzigt in de SQL-weergave.

Een join verwijderen

Als in Access automatisch een join wordt gemaakt die u niet wilt 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

Records toevoegen aan een tabel door een toevoegquery te gebruikenDe resultaten van verschillende selectiequery's combineren met behulp van een samenvoegquery Een query maken op basis van meerdere tabellenEen relatie maken, bewerken of verwijderen