De resultaten van verschillende selectiequery's combineren met een samenvoegquery

Wanneer u alle resultaten van verschillende vergelijkbare selectiequery's in de vorm van een gecombineerde set wilt bekijken, gebruikt u een samenvoegquery.

In dit artikel wordt beschreven hoe u een samenvoegquery maakt van twee of meer bestaande selectiequery's. Verder wordt toegelicht hoe u een samenvoegquery schrijft met SQL (Structured Query Language).

In de voorbeelden in dit artikel wordt ervan uitgegaan dat u in principe weet hoe selectiequery's worden gemaakt en uitgevoerd. Raadpleeg de koppelingen in het gedeelte Zie ook voor meer informatie over het maken van selectiequery's.

In dit artikel


Grondbeginselen van samenvoegquery's

De werking van een samenvoegquery

Een samenvoegquery combineert de resultaatsets van verschillende soortgelijke selectiequery's.

Stel dat u één tabel hebt met informatie over klanten en een andere tabel met informatie over leveranciers en dat er geen relatie tussen de twee tabellen bestaat. Beide tabellen bevatten velden waarin contactgegevens worden opgeslagen, en u wilt alle contactgegevens uit beide tabellen tegelijk bekijken.

U kunt een selectiequery (selectiequery: een query waarmee u een vraag stelt over de gegevens die in de tabellen zijn opgeslagen en waarmee een resultaatset wordt weergegeven in de vorm van een gegevensblad, zonder dat gegevens worden gewijzigd.) voor elke tabel maken om alleen de velden met contactgegevens op te halen, maar hierdoor zouden de queryresultaten op twee afzonderlijke plaatsen worden weergegeven. Met een samenvoegquery kunt u de resultaten van twee of meer selectiequery's in één resultaatset samenvoegen.

Vereisten voor samenvoegquery's

De selectiequery's die u in een samenvoegquery combineert, moeten evenveel uitvoervelden in dezelfde volgorde en met dezelfde of compatibele gegevenstypen hebben. Wanneer u een samenvoegquery uitvoert, worden de gegevens uit elke set corresponderende velden in één uitvoerveld gecombineerd, zodat de queryuitvoer hetzelfde aantal velden heeft als elk van de SELECT-instructies.

 Opmerking   Voor een samenvoegquery zijn de gegevenstypen Numeriek en Tekst compatibel.

Een samenvoegquery is een SQL-query. SQL-query's kunnen niet in de ontwerpweergave worden weergegeven en moeten daarom rechtstreeks in SQL worden geschreven. In Microsoft Office Access 2007 gebruikt u het objecttabblad van de SQL-weergave voor het schrijven van SQL-query's, met inbegrip van samenvoegquery's.

 Tip   Elke query kan door middel van SQL-instructies worden uitgedrukt. De meeste query's kunnen ook worden uitgedrukt in het queryontwerpraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.), dat dient om het samenstellen van query's te vergemakkelijken. Wanneer u een query maakt met behulp van het ontwerpraster, kunt u altijd overschakelen naar de SQL-weergave om te zien welke SQL-instructie wordt verwerkt wanneer u de query uitvoert. Het is raadzaam uw query's in de SQL-weergave te bekijken om vertrouwd te raken met SQL en beter inzicht te krijgen in de manier waarop query's werken. In bepaalde gevallen kan de SQL-weergave ook nuttig zijn voor het oplossen van problemen met een query die niet de verwachte resultaten oplevert.

De SQL-syntaxis van samenvoegquery's

In een samenvoegquery heeft elke selectiequery (ofwel SELECT-instructie) een SELECT-component en een FROM-component, en eventueel ook een WHERE-component. In een SELECT-component definieert u uit welke velden u gegevens wilt ophalen, in een FROM-component geeft u op in welke tabellen die velden staan en in een WHERE-component definieert u criteria voor die velden. U combineert de SELECT-instructies in een samenvoegquery met het sleutelwoord UNION.

De SQL-syntaxis voor een samenvoegquery waarin twee selectiequery's worden gecombineerd, is in principe als volgt:

SELECT field_1[, field_2,…]
FROM table_1[, table_2,…]
UNION [ALL]
SELECT field_a[, field_b,...]
FROM table_a[, table_b,…];

Stel dat u twee tabellen hebt, respectievelijk Producten en Diensten genaamd. Beide tabellen hebben velden met de naam van het product of de dienst, de prijs, waarborg- of garantiebeschikbaarheid en of het een exclusief aanbod betreft. Hoewel de tabel Producten waarborginformatie bevat en de tabel Diensten garantie-informatie, gaat het in wezen om dezelfde informatie (namelijk of een specifiek product of specifieke dienst met een belofte van kwaliteit wordt geleverd). U kunt de vier velden uit de twee tabellen combineren met een samenvoegquery zoals hieronder:

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services;

Hieronder wordt elke regel van dit syntaxisvoorbeeld toegelicht.

  • SELECT naam, prijs, waarborg_beschikbaar, exclusief_aanbod    Dit is een SELECT-component, die u gebruikt om een selectiequery te beginnen. SELECT wordt gevolgd door een lijst met aanduidingen voor de velden waaruit u gegevens wilt ophalen. In een SELECT-component moet minstens één veld zijn gedefinieerd. In deze SELECT-component zijn de veldaanduidingen naam, prijs, waarborg_beschikbaar en exclusief_aanbod opgegeven.
  • FROM Producten    Dit is een FROM-component. Een FROM-component volgt op een SELECT-component en vormt samen hiermee een standaard-SELECT-instructie. FROM wordt gevolgd door een lijst met tabelaanduidingen waarmee wordt aangegeven waar de velden die in de SELECT-component zijn gedefinieerd, zich bevinden. In een FROM-component moet minstens één tabel zijn gedefinieerd. In deze FROM-component is de tabelaanduiding Producten opgegeven.
  • UNION ALL    Dit is het sleutelwoord UNION, gevolgd door het optionele sleutelwoord ALL. UNION geeft aan dat de resultaten van de SELECT-instructie die voorafgaat aan UNION, worden samengevoegd met de resultaten van de SELECT-instructie die volgt op UNION.

Wanneer u het sleutelwoord ALL gebruikt, worden dubbele rijen niet verwijderd uit de gecombineerde set die uit de samenvoeging resulteert. Het voordeel hiervan is dat de query allicht veel sneller wordt uitgevoerd, omdat de resultaten niet op dubbele rijen hoeven te worden gecontroleerd. Gebruik het sleutelwoord ALL in de volgende situaties:

  • U weet zeker dat de selectiequery's geen dubbele rijen zullen produceren.
  • Het geeft niet of uw resultaten dubbele rijen bevatten.
  • U wilt dubbele rijen zien.

In dit voorbeeld wordt het sleutelwoord ALL gebruikt omdat de queryresultaten naar verwachting geen dubbele rijen zullen bevatten en er geen reden is eventuele duplicaten te verwijderen.

  • SELECT naam, prijs, garantie_beschikbaar, exclusief_aanbod    Dit is de tweede SELECT-component, die de tweede SELECT-instructie in de samenvoegquery begint. Wanneer u een samenvoegquery schrijft, moeten de velden in de SELECT-instructies corresponderen. Met andere woorden: de SELECT-instructies moeten evenveel velden bevatten, de velden met gemeenschappelijke gegevens moeten in dezelfde volgorde in de component verschijnen, en de velden met gemeenschappelijke gegevens moeten dezelfde of compatibele gegevenstypen hebben, zoals weergegeven in het voorbeeld. De velden moeten corresponderen, omdat ze anders niet kunnen worden samengevoegd in de queryuitvoer.

 Opmerking   De veldnamen in de uitvoer van een samenvoegquery worden ontleend aan de eerste SELECT-component. In het voorbeeld worden gegevens uit het veld waarborg_beschikbaar en uit het veld garantie_beschikbaar dus 'waarborg_beschikbaar' genoemd in de queryuitvoer.

  • FROM Diensten    Dit is de tweede FROM-component, die de tweede SELECT-instructie in de samenvoegquery afrondt. In tegenstelling tot de velden in de SELECT-componenten zijn de tabellen in de FROM-componenten van een samenvoegquery niet aan beperkingen gebonden. U kunt een samenvoegquery maken die dezelfde tabellen in elke FROM-component gebruikt. U kunt verschillende aantallen tabellen in de FROM-componenten definiëren. In dit voorbeeld heeft elke FROM-component slechts één tabel.

Terug naar boven Terug naar boven

Samenvoegquery's maken

Er zijn twee basismethoden voor het maken van een samenvoegquery:

In de meeste gevallen moet u eerst de selectiequery's maken, waarna u deze combineert in een samenvoegquery. De ontwerpweergave van Office Access 2007 biedt een gebruikersvriendelijke grafische gebruikersinterface voor het maken van selectiequery's, en u kunt de SQL-instructies voor deze query's kopiëren en in een samenvoegquery plakken.

Als u echter vertrouwd bent met het schrijven van SQL-instructies of dit juist wilt oefenen, wilt u de samenvoegquery misschien liever rechtstreeks in de SQL-weergave maken.

Wat wilt u doen?


De selectiequery's eerst in de ontwerpweergave maken en deze vervolgens combineren

Bij gebruik van deze methode maakt u elke selectiequery in de ontwerpweergave, waarna u de selectiequery's combineert in de SQL-weergave.

Elke selectiequery maken in de ontwerpweergave

  1. Klik op het tabblad Maken in de groep Overige, op Queryontwerp.
  1. Dubbelklik in het dialoogvenster Tabel weergeven op de tabel met de velden die u wilt toevoegen.

De tabel wordt toegevoegd aan het venster voor queryontwerp.

 Opmerking   Hoewel u meerdere tabellen of query's in een selectiequery kunt opnemen, wordt er in deze procedure van uitgegaan dat elke selectiequery gegevens uit slechts één tabel bevat.

  1. Sluit het dialoogvenster Tabel weergeven.
  2. Dubbelklik in het venster voor queryontwerp op elk veld dat u wilt toevoegen.

Zorg er bij het selecteren van de velden voor dat u evenveel velden toevoegt als aan de andere selectiequery's, en dat u ze in dezelfde volgorde toevoegt. Let op dat de gegevenstypen van de velden compatibel zijn met de gegevenstypen van velden in dezelfde positie in de andere query's die u combineert.

Als uw eerste selectiequery bijvoorbeeld vijf velden heeft en het eerste veld gegevens van het type Datum/tijd bevat, moet u ervoor zorgen dat alle andere selectiequery's die u combineert, ook vijf velden hebben, met als eerste een veld van het type Datum/tijd, enzovoort.

  1. Voeg desgewenst criteria aan de velden toe door de juiste expressies (expressie: elke mogelijke combinatie van wiskundige of logische operatoren, constanten, functies en namen van velden, besturingselementen en eigenschappen, die resulteert in één enkele waarde. Met expressies kunt u berekeningen uitvoeren, tekens bewerken of gegevens testen.) in de rij Criteria van het veldraster te typen.
  2. Wanneer u klaar bent met het toevoegen van velden en veldcriteria, voert u de selectiequery uit en controleert u de queryresultaten.
    • Klik op het tabblad Ontwerpen, in de groep Resultaten, op Uitvoeren.
  1. Schakel over naar de ontwerpweergave.
  2. Sla de selectiequery op en laat deze open.
  3. Herhaal deze procedure voor elke selectiequery die u wilt combineren.

De selectiequery's combineren in de SQL-weergave

  1. Klik op het tabblad Maken in de groep Overige, op Queryontwerp.

Er wordt een nieuwe query geopend in de ontwerpweergave.

  1. Sluit het dialoogvenster Tabel weergeven.
  2. Klik op het tabblad Ontwerp in de groep Query op Samenvoegquery.

Het venster voor queryontwerp wordt verborgen en u ziet het objecttabblad van de SQL-weergave, dat in dit stadium leeg is.

  1. Klik op de tab voor de eerste selectiequery die u in de samenvoegquery wilt combineren.
  2. Klik in de groep Weergaven op het tabblad Start op Weergave en klik vervolgens op SQL-weergave.

De SQL-instructie voor de selectiequery wordt weergegeven.

  1. Kopieer de SQL-instructie voor de selectiequery.
  2. Klik op de tab voor de samenvoegquery waarmee u in stap 1 van deze procedure bent begonnen.
  3. Plak de SQL-instructie voor de selectiequery in het objecttabblad van de SQL-weergave van de samenvoegquery.
  4. Verwijder de puntkomma (;) aan het eind van de SQL-instructie voor de selectiequery.
  5. Druk op ENTER om de cursor op de volgende regel te plaatsen en typ UNION op de nieuwe regel.

Typ desgewenst een spatie, gevolgd door het sleutelwoord ALL, en druk nogmaals op ENTER.

  1. Klik op de tab voor de volgende selectiequery die u in de samenvoegquery wilt combineren.
  2. Herhaal stap 5 tot en met 11 van deze procedure totdat u alle SQL-instructies voor de selectiequery's naar het SQL-weergavevenster van de samenvoegquery hebt gekopieerd. Laat de puntkomma aan het eind van de SQL-instructie voor de laatste selectiequery staan en typ niets achter deze puntkomma.
  3. Klik op het tabblad Ontwerpen, in de groep Resultaten, op Uitvoeren.

De resultaten van uw samenvoegquery verschijnen in de gegevensbladweergave (gegevensbladweergave: een weergave waarin gegevens uit een tabel, formulier, query, weergave of opgeslagen procedure worden weergegeven in rij- en kolomindeling. In de gegevensbladweergave kunt u velden bewerken en gegevens toevoegen, verwijderen en zoeken.).

De samenvoegquery rechtstreeks in de SQL-weergave maken

Voer de volgende stappen uit om een eenvoudige samenvoegquery in de SQL-weergave te maken.

  1. Klik op het tabblad Maken in de groep Overige, op Queryontwerp.

Er wordt een nieuwe query geopend in de ontwerpweergave.

  1. Sluit het dialoogvenster Tabel weergeven.
  2. Klik op het tabblad Ontwerp in de groep Query op Samenvoegquery.

Het venster voor queryontwerp wordt verborgen en u ziet het objecttabblad van de SQL-weergave, dat in dit stadium leeg is.

  1. Typ SELECT in het objecttabblad van de SQL-weergave, gevolgd door de velden uit de eerste tabel of verzameling tabellen die u in de query wilt opnemen. Gebruik komma's om de veldnamen van elkaar te scheiden. Druk op ENTER wanneer u klaar bent met het typen van de veldnamen.
  2. Typ FROM, gevolgd door de namen van de tabellen met de velden die in de voorgaande SELECT-component zijn opgegeven, en druk op ENTER.
  3. Als u een criterium voor een veld uit een van deze tabellen wilt opgeven, typt u WHERE, gevolgd door de veldnaam, een vergelijkingsoperator  (meestal een gelijkteken (=)) en het criterium. U kunt extra criteria aan het eind van de component WHERE toevoegen met behulp van de sleutelwoorden AND en OR. Druk na het invoeren van criteria op ENTER.
  4. Typ UNION. Als u dubbele rijen niet wilt verwijderen uit de queryuitvoer, typt u een spatie, gevolgd door het sleutelwoord ALL, en drukt u op ENTER.
  5. Typ SELECT, gevolgd door de velden uit de volgende tabel of verzameling tabellen die u in de query wilt opnemen. Deze velden moeten overeenkomen met de velden die u in de eerste SELECT-component hebt opgenomen en moeten in dezelfde volgorde staan. Gebruik komma's om de veldnamen van elkaar te scheiden. Druk op ENTER wanneer u klaar bent met het typen van de veldnamen.
  6. Typ FROM, gevolgd door de naam van de volgende tabel of verzameling tabellen die u in de query wilt opnemen, en druk vervolgens op ENTER.
  7. Als u een criterium voor een veld uit een van deze tabellen wilt opgeven, typt u WHERE, gevolgd door de veldnaam, een vergelijkingsoperator  (meestal een gelijkteken (=)) en het criterium. U kunt extra criteria aan het eind van de component WHERE toevoegen met behulp van het sleutelwoord AND. Druk na het invoeren van criteria op ENTER.
  8. Herhaal stap 7 tot en met 10 om extra SELECT-instructies in de samenvoegquery op te nemen.
  9. Typ ; ter aanduiding van het einde van de query.
  10. Klik op het tabblad Ontwerpen, in de groep Resultaten, op Uitvoeren.

De resultaten van uw samenvoegquery verschijnen in de gegevensbladweergave (gegevensbladweergave: een weergave waarin gegevens uit een tabel, formulier, query, weergave of opgeslagen procedure worden weergegeven in rij- en kolomindeling. In de gegevensbladweergave kunt u velden bewerken en gegevens toevoegen, verwijderen en zoeken.).

Terug naar boven Terug naar boven

Tips voor het gebruik van samenvoegquery's

  • Als u wilt kunnen zien welke rijen uit welke tabel afkomstig zijn, voegt u een tekenreeks als veld aan elk van uw SELECT-instructies toe. Stel dat één SELECT-instructie velden uit de tabel Producten ophaalt en een andere SELECT-instructie velden uit de tabel Diensten. In dat geval kunt u de tekenreeks 'Product' als veld aan het einde van de eerste instructie toevoegen, en 'Service' aan het einde van de tweede instructie. U kunt ook een veldalias (bijvoorbeeld 'type') aan de tekenreeksen toevoegen met behulp van het sleutelwoord AS, zoals in het volgende voorbeeld wordt weergegeven:
SELECT field1, field2, ... "Product" AS type
SELECT field1, field2, ... "Service" AS type

De queryuitvoer zou het veld 'type' bevatten, waarin wordt aangegeven uit welke tabel de rij afkomstig is: 'Producten' of 'Diensten'.

  • Elk paar SELECT-instructies wordt gecombineerd door het sleutelwoord UNION dat volgt op de eerste en voorafgaat aan de tweede instructie. Als u het sleutelwoord ALL alleen met sommige UNION-sleutelwoorden in uw query gebruikt, bevatten de resultaten dubbele rijen uit de paren SELECT-instructies die met UNION ALL zijn gecombineerd, maar niet uit de SELECT-instructies die met UNION zonder het sleutelwoord ALL zijn gecombineerd.
  • U moet ervoor zorgen dat de velden in de selectiequery's die u in een samenvoegquery combineert, overeenkomen qua aantal, gegevenstype en volgorde. Hiervoor kunt u zo nodig expressies zoals berekeningen of subquery's gebruiken. Als u bijvoorbeeld een veld met een jaargetal van twee cijfers wilt combineren met een veld dat een jaargetal van vier cijfers bevat, gebruikt u de functie Right om de laatste twee cijfers van het langere jaargetal op te halen.
  • Als u de uitvoer van een samenvoegquery wilt gebruiken om een nieuwe tabel te maken, kunt u de samenvoegquery als invoer voor een nieuwe selectiequery gebruiken en die selectiequery vervolgens als basis voor een tabelmaakquery (tabelmaakquery: een query (SQL-instructie) waarmee u een nieuwe tabel maakt en vervolgens records (rijen) in deze tabel invoegt door records uit een bestaande tabel te kopiëren.) gebruiken. Hiervoor gaat u als volgt te werk:
      1. Maak de samenvoegquery en sla deze op.
      2. Klik op het tabblad Maken in de groep Overige, op Queryontwerp.
  1. Klik in het dialoogvenster Tabel weergeven op de tab Query's.
  2. Dubbelklik op uw samenvoegquery en sluit het dialoogvenster Tabel weergeven.

 Opmerking   Als er een beveiligingswaarschuwing op de Berichtenbalk wordt weergegeven, worden actiequery's (zoals tabelmaakquery's) mogelijk uitgeschakeld. Klik op Opties op de Berichtenbalk en vervolgens op Deze inhoud inschakelen in het dialoogvenster Microsoft Office-beveiligingsopties om actiequery's uit te voeren.

  1. Dubbelklik op het sterretje (*) in het queryontwerpraster op het objecttabblad van uw samenvoegquery om alle velden van de samenvoegquery te gebruiken om een nieuwe tabel te maken.

- of -

Dubbelklik op elk veld dat u in de nieuwe tabel wilt gebruiken.

  1. Klik op het tabblad Ontwerpen, in de groep Type query, op Tabelmaakquery.
  1. Typ in het dialoogvenster Tabel maken een naam voor de nieuwe tabel, geef desgewenst een andere database voor de tabel op en klik op OK.
  2. Klik op het tabblad Ontwerpen, in de groep Resultaten, op Uitvoeren.

Als u een samenvoegquery wilt gebruiken om een volledige outer join uit te voeren, gaat u als volgt te werk:

  1. Maak een query die een linker outer join heeft op het veld dat u voor een volledige outer join wilt gebruiken.
  2. Klik in de groep Weergaven op het tabblad Start 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 eind van de FROM-component en druk op ENTER.
  5. Typ UNION en druk op ENTER.

 Opmerking   Gebruik niet het sleutelwoord ALL wanneer u een samenvoegquery gebruikt om een volledige outer join uit te voeren.

  1. Druk op CTRL+V om de in stap 3 gekopieerde SQL-code te plakken.
  2. Wijzig LEFT JOIN in RIGHT JOIN in de code die u hebt geplakt.
  3. Verwijder de puntkomma aan het eind van de tweede FROM-component en druk op ENTER.
  4. Voeg een WHERE-component toe die aangeeft dat de waarde van het joinveld NULL is in de eerste tabel in de FROM-component (de linkertabel).

Stel dat de FROM-component als volgt is:

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

In dit geval zou u de volgende WHERE-component toevoegen:

WHERE Products.ID IS NULL
  1. Typ een puntkomma (;) aan het eind van de WHERE-component ter aanduiding van het einde van de samenvoegquery.
  2. Klik op het tabblad Ontwerpen, in de groep Resultaten, op Uitvoeren.

Terug naar boven Terug naar boven

 
 
Van toepassing op:
Access 2007