Joinforbinde tabeller og forespørgsler

Joinforbinde tabeller og forespørgsler

Vigtigt: Denne artikel er maskinoversat. Se ansvarsfraskrivelsen. Du kan finde den engelske version af denne artikel her til din orientering.

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

I denne artikel beskrives de forskellige typer joinforbindelser og viser, hvordan du bruger dem i en forespørgsel. Som standard oprettes en joinforbindelse automatisk, hvis der allerede findes en relation mellem to datakilder, der bruges i en forespørgsel. En joinforbindelse, oprettes der også, hvis der er felter, der tydeligt svarer til hinanden. Du kan slette en automatisk oprettede joinforbindelse. I denne artikel indeholder grundlæggende oplysninger om tabelrelationer, herunder hvordan du opretter en.

Bemærk: Du kan deltage forespørgsler på samme måde, at du joinforbinde tabeller og kan også deltage begge.

Denne artikel indeholder

Oversigt

Viser de rækker, hvor der findes en fælles værdi i begge af de joinforbundne tabeller

Vis alle rækkerne fra en tabel og alle de tilsvarende rækker fra anden tabellen

Viser alle rækker fra begge tabeller og deltage i, hvor der findes en fælles værdi

Krydsjoinforbindelser

Joinforbinde tabeller, der er baseret på forskelle i feltværdier

Slette en joinforbindelse

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, 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. En relation er repræsenteret af en joinforbindelse i en forespørgsel.

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, 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 forespørgsler kilder og mellem disse forespørgsler og alle tabeller, du bruger som datakilder.

Joinforbindelser fungerer næsten på samme måde som forespørgselskriterier på den måde, at de fastlægger regler, som dataene skal opfylde for at blive medtaget i forespørgslerne. I modsætning til kriterier angiver joinforbindelser også, at hvert sæt rækker, der opfylder joinbetingelserne, skal kombineres i postsættet, så de udgør en enkelt række.

Der er fire grundlæggende typer joinforbindelser: indre joinforbindelser, ydre joinforbindelser, krydsjoinforbindelser og ulige joinforbindelser. I denne artikel gennemgås hver enkelt type joinforbindelse, som du kan bruge, hvorfor du bruger den enkelte type, og hvordan du opretter joinforbindelserne.

Toppen af siden

Viser de rækker, hvor der findes en fælles værdi i begge af de joinforbundne tabeller

Hvis du kun vil se de rækker, der har ens værdier i det joinforbundne felt, skal du bruge en indre joinforbindelse. Access opretter automatisk indre joinforbindelser.

Indre joinforbindelser er den mest almindelig type. De angiver over for en forespørgsel, at rækker fra en af de joinforbundne tabeller svarer til rækker i den anden tabel, på basis af dataene i de joinforbundne felter. Når der køres en forespørgsel med en indvendig joinforbindelse, er det kun de rækker, hvor der findes en fælles værdi i begge joinforbundne tabeller, der medtages i forespørgslerne.

Hvordan bruger jeg en indvendig joinforbindelse?

For det meste 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, oprettes der automatisk en indre joinforbindelse mellem hvert par af relaterede tabeller, når du tilføjer tabellerne. Hvis referentiel integritet gennemtvinges, vises der også et "1" oven over joinlinjen, så du kan se, hvilken tabel der er på en-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, oprettes der automatisk indvendige joinforbindelser, hvis du føjer to tabeller til en forespørgsel, og disse tabeller begge har et felt med den samme eller en kompatibel datatype, og hvis et af joinfelterne er en primær nøgle. Symbolerne for "en" og "mange" vises ikke i dette tilfælde, fordi der ikke er gennemtvunget referentiel integritet.

Hvis du føjer forespørgsler til din forespørgsel, og du ikke har oprettet relationerne mellem disse forespørgsler, oprettes der ikke automatisk indvendige joinforbindelser mellem disse forespørgsler eller mellem forespørgsler og tabeller. Du bør generelt selv oprette dem. Du opretter en indvendig joinforbindelse ved at trække et felt fra én datakilde til et felt i en anden datakilde. Der vises en linje mellem de to felter, der viser, at der er oprettet en joinforbindelse.

SQL-syntaks for en indre joinforbindelse

Indvendige joinforbindelser angives i SQL i FROM-delsætningen som vist nedenfor:

FROM Tabel1 INNER JOIN Tabel2Tabel1. 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 finde flere oplysninger om syntaksen i indre joinforbindelser i emnet Handlingen INNER JOIN.

Toppen af siden

Vis alle rækkerne fra en tabel og alle de tilsvarende rækker fra anden tabellen

Ydre joinforbindelser angiver over for en forespørgsel, at selvom nogle af rækkerne på begge sider af joinforbindelsen er nøjagtigt tilsvarende, bør forespørgslen medtage alle rækkerne fra den ene 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 højre, ydre joinforbindelser. I en venstre, ydre joinforbindelse omfatter forespørgslen alle rækkerne fra den første tabel i SQL-sætningens FROM-delsætning og kun de rækker fra den anden tabel, hvor joinfeltet indeholder værdier, der er fælles for begge tabeller. I en højre, ydre joinforbindelse omfatter forespørgslen alle rækkerne fra den anden tabel i SQL-sætningens FROM-delsætning og kun de rækker fra den anden tabel, hvor joinfeltet indeholder værdier, der er fælles for begge tabeller.

Bemærk: Du kan nemt finde ud af, hvilken tabel, der er den venstre tabel eller den højre tabel i en bestemt 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å en-siden af en ydre joinforbindelse ikke vil have tilsvarende rækker fra den anden tabel, vil nogle af disse felter, der returneres i forespørgselsresultaterne fra den anden tabel, være tomme, når rækkerne ikke svarer til hinanden.

Hvordan bruger jeg en udvendig joinforbindelse?

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

Ændre en indvendig joinforbindelse til en udvendig joinforbindelse

  1. Dobbeltklik i designvisning på den joinforbindelse, du vil ændre.

    Dialogboksen Joinegenskaber vises.

  2. Bemærk de valgmuligheder, der er vist ved siden af indstilling 2 og indstilling 3 i dialogboksen Joinegenskaber.

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

  4. Der vises en joinforbindelse, og du vil kunne se en pil, der peger fra den datakilde, hvor alle rækkerne vil være medtaget, til den datakilde, hvor kun de rækker, der opfylder joinforbindelsen vil være medtaget.

Tvetydige ydre joinforbindelser

Hvis du opretter en forespørgsel, der indeholder en LEFT JOIN og en indre JOINFORBINDELSE, Access muligvis ikke kunne finde ud af, hvor deltage i operator, der skal udføres først. Fordi resultaterne er forskellige, afhængigt af om den venstre eller den indre joinforbindelse der udføres først, viser Access en fejlmeddelelse:

Du kan rette fejlen, skal du ændre forespørgslen, så det er tydeligt, hvilken joinforbindelse der skal udføres først.

SQL-syntaks for en ydre joinforbindelse

Udvendige joinforbindelser angives i SQL i FROM-delsætningen som vist nedenfor:

FRA Tabel1 [venstre | HØJRE] JOIN Tabel2
table1.field1 sammenligne 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 i ydre joinforbindelser i emnet LEFT JOIN og højre joinhandlinger.

Toppen af siden

Viser alle rækker fra begge tabeller og deltage i, hvor der findes en fælles værdi

Når du vil vise alle rækker fra to tabeller og deltage i dem baseret på fælles værdier, skal bruge du en fuldstændig ydre joinforbindelse. Access understøtter ikke eksplicit fuldstændig ydre joinforbindelser, men du kan opnå den samme effekt ved hjælp af en foreningsforespørgsel. Følgende procedure beskriver, hvordan du gør dette, men hvis du vil have flere oplysninger om foreningsforespørgsler, i afsnittet Se også.

Sådan bruges 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, som 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 til sidst i FROM-delsætningen, og tryk på Enter.

  5. Skriv UNION, og tryk derefter på ENTER.

    Bemærk: Undlad at bruge 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, som du kopierede i trin 3.

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

  8. Slet semikolonet til sidst i den anden FROM-delsætning, og tryk på Enter.

  9. Tilføj en WHERE-delsætning, som angiver, at værdien af joinforbindelsesfeltet er NULL i den første tabel, der vises 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]

    Ville du tilføje følgende WHERE-delsætning:

    WHERE Products.ID IS NULL

  10. Skriv et semikolon (;) til sidst i WHERE-delsætningen for at angive, at foreningsforespørgslen ikke er længere.

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

Krydsjoinforbindelser

Krydsjoinforbindelser er anderledes end indre og ydre joinforbindelser, da de ikke eksplicit 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 kartesisk produkt. Hver gang du kører en forespørgsel, der indeholder tabeller, der ikke er eksplicit forbundet, er et krydsprodukt resultatet. Krydsjoinforbindelser er som regel utilsigtet, men der er tilfælde, hvor de kan være nyttige.

Hvorfor skal jeg bruge en krydsjoinforbindelse?

Hvis du vil undersøge enhver mulig kombination af rækker mellem to tabeller eller forespørgsler, skal du bruge en krydsjoinforbindelse. Antag f.eks., at dit firma har haft et fantastisk år, og at du overvejer at give dine kunder en rabat. Du kan opbygge en forespørgsel, der opsummerer hver enkelt kundes køb, oprette en lille tabel med flere mulige rabatprocenter og kombinere disse i endnu en forespørgsel, der udfører en krydsjoinforbindelse. Du ender med en forespørgsel, der viser et sæt hypotetiske rabatter for hver kunde.

Hvordan bruger jeg en krydsjoinforbindelse?

Hver gang du medtager tabeller eller forespørgsler i din forespørgsel, og du ikke opretter mindst én eksplicit joinforbindelse til hver tabel eller forespørgsel, oprettes der en krydsjoinforbindelse. Hver række fra hver tabel eller forespørgsel, der ikke eksplicit er joinforbundet med en anden tabel eller forespørgsel, kombineres med enhver 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 opretter 455 rækker (resultatet af 91 og 5).

Som du sikkert kan forestille dig, kan utilsigtede krydsjoinforbindelser oprette et stort antal rækker i dine forespørgselsresultater. Disse resultater giver desuden ingen mening, for hvis du reelt ikke har tænkt dig at kombinere hver rækker med enhver anden række, vil de fleste af de kombinerede rækker, der vises i resultaterne, ikke give nogen mening. Endelig kan det tage meget lang tid at køre forespørgsler, hvor der anvendes utilsigtede krydsjoinforbindelser.

Utilsigtet krydsjoinforbindelse i forespørgselsdesign
En utilsigtet krydsjoinforbindelse i forespørgselsdesign

1. Felterne med cirkel omkring bør joinforbindes med hinanden.

Utilsigtet krydsprodukt
Det krydsprodukt, der er returneret af den utilsigtede krydsjoinforbindelse, der er vist ovenfor.

1. Bemærk det meget store antal poster.

Det rettede resultat af forespørgslen
Resultaterne efter at den rigtige joinforbindelse er oprettet.

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

Toppen af siden

Joinforbinde tabeller, der er baseret på forskelle i feltværdier

Joinforbindelser behøver ikke at være baseret på, at de joinforbundne felter er identiske. En joinforbindelse kan være baseret på en hvilken som helst sammenligningsoperator, f.eks. større end (>), mindre end (<), eller er forskellig fra (<>). Joinforbindelser, der ikke er baseret på at være identiske, kaldes ulige joinforbindelser.

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

Hvordan bruger jeg en ulige joinforbindelse?

Ulige joinforbindelser understøttes ikke i designvisning. Hvis du vil bruge dem, skal du gøre det ved at bruge SQL-visning. Du kan dog oprette en joinforbindelse i designvisning, skifte til SQL-visning, finde sammenligningsoperatoren er lig med (=) og derefter ændre den til den operator, du vil bruge. Når du gør det, kan du kun åbne forespørgslen i designvisning igen, hvis du først ændrer sammenligningsoperatoren tilbage til er lig med (=) i SQL-visning.

Slette en joinforbindelse

Hvis der automatisk oprettes en joinforbindelse, som du ikke skal bruge, eller hvis du ved en fejl opretter en joinforbindelse – f.eks. en joinforbindelse mellem to felter, der ikke har samme datatyper – kan du slette joinforbindelsen.

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

  2. Tryk på DELETE.

eller

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

Toppen af siden

Bemærk: Ansvarsfraskrivelse for maskinoversættelse: Denne artikel er blevet oversat af et computersystem uden menneskelig indgriben. Microsoft tilbyder disse maskinoversættelse for at hjælpe ikke-engelsktalende brugere til at kunne nyde indhold om Microsofts produkter, tjenester og teknologier. Da artiklen er maskinoversat, kan den indeholde forkerte ord eller syntaks- eller grammatikfejl.

Se også

Tilføje poster til en tabel ved hjælp af en tilføjelsesforespørgsel

Kombinere resultaterne af flere udvælgelsesforespørgsler ved hjælp af en foreningsforespørgsel

Opret en forespørgsel baseret på flere tabeller

Oprette, redigere eller slette en relation

Udvid dine 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.

×