Forene datakilder i en forespørgsel

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 forespørgsel, kan du bruge joinforbindelser til at begrænse det viste antal poster baseret på, hvordan datakilderne relaterer til hinanden. Du bruger også 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 det vises, hvordan du bruger dem i en forespørgsel.

Bemærk: I denne artikel bruges tabellen udtryk til at ville datakilde. Du kan også bruge en forespørgsel i en joinforbindelse samme måde som en tabel.

Oversigt

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

Venstre eller højre ydre joinforbindelser: Viser alle rækkerne fra en tabel og alle de tilsvarende rækker fra den anden tabel

Fuldstændig ydre joinforbindelse: Viser alle rækker fra begge tabeller og kombinerer dem, hvis der findes en fælles værdi

Krydsjoinforbindelse: alle mulige kombinationer af rækker

Ulige joinforbindelse: Kombinerer poster baseret på forskelle i feltværdier

Slette en joinforbindelse

Oversigt

Joinforbindelser bruges i forespørgsler på samme måde som relationer bruges i tabeller: de angiver, hvordan dataene i to kilder kan kombineres baseret på de dataværdier, der er fælles. Her er en illustration af en joinforbindelse i designvisning for en forespørgsel med egenskaberne for joinforbindelsen åbnet i en dialogboks:

Feltet Joinegenskaber.

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

Joinforbindelser kan være retningsbestemte. I dette område af dialogboksen kan du se, hvordan tabellerne bruges i joinforbindelsen, og du kan se, hvilke felter der bruges til at joinforbinde tabellerne.

Dette område bruges til at bestemme typen af joinforbindelse: indstilling 1 er en indre joinforbindelse, 2 er en venstre ydre joinforbindelse, og 3 er en højre ydre joinforbindelse.

Du kan bruge felter fra begge tabeller, og de data, der angår en given opgave vises fra hver tabel. I en indre joinforbindelse medtages der ikke andre data. I en ydre joinforbindelse medtages ikke-relaterede poster fra den ene tabel også i forespørgselsresultatet.

Nogle joinforbindelser oprettes automatisk

I mange tilfælde behøver du ikke at bruge joinforbindelser. Hvis de tabeller, du føjer til en forespørgsel, allerede har en relation, opretter Access en indre joinforbindelse for at afspejle relationen. I de fleste tilfælde har du brug for følgende: en metode til at sikre, at de data, der hentes fra to tabeller, kombineres korrekt, så de rette data fra begge tabeller medtages – og ikke andet. Men i nogle tilfælde har du brug for en joinforbindelse, der medtager flere data.

Typer af joinforbindelser

Der er fire grundlæggende typer joinforbindelser: indre joinforbindelser, ydre joinforbindelser, krydsjoinforbindelser og ulige joinforbindelser. Krydsjoinforbindelser og ulige joinforbindelser bruges sjældent, men du bør kende dem for at få en fuld forståelse for, hvordan joinforbindelser virker.

Indre joinforbindelser: der kombineres kun relaterede data fra begge tabeller

I en indre joinforbindelse medtager Access kun data fra en tabel, hvis der findes tilsvarende data i den relaterede tabel og omvendt. Du vil i de fleste tilfælde skulle bruge en indre joinforbindelse. Når du opretter en joinforbindelse, og du ikke angiver typen af joinforbindelse, antages det i Access, at du vil bruge en indre joinforbindelse. Indre joinforbindelser er praktiske, fordi de gør det muligt at kombinere data fra to kilder baseret på delte værdier – så du får kun vist data, når der er dannet et komplet billede.

Ydre joinforbindelser: alle de relaterede data kombineres korrekt plus alle de resterende poster fra den ene tabel

En ydre joinforbindelse minder om en indre joinforbindelse, men den tilføjer de resterende rækker fra den ene 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.

Fuldstændige ydre joinforbindelser: alle data, som kombineres, når det er relevant

I nogle systemer kan en ydre joinforbindelse medtage alle rækker fra begge tabeller, og rækkerne kombineres, når de svarer til hinanden. Dette kaldes en fuldstændig ydre joinforbindelse. Denne type joinforbindelse understøttes ikke eksplicit i Access. Du kan dog bruge en krydsjoinforbindelse og kriterier til at opnå den samme effekt.

Krydsjoinforbindelser: alle data, som kombineres på alle mulige måder

I de fleste tilfælde er en krydsjoinforbindelse en bivirkning, hvis man føjer to tabeller til en forespørgsel og glemmer at bruge en joinforbindelse. Det fortolker Access som om, at du gerne vil se alle posterne fra hver tabel kombineret med hver eneste post fra den anden tabel – altså alle mulige kombinationer af poster. Da dataene ikke kan kombineres, vil denne type joinforbindelse sjældent medføre brugbare resultater. Men der er nogle få tilfælde, hvor en krydsjoinforbindelse lige præcis er det, du skal bruge.

Ulige joinforbindelser: svarer til en almindlig joinforbindelse, men bruger en anden sammenligning til at kombinere rækkerne

Ulige joinforbindelser bruger en anden operator end lighedstegnet (=) til at sammenligne værdier og bestemme, 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.

Toppen af siden

Indre joinforbindelse: 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, baseret på fælles værdier 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?

Du kan oprette en indre joinforbindelse ved at trække et felt fra en datakilde til et felt i en anden datakilde i forespørgselsdesigngitteret. Der oprettes en joinforbindelse mellem de to tabeller, og der vises en streg mellem dem.

Automatiske indre joinforbindelser

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 indre joinforbindelser, hvis du føjer to tabeller til en forespørgsel, og disse tabeller begge har et felt med den samme navn og dem samme eller en kompatibel datatype, og hvis et af felterne er en primær nøgle i tabellen. 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 forespørgslen, og du ikke har oprettet relationer mellem forespørgslerne, oprettes der ikke automatisk indre joinforbindelser mellem forespørgslerne eller mellem forespørgslerne og tabellerne. Generelt set bør du selv oprette dem (ved at trække et felt fra en datakilde til et felt i en anden datakilde). Hvis du ikke gør det, kan resultatet bliver en krydsjoinforbindelse, som kan medføre forvirrende resultater, hvis det ikke er det, du vil opnå.

SQL-syntaks for en indre joinforbindelse

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

FROM tabel1 INNER JOIN tabel2 ON tabel1.felt1sammenligningsoperator 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.

sammenligningsoperator

En relationel sammenligningsoperator: "=," "<," ">," "<=," ">=" eller "<>."

Du kan læse mere om syntaksen i indre joinforbindelser i emnet Handlingen INNER JOIN.

Toppen af siden

Venstre eller højre ydre joinforbindelser: Viser alle rækkerne fra en tabel og alle de tilsvarende rækker fra den anden tabel

Ydre joinforbindelser angiver over for en forespørgsel, at selvom nogle af rækkerne på begge sider af joinforbindelsen er nøjagtigt ens, 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 (dataene kombineres, når begge tabeller indeholder en række).

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 se, hvilken tabel der er tabellen til venstre eller højre tabel i en given joinforbindelse ved at dobbeltklikke på joinforbindelsen, og derefter søger i den dialogboksen Joinegenskaber. Eller du kan undersøge FROM-delsætningen for Deltag i detaljer i SQL-visning.

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 ydre 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 indre joinforbindelse til en ydre joinforbindelse

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

    Den i dialogboksen Joinegenskaber vises.

  2. I den i dialogboksen Joinegenskaber, Bemærk valgmulighederne, der vises ud for indstillingen 2 og indstillingen 3.

  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 bliver medtaget, til den datakilde, hvor kun de rækker, der opfylder joinforbindelsen, bliver medtaget.

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 vil blive forskellige, at efter om den venstre joinforbindelse eller den indre joinforbindelse udføres først, vises der en fejlmeddelelse om tvetydige ydre joinforbindelser.

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

Ydre joinforbindelse og mulighed for opdatering af forespørgslen

I en Access-app kan et felt i en forespørgsel med flere tabeller kun opdateres, hvis følgende betingelser er opfyldt:

  • Feltet er fra flest/mange-tabellen i forespørgslen – dvs. den tabel, der slår data i den anden tabel op.

  • Forespørgslens output indeholder den primære nøgle fra flest/mange-tabellen.

  • Hvis flest/mange-tabellen er del af en ydre joinforbindelse, er det på den indvendige side af joinforbindelsen: den venstre tabel i en venstre ydre joinforbindelse eller den højre tabel i en højre ydre joinforbindelse.

Hvis en af betingelserne ikke opfyldes, vil feltet være skrivebeskyttet både i dataarket til forespørgslen og i de eventuelle visninger, der er baseret på forespørgslen.

SQL-syntaks for en ydre joinforbindelse

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

FROM tabel1 [ LEFT | RIGHT ] JOIN tabel2
ON tabel1.felt1sammenligningsoperator 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.

sammenligningsoperator

En relationel sammenligningsoperator: "=," "<," ">," "<=," ">=" eller "<>."

Du kan finde flere oplysninger om syntaksen i ydre joinforbindelser i emnet Handlingerne LEFT JOIN og RIGHT JOIN.

Toppen af siden

Fuldstændig ydre joinforbindelse: Viser alle rækker fra begge tabeller og kombinerer dem, hvis 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 fuldstændig ydre joinforbindelse. Fuldstændige ydre joinforbindelser understøttes ikke eksplicit i Access, men du kan opnå den samme effekt ved at bruge en krydsjoinforbindelse og kriterier.

  1. Opret en forespørgsel, og tilføj de to tabeller. Hvis der oprettes joinforbindelser, skal du slette dem.

  2. Tilføj de felter, der skal være output til forespørgslen.

  3. Tilføj de joinforbundne felter fra begge tabeller, og fjern markeringen i afkrydsningsfeltet i rækken Vis for dem.

  4. I forespørgselsdesigngitteret skal du under joinfeltet for den første tabel angive joinfeltet for den anden tabel i rækken Kriterier. Hvis joinfelterne har samme feltnavn, skal du huske at medtage tabelnavnet, når du refererer til dem.

  5. I rækken Eller under det kriterium, du lige har angivet, skal du skrive Is Null.

  6. I den næste Eller-række (lige under den første) under joinfeltet for den anden tabel skal du skrive Is Null.

Forespørgslen returnerer det kombinerede sæt af:

  • De rækker, hvor værdierne i de joinforbundne felter stemmer overens. Dataene kombineres derefter (dvs. en indre joinforbindelse).

  • De rækker, hvor der ikke er nogen værdi for det joinforbundne felt i den første tabel (dvs. den ydre del af en venstre ydre joinforbindelse)

  • De rækker, hvor der ikke er nogen værdi for det joinforbundne felt i den anden tabel (dvs. den ydre del af en højre ydre joinforbindelse)

Toppen af siden

Krydsjoinforbindelse: alle mulige kombinationer af rækker

Når du medtager tabeller i en forespørgsel, men ikke opretter en joinforbindelse, opstår der en krydsjoinforbindelse. Access kombinerer hver række fra den ene tabel med hver række fra den anden tabel, hvilket medfører et krydsprodukt (også kaldet et kartesisk produkt). Det er som regel ikke det, du har brug for, men krydsjoinforbindelser kan være praktiske til at undersøge hypotetiske resultater.

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 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. Krydsproduktet viser et sæt hypotetiske rabatter for hver kunde – og det var lige det, du skulle bruge.

Hvordan bruger jeg en krydsjoinforbindelse?

Føj to tabeller til en forespørgsel, undlad at oprette en joinforbindelse mellem dem, og medtag felter fra begge i forespørgslens output. 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 forespørgselsresultaterne. Overvej rabateksemplet 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).

Hvis de tabeller, du tilføjede, er relaterede, oprettes der automatisk en indre joinforbindelse i Access. Du kan slette den automatisk oprettede joinforbindelse for at oprette en krydsjoinforbindelse.

Som du sikkert kan forestille dig, kan utilsigtede krydsjoinforbindelser oprette et stort antal rækker i dine forespørgselsresultater. Desuden vil resultaterne oftest slet ikke give mening, fordi rækkerne ikke er kombineret på basis af fælles data, og kombinationerne svarer ikke til noget.

Toppen af siden

Ulige joinforbindelse: Kombinerer poster 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 (<>). De 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 (<=). De 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 eksplicit i designvisning i Access, men du kan opnå den samme effekt ved at bruge en krydsjoinforbindelse og kriterier.

  1. Opret en forespørgsel, og tilføj de to tabeller til den ulige joinforbindelse. Hvis der oprettes joinforbindelser automatisk, skal du slette dem.

  2. Tilføj de felter, der skal vises som output.

  3. Tilføj det joinforbundne felt fra den første tabel, og fjern markeringen i afkrydsningsfeltet i rækken Vis.

  4. Skriv operatoren for forskellig fra i rækken Kriterier efterfulgt af det joinforbundne felt i den anden tabel.

Forespørgslen returnerer rækker ved at kombinere data fra de to tabeller baseret på den angivne ulighed.

Toppen af siden

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 på den joinforbindelse i forespørgselsdesigngitteret, du vil fjerne.

  2. Tryk på slette.

Eller

  • I forespørgslens designgitter skal du højreklikke på den joinforbindelse, du vil fjerne, og klik derefter på slette.

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

Var disse oplysninger nyttige?

Fantastisk! Har du mere feedback?

Hvordan kan vi forbedre det?

Tak for din feedback!

×