Når du medtager flere datakilder i en Access-forespørgsel, kan du bruge joinforbindelser til at begrænse de poster, du vil have vist, baseret på, hvordan datakilderne er relateret til hinanden. Du kan også bruge joinforbindelser til at kombinere poster fra begge datakilder, så hvert par poster fra kilderne bliver til én post i forespørgselsresultaterne.
I denne artikel beskrives de forskellige typer joinforbindelser, og du kan se, hvordan du bruger dem i en forespørgsel. Som standard oprettes der automatisk en joinforbindelse, hvis der allerede er en relation mellem to datakilder, som du bruger i en forespørgsel. Der oprettes også en joinforbindelse, hvis der er felter, der tydeligt svarer til hinanden. Du kan slette en automatisk oprettet joinforbindelse. Denne artikel indeholder grundlæggende oplysninger om tabelrelationer, herunder hvordan du opretter en.
Bemærk!: Du kan joinforbinde forespørgsler på samme måde, som du joinforbinder tabeller, og du kan også joinforbinde begge.
I denne artikel
Oversigt
En database er en samling af tabeller med data, der har logiske relationer til hinanden. Du bruger relationer til at forbinde tabeller efter felter, som de har til fælles. En tabel kan være en del af et hvilket som helst antal relationer, men hver relation har altid præcis to tabeller. I en forespørgsel repræsenteres en relation af en joinforbindelse.
Når du føjer tabeller til en forespørgsel, opretter Access joinforbindelser, der er baseret på relationer, der er defineret mellem tabellerne. Du kan manuelt oprette joinforbindelser i forespørgsler, også selvom de ikke repræsenterer relationer, der allerede er defineret. Hvis du bruger andre forespørgsler (i stedet for eller ud over tabeller) som datakilder for en forespørgsel, kan du oprette joinforbindelser mellem kildeforespørgslerne og også mellem disse forespørgsler og de tabeller, du bruger som datakilder.
Joinforbindelser fungerer på samme måde som forespørgselskriterier, da de opretter regler, som dataene skal matche for at blive medtaget i forespørgselshandlingerne. I modsætning til kriterier angiver joinforbindelser også, at hvert par rækker, der opfylder joinbetingelserne, kombineres i postsættet for at danne en enkelt række.
Der findes fire grundlæggende typer joinforbindelser: indre joinforbindelser, ydre joinforbindelser, krydsjoinforbindelser og ulige joinforbindelser. I denne artikel gennemgås hver type joinforbindelse, du kan bruge, hvorfor du bruger hver type, og hvordan du opretter joinforbindelserne.
Joinforbindelser er til forespørgsler, hvad relationer er til tabeller: en angivelse af, hvordan data i to kilder kan kombineres baseret på dataværdier, de har til fælles. Her er en illustration af en joinforbindelse i forespørgselsdesignvisning med joinforbindelsens egenskaber åbne i en dialogboks:
Denne linje mellem tabellerne repræsenterer joinforbindelsen. Dobbeltklik på en joinforbindelse for at åbne dialogboksen Joinegenskaber (afbildet), og gennemse eller ændre joinforbindelsen.
Joinforbindelser er nogle gange retningsbestemt. I dette område i dialogboksen kan du se, hvilken tabel der er hvilken i joinforbindelsen, og hvilke felter der bruges til at joinforbinde tabellerne.
Dette område bestemmer typen af joinforbindelse: valgmulighed 1 er en indre joinforbindelse, 2 er en venstre ydre joinforbindelse, og 3 er en højre ydre joinforbindelse.
Felter fra begge tabeller kan bruges, og data, der vedrører en given opgave, vises fra hver enkelt. I en indre joinforbindelse medtages ingen andre data. I en ydre joinforbindelse medtages ikke-relaterede poster fra én tabel også i forespørgselsresultaterne.
Typer af joinforbindelser
Der findes fire grundlæggende typer joinforbindelser: indre joinforbindelser, ydre joinforbindelser, krydsjoinforbindelser og ulige joinforbindelser. Krydsjoinforbindelser og ulige joinforbindelser er avancerede jointyper og bruges sjældent, men du bør kende dem for at få en fuld forståelse af, hvordan joinforbindelser fungerer.
Indre joinforbindelser: kun relaterede data fra begge tabeller kombineret
En indre joinforbindelse er en joinforbindelse, hvor Access kun medtager data fra en tabel, hvis der er tilsvarende data i den relaterede tabel og omvendt. I de fleste tilfælde skal du bruge indre joinforbindelser. Når du opretter en joinforbindelse og ikke angiver, hvilken type joinforbindelse det er, antager Access, at du ønsker en indre joinforbindelse. Indre joinforbindelser er nyttige, fordi de giver dig mulighed for at kombinere data fra to kilder baseret på delte værdier – så du kun kan se data, når der er et komplet billede.
Ydre joinforbindelser: alle relaterede data kombineres korrekt plus alle de resterende poster fra én tabel
En ydre joinforbindelse er ligesom en indre joinforbindelse, men tilføjer de resterende rækker fra en af tabellerne. Ydre joinforbindelser er retningsbestemt: En venstre ydre joinforbindelse indeholder alle posterne fra den venstre tabel – den første tabel i joinforbindelsen – og en højre ydre joinforbindelse omfatter alle posterne fra den højre tabel – den anden tabel i joinforbindelsen.
Fulde ydre joinforbindelser: alle data kombineret, hvor det er muligt
I nogle systemer kan en ydre joinforbindelse omfatte alle rækker fra begge tabeller med rækker kombineret, når de svarer. Dette kaldes en fuld ydre joinforbindelse, og Access understøtter dem ikke eksplicit. Du kan dog bruge en krydsjoinforbindelse og kriterier for at opnå den samme effekt.
Krydsforbindelser: alle data, kombineret på alle mulige måder
For det meste er en krydsjoinforbindelse en bivirkning ved at føje to tabeller til en forespørgsel og derefter glemme at forbinde dem. Access fortolker dette til at betyde, at du vil have vist alle poster fra én tabel kombineret med hver post fra den anden tabel – alle mulige kombinationer af poster. Da ingen data kan kombineres, giver denne type joinforbindelse sjældent nyttige resultater. Men der er et par tilfælde, hvor en krydsdeltagelse er lige det, du har brug for.
Ulige joinforbindelser: ligesom en almindelig joinforbindelse, men brug af en anden sammenligning til at kombinere rækker
Ulige joinforbindelser bruger en anden operator end lighedstegnet (=) til at sammenligne værdier og afgøre, om og hvordan dataene skal kombineres. Ulige joinforbindelser understøttes ikke eksplicit, men du kan bruge en krydsjoinforbindelse og kriterier til at opnå den samme effekt.
Vis rækker, hvor der findes en fælles værdi i begge af de sammenkædede tabeller
Hvis du kun vil have vist de rækker, der har matchende værdier i det joinforbundne felt, skal du bruge en indre joinforbindelse. Access opretter automatisk indre joinforbindelser.
Indre joinforbindelser er den mest almindelige type joinforbindelse. De fortæller en forespørgsel, at rækker fra en af de sammenkædede tabeller svarer til rækker i den anden tabel på basis af dataene i de joinforbundne felter. Når en forespørgsel med en indre joinforbindelse køres, medtages kun de rækker, hvor der findes en fælles værdi i begge af de sammenkædede tabeller, i forespørgselshandlingerne.
Hvordan gør jeg bruge en indre joinforbindelse?
I de fleste tilfælde behøver du ikke at gøre noget for at bruge en indre joinforbindelse. Hvis de tabeller, du føjer til en forespørgsel, allerede har relationer, opretter Access automatisk en indre joinforbindelse mellem hvert par relaterede tabeller, når du tilføjer tabellerne. Hvis referentiel integritet gennemtvinges, viser Access også et "1" oven over joinlinjen, så du kan se, hvilken tabel der er på "én"-siden af en en-til-mange-relation og et evighedssymbol (∞), så du kan se, hvilken tabel der er på "mange"-siden.
Selvom du ikke har oprettet relationer, opretter Access automatisk indre joinforbindelser, hvis du føjer to tabeller til en forespørgsel, og disse tabeller hver har et felt med den samme eller kompatible datatype, og et af joinfelterne er en primær nøgle. Symbolerne "en" og "mange" vises ikke i dette tilfælde, fordi referentiel integritet ikke gennemtvinges.
Hvis du føjer forespørgsler til forespørgslen og ikke har oprettet relationer mellem disse forespørgsler, opretter Access ikke automatisk indre joinforbindelser mellem disse forespørgsler eller mellem forespørgsler og tabeller. Generelt skal du selv oprette dem. Du opretter en indre joinforbindelse ved at trække et felt fra én datakilde til et felt på en anden datakilde. Access viser en linje mellem de to felter for at vise, at en joinforbindelse er blevet oprettet.
SQL-syntaks for en indre joinforbindelse
Indre joinforbindelser er angivet i SQL i FROM-delsætningen, som vist nedenfor:
FROM tabel1 INNER JOIN tabel2 ON tabel1.felt1 sammenligne tabel2.felt2
Handlingen INNER JOIN består af følgende dele:
Del |
Beskrivelse |
tabel1, tabel2 |
Navnene på de tabeller, som posterne skal kombineres fra. |
felt1, felt2 |
Navnene på de felter, der skal joinforbindes. Hvis de ikke er numeriske, skal de have samme datatype og indeholde den samme slags data, men de behøver ikke have samme navn. |
sammenlign |
En relationel sammenligningsoperator: "=," "<," ">," "<=," ">=" eller "<>." |
Du kan få mere at vide om indre joinsyntaks i emnet INNER JOIN Operation.
Vis alle rækker fra én tabel og tilsvarende rækker fra den anden tabel
Ydre joinforbindelser fortæller en forespørgsel, at selvom nogle af rækkerne på begge sider af joinforbindelsen svarer nøjagtigt, skal forespørgslen medtage alle rækkerne fra én tabel og også de rækker fra den anden tabel, der deler en fælles værdi på begge sider af joinforbindelsen.
Ydre joinforbindelser kan være venstre ydre joinforbindelser eller kan være højre ydre joinforbindelser. I en venstre ydre joinforbindelse medtager forespørgslen alle rækkerne fra den første tabel i SQL-sætningen FROM-delsætningen og kun de rækker fra den anden tabel, hvor joinforbindelsen indeholder værdier, der er fælles for begge tabeller. I en højre ydre joinforbindelse medtager forespørgslen alle rækkerne fra den anden tabel i SQL-sætningen FROM-delsætningen og kun de rækker fra den anden tabel, hvor joinforbindelsen indeholder værdier, der er fælles for begge tabeller.
Bemærk!: Du kan nemt se, hvilken tabel der er den venstre tabel eller den højre tabel i en given joinforbindelse, ved at dobbeltklikke på joinforbindelsen og derefter kigge i dialogboksen Joinegenskaber . Du kan også skifte til SQL-visning og derefter undersøge FROM-delsætningen.
Da nogle af rækkerne på den ene side af en ydre joinforbindelse ikke har tilsvarende rækker fra den anden tabel, vil nogle af de felter, der returneres i forespørgselsresultaterne fra den anden tabel, være tomme, når rækkerne ikke svarer.
Hvordan gør jeg bruge en ydre joinforbindelse?
Du opretter en ydre joinforbindelse ved at ændre en eksisterende indre joinforbindelse. Hvis der ikke findes nogen indre joinforbindelse, opretter du en og ændrer den til en ydre joinforbindelse.
Ændre en indre joinforbindelse til en ydre joinforbindelse
-
Dobbeltklik på den joinforbindelse, du vil ændre, i forespørgselsdesignvisning.
Dialogboksen Joinegenskaber vises.
-
I dialogboksen Joinegenskaber skal du notere dig de valgmuligheder, der er angivet ud for valgmulighed 2 og valgmulighed 3.
-
Klik på den indstilling, du vil bruge, og klik derefter på OK.
-
Access viser joinforbindelsen og viser en pil, der peger fra datakilden, hvor alle rækker medtages i datakilden, hvor kun de rækker, der opfylder joinbetingelsen, medtages.
Tvetydige ydre joinforbindelser
Hvis du opretter en forespørgsel, der indeholder en LEFT JOIN og en INNER JOIN, kan Access muligvis ikke afgøre, hvilken joinhandling der skal udføres først. Da resultaterne er forskellige, afhængigt af om den venstre joinforbindelse eller den indre joinforbindelse udføres først, viser Access en fejlmeddelelse:
For at rette denne fejl skal du ændre forespørgslen, så det er klart, hvilken joinforbindelse der skal udføres først.
SQL-syntaks for en ydre joinforbindelse
Ydre joinforbindelser er angivet i SQL i FROM-delsætningen, som vist nedenfor:
FROM tabel1 [ LEFT | RIGHT ] JOIN tabel2
ON tabel1.felt1 sammenligne tabel2.felt2Handlingerne LEFT JOIN og RIGHT JOIN består af følgende dele:
Del |
Beskrivelse |
tabel1, tabel2 |
Navnene på de tabeller, som posterne skal kombineres fra. |
felt1, felt2 |
Navnene på de felter, der skal joinforbindes. Felterne skal have samme datatype og indeholde den samme slags data, men de behøver ikke have samme navn. |
sammenlign |
En relationel sammenligningsoperator: "=," "<," ">," "<=," ">=" eller "<>." |
Du kan få mere at vide om ydre joinsyntaks i emnet Handlingerne LEFT JOIN, RIGHT JOIN.
Vis alle rækker fra begge tabeller, og sammenkæd dem, hvor der findes en fælles værdi
Når du vil vise alle rækker fra to tabeller og joinforbinde dem baseret på fælles værdier, skal du bruge en fuld ydre joinforbindelse. Access understøtter ikke eksplicit fulde ydre joinforbindelser, men du kan opnå den samme effekt ved hjælp af en foreningsforespørgsel. Følgende procedure forklarer, hvordan du gør dette, men hvis du vil have flere oplysninger om foreningsforespørgsler, skal du se afsnittet Se også .
Sådan bruger du en foreningsforespørgsel til at udføre en fuld ydre joinforbindelse:
-
Opret en forespørgsel, der har en venstre ydre joinforbindelse på det felt, du vil bruge til en fuld ydre joinforbindelse.
-
Klik på Vis i gruppen Visninger under fanen Startside, og klik derefter på SQL-visning.
-
Tryk på Ctrl+C for at kopiere SQL-koden.
-
Slet semikolonet i slutningen af FROM-delsætningen, og tryk derefter på Enter.
-
Skriv UNION, og tryk derefter på Enter.
Bemærk!: Brug ikke nøgleordet ALL, når du bruger en foreningsforespørgsel til at udføre en fuld ydre joinforbindelse.
-
Tryk på Ctrl+V for at indsætte den SQL-kode, du kopierede i trin 3.
-
I den kode, du har indsat, skal du ændre LEFT JOIN til RIGHT JOIN.
-
Slet semikolonet i slutningen af den anden FROM-delsætning, og tryk derefter på Enter.
-
Tilføj en WHERE-delsætning, der angiver, at værdien af joinfeltet er NULL i den første tabel, der er angivet i FROM-delsætningen (venstre tabel).
Hvis FROM-delsætningen f.eks. er:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Du skal tilføje følgende WHERE-delsætning:
WHERE Products.ID IS NULL
-
Skriv et semikolon (;) i slutningen af WHERE-delsætningen for at angive slutningen af foreningsforespørgslen.
-
Klik på Kør i gruppen Resultater under fanen Design.
Krydsforbindelser
Krydsjoinforbindelser adskiller sig fra indre og ydre joinforbindelser, da de ikke udtrykkeligt er repræsenteret i Access. I en krydsjoinforbindelse kombineres hver række fra én tabel med hver række fra en anden tabel, hvilket resulterer i det, der kaldes et krydsprodukt eller et kartesiansk produkt. Hver gang du kører en forespørgsel, der indeholder tabeller, der ikke udtrykkeligt er joinforbundet, er et krydsprodukt resultatet. Krydsforbindelser er normalt utilsigtede, men der er tilfælde, hvor de kan være nyttige.
Hvorfor skal jeg bruge en krydsjoinforbindelse?
Hvis du vil undersøge alle mulige kombinationer af rækker mellem to tabeller eller forespørgsler, skal du bruge en krydsjoinforbindelse. Antag f.eks., at din virksomhed har haft et spektakulært år, og du overvejer at give rabatter til dine kunder. Du kan oprette en forespørgsel, der opsummerer hver kundes køb, oprette en lille tabel, der har flere mulige rabatprocenter, og kombinere de to i en anden forespørgsel, der udfører en krydsjoinforbindelse. Du ender med en forespørgsel, der viser et sæt hypotetiske rabatter for hver kunde.
Hvordan gør jeg bruge en krydsjoinforbindelse?
Der oprettes en krydsjoinforbindelse, hver gang du medtager tabeller eller forespørgsler i forespørgslen og ikke opretter mindst én eksplicit joinforbindelse for hver tabel eller forespørgsel. Access kombinerer hver række fra hver tabel eller forespørgsel, der ikke eksplicit er knyttet til en anden tabel eller forespørgsel til hver anden række i resultaterne. Overvej rabatscenariet fra det foregående afsnit. Antag, at du har 91 kunder, og at du vil se på fem mulige rabatprocenter. Din krydsforbindelse giver 455 rækker (produktet af 91 og 5).
Som du måske kan forestille dig, kan utilsigtede krydsforbindelser oprette et stort antal rækker i forespørgselsresultaterne. Desuden er disse resultater generelt meningsløse, fordi hvis du ikke har til hensigt at kombinere hver række med hver anden række, giver de fleste af de kombinerede rækker, der vises i resultaterne, ikke mening. Endelig kan forespørgsler, der bruger utilsigtede krydsjoinforbindelser, tage meget lang tid at køre.
1. De cirkel omsluttede felter skal være forbundet med hinanden.
1. Bemærk det meget store antal poster.
1. Bemærk, at antallet af poster er meget mindre.
Sammenføj tabeller baseret på ulighed i feltværdier
Joinforbindelser behøver ikke at være baseret på de joinforbundne felters ækvivalens . En joinforbindelse kan baseres på en hvilken som helst sammenligningsoperator, f.eks. større end (>), mindre end (<) eller ikke lig med (<>). Joinforbindelser, der ikke er baseret på ækvivalens, kaldes ulige joinforbindelser.
Hvis du vil kombinere rækkerne for to datakilder baseret på feltværdier, der ikke er ens, skal du bruge en ulige joinforbindelse. Ulige joinforbindelser er typisk baseret på enten større end (>), mindre end (<), større end eller lig med (>=) eller mindre end eller lig med (<=) sammenligningsoperatorer. Ulige joinforbindelser, der er baseret på operatoren does not equal (<>), kan returnere næsten lige så mange rækker som krydsforbindelser, og resultaterne kan være svære at fortolke.
Hvordan gør jeg bruge en ulige joinforbindelse?
Ulige joinforbindelser understøttes ikke i designvisning. Hvis du vil bruge dem, skal du gøre det ved hjælp af SQL-visning. Du kan dog oprette en joinforbindelse i designvisning, skifte til SQL-visning, finde sammenligningsoperatoren lig med (=) og ændre den til den operator, du vil bruge. Når du har gjort dette, kan du kun åbne forespørgslen i designvisning igen, hvis du først ændrer sammenligningsoperatoren tilbage til er lig med (=) i SQL-visning.
Slet en joinforbindelse
Hvis Access automatisk opretter en joinforbindelse, du ikke ønsker, eller hvis du opretter en joinforbindelse ved en fejl – f.eks. en joinforbindelse mellem to felter, der har forskellige datatyper – kan du slette joinforbindelsen.
-
Klik på den joinforbindelse, du vil fjerne, i forespørgselsdesigngitteret.
-
Tryk på Delete.
Eller
-
Højreklik på den joinforbindelse, du vil fjerne, i forespørgselsdesigngitteret, og klik derefter på Slet.