Når du inkluderer flere datakilder i en Access-spørring, bruker du sammenføyninger til å begrense postene du vil se, basert på hvordan datakildene er relatert til hverandre. Du bruker også sammenføyninger til å kombinere poster fra begge datakildene, slik at hvert par med poster fra kildene blir én post i spørringsresultatene.
Denne artikkelen beskriver de ulike typene sammenføyninger og viser deg hvordan du bruker dem i en spørring. Som standard opprettes en sammenføyning automatisk hvis det allerede finnes en relasjon mellom to datakilder som du bruker i en spørring. En sammenføyning opprettes også hvis det finnes felt som tydelig samsvarer med hverandre. Du kan slette en automatisk opprettet sammenføyning. Denne artikkelen inneholder grunnleggende informasjon om tabellrelasjoner, inkludert hvordan du oppretter en.
Obs!: Du kan sammenføye spørringer på samme måte som du føyer sammen tabeller, og du kan også føye sammen begge.
I denne artikkelen
Oversikt
En database er en samling av tabeller med data som bærer logiske relasjoner til hverandre. Du bruker relasjoner til å koble tabeller etter felt som de har til felles. En tabell kan være en del av et hvilket som helst antall relasjoner, men hver relasjon har alltid nøyaktig to tabeller. I en spørring representeres en relasjon av en sammenføyning.
Når du legger til tabeller i en spørring, oppretter Access koblinger som er basert på relasjoner som er definert mellom tabellene. Du kan opprette sammenføyninger manuelt i spørringer, selv om de ikke representerer relasjoner som allerede er definert. Hvis du bruker andre spørringer (i stedet for eller i tillegg til tabeller) som datakilder for en spørring, kan du opprette koblinger mellom kildespørringene, og også mellom disse spørringene og alle tabeller du bruker som datakilder.
Sammenføyninger fungerer på samme måte som spørringsvilkår ved at de etablerer regler som dataene må samsvare med for å inkluderes i spørringsoperasjonene. I motsetning til vilkår angir sammenføyninger også at hvert par med rader som oppfyller sammenføyningsbetingelsene, kombineres i postsettet for å danne én enkelt rad.
Det finnes fire grunnleggende typer sammenføyninger: indre sammenføyninger, ytre sammenføyninger, krysskoblinger og ulike sammenføyninger. Denne artikkelen utforsker hver type sammenføyning du kan bruke, hvorfor du bruker hver type, og hvordan du oppretter sammenføyningene.
Sammenføyninger er for å spørre hvilke relasjoner som er til tabeller: en indikasjon på hvordan data i to kilder kan kombineres basert på dataverdier de har til felles. Her er en illustrasjon av en sammenføyning i spørringsutformingsvisning, der sammenføyningens egenskaper er åpne i en dialogboks:
Denne linjen mellom tabellene representerer sammenføyningen. Dobbeltklikk en sammenføyning for å åpne dialogboksen Sammenføyningsegenskaper (avbildet) og se gjennom eller endre sammenføyningen.
Sammenføyninger er noen ganger retningsvise. Dette området i dialogboksen viser hvilken tabell som finnes i sammenføyningen, og hvilke felt som brukes til å føye sammen tabellene.
Dette området bestemmer typen sammenføyning: alternativ 1 er en indre sammenføyning, 2 er en venstre ytre sammenføyning, og 3 er en høyre ytre kobling.
Felt fra begge tabellene kan brukes, og data som gjelder for en gitt aktivitet, vises fra hver av dem. I en indre sammenføyning inkluderes ingen andre data. I en ytre sammenføyning inkluderes også ikke-relaterte poster fra én tabell i spørringsresultatene.
Sammenføyningstyper
Det finnes fire grunnleggende typer sammenføyninger: indre sammenføyninger, ytre sammenføyninger, krysskoblinger og ulike sammenføyninger. Krysskoblinger og ulike sammenføyninger er avanserte sammenføyningstyper og brukes sjeldent, men du bør vite om dem for å få en fullstendig forståelse av hvordan sammenføyninger fungerer.
Indre sammenføyninger: bare relaterte data fra begge tabellene kombinert
En indre sammenføyning er en kobling der Access bare inkluderer data fra en tabell hvis det finnes tilsvarende data i den relaterte tabellen, og omvendt. Som oftest vil du bruke indre sammenføyninger. Når du oppretter en sammenføyning og ikke angir hvilken type sammenføyning den er, forutsetter Access at du vil ha en indre sammenføyning. Indre sammenføyninger er nyttige fordi de lar deg kombinere data fra to kilder basert på delte verdier, slik at du bare ser data når det er et fullstendig bilde.
Ytre sammenføyninger: alle relaterte data kombineres på riktig måte, i tillegg til alle gjenværende poster fra én tabell
En ytre sammenføyning er som en indre sammenføyning, men legger til de gjenværende radene fra én av tabellene. Ytre sammenføyninger er retningsvise: en venstre ytre sammenføyning inkluderer alle postene fra venstre tabell – den første tabellen i sammenføyningen – og en høyre ytre sammenføyning inkluderer alle postene fra høyre tabell – den andre tabellen i sammenføyningen.
Fullstendige ytre sammenføyninger: alle dataene, kombinert der det er mulig
I noen systemer kan en ytre sammenføyning inkludere alle rader fra begge tabellene, med rader kombinert når de korresponderer. Dette kalles en fullstendig ytre sammenføyning, og Access støtter dem ikke eksplisitt. Du kan imidlertid bruke en krysskobling og vilkår for å oppnå samme effekt.
Krysskoblinger: alle dataene, kombinert på alle mulige måter
Mesteparten av tiden er en krysskobling en bivirkning av å legge til to tabeller i en spørring og deretter glemme å bli med dem. Access tolker dette til å bety at du vil se hver post fra én tabell kombinert med hver post fra den andre tabellen – alle mulige kombinasjoner av poster. Siden ingen data kan kombineres, gir denne typen sammenføyning sjelden nyttige resultater. Men det finnes noen tilfeller der en krysskobling er akkurat det du trenger.
Ulike sammenføyninger: som en vanlig sammenføyning, men bruker en annen sammenligning for å kombinere rader
Ulike sammenføyninger bruker en annen operator enn likhetstegnet (=) til å sammenligne verdier og bestemme om og hvordan dataene skal kombineres. Ulike sammenføyninger støttes ikke eksplisitt, men du kan bruke en krysssammenføyning og kriterier for å oppnå samme effekt.
Vis rader der det finnes en felles verdi i begge de sammenføyde tabellene
Hvis du bare vil vise de radene som har samsvarende verdier i det sammenføyde feltet, bruker du en indre sammenføyning. Det opprettes automatisk indre sammenføyninger i Access.
Indre sammenføyninger er den vanligste sammenføyningstypen. De forteller en spørring at rader fra en av de sammenføyde tabellene tilsvarer rader i den andre tabellen, på grunnlag av dataene i de sammenføyde feltene. Når en spørring med en indre sammenføyning kjøres, inkluderes bare de radene der det finnes en felles verdi i begge de sammenføyde tabellene i spørringsoperasjonene.
Hvordan bruke en indre sammenføyning?
Som oftest trenger du ikke å gjøre noe for å bruke en indre sammenføyning. Hvis tabellene du legger til i en spørring, allerede har relasjoner, oppretter Access automatisk en indre kobling mellom hvert par relaterte tabeller når du legger til tabellene. Hvis referanseintegritet håndheves, viser Access også et 1-tall over koblingslinjen for å angi hvilken tabell som er på «én»-siden i en én-til-mange-relasjon, og et uendeligsymbol (∞) for å angi hvilken tabell som er på «mange»-siden.
Selv om du ikke har opprettet relasjoner, oppretter Access automatisk indre koblinger hvis du legger til to tabeller i en spørring, og hver tabell har et felt med samme eller kompatible datatype, og ett av sammenføyningsfeltene er en primærnøkkel. Symbolene «ett» og «mange» vises ikke i dette tilfellet, fordi referanseintegritet ikke håndheves.
Hvis du legger til spørringer i spørringen og ikke har opprettet relasjoner mellom disse spørringene, oppretter ikke Access automatisk indre koblinger mellom disse spørringene eller mellom spørringer og tabeller. Vanligvis bør du opprette dem selv. Du oppretter en indre sammenføyning ved å dra et felt fra én datakilde til et felt på en annen datakilde. Access viser en linje mellom de to feltene for å vise at en kobling er opprettet.
SQL-syntaks for en indre sammenføyning
Indre sammenføyninger er angitt i SQL i FROM-setningsdelen, som vist nedenfor:
FROM tabell1 INNER JOIN tabell2 ON tabell1.felt1 sammenligner tabell2.felt2
Operasjonen INNER JOIN har følgende deler:
Del |
Beskrivelse |
tabell1, tabell2 |
Navnene på tabellene som postene kombineres fra. |
felt1, felt2 |
Navnene på de sammenkoblede feltene. Hvis de ikke er numeriske, må feltene være av samme datatype og inneholde samme type data, men de trenger ikke ha samme navn. |
sammenlign |
En relasjonssammenligningsoperator: "=," "<," ">," "<=," ">=," eller "<>." |
Hvis du vil ha mer informasjon om indre sammenføyningssyntaks, kan du se emnet INNER JOIN Operation.
Vis alle rader fra én tabell, og tilsvarende rader fra den andre tabellen
Ytre sammenføyninger forteller en spørring at selv om noen av radene på begge sider av sammenføyningen samsvarer nøyaktig, bør spørringen inneholde alle radene fra én tabell, og også de radene fra den andre tabellen som deler en felles verdi på begge sider av sammenføyningen.
Ytre sammenføyninger kan være venstre ytre sammenføyninger eller kan være høyre ytre sammenføyninger. I en venstre ytre sammenføyning inkluderer spørringen alle radene fra den første tabellen i SETNINGEN FROM, og bare de radene fra den andre tabellen der sammenføyningsfeltet inneholder verdier som er felles for begge tabellene. I en høyre ytre sammenføyning inkluderer spørringen alle radene fra den andre tabellen i SETNINGEN FROM, og bare de radene fra den andre tabellen der sammenføyningsfeltet inneholder verdier som er felles for begge tabellene.
Obs!: Du kan enkelt se hvilken tabell som er den venstre tabellen eller den høyre tabellen i en gitt sammenføyning ved å dobbeltklikke sammenføyningen og deretter se i dialogboksen Sammenføyningsegenskaper . Du kan også bytte til SQL-visning og deretter undersøke FROM-setningsdelen.
Fordi noen av radene på den ene siden av en ytre sammenføyning ikke har tilsvarende rader fra den andre tabellen, vil noen av feltene som returneres i spørringsresultatene fra den andre tabellen, være tomme når radene ikke samsvarer.
Hvordan bruke en ytre sammenføyning?
Du oppretter en ytre sammenføyning ved å endre en eksisterende indre sammenføyning. Hvis det ikke finnes noen indre sammenføyning, oppretter du en, og deretter endrer du den til en ytre sammenføyning.
Endre en indre kobling til en ytre sammenføyning
-
Dobbeltklikk sammenføyningen du vil endre, i utformingsvisning for spørring.
Dialogboksen Sammenføyningsegenskaper vises.
-
Legg merke til valgene som er oppført ved siden av alternativ 2 og alternativ 3, i dialogboksen Sammenføyningsegenskaper.
-
Klikk på alternativet du vil bruke, og klikk deretter på OK.
-
Access viser sammenføyningen og viser en pil som peker fra datakilden der alle radene inkluderes i datakilden, der bare de radene som oppfyller sammenføyningsbetingelsen, inkluderes.
Tvetydige ytre koblinger
Hvis du oppretter en spørring som inneholder en LEFT JOIN og en INNER JOIN, kan det hende access ikke kan bestemme hvilken sammenføyningsoperasjon som skal utføres først. Fordi resultatene er forskjellige avhengig av om venstre sammenføyning eller den indre sammenføyningen utføres først, viser Access en feilmelding:
Hvis du vil rette denne feilen, må du endre spørringen slik at den er klar over hvilken sammenføyning som skal utføres først.
SQL-syntaks for en ytre sammenføyning
Ytre sammenføyninger er angitt i SQL i FROM-setningsdelen, som vist nedenfor:
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 compare table2.field2LEFT JOIN- og RIGHT JOIN-operasjonene har følgende deler:
Del |
Beskrivelse |
tabell1, tabell2 |
Navnene på tabellene som postene kombineres fra. |
felt1, felt2 |
Navnene på de koblede feltene. Feltene må være av samme datatype og inneholde samme type data, men de trenger ikke ha samme navn. |
sammenlign |
En relasjonssammenligningsoperator: "=," "<," ">," "<=," ">=," eller "<>." |
Hvis du vil ha mer informasjon om ytre sammenføyningssyntaks, kan du se emnet LEFT JOIN, RIGHT JOIN Operations.
Vis alle rader fra begge tabellene, og føy dem sammen der det finnes en felles verdi
Når du vil vise alle rader fra to tabeller og sammenføye dem basert på felles verdier, bruker du en fullstendig ytre sammenføyning. Access støtter ikke eksplisitt fullstendige ytre sammenføyninger, men du kan oppnå samme effekt ved hjelp av en unionsspørring. Følgende fremgangsmåte forklarer hvordan du gjør dette, men hvis du vil ha mer informasjon om unionsspørringer, kan du se Se også-delen .
Slik bruker du en unionsspørring til å utføre en fullstendig ytre sammenføyning:
-
Opprett en spørring som har en venstre ytre sammenføyning på feltet som du vil bruke for en fullstendig ytre sammenføyning.
-
Klikk Vis i Visninger-gruppen i kategorien Hjem, og klikk deretter SQL-visning.
-
Trykk CTRL+C for å kopiere SQL-koden.
-
Slett semikolonet på slutten av FROM-setningsdelen, og trykk deretter ENTER.
-
Skriv inn UNION, og trykk deretter på ENTER.
Obs!: Ikke bruk ALL-nøkkelordet når du bruker en unionsspørring til å utføre en fullstendig ytre sammenføyning.
-
Trykk CTRL+V for å lime inn SQL-koden du kopierte i trinn 3.
-
Endre LEFT JOIN til RIGHT JOIN i koden du limte inn.
-
Slett semikolonet på slutten av den andre FROM-setningsdelen, og trykk deretter ENTER.
-
Legg til en WHERE-setning som angir at verdien for sammenføyningsfeltet er NULL i den første tabellen som er oppført i FROM-setningsdelen (venstre tabell).
Hvis for eksempel FROM-setningsdelen er:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Du legger til følgende WHERE-setningsdel:
WHERE Products.ID IS NULL
-
Skriv inn et semikolon (;) på slutten av WHERE-setningsdelen for å angi slutten på unionsspørringen.
-
Klikk på Kjør i Resultater-gruppen på Utforming-fanen.
Krysskoblinger
Krysskoblinger er forskjellige fra indre og ytre sammenføyninger ved at de ikke er eksplisitt representert i Access. I en krysssammenføyning kombineres hver rad fra én tabell med hver rad fra en annen tabell, noe som resulterer i det som kalles et kryssprodukt eller et kartesisk produkt. Hver gang du kjører en spørring som har tabeller som ikke er eksplisitt sammenføyd, er et kryssprodukt resultatet. Krysskoblinger er vanligvis utilsiktet, men det finnes tilfeller der de kan være nyttige.
Hvorfor skulle jeg bruke en krysskobling?
Hvis du vil undersøke alle mulige kombinasjoner av rader mellom to tabeller eller spørringer, kan du bruke en krysskobling. Anta for eksempel at bedriften din har hatt et spektakulært år, og at du vurderer å gi rabatter til kundene dine. Du kan bygge en spørring som summerer hver kundes kjøp, opprette en liten tabell som har flere mulige rabattprosenter, og kombinere de to i en annen spørring som utfører en krysskobling. Du ender opp med en spørring som viser et sett med hypotetiske rabatter for hver kunde.
Hvordan bruke en krysskobling?
En krysskobling produseres hver gang du inkluderer tabeller eller spørringer i spørringen og ikke oppretter minst én eksplisitt sammenføyning for hver tabell eller spørring. Access kombinerer hver rad fra hver tabell eller spørring som ikke er eksplisitt koblet til andre tabeller eller spørringer til annenhver rad i resultatene. Vurder rabattscenarioet fra det foregående avsnittet. Anta at du har 91 kunder, og at du vil se på fem mulige rabattprosenter. Krysskoblingen produserer 455 rader (produktet av 91 og 5).
Som du kanskje kan forestille deg, kan utilsiktede krysskoblinger opprette et stort antall rader i spørringsresultatene. Videre er disse resultatene generelt meningsløse, fordi hvis du egentlig ikke har tenkt å kombinere hver rad med annenhver rad, vil de fleste av de kombinerte radene som vises i resultatene, ikke gi mening. Til slutt kan det ta svært lang tid å kjøre spørringer som bruker utilsiktede krysskoblinger.
1. De sirklede feltene skal være sammenføyd med hverandre.
1. Legg merke til det svært store antallet poster.
1. Vær oppmerksom på at antall poster er mye mindre.
Sammenføye tabeller basert på ulikhet i feltverdier
Sammenføyninger trenger ikke å være basert på ekvivalensen til de sammenføyde feltene. En sammenføyning kan baseres på en hvilken som helst sammenligningsoperator, for eksempel større enn (>), mindre enn (<), eller ikke er lik (<>). Sammenføyninger som ikke er basert på ekvivalens, kalles ulike sammenføyninger.
Hvis du vil kombinere radene med to datakilder basert på feltverdier som ikke er like, bruker du en ulik sammenføyning. Vanligvis er ulike sammenføyninger basert på sammenligningsoperatorene større enn (>), mindre enn (<), større enn eller lik (>=) eller mindre enn eller lik (<=). Ulike sammenføyninger som er basert på operatoren ikke er like (<>) kan returnere nesten like mange rader som krysskoblinger, og resultatene kan være vanskelige å tolke.
Hvordan bruke en ulik sammenføyning?
Ulike sammenføyninger støttes ikke i utformingsvisning. Hvis du vil bruke dem, må du gjøre det ved hjelp av SQL-visning. Du kan imidlertid opprette en sammenføyning i utformingsvisning, bytte til SQL-visning, finne sammenligningsoperatoren er lik (=) og endre den til operatoren du vil bruke. Når du har gjort dette, kan du bare åpne spørringen i utformingsvisning på nytt hvis du først endrer sammenligningsoperatoren tilbake til lik (=) i SQL-visning.
Slette en sammenføyning
Hvis Access automatisk oppretter en sammenføyning som du ikke ønsker, eller hvis du oppretter en sammenføyning ved en feil, for eksempel en sammenføyning mellom to felt som har ulike datatyper, kan du slette sammenføyningen.
-
Klikk sammenføyningen du vil fjerne, i utformingsrutenettet for spørringen.
-
Trykk DEL.
– eller –
-
Høyreklikk sammenføyningen du vil fjerne, i utformingsrutenettet for spørringen, og klikk deretter Slett.