När du tar med flera datakällor i en Access-fråga använder du kopplingar för att begränsa de poster som du vill se, baserat på hur datakällorna är relaterade till varandra. Du använder också kopplingar för att kombinera poster från båda datakällorna, så att varje par poster från källorna blir en post i frågeresultatet.
I den här artikeln beskrivs de olika typerna av kopplingar och hur du använder dem i en fråga. Som standard skapas en koppling automatiskt om det redan finns en relation mellan två datakällor som du använder i en fråga. En koppling skapas också om det finns fält som tydligt motsvarar varandra. Du kan ta bort en automatiskt skapad koppling. Den här artikeln innehåller grundläggande information om tabellrelationer, inklusive hur du skapar en.
Obs!: Du kan koppla frågor på samma sätt som du kopplar tabeller, och du kan också ansluta till båda.
Artikelinnehåll
Översikt
En databas är en samling datatabeller som har logiska relationer till varandra. Du använder relationer för att koppla tabeller efter fält som de har gemensamt. En tabell kan ingå i valfritt antal relationer, men varje relation har alltid exakt två tabeller. I en fråga representeras en relation av en koppling.
När du lägger till tabeller i en fråga skapar Access kopplingar som baseras på relationer som har definierats mellan tabellerna. Du kan manuellt skapa kopplingar i frågor, även om de inte representerar relationer som redan har definierats. Om du använder andra frågor (i stället för eller utöver tabeller) som datakällor för en fråga kan du skapa kopplingar mellan källfrågorna och även mellan dessa frågor och alla tabeller som du använder som datakällor.
Kopplingar fungerar på liknande sätt som frågevillkor genom att de upprättar regler som data måste matcha för att inkluderas i frågeåtgärderna. Till skillnad från villkor anger kopplingar också att varje radpar som uppfyller kopplingsvillkoren ska kombineras i postuppsättningen för att bilda en enda rad.
Det finns fyra grundläggande typer av kopplingar: inre kopplingar, yttre kopplingar, korskopplingar och kopplingar som inte är lika stora. I den här artikeln beskrivs varje typ av koppling du kan använda, varför du använder varje typ och hur du skapar kopplingarna.
Kopplingar är till frågor om vilka relationer som är till tabeller: en indikation på hur data i två källor kan kombineras baserat på de datavärden de har gemensamt. Här är en illustration av en koppling i frågedesignvyn, med kopplingens egenskaper öppna i en dialogruta:
Den här linjen mellan tabellerna representerar kopplingen. Dubbelklicka på en koppling för att öppna dialogrutan Kopplingsegenskaper (visas) och granska eller ändra kopplingen.
Kopplingar är ibland riktade. I det här området i dialogrutan visas vilken tabell som är vilken i kopplingen och vilka fält som används för att koppla tabellerna.
Det här området avgör typen av koppling: alternativ 1 är en inre koppling, 2 är en vänster yttre koppling och 3 är en höger yttre koppling.
Fält från båda tabellerna kan användas och data som gäller en viss aktivitet visas från var och en. I en inre koppling ingår inga andra data. I en yttre koppling ingår även orelaterade poster från en tabell i frågeresultatet.
Typer av kopplingar
Det finns fyra grundläggande typer av kopplingar: inre kopplingar, yttre kopplingar, korskopplingar och kopplingar som inte är lika stora. Kopplingar mellan flera kopplingar och kopplingar är avancerade kopplingstyper och används sällan, men du bör känna till dem för att ha en fullständig förståelse för hur kopplingar fungerar.
Inre kopplingar: endast relaterade data från båda tabellerna kombinerade
En inre koppling är en koppling där Access bara innehåller data från en tabell om det finns motsvarande data i den relaterade tabellen, och vice versa. Oftast använder du inre kopplingar. När du skapar en koppling och inte anger vilken typ av koppling det är, förutsätter Access att du vill ha en inre koppling. Inre kopplingar är användbara eftersom de gör att du kan kombinera data från två källor baserat på delade värden – så att du bara ser data när det finns en fullständig bild.
Yttre kopplingar: alla relaterade data kombinerade korrekt, plus alla återstående poster från en tabell
En yttre koppling är som en inre koppling, men lägger till de återstående raderna från en av tabellerna. Yttre kopplingar är riktade: en vänster yttre koppling innehåller alla poster från den vänstra tabellen – den första tabellen i kopplingen – och en höger yttre koppling innehåller alla poster från den högra tabellen – den andra tabellen i kopplingen.
Fullständiga yttre kopplingar: alla data, kombinerade där det är möjligt
I vissa system kan en yttre koppling omfatta alla rader från båda tabellerna, med rader kombinerade när de motsvarar varandra. Det här kallas för en fullständig yttre koppling och de stöds inte uttryckligen i Access. Du kan emellertid använda en korskoppling och villkor för att uppnå samma effekt.
Korskopplingar: alla data, kombinerade på alla möjliga sätt
För det mesta är en korskoppling en bieffekt av att lägga till två tabeller i en fråga och sedan glömma att koppla dem. Access tolkar det som att du vill se alla poster från en tabell i kombination med varje post från den andra tabellen – alla möjliga kombinationer av poster. Eftersom inga data kan kombineras ger den här typen av koppling sällan användbara resultat. Men det finns några fall när en korskoppling är precis vad du behöver.
Ojämlika kopplingar: som en vanlig koppling, men med en annan jämförelse för att kombinera rader
Olika kopplingar använder en annan operator än likhetstecknet (=) för att jämföra värden och avgöra om och hur data ska kombineras. Ojämlika kopplingar stöds inte uttryckligen, men du kan använda en korskoppling och villkor för att uppnå samma effekt.
Visa rader där det finns ett gemensamt värde i båda de kopplade tabellerna
Om du bara vill visa de rader som har matchande värden i det kopplade fältet använder du en inre koppling. Inre kopplingar skapas automatiskt i Access.
Inre kopplingar är den vanligaste typen av koppling. De berättar för en fråga att rader från en av de kopplade tabellerna motsvarar rader i den andra tabellen, baserat på data i de kopplade fälten. När en fråga med en inre koppling körs inkluderas bara de rader där det finns ett gemensamt värde i båda de kopplade tabellerna i frågeåtgärderna.
Hur gör jag för att använda en inre koppling?
Oftast behöver du inte göra något för att använda en inre koppling. Om tabellerna som du lägger till i en fråga redan har relationer skapas automatiskt en inre koppling mellan varje par relaterade tabeller när du lägger till tabellerna. Om referensintegritet används visas också "1" ovanför kopplingslinjen, som anger vilken tabell som finns på 1-sidan i en en-till-många-relation, och ett oändlighetstecken (∞), som anger vilken tabell som finns på N-sidan.
Även om du inte har skapat relationer skapar Access automatiskt inre kopplingar om du lägger till två tabeller i en fråga och de tabellerna har ett fält med samma eller kompatibla datatyp och ett av kopplingsfälten är en primärnyckel. Symbolerna "1" och "många" visas inte i det här fallet, eftersom referensintegritet inte tillämpas.
Om du lägger till frågor i frågan och inte har skapat relationer mellan dessa frågor skapar Access inte automatiskt inre kopplingar mellan dessa frågor eller mellan frågor och tabeller. I allmänhet bör du skapa dem själv. Du skapar en inre koppling genom att dra ett fält från en datakälla till ett fält i en annan datakälla. Access visar en linje mellan de två fälten för att visa att en koppling har skapats.
SQL-syntax för en inre koppling
Inre kopplingar anges i SQL i FROM-satsen enligt nedan:
FROM tabell1 INNER JOIN tabell2 ON tabell1.fält1 jämför tabell2.fält2
Operationen INNER JOIN består av följande syntaktiska element:
Element |
Beskrivning |
tabell1, tabell2 |
Namnen på de tabeller som innehåller de poster som ska kombineras. |
fält1, fält2 |
Namnen på de fält som ska kombineras. Om fälten inte är numeriska måste fälten ha samma datatyp och innehålla samma information, men de behöver inte ha samma namn. |
jämför |
En jämförelseoperator: "=," "<," ">," "<=," ">=" eller "<>." |
Mer information om syntaxen för inre koppling finns i avsnittet INNER JOIN Operation.
Visa alla rader från en tabell och motsvarande rader från den andra tabellen
Yttre kopplingar berättar för en fråga att även om vissa av raderna på båda sidor av kopplingen motsvarar exakt, bör frågan innehålla alla rader från en tabell och även de rader från den andra tabellen som har ett gemensamt värde på båda sidor av kopplingen.
Yttre kopplingar kan vara vänster yttre kopplingar eller höger yttre kopplingar. I en vänster yttre koppling innehåller frågan alla rader från den första tabellen i SQL-instruktionen FROM-satsen, och endast de rader från den andra tabellen där kopplingsfältet innehåller värden som är gemensamma för båda tabellerna. I en höger yttre koppling innehåller frågan alla rader från den andra tabellen i SQL-instruktionen FROM-satsen, och endast de rader från den andra tabellen där kopplingsfältet innehåller värden som är gemensamma för båda tabellerna.
Obs!: Du kan enkelt se vilken tabell som är den vänstra tabellen eller den högra tabellen i en given koppling genom att dubbelklicka på kopplingen och sedan titta i dialogrutan Kopplingsegenskaper . Du kan också växla till SQL-vyn och sedan undersöka FROM-satsen.
Eftersom vissa av raderna på ena sidan av en yttre koppling inte har motsvarande rader från den andra tabellen, kommer vissa av fälten som returneras i frågeresultatet från den andra tabellen att vara tomma när raderna inte motsvarar varandra.
Hur gör jag för att använda en yttre koppling?
Du skapar en yttre koppling genom att ändra en befintlig inre koppling. Om det inte finns någon inre koppling kan du skapa en och sedan ändra den till en yttre koppling.
Ändra en inre koppling till en yttre koppling
-
Dubbelklicka på kopplingen du vill ändra i frågedesignvyn.
Dialogrutan Kopplingsegenskaper visas.
-
Observera alternativen bredvid alternativ 2 och alternativ 3 i dialogrutan Kopplingsegenskaper.
-
Klicka på det alternativ som du vill använda och sedan på OK.
-
Access visar kopplingen och visar en pil som pekar från datakällan där alla rader inkluderas i datakällan där endast de rader som uppfyller kopplingsvillkoret inkluderas.
Tvetydiga yttre kopplingar
Om du skapar en fråga som innehåller en LEFT JOIN och en INNER JOIN kanske Access inte kan avgöra vilken kopplingsåtgärd som ska utföras först. Eftersom resultaten skiljer sig åt beroende på om den vänstra kopplingen eller den inre kopplingen utförs först visas ett felmeddelande i Access:
För att korrigera det här felet måste du ändra frågan så att det är tydligt vilken koppling som ska utföras först.
SQL-syntax för en yttre koppling
Yttre kopplingar anges i SQL i FROM-satsen enligt nedan:
FROM tabell1 [ VÄNSTER | HÖGER ] JOIN tabell2
ON tabell1.fält1 jämför tabell2.fält2Åtgärderna KOPPLA VÄNSTER och KOPPLA HÖGER består av följande element:
Element |
Beskrivning |
tabell1, tabell2 |
Namnen på de tabeller som innehåller de poster som ska kombineras. |
fält1, fält2 |
Namnen på de fält som ska kombineras. Fälten måste ha samma datatyp och innehålla samma typ av data, men de behöver inte ha samma namn. |
jämför |
En jämförelseoperator: "=," "<," ">," "<=," ">=" eller "<>." |
Mer information om yttre kopplingssyntax finns i avsnittet LEFT JOIN, RIGHT JOIN Operations.
Visa alla rader från båda tabellerna och koppla dem där det finns ett gemensamt värde
När du vill visa alla rader från två tabeller och koppla dem baserat på gemensamma värden använder du en fullständig yttre koppling. Access stöder inte uttryckligen fullständiga yttre kopplingar, men du kan uppnå samma effekt med hjälp av en unionsfråga. I följande procedur förklaras hur du gör detta, men om du vill ha mer information om unionsfrågor läser du avsnittet Se även .
Så här använder du en unionsfråga för att utföra en fullständig yttre koppling:
-
Skapa en fråga som har en vänster yttre koppling på fältet som du vill använda för en fullständig yttre koppling.
-
Klicka på Visa och sedan på SQL-vy i gruppen Vyer på fliken Start.
-
Kopiera SQL-koden genom att trycka på CTRL+C.
-
Ta bort semikolonet i slutet av FROM-satsen och tryck sedan på RETUR.
-
Skriv UNION och tryck sedan på RETUR.
Obs!: Använd inte nyckelordet ALL när du använder en unionsfråga för att utföra en fullständig yttre koppling.
-
Tryck på CTRL+V för att klistra in DEN SQL-kod som du kopierade i steg 3.
-
I koden du klistrade in ändrar du LEFT JOIN till RIGHT JOIN.
-
Ta bort semikolonet i slutet av den andra FROM-satsen och tryck sedan på RETUR.
-
Lägg till en WHERE-sats som anger att värdet för kopplingsfältet är NULL i den första tabellen som anges i FROM-satsen (den vänstra tabellen).
Om FROM-satsen till exempel är:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Du lägger till följande WHERE-sats:
WHERE Products.ID IS NULL
-
Skriv ett semikolon (;) i slutet av WHERE-satsen för att ange slutet av unionsfrågan.
-
Klicka på Kör i gruppen Resultat på fliken Design.
Korskopplingar
Korskopplingar skiljer sig från inre och yttre kopplingar på så sätt att de inte uttryckligen representeras i Access. I en korskoppling kombineras varje rad från en tabell med varje rad från en annan tabell, vilket resulterar i vad som kallas en korsprodukt eller en kartesisk produkt. Varje gång du kör en fråga som innehåller tabeller som inte uttryckligen är kopplade blir ett korsprodukt resultatet. Korskopplingar är vanligtvis oavsiktliga, men det finns fall där de kan vara användbara.
Varför skulle jag använda en korskoppling?
Om du vill undersöka alla möjliga kombinationer av rader mellan två tabeller eller frågor använder du en korskoppling. Anta till exempel att ditt företag har haft ett spektakulärt år, och du funderar på att ge rabatter till dina kunder. Du kan skapa en fråga som summerar varje kunds köp, skapa en liten tabell med flera möjliga rabattprocent och kombinera de två i en annan fråga som utför en korskoppling. Du får en fråga som visar en uppsättning hypotetiska rabatter för varje kund.
Hur gör jag för att använda en korskoppling?
En korskoppling skapas när du tar med tabeller eller frågor i frågan och skapar inte minst en explicit koppling för varje tabell eller fråga. Access kombinerar varje rad från varje tabell eller fråga som inte uttryckligen är kopplad till någon annan tabell eller fråga till varannan rad i resultatet. Tänk på rabattscenariot från föregående stycke. Anta att du har 91 kunder och att du vill titta på fem möjliga rabattprocent. Korskopplingen ger 455 rader (produkten av 91 och 5).
Som du kanske föreställer dig kan oavsiktliga korskopplingar skapa ett stort antal rader i frågeresultaten. Dessutom är de här resultaten i allmänhet meningslösa, för om du inte tänker kombinera varje rad med varannan rad är de flesta av de kombinerade raderna som visas i resultatet inte meningsfulla. Slutligen kan frågor som använder oavsiktliga korskopplingar ta mycket lång tid att köra.
1. De inringade fälten ska kopplas till varandra.
1. Observera det mycket stora antalet poster.
1. Observera att antalet poster är mycket mindre.
Koppla tabeller baserat på ojämlikhet i fältvärden
Kopplingar behöver inte baseras på likvärdigheten för de kopplade fälten. En koppling kan baseras på alla jämförelseoperatorer, till exempel större än (>), mindre än (<), eller inte är lika med (<>). Kopplingar som inte baseras på likvärdighet kallas ojämlika kopplingar.
Om du vill kombinera raderna i två datakällor baserat på fältvärden som inte är lika använder du en ojämlik koppling. Vanligtvis är kopplingar som inte är lika beroende av antingen större än (>), mindre än (<), större än eller lika med (>=) eller mindre än eller lika med (<=) jämförelseoperatorer. Ojämlika kopplingar som baseras på operatorn inte är lika med (<>) kan returnera nästan lika många rader som korskopplingar, och resultaten kan vara svåra att tolka.
Hur gör jag för att använda en ojämlik koppling?
Kopplingar mellan olika format stöds inte i designvyn. Om du vill använda dem måste du göra det i SQL-vyn. Du kan dock skapa en koppling i designvyn, växla till SQL-vyn, hitta jämförelseoperatorn lika med (=) och ändra den till den operator du vill använda. När du har gjort det kan du bara öppna frågan i designvyn igen om du först ändrar jämförelseoperatorn tillbaka till lika med (=) i SQL-vyn.
Ta bort en koppling
Om access automatiskt skapar en koppling som du inte vill använda, eller om du skapar en koppling av misstag, till exempel en koppling mellan två fält som har olika datatyper, kan du ta bort kopplingen.
-
Klicka på den koppling du vill ta bort i frågerutnätet.
-
Tryck på DELETE.
-eller-
-
Högerklicka på kopplingen du vill ta bort i frågerutnätet och klicka sedan på Ta bort.