Atunci când includeți mai multe surse de date într-o interogare Access, utilizați asocieri pentru a limita înregistrările pe care doriți să le vedeți, în funcție de modul în care sunt asociate sursele de date. De asemenea, utilizați asocieri pentru a combina înregistrările din ambele surse de date, astfel încât fiecare pereche de înregistrări din surse să devină o înregistrare în rezultatele interogării.
Acest articol prezintă diversele tipuri de asocieri și vă arată cum să le utilizați într-o interogare. În mod implicit, se creează automat o asociere dacă există deja o relație între două surse de date pe care le utilizați într-o interogare. De asemenea, se creează o asociere dacă există câmpuri care corespund în mod clar între ele. Puteți să ștergeți o asociere creată automat. Acest articol furnizează informații de bază despre relațiile între tabele, inclusiv despre cum să creați unul.
Notă: Puteți să vă asociați la interogări în același fel în care vă asociați la tabele și, de asemenea, să vă asociați la ambele.
În acest articol
-
Afișați rândurile în care există o valoare comună în ambele tabele asociate
-
Afișarea tuturor rândurilor dintr-un tabel și a rândurilor corespondente din celălalt tabel
-
Afișează toate rândurile din ambele tabele și alăturați-le atunci când există o valoare comună
-
Asocierea la tabele pe baza unei inegalități de valori de câmp
Prezentare generală
O bază de date este o colecție de tabele de date care poartă relații logice între ele. Utilizați relațiile pentru a conecta tabele după câmpurile pe care le au în comun. Un tabel poate face parte din orice număr de relații, dar fiecare relație are întotdeauna exact două tabele. Într-o interogare, o relație este reprezentată de o asociere.
Atunci când adăugați tabele la o interogare, Access creează asocieri care se bazează pe relațiile care au fost definite între tabele. Puteți crea manual asocieri în interogări, chiar dacă acestea nu reprezintă relații care au fost deja definite. Dacă utilizați alte interogări (în loc de sau în plus față de tabele) ca surse de date pentru o interogare, puteți crea asocieri între interogările sursă și, de asemenea, între acele interogări și toate tabelele pe care le utilizați ca surse de date.
Asocierile se comportă în mod similar cu criteriile de interogare, deoarece stabilesc reguli la care trebuie să se potrivească datele pentru a fi incluse în operațiunile de interogare. Spre deosebire de criterii, asocierile specifică, de asemenea, că fiecare pereche de rânduri care satisfac condițiile de asociere va fi combinată în setul de înregistrări pentru a forma un singur rând.
Există patru tipuri de asocieri de bază: asocieri interioare, asocieri exterioare, asocieri încrucișate și asocieri inegale. Acest articol explorează fiecare tip de asociere pe care o puteți utiliza, de ce utilizați fiecare tip și cum să creați asocierile.
Asocierile sunt interogările care sunt relațiile cu tabelele: o indicație a modului în care datele din două surse pot fi combinate pe baza valorilor de date pe care le au în comun. Iată o ilustrație a unei asocieri în vizualizarea proiect a interogării, cu proprietățile asocierii deschise într-o casetă de dialog:
Această linie dintre tabele reprezintă asocierea. Faceți dublu clic pe o asociere pentru a deschide caseta de dialog Proprietăți asociere (ilustrată) și a revizui sau a modifica asocierea.
Asocierile sunt uneori direcționale. Această zonă a casetei de dialog vă arată tabelul în care se asociază și ce câmpuri se utilizează pentru a se asocia la tabele.
Această zonă determină tipul de asociere: opțiunea 1 este o asociere internă, 2 este o asociere externă la stânga și 3 este o asociere externă la dreapta.
Se pot utiliza câmpuri din ambele tabele și sunt afișate date care se referă la o anumită activitate. Într-o asociere internă, nu este inclusă nicio altă dată. Într-o asociere externă, înregistrările necorelate dintr-un tabel sunt, de asemenea, incluse în rezultatele interogării.
Tipuri de asocieri
Există patru tipuri de asocieri de bază: asocieri interioare, asocieri exterioare, asocieri încrucișate și asocieri inegale. Asocierile încrucișate și asocierile inegale sunt tipuri de asocieri complexe și sunt rareori utilizate, dar trebuie să știți despre acestea pentru a înțelege complet modul în care se asociază lucrul.
Asocieri interioare: numai datele asociate din ambele tabele combinate
O asociere internă este una în care Access include doar datele dintr-un tabel, dacă există date corespondente în tabelul asociat și invers. În majoritatea cazurilor, veți utiliza asocierile interioare. Atunci când creați o asociere și nu specificați ce tip de asociere este, Access presupune că doriți o asociere internă. Asocierile interioare sunt utile deoarece vă permit să combinați date din două surse, pe baza valorilor partajate, astfel încât să vedeți doar datele atunci când există o imagine completă.
Asocieri exterioare: toate datele asociate sunt combinate corect, plus toate înregistrările rămase dintr-un tabel
O asociere externă este ca o asociere internă, dar adaugă rândurile rămase dintr-un tabel. Asocierile exterioare sunt direcționale: o asociere externă la stânga include toate înregistrările din tabelul din stânga – primul tabel din asociere-și o asociere exterioară dreaptă include toate înregistrările din tabelul din dreapta-al doilea tabel din asociere.
Asocieri exterioare complete: toate datele, combinate acolo unde este fezabil
În unele sisteme, o asociere externă poate include toate rândurile din ambele tabele, cu rânduri combinate atunci când acestea corespund. Aceasta se numește asociere externă completă, iar Access nu le acceptă în mod explicit. Totuși, puteți utiliza o asociere încrucișată și criterii pentru a obține același efect.
Asocieri încrucișate: toate datele, combinate în fiecare mod posibil
În majoritatea cazurilor, un joint Cross este un efect secundar al adăugării a două tabele la o interogare, apoi uitând să le asociați. Access interpretează aceasta pentru a însemna că doriți să vedeți fiecare înregistrare dintr-un tabel combinată cu fiecare înregistrare din celălalt tabel-fiecare combinație posibilă de înregistrări. Deoarece nu se pot combina date, acest tip de asociere rareori produce rezultate utile. Dar există câteva cazuri în care un joint Cross este exact ceea ce vă trebuie.
Asocieri inegale: ca o asociere obișnuită, dar utilizând o comparație diferită pentru combinarea rândurilor
Asocieri inegale utilizați un alt operator decât semnul egal (=) pentru a compara valorile și a determina dacă și cum să combinați datele. Asocierile inegale nu sunt acceptate în mod explicit, dar puteți utiliza o asociere încrucișată și criterii pentru a obține același efect.
Afișați rândurile în care există o valoare comună în ambele tabele asociate
Dacă doriți să afișați doar acele rânduri care au valori corespondente în câmpul asociat, utilizați o asociere internă. Access creează asocieri interioare automat.
Unirile interne reprezintă cel mai comun tip de unire. Ele spun o interogare că rândurile dintr-unul dintre tabelele asociate corespund rândurilor din celălalt tabel, pe baza datelor din câmpurile asociate. Atunci când se execută o interogare cu o asociere internă, doar acele rânduri în care există o valoare comună în ambele tabele asociate vor fi incluse în operațiunile de interogare.
Cum utilizez o asociere internă?
În majoritatea cazurilor, nu trebuie să faceți nimic pentru a utiliza o asociere internă. Dacă tabelele pe care le adăugați la o interogare au deja relații, Access creează automat o asociere internă între fiecare pereche de tabele asociate, când adăugați tabelele. Dacă se impune integritate referențială, Access afișează, de asemenea, un „1” deasupra liniei de asociere, pentru a arăta ce tabel se află pe partea „unu” a unei relație unu-la-mai mulți și un simbol infinit (∞) pentru a afișa ce tabel este pe partea „mulți”.
Chiar dacă nu ați creat relații, Access creează automat asocieri interne dacă adăugați două tabele la o interogare și acele tabele au fiecare un câmp cu tipul de date identic sau compatibil și unul dintre câmpurile asociere este un cheie primară. Simbolurile "unu" și "multe" nu se afișează în acest caz, deoarece integritatea referențială nu este impusă.
Dacă adăugați interogări la interogare și nu ați creat relații între acele interogări, Access nu creează automat asocieri interioare între acele interogări sau între interogări și tabele. În general, ar trebui să le creați singur. Creați o asociere internă glisând un câmp dintr-o sursă de date într-un câmp din altă sursă de date. Access afișează o linie între cele două câmpuri, pentru a arăta că s-a creat o asociere.
Sintaxa SQL pentru o asociere internă
Asocierile interioare sunt specificate în SQL în clauza FROM, așa cum se arată mai jos:
FROM tabel1 INNER JOIN tabel2 ON tabel1.câmp1 Comparați Tabel2.câmp2
Operațiunea INNER JOIN (UNIRE INTERNĂ) are următoarele componente:
Parte |
Descriere |
tabel1, tabel2 |
Numele tabelelor din care se combină înregistrările. |
câmp1, câmp2 |
Numele câmpurilor care se unesc. Dacă nu sunt numerice, câmpurile trebuie să fie de același tip de date și să conțină același tip de date, dar nu trebuie neapărat să aibă același nume. |
Comparați |
Orice operator de comparație relativă: "=," "<," ">," "<=," ">=," sau "<>." |
Pentru mai multe informații despre sintaxa INNER JOIN, consultați subiectul operațiunea INNER JOIN.
Afișarea tuturor rândurilor dintr-un tabel și a rândurilor corespondente din celălalt tabel
Asocierile exterioare spun o interogare că, deși unele rânduri de pe ambele părți ale asocierii corespund exact, interogarea trebuie să includă toate rândurile dintr-un tabel și, de asemenea, acele rânduri din celălalt tabel care partajează o valoare comună pe ambele părți ale asocierii.
Asocierile exterioare pot fi lăsate la exterior sau pot fi alăturate direct. Într-o asociere externă la stânga, interogarea include toate rândurile din primul tabel din clauza instrucțiunea SQL, și doar acele rânduri din celălalt tabel în care câmpul unire conține valori comune pentru ambele tabele. Într-o asociere externă dreaptă, interogarea include toate rândurile din al doilea tabel din clauza instrucțiunea SQL, și doar acele rânduri din celălalt tabel în care câmpul unire conține valori comune pentru ambele tabele.
Notă: Puteți spune cu ușurință ce tabel este tabelul din stânga sau tabelul din dreapta într-o asociere dată făcând dublu clic pe asociere, apoi căutând în caseta de dialog Proprietăți asociere . De asemenea, puteți comuta la vizualizarea SQL, apoi examinați clauza FROM.
Deoarece unele rânduri dintr-o parte a unei asocieri exterioare nu vor avea rânduri corespondente din celălalt tabel, unele dintre câmpurile returnate în rezultatele interogării din acel alt tabel vor fi goale atunci când rândurile nu corespund.
Cum utilizez o asociere externă?
Creați o asociere externă modificând o asociere internă existentă. Dacă există nicio asociere internă, creați una, apoi o modificați la o asociere externă.
Modificarea unei asocieri interioare la o asociere externă
-
În vizualizarea proiect a interogării, faceți dublu clic pe asocierea pe care doriți să o modificați.
Apare caseta de dialog Proprietăți asociere.
-
În caseta de dialog Proprietăți asociere , notați opțiunile listate lângă opțiunea 2 și opțiunea 3.
-
Faceți clic pe opțiunea pe care doriți s-o utilizați, apoi faceți clic pe OK.
-
Access afișează asocierea și afișează o săgeată care indică din sursa de date unde toate rândurile vor fi incluse în sursa de date în care vor fi incluse doar acele rânduri care satisfac condiția de asociere.
Asocieri externe ambigue
Dacă creați o interogare care conține o asociere la stânga și o asociere internă, este posibil ca Access să nu poată determina ce operațiune de asociere să efectueze mai întâi. Deoarece rezultatele sunt diferite, în funcție de cum se efectuează mai întâi asocierea la stânga sau asocierea internă, Access afișează un mesaj de eroare:
Pentru a corecta această eroare, trebuie să modificați interogarea, astfel încât să fie limpede ce asociere să efectueze mai întâi.
Sintaxa SQL pentru o asociere externă
Asocierile exterioare sunt specificate în SQL în clauza FROM, așa cum se arată mai jos:
DIN tabel1 [stânga | RIGHT] JOIN Tabel2
on tabel1. câmp1 compara Tabel2. Câmp2
Operațiunile LEFT JOIN și RIGHT JOIN au următoarele componente:
Parte |
Descriere |
tabel1, tabel2 |
Numele tabelelor din care se combină înregistrările. |
câmp1, câmp2 |
Numele câmpurilor care se unesc. Câmpurile trebuie să fie de același tip de date și să conțină aceleași tipuri de date, dar nu trebuie neapărat să aibă același nume. |
Comparați |
Orice operator de comparație relativă: "=," "<," ">," "<=," ">=," sau "<>." |
Pentru mai multe informații despre sintaxa asocierii externe, consultați subiectul Left Join, right Join Operations.
Afișează toate rândurile din ambele tabele și alăturați-le atunci când există o valoare comună
Atunci când doriți să afișați toate rândurile din două tabele și să le asociați pe baza valorilor comune, utilizați o asociere externă completă. Access nu acceptă în mod explicit asocierile externe complete, dar puteți obține același efect utilizând o interogare de Uniune. Următoarea procedură vă arată cum să faceți acest lucru, dar dacă doriți mai multe informații despre interogările de Uniune, consultați secțiunea consultați și .
Pentru a utiliza o interogare de Uniune pentru a efectua o asociere externă completă:
-
Creați o interogare care are o asociere externă la stânga în câmpul pe care doriți să-l utilizați pentru o asociere externă completă.
-
Pe fila Pornire, în grupul Vizualizări, faceți clic pe Vizualizare, apoi faceți clic pe Vizualizare SQL.
-
Apăsați CTRL + C pentru a copia codul SQL.
-
Ștergeți punct și virgulă la sfârșitul clauzei FROM, apoi apăsați pe ENTER.
-
Tastați UNION, apoi apăsați pe Enter.
Notă: Nu utilizați cuvântul cheie ALL atunci când utilizați o interogare de Uniune pentru a efectua o asociere externă completă.
-
Apăsați CTRL + V pentru a lipi codul SQL pe care l-ați copiat la pasul 3.
-
În codul pe care l-ați lipit, modificați asocierea la stânga la asociere la dreapta.
-
Ștergeți punct și virgulă la sfârșitul celei de-a doua clauze FROM, apoi apăsați pe ENTER.
-
Adăugați o clauză WHERE care specifică faptul că valoarea câmpului asociere este NULL în primul tabel listat în clauza FROM (tabelul din stânga).
De exemplu, dacă clauza FROM este:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Ați adăuga următoarea clauză WHERE:
WHERE Products.ID IS NULL
-
Tastați punct și virgulă (;) la sfârșitul clauzei WHERE pentru a indica sfârșitul interogării de Uniune.
-
Pe fila Proiectare, în grupul Rezultate, faceți clic pe Rulare.
Asocieri încrucișate
Asocierile încrucișate diferă de asocierile interioare și exterioare în care nu sunt reprezentate în mod explicit în Access. Într-un joint Cross, fiecare rând dintr-un tabel este combinat cu fiecare rând dintr-un alt tabel, rezultând în ceea ce se numește un produs Cross sau un produs de pe un tabel. De fiecare dată când rulați o interogare care conține tabele care nu sunt asociate în mod explicit, un produs Cross este rezultatul. Asocierile încrucișate sunt, de obicei, neintenționate, dar există cazuri în care pot fi utile.
De ce să utilizez o asociere încrucișată?
Dacă doriți să examinați fiecare combinație posibilă de rânduri dintre două tabele sau interogări, utilizați o asociere încrucișată. De exemplu, să presupunem că firma dumneavoastră a avut un an spectaculos și luați în considerare acordarea de rabaturi clienților. Puteți să construiți o interogare care însumează achizițiile fiecărui client, să creați un tabel mic care are mai multe procente posibile de rabat și să le combinați pe cele două într-o altă interogare care efectuează o asociere încrucișată. Veți termina cu o interogare care afișează un set de rabaturi ipotetice pentru fiecare client.
Cum utilizez o asociere încrucișată?
Se produce o asociere încrucișată de fiecare dată când includeți tabele sau interogări în interogare și nu creați cel puțin o asociere explicită pentru fiecare tabel sau interogare. Access combină fiecare rând din fiecare tabel sau interogare care nu este asociat în mod explicit la niciun alt tabel sau interogare la fiecare rând din rezultate. Luați în considerare scenariul de reducere din paragraful anterior. Să presupunem că aveți clienți 91 și că doriți să analizați cinci procente posibile de Rabat. Asocierea Cross produce rânduri 455 (produsul din 91 și 5).
După cum vă puteți imagina, asocierile încrucișate neintenționate pot crea un număr mare de rânduri în rezultatele interogării. În plus, aceste rezultate sunt, în general, lipsite de sens, deoarece, dacă nu intenționați de fapt să combinați fiecare rând cu fiecare rând, majoritatea rândurilor combinate care apar în rezultate nu vor avea sens. În cele din urmă, interogările care utilizează asocieri încrucișate neintenționate pot dura foarte mult timp pentru rulare.

1. câmpurile încercuite trebuie să fie Unite reciproc.

1. rețineți numărul foarte mare de înregistrări.

1. rețineți că numărul de înregistrări este mult mai mic.
Asocierea la tabele pe baza unei inegalități de valori de câmp
Asocierile nu trebuie să se bazeze pe echivalența câmpurilor asociate. O asociere se poate baza pe orice operator de comparare, cum ar fi mai mare decât (>), mai mic decât (<) sau nu este egal (<>). Asocierile care nu se bazează pe echivalență sunt numite asocieri inegale.
Dacă doriți să combinați rândurile a două surse de date pe baza valorilor de câmp care nu sunt egale, utilizați o asociere inegală. De obicei, asocierile inegale se bazează pe mai mare decât (>), mai mic decât (<), mai mare sau egal cu (>=), sau mai mic sau egal cu (<=) Operatorii de comparație. Asocierile inegale care se bazează pe operatorul nu este egal (<>) pot returna aproape la fel de multe rânduri ca între asocieri încrucișate, iar rezultatele pot fi dificil de interpretat.
Cum utilizez o asociere inegală?
Asocierile inegale nu sunt acceptate în vizualizarea proiect. Dacă doriți să le utilizați, trebuie să faceți acest lucru utilizând vizualizarea SQL. Cu toate acestea, puteți să creați o asociere în vizualizarea proiect, să comutați la vizualizarea SQL, să găsiți operatorul egal (=) de comparație și să îl modificați operatorului pe care doriți să-l utilizați. După ce faceți acest lucru, puteți să deschideți interogarea doar în vizualizarea proiect, dacă modificați mai întâi operatorul de comparație la egal (=) în vizualizarea SQL.
Ștergerea unei asocieri
Dacă Access creează automat o asociere pe care nu o doriți sau dacă creați o asociere din greșeală, de exemplu, o asociere între două câmpuri care au tipuri de date diferite, puteți șterge asocierea.
-
În grila de proiectare a interogării, faceți clic pe asocierea pe care doriți să o eliminați.
-
Apăsați pe Delete.
-sau-
-
În grila de proiectare a interogării, faceți clic cu butonul din dreapta pe asocierea pe care doriți să o eliminați, apoi faceți clic pe Ștergere.