Forbind tabeller og forespørgsler

Gælder for
Access til Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Når du medtager flere datakilder i en Access-forespørgsel, kan du bruge joinforbindelser til at begrænse antallet af poster, du vil se, baseret på, hvordan datakilderne er relateret til hinanden. Du kan også bruge joinforbindelser 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 joinforbindelser, og du får vist, hvordan du bruger dem i en forespørgsel. Som standard oprettes en joinforbindelse automatisk, hvis der allerede er en relation mellem to datakilder, du bruger i en forespørgsel. En joinforbindelse oprettes også, 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 forbinde forespørgsler på samme måde, som du sammenkæder tabeller, og du kan også forbinde begge.

I denne artikel

Oversigt

En database er en samling af tabeller med data, som har logiske relationer til hinanden. Du bruger relationer til at forbinde tabeller ved hjælp af felter, som de har til fælles. En tabel kan være en del af et vilkårligt 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 oprette joinforbindelser manuelt i forespørgsler, selvom de ikke repræsenterer relationer, der allerede er defineret. Hvis du bruger andre forespørgsler (i stedet for eller i tillæg til tabeller) som datakilder for en forespørgsel, kan du oprette joinforbindelser mellem kildeforespørgslerne og 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 til en enkelt række.

Der findes fire grundlæggende typer joinforbindelser: indre joinforbindelser, ydre joinforbindelser, tværgående joinforbindelser og ulige joinforbindelser. Denne artikel beskriver 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 joinegenskaberne åbne i en dialogboks:

Feltet Joinegenskaber.

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

Joinforbindelser er nogle gange retningsbestemte. Dette område af dialogboksen viser dig, hvilken tabel, der er hvilken i joinforbindelsen, og hvilke felter, der bruges til at joinforbinde tabellerne.

Dette område afgør 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 dem begge. I en indre joinforbindelse medtages ingen andre data. I en ydre joinforbindelse medtages poster uden relationer fra én tabel også i forespørgselsresultaterne.

Toppen af siden

Typer af joinforbindelser

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

En indre joinforbindelse er en, hvor Access kun medtager data fra en tabel, hvis der er tilsvarende data i den relaterede tabel og omvendt. Det meste af tiden vil du bruge indre joinforbindelser. Når du opretter en joinforbindelse og ikke angiver, hvilken type joinforbindelse det er, går Access ud fra, at du ønsker en indre joinforbindelse. Indre joinforbindelser 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.

En ydre joinforbindelse er ligesom en indre joinforbindelse, men tilføjer de resterende rækker fra en af tabellerne. Ydre joinforbindelser er retningsbestemte: En venstre ydre joinforbindelse medtager alle posterne fra den venstre tabel – den første tabel i joinforbindelsen – og en højre ydre joinforbindelse medtager 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 til hinanden. 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.

Tværgående joinforbindelser: alle data kombineret på alle mulige måder

For det meste er en krydsjoinforbindelse en bivirkning af at føje to tabeller til en forespørgsel og derefter glemme at forbinde dem. Access fortolker det sådan, at du vil se alle poster fra én tabel kombineret med alle poster fra den anden tabel – alle mulige kombinationer af poster. Da der ikke kan kombineres data, giver denne type joinforbindelser sjældent brugbare resultater. Men der er et par tilfælde, hvor en krydsjoinforbindelse er lige det, du har brug for.

Ulige joinforbindelser: f.eks. en almindelig joinforbindelse, men ved hjælp 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 for 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 vise de rækker, der har tilsvarende værdier i det sammenkædede felt, kan 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å grundlag af dataene i de sammenkædede felter. Når du kører en forespørgsel med en indre joinforbindelse, medtages kun de rækker, hvor der findes en fælles værdi i begge af de sammenkædede tabeller, i forespørgselshandlingerne.

Hvordan bruger jeg en indre joinforbindelse?

Det meste af tiden 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 for at vise, hvilken tabel der er på "én"-siden af en én-til-mange-relation og et uendelighedssymbol (), 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 håndhæves.

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 bør du oprette dem selv. Du kan oprette en indre joinforbindelse ved at trække et felt fra en datakilde til et felt i 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 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 Handlingen INNER JOIN.

Toppen af siden

Vise 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 til hinanden, skal forespørgslen omfatte 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 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-delsætningen 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 tabel eller den højre tabel i en given joinforbindelse ved at dobbeltklikke på joinforbindelsen 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 til hinanden.

Hvordan gør jeg bruge en ydre joinforbindelse?

Du kan oprette en ydre joinforbindelse ved at ændre en eksisterende indre joinforbindelse. Hvis der ikke findes nogen indre joinforbindelse, kan du oprette en og derefter ændre den til en ydre joinforbindelse.

Ændre en indre joinforbindelse til en ydre joinforbindelse

  1. Dobbeltklik på den joinforbindelse, du vil ændre, i forespørgslens designvisning.
    Dialogboksen Joinegenskaber vises.
  2. I dialogboksen Joinegenskaber skal du notere valgmulighederne ud for mulighed 2 og 3.
  3. Klik på den indstilling, du vil bruge, og klik derefter på OK.
  4. Access viser joinforbindelsen og viser en pil, der peger fra datakilden, hvor alle rækker medtages fra 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 bestemme, hvilken joinhandling der skal udføres først. Da resultaterne er forskellige, afhængigt af om venstre eller indre joinforbindelse udføres først, vises der en fejlmeddelelse i Access:

For at rette denne fejl skal du ændre forespørgslen, så det er tydeligt, 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 table1 [ LEFT | RIGHT ] JOIN tabel2
ON tabel1.felt1 sammenlign tabel2.felt2

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 joinforbindelser i emnet LEFT JOIN, RIGHT JOIN-handlinger.

Toppen af siden

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

Når du vil vise alle rækker fra to tabeller og forbinde 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 at bruge en foreningsforespørgsel. Hvordan du gør dette, forklares det i følgende procedure, 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:

  1. Opret en forespørgsel, der har en venstre ydre joinforbindelse for 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 i 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.

Tværgående joinforbindelser

Tværjoinforbindelser adskiller sig fra indre og ydre joinforbindelser i, at de ikke er eksplicit 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 kartesisk produkt. Hver gang du kører en forespørgsel med tabeller, der ikke udtrykkeligt er joinforbundet, bliver resultatet et krydsprodukt. Tværjoinforbindelser 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. Lad os for eksempel antage, 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 med 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?

En krydsjoinforbindelse oprettes, hver gang du medtager tabeller eller forespørgsler i din forespørgsel, og du 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 forbundet med nogen 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 krydsjoinforbindelse giver 455 rækker (produktet af 91 og 5).

Som du måske tror, kan utilsigtede krydsjoinforbindelser oprette et enormt antal rækker i forespørgselsresultaterne. Desuden er disse resultater generelt meningsløse, for hvis du ikke rent faktisk har tænkt dig at kombinere hver række med hver anden række, vil de fleste af de kombinerede rækker, der vises i resultaterne, ikke give mening. Endelig kan det tage meget lang tid at køre forespørgsler, der anvender utilsigtede krydsjoinforbindelser.

Utilsigtet krydsjoinforbindelse i forespørgselsdesignvisning 1. De cirklede felter skal være joinforbundet.

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

Forbind tabeller, der er baseret på en ulighed af feltværdier

Joinforbindelser behøver ikke at være baseret på ækvivalensen af de joinforbundne felter. 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 for ulige joinforbindelser.

Hvis du vil kombinere rækkerne i to datakilder baseret på feltværdier, der ikke er ens, skal du bruge en ulige joinforbindelse. Typisk er ulige joinforbindelser 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 er ikke lig med (<>), kan returnere næsten lige så mange rækker som tværgående joinforbindelser, og resultaterne kan være svære at tyde.

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 lig med (=) i SQL-visningen.

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

  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

Føj poster til en tabel ved hjælp af en tilføjelsesforespørgselSamle resultaterne af flere udvælgelsesforespørgsler ved hjælp af en foreningsforespørgselOprette en forespørgsel baseret på flere tabellerOpret, rediger eller slet en relation