Wanneer u meerdere gegevensbronnen in een Access-query opneemt, gebruikt u joins om de records te beperken die u wilt zien, op basis van de relatie tussen de gegevensbronnen. U gebruikt ook joins om records uit beide gegevensbronnen te combineren, zodat elk paar records uit de bronnen één record wordt in de queryresultaten.
In dit artikel worden de verschillende typen joins besproken en wordt uitgelegd hoe u deze kunt gebruiken 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. Dit artikel bevat basisinformatie over tabelrelaties, waaronder het maken van een relatie.
Opmerking: U kunt query's op dezelfde manier samenvoegen als tabellen, en u kunt ook beide samenvoegen.
In dit artikel
-
Rijen weergeven waarin een gemeenschappelijke waarde bestaat in beide gekoppelde tabellen
-
Alle rijen uit de ene tabel en de bijbehorende rijen uit de andere tabel weergeven
-
Alle rijen uit beide tabellen weergeven en samenvoegen waar een gemeenschappelijke waarde bestaat
-
Tabellen samenvoegen op basis van een ongelijkheid van veldwaarden
Overzicht
Een database is een verzameling tabellen met gegevens die logische relaties met elkaar hebben. U gebruikt relaties om tabellen te verbinden per gemeenschappelijke velden. Een tabel kan deel uitmaken van een willekeurig 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, maakt Access joins die zijn gebaseerd op relaties die tussen de tabellen zijn gedefinieerd. 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 naast tabellen) gebruikt als gegevensbronnen voor een query, kunt u joins maken tussen de bronquery's en ook tussen deze query's en tabellen die u als gegevensbronnen gebruikt.
Joins gedragen zich op dezelfde manier als querycriteria, omdat ze regels vaststellen die de gegevens moeten overeenkomen om te worden opgenomen in de querybewerkingen. In tegenstelling tot criteria geven joins ook aan dat elk paar rijen dat aan de joinvoorwaarden voldoet, 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 elk type join beschreven dat u kunt gebruiken, waarom u elk type gebruikt en hoe u de joins maakt.
Joins zijn voor query's wat relaties met tabellen zijn: een indicatie van hoe gegevens in twee bronnen kunnen worden gecombineerd op basis van gegevenswaarden die ze gemeen hebben. Hier ziet u een afbeelding van een join in de ontwerpweergave van de query, met de eigenschappen van de join geopend in een dialoogvenster:
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 richtingsgebonden. In dit gedeelte van het dialoogvenster ziet u welke tabel in de join en welke velden worden gebruikt om de tabellen samen te voegen.
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 elk van beide weergegeven. In een inner join worden geen andere gegevens opgenomen. In een outer join worden ook niet-gerelateerde records uit één tabel opgenomen in de queryresultaten.
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 om volledig te begrijpen 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 overeenkomstige gegevens in de gerelateerde tabel staan en omgekeerd. Meestal gebruikt u inner joins. Wanneer u een join maakt en niet opgeeft wat voor soort 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 wanneer er een volledig beeld is.
Outer joins: alle gerelateerde gegevens 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).
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 overeenkomen. Dit wordt een volledige outer join genoemd en deze worden niet expliciet ondersteund in Access. U kunt echter een kruiskoppeling en criteria gebruiken om hetzelfde effect te bereiken.
Cross joins: alle gegevens, op elke mogelijke manier gecombineerd
Meestal is een kruiskoppeling een neveneffect van het toevoegen van twee tabellen aan een query en vervolgens vergeten deze samen te voegen. Dit betekent dat u elke record uit de ene tabel wilt zien in combinatie 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 enkele gevallen waarin een cross join precies is wat u nodig hebt.
Ongelijke joins: zoals een gewone join, maar een andere vergelijking gebruiken 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 gekoppelde tabellen
Als u alleen de rijen wilt weergeven met overeenkomende waarden in het gekoppelde veld, gebruikt u een inner join. Er worden automatisch inner joins gemaakt.
Inner joins komen het meeste voor. Ze vertellen een query 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 een query met een inner join wordt uitgevoerd, worden alleen de rijen met een gemeenschappelijke waarde in beide gekoppelde tabellen opgenomen in de querybewerkingen.
Hoe kan ik een inner join gebruiken?
Meestal hoeft u niets te doen om een inner join te gebruiken. Als de tabellen die u aan een query toevoegt al relaties hebben, maakt Access automatisch een inner join 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, maakt Access automatisch inner joins 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 is een primaire sleutel. De symbolen 'één' en 'veel' worden in dit geval niet weergegeven, omdat referentiële integriteit niet wordt afgedwongen.
Als u query's toevoegt aan uw query en geen relaties tussen deze query's hebt gemaakt, maakt Access niet automatisch inner joins tussen deze query's of tussen query's en tabellen. Over het algemeen moet u ze zelf maken. U maakt een inner join door een veld van de ene gegevensbron naar een veld op 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 wordt weergegeven:
FROM tabel1 INNER JOIN tabel2 ON tabel1.field1 compare table2.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-bewerking voor meer informatie over de syntaxis van inner join.
Alle rijen uit de ene tabel en de bijbehorende rijen uit de andere tabel weergeven
Outer joins vertellen een query dat hoewel sommige rijen aan beide zijden van de join exact overeenkomen, de query alle rijen uit de ene tabel moet bevatten, evenals de rijen uit de andere tabel die een gemeenschappelijke waarde aan beide zijden van de join delen.
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 de rijen uit de andere tabel waar het samenvoegveld waarden bevat die voor beide tabellen gelden. In een right outer join bevat de query alle rijen uit de tweede tabel in de SQL-instructie FROM-component, en alleen die rijen uit de andere tabel waar het samenvoegveld waarden bevat die voor beide tabellen gelden.
Opmerking: U kunt eenvoudig 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 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
-
Dubbelklik in de ontwerpweergave van de query op de join die u wilt wijzigen.
Het dialoogvenster Joineigenschappen wordt geopend.
-
Noteer in het dialoogvenster Join-eigenschappen de opties naast optie 2 en optie 3.
-
Klik op de optie van uw keuze en klik vervolgens op OK.
-
Access geeft de join weer en toont een pijl die wijst van de gegevensbron waar alle rijen worden opgenomen naar de gegevensbron, waar alleen de rijen worden opgenomen die voldoen aan de joinvoorwaarde.
Dubbelzinnige outer joins
Als u een query maakt die een LEFT JOIN en een INNER JOIN bevat, kan Access mogelijk niet bepalen welke joinbewerking het eerst moet worden uitgevoerd. Omdat de resultaten verschillen, afhankelijk van of de linker-join of de inner join als eerste wordt uitgevoerd, wordt er een foutbericht weergegeven:
Als u deze fout wilt corrigeren, moet u de query wijzigen zodat het duidelijk is welke join het eerst moet worden uitgevoerd.
SQL-syntaxis voor een outer join
Outer joins worden opgegeven in SQL in de FROM-component, zoals hieronder wordt weergegeven:
FROM-tabel1 [ LINKS | RIGHT ] JOIN table2
ON table1.field1 compare table2.field2De 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 join.
Alle rijen uit beide tabellen weergeven en samenvoegen waar een gemeenschappelijke waarde bestaat
Als u alle rijen uit twee tabellen wilt weergeven en deze wilt samenvoegen op basis van algemene waarden, gebruikt u een volledige outer join. Access biedt geen expliciete ondersteuning voor volledige outer joins, maar u kunt hetzelfde effect bereiken met behulp van een samenvoegquery. 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:
-
Maak een query met een left outer join op het veld dat u wilt gebruiken voor een volledige outer join.
-
Klik op het tabblad Start in de groep Weergaven op Weergave en klik vervolgens op SQL-weergave.
-
Druk op Ctrl+C om de SQL-code te kopiëren.
-
Verwijder de puntkomma aan het einde van de FROM-component en druk op Enter.
-
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.
-
Druk op Ctrl+V om de SQL-code te plakken die u in stap 3 hebt gekopieerd.
-
Wijzig LEFT JOIN in RIGHT JOIN in de code die u hebt geplakt.
-
Verwijder de puntkomma aan het einde van de tweede FROM-component en druk op Enter.
-
Voeg een WHERE-component toe die aangeeft 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 de volgende WHERE-component toe:
WHERE Products.ID IS NULL
-
Typ een puntkomma (;) aan het einde van de WHERE-component om het einde van de samenvoegquery aan te geven.
-
Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.
Kruiskoppelingen
Kruiskoppelingen verschillen van binnen- en buitenste joins omdat ze niet expliciet worden weergegeven in Access. In een kruiskoppeling wordt elke rij van de ene tabel gecombineerd met elke rij uit een andere tabel, wat resulteert in wat een cross-product of cartesisch product wordt genoemd. Telkens wanneer u een query uitvoert die tabellen bevat die niet expliciet zijn gekoppeld, is een cross-product het resultaat. Kruiskoppelingen 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 heeft gehad en u overweegt kortingen te geven aan uw klanten. U kunt een query maken waarmee de aankopen van elke klant worden opgeteld, een kleine tabel met verschillende mogelijke kortingspercentages worden gemaakt en de twee worden gecombineerd in een andere query waarmee een cross join wordt uitgevoerd. U eindigt met een query die een set hypothetische kortingen voor elke klant weergeeft.
Hoe kan ik een cross join gebruiken?
Er wordt een kruiskoppeling geproduceerd wanneer u tabellen of query's in uw query opneemt en maakt niet ten minste één expliciete join voor elke tabel of query. Access combineert elke rij van elke tabel of query die niet expliciet is gekoppeld aan een andere tabel of query met elke andere rij in de resultaten. Bekijk het kortingsscenario uit de vorige alinea. Stel dat u 91 klanten hebt en dat u vijf mogelijke kortingspercentages wilt bekijken. Uw kruiskoppeling produceert 455 rijen (het product van 91 en 5).
Zoals u zich misschien kunt voorstellen, kunnen onbedoelde kruiskoppelingen enorme aantallen rijen in uw queryresultaten genereren. Bovendien zijn deze resultaten over het algemeen zinloos, want als u niet van plan bent om elke rij met elke andere rij te combineren, zijn de meeste gecombineerde rijen die in de resultaten worden weergegeven, niet logisch. Ten slotte kunnen query's die onbedoelde kruiskoppelingen gebruiken, erg lang duren.
1. De omcirkelde velden moeten aan elkaar worden gekoppeld.
1. Let op het zeer grote aantal records.
1. Houd er rekening mee dat het aantal records veel kleiner is.
Tabellen samenvoegen op basis van een ongelijkheid van 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 is niet gelijk aan (<>). Joins die niet op gelijkwaardigheid zijn gebaseerd, worden ongelijke joins genoemd.
Als u de rijen van twee gegevensbronnen wilt combineren op basis van veldwaarden die niet gelijk zijn, gebruikt u een ongelijke join. Ongelijke joins zijn doorgaans 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 niet gelijk aan (<>) kunnen bijna net zoveel rijen retourneren als kruiskoppelingen 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 met de SQL-weergave. U kunt echter een join maken in de ontwerpweergave, overschakelen naar de SQL-weergave, de vergelijkingsoperator equals (=) 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 weer wijzigt in gelijk aan (=) in de SQL-weergave.
Een join verwijderen
Als er 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.
-
Klik in het queryontwerpraster op de join die u wilt verwijderen.
-
Druk op Delete.
-of-
-
Klik in het queryontwerpraster met de rechtermuisknop op de join die u wilt verwijderen en klik vervolgens op Verwijderen.