Forbind tabeller og forespørgsler

Når du medtager flere datakilder i en Access-forespørgsel, kan du bruge joinforbindelse til at begrænse de poster, du vil have vist, baseret på, hvordan datakilderne er relateret til hinanden. Du kan også bruge joinforbindelse til at kombinere poster fra begge datakilder, så hvert par af poster fra kilderne bliver til én post i forespørgselsresultaterne.

I denne artikel beskrives de forskellige typer joinforbindelse, og du får vist, hvordan du bruger dem i en forespørgsel. Som standard oprettes der automatisk en joinforbindelse, hvis der allerede er en relation mellem to datakilder, 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 joinforbindelsesforespørgsler på samme måde, som du joinforbindelse tabeller, og du kan også joinforbindelse begge dele.

I denne artikel

Oversigt

En database er en samling af tabeller med data, der har logiske relationer til hinanden. Du kan bruge relationer til at forbinde tabeller efter felter, 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 er en relation repræsenteret af en joinforbindelse.

Når du føjer tabeller til en forespørgsel, Access oprette 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 joinforbindelse mellem kildeforespørgslerne og også mellem disse forespørgsler og de tabeller, du bruger som datakilder.

Joinforbindelse fungerer på samme måde som forespørgselskriterier, fordi de opretter regler, som dataene skal matche for at blive medtaget i forespørgselshandlingerne. I modsætning til kriterier angiver joinforbindelse også, at hvert par af rækker, der opfylder joinvilkårene, kombineres i postsættet til en enkelt række.

Der findes fire grundlæggende typer joinforbindelse: indre joinforbindelse, ydre joinforbindelse, kryds joinforbindelse og ulige joinforbindelse. I denne artikel gennemgås hver type joinforbindelse, du kan bruge, hvorfor du bruger hver type, og hvordan du opretter joinforbindelse.

Joinforbindelser er til forespørgsler om, hvilke relationer der er til tabeller: en angivelse af, hvordan data i to kilder kan kombineres ud fra dataværdier, de har til fælles. Her er en illustration af en joinforbindelse i forespørgselsdesignvisning med joinforbindelsesegenskaberne åbne i en dialogboks:

Feltet Joinegenskaber.

Denne linje mellem tabellerne repræsenterer joinforbindelse. Dobbeltklik på en joinforbindelse for at åbne dialogboksen Joinegenskaber (vist) og gennemse eller ændre joinforbindelse.

Joinforbindelse er nogle gange retningsbestemte. I dette område af dialogboksen kan du se, hvilken tabel der findes i joinforbindelse, og hvilke felter der bruges til at joinformelde tabellerne.

Dette område bestemmer typen af joinforbindelse: mulighed 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 der ingen andre data. I en ydre joinforbindelse medtages poster uden relation fra én tabel også i forespørgselsresultaterne.

Toppen af siden

Typer af joinforbindelse

Der findes fire grundlæggende typer joinforbindelse: indre joinforbindelse, ydre joinforbindelse, kryds joinforbindelse og ulige joinforbindelse. Tværgående joinforbindelse og ulige joinforbindelse er avancerede jointyper og bruges sjældent, men du bør kende til dem for at få en fuld forståelse for, hvordan joinforbindelse fungerer.

Indre joinforbindelse: kun relaterede data fra begge tabeller kombineret

En indre joinforbindelse er en, hvor Access kun medtager data fra en tabel, hvis der er tilsvarende data i den relaterede tabel og omvendt. Som oftest skal du bruge indre joinforbindelse. Når du opretter en joinforbindelse og ikke angiver, hvilken type joinforbindelse det er, antager Access, at du ønsker en indre joinforbindelse. Indre joinforbindelse er nyttige, fordi de gør det muligt at kombinere data fra to kilder, der er baseret på delte værdier – så du kun kan se data, når der er et komplet billede.

Ydre joinforbindelse: alle de relaterede data kombineret korrekt samt 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 joinforbindelse er retningsbestemte: en venstre ydre joinforbindelse medtager alle posterne fra den venstre tabel – den første tabel i joinforbindelse – og en højre ydre joinforbindelse indeholder alle posterne fra den højre tabel – den anden tabel i joinforbindelse.

Fulde ydre joinforbindelse: 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 kryds joinforbindelse og kriterier for at opnå den samme effekt.

Kryds joinforbindelse: alle data, kombineret på alle mulige måder

Det meste af tiden er en kryds joinforbindelse en sideeffekt ved at føje to tabeller til en forespørgsel og derefter glemme at deltage i dem. Access fortolker dette til at betyde, at du vil se 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 kryds joinforbindelse netop er det, du har brug for.

Ulige joinforbindelse: f.eks. en almindelig joinforbindelse, men brug af en anden sammenligning til at kombinere rækker

Ulige joinforbindelse bruger en anden operator end lighedstegnet (=) til at sammenligne værdier og afgøre, om og hvordan dataene skal kombineres. Ulige joinforbindelse understøttes ikke eksplicit, men du kan bruge en kryds joinforbindelse og kriterier for at opnå den samme effekt.

Vise rækker, hvor der findes en fælles værdi i begge af de sammenføjede tabeller

Hvis du kun vil vise de rækker, der har matchende værdier i det joinforbindelsesfelt, kan du bruge en indre joinforbindelse. Access opretter automatisk indre joinforbindelse.

Indre joinforbindelser er den mest almindelige type joinforbindelse. De fortæller en forespørgsel, at rækker fra en af de sammenføjede tabeller svarer til rækker i den anden tabel på basis af dataene i de sammenføjede 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 joinforbindelsestabeller, i forespørgselshandlingerne.

Hvordan bruger jeg 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 af 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 "et" og "mange" vises ikke i dette tilfælde, fordi referentiel integritet ikke gennemtvinges.

Hvis du føjer forespørgsler til forespørgslen, og du 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 bør du oprette dem selv. 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 joinforbindelse er angivet i SQL i FROM-delsætningen som vist nedenfor:

FROM tabel1 INNER JOIN tabel2 ON tabel1.felt1 sammenlign 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 finde flere oplysninger om syntaksen for indre joinforbindelse i emnet om handlingen INNER JOIN.

Toppen af siden

Vise alle rækker fra én tabel og tilsvarende rækker fra den anden tabel

Ydre joinforbindelse fortæller en forespørgsel, at selvom nogle af rækkerne på begge sider af joinforbindelse svarer nøjagtigt, skal forespørgslen medtage alle rækkerne fra én tabel og også rækkerne fra den anden tabel, der deler en fælles værdi på begge sider af joinforbindelse.

Ydre joinforbindelse kan være venstre ydre joinforbindelse eller kan være højre ydre joinforbindelse. I en venstre ydre joinforbindelse medtager forespørgslen alle rækkerne fra den første tabel i SQL-sætningen FROM, og kun de rækker fra den anden tabel, hvor joinforbindelsesfeltet 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, og kun de rækker fra den anden tabel, hvor joinforbindelsesfeltet indeholder værdier, der er fælles for begge tabeller.

Bemærk!: Du kan nemt se, hvilken tabel der er den venstre eller højre tabel i en given joinforbindelse, ved at dobbeltklikke på joinforbindelse og derefter se 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 bruger jeg 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 derefter til en ydre joinforbindelse.

Ændre en indre joinforbindelse til en ydre joinforbindelse

  1. Dobbeltklik på den joinforbindelse, du vil ændre, i forespørgselsdesignvisning.

    Dialogboksen Joinegenskaber vises.

  2. Bemærk valgmulighederne ud for mulighed 2 og mulighed 3i dialogboksen Joinegenskaber.

  3. Klik på den indstilling, du vil bruge, og klik derefter på OK.

  4. Access viser joinforbindelsesfilen og viser en pil, der peger fra datakilden, hvor alle rækker medtages i datakilden, hvor kun de rækker, der opfylder joinbetingelsesbetingelse, medtages.

Tvetydige ydre joinforbindelse

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 redigere forespørgslen, så det er klart, hvilken joinforbindelse der skal udføres først.

SQL-syntaks for en ydre joinforbindelse

Ydre joinforbindelse er angivet i SQL i FROM-delsætningen som vist nedenfor:

FROM-tabel1 [ LEFT-| RIGHT ] JOIN-tabel2
ON table1.field1 compare table2.field2

Handlingerne 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 finde flere oplysninger om syntaksen for ydre joinforbindelse i emnet LEFT JOIN, RIGHT JOIN-handlinger.

Toppen af siden

Vis alle rækker fra begge tabeller, og sammensæt dem, hvor der findes en fælles værdi

Når du vil vise alle rækker fra to tabeller og joine dem baseret på fælles værdier, bruger du en fuld ydre joinforbindelse. Access understøtter ikke eksplicit fulde ydre joinforbindelse, 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 mere at vide om foreningsforespørgsler, skal du se afsnittet Se også.

Sådan bruger du en foreningsforespørgsel til at udføre en fuld ydre joinforbindelse:

  1. Opret en forespørgsel, der har en venstre ydre joinforbindelse på det felt, du vil bruge til en fuld ydre joinforbindelse.

  2. Klik på Vis i gruppen Visninger under fanen Startside, og klik derefter på SQL-visning.

  3. Tryk på Ctrl+C for at kopiere SQL-koden.

  4. Slet semikolonet i slutningen af FROM-delsætningen, og tryk derefter på Enter.

  5. 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.

  6. Tryk på Ctrl+V for at indsætte den SQL-kode, du kopierede i trin 3.

  7. I den kode, du har indsat, skal du ændre LEFT JOIN til RIGHT JOIN.

  8. Slet semikolonet i slutningen af den anden FROM-delsætning, og tryk derefter på Enter.

  9. 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 (den 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

  10. Skriv et semikolon (;) i slutningen af WHERE-delsætningen for at angive slutningen af foreningsforespørgslen.

  11. Klik på Kør i gruppen Resultater under fanen Design.

Kryds joinforbindelse

Kryds joinforbindelse er forskellige fra indre og ydre joinforbindelse, da de ikke eksplicit er repræsenteret i Access. I en kryds joinforbindelse 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 sammenføjet, er et krydsprodukt resultatet. Kryds joinforbindelse er normalt utilsigtet, men der er tilfælde, hvor de kan være nyttige.

Hvorfor skal jeg bruge en kryds joinforbindelse?

Hvis du vil undersøge alle mulige kombinationer af rækker mellem to tabeller eller forespørgsler, kan du bruge en kryds joinforbindelse. 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 summerer hver kundes køb, opretter en lille tabel, der har flere mulige rabatprocenter, og kombinerer de to i en anden forespørgsel, der udfører en kryds joinforbindelse. Du ender med en forespørgsel, der viser et sæt af hypotetiske rabatter for hver kunde.

Hvordan bruger jeg en kryds joinforbindelse?

Der oprettes en kryds joinforbindelse, når som helst 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 udtrykkeligt er forbundet 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 kryds joinforbindelse frembringer 455 rækker (produktet af 91 og 5).

Som du nok kan forestille dig, kan utilsigtede kryds joinforbindelse oprette et enormt antal rækker i dine forespørgselsresultater. Desuden er disse resultater generelt meningsløse, fordi hvis du ikke ønsker at kombinere hver række med hver anden række, giver de fleste af de kombinerede rækker, der vises i resultaterne, ikke mening. Til sidst kan det tage meget lang tid at køre forespørgsler, der bruger utilsigtede kryds joinforbindelse.

Utilsigtet krydsjoinforbindelse i forespørgselsdesign

1. De indcirklede felter skal være forbundet med hinanden.

Utilsigtet krydsprodukt

1. Bemærk det meget store antal poster.

Det rettede resultat af forespørgslen

1. Bemærk, at antallet af poster er meget mindre.

Toppen af siden

Joinforbindelse af tabeller, der er baseret på en intens af feltværdier

Joinforbindelse behøver ikke at være baseret på ækvivalensen for de joinforbindelsesfelter. En joinforbindelse kan være baseret på en sammenligningsoperator, f.eks. større end (>), mindre end (<) eller ikke er lig med (<>). Joinforbindelse, der ikke er baseret på ækvivalens, kaldes ulige joinforbindelse.

Hvis du vil kombinere rækkerne med to datakilder baseret på feltværdier, der ikke er ens, bruger du en ulige joinforbindelse. Ulige joinforbindelse er typisk baseret på enten større end (>), mindre end (<), større end eller lig med (>=) eller mindre end eller lig med (< =) sammenligningsoperatorer. Ulige joinforbindelse, der er baseret på operatoren ikke er lig med (<>) kan returnere næsten lige så mange rækker som kryds joinforbindelse, og resultaterne kan være svære at fortolke.

Hvordan bruger jeg en ulige joinforbindelse?

Ulige joinforbindelse 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==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, som 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 joinforbindelse.

  1. Klik på den joinforbindelse, du vil fjerne, i forespørgselsdesigngitteret.

  2. Tryk på Delete.

– eller –

  • Højreklik på den joinforbindelse, du vil fjerne, i forespørgselsdesigngitteret, og klik derefter på Slet.

Toppen af siden

Se også

Føj poster til

foreningsforespørgsel

Opret,

Har du brug for mere hjælp?

Udvid dine Office-færdigheder
Gå på opdagelse i kurser
Få nye funktioner først
Bliv Office Insider

Var disse oplysninger nyttige?

Tak for din feedback!

Tak for din feedback! Det lyder, som om det vil kunne hjælpe, hvis du bliver sat i forbindelse med en af vores Office-supportteknikere.

×