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 sursele de date sunt legate între ele. De asemenea, utilizați asocieri pentru a combina înregistrări 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 descrie diversele tipuri de uniri și vă arată cum să le utilizați într-o interogare. În mod implicit, o asociere se creează automat 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 șterge o asociere creată automat. Acest articol oferă informații de bază despre relațiile între tabele, inclusiv despre crearea uneia.
Notă: Puteți să asociați interogările la fel cum asociați tabelele și, de asemenea, să le asociați pe ambele.
În acest articol
-
Afișați rândurile unde există o valoare comună în ambele tabele asociate
-
Afișați toate rândurile dintr-un tabel și rândurile corespunzătoare din celălalt tabel
-
Afișați toate rândurile din ambele tabele și asociați-le acolo unde există o valoare comună
-
Unirea tabelelor pe baza unei inegalități între valorile 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ții pentru a conecta tabelele 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ă printr-o asociere.
Când adăugați tabele la o interogare, Access creează asocieri care se bazează pe relații 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 orice tabele pe care le utilizați ca surse de date.
Asocierile se comportă similar cu criteriile de interogare, prin faptul că stabilesc reguli care trebuie să corespundă pentru a fi incluse în operațiunile de interogare. Spre deosebire de criterii, asocierile specifică și faptul că fiecare pereche de rânduri care îndeplinesc condițiile de asociere va fi combinată în setul de înregistrări pentru a forma un singur rând.
Există patru tipuri de bază de uniri: uniri interne, uniri externe, uniri încrucișate și uniri 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 la interogări 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 cu o asociere î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 revizuiți sau modificați asocierea.
Asocierile sunt uneori direcționale. Această zonă a casetei de dialog vă arată ce tabel se află în asociere și ce câmpuri sunt utilizate pentru asocierea tabelelor.
Această zonă determină tipul de unire: opțiunea 1 este o unire internă, 2 este o unire externă la stânga și 3 este o unire externă la dreapta.
Câmpurile din ambele tabele pot fi utilizate, iar datele care aparțin unei activități date sunt afișate din fiecare. Într-o unire internă, nu sunt incluse alte date. Într-o unire externă, înregistrările neasociate dintr-un tabel sunt incluse, de asemenea, în rezultatele interogării.
Tipuri de uniri
Există patru tipuri de bază de uniri: uniri interne, uniri externe, uniri încrucișate și uniri inegale. Unirile încrucișate și unirile inegale sunt tipuri de uniri complexe și sunt rareori utilizate, dar ar trebui să știți despre ele pentru a înțelege pe deplin cum funcționează asocierile.
Uniri interne: numai datele asociate din ambele tabele combinate
O unire internă este una în care Access include date dintr-un tabel doar dacă există date corespondente în tabelul asociat și invers. De cele mai multe ori, veți utiliza uniri interne. Atunci când creați o asociere și nu specificați ce tip de asociere este, Access presupune că doriți o asociere internă. Unirile interne sunt utile, deoarece vă permit să combinați date din două surse pe baza valorilor partajate, astfel încât să vedeți date doar atunci când există o imagine completă.
Uniri externe: toate datele asociate combinate corect, plus toate înregistrările rămase dintr-un tabel
O unire externă este ca o unire internă, dar adaugă rândurile rămase dintr-unul dintre tabele. Unirile externe sunt direcționale: o unire externă la stânga include toate înregistrările din tabelul din stânga - primul tabel din asociere - iar o unire externă la dreapta include toate înregistrările din tabelul din dreapta - al doilea tabel din asociere.
Uniri externe complete: toate datele, combinate atunci când este posibil
În unele sisteme, o unire externă poate include toate rândurile din ambele tabele, cu rânduri combinate atunci când corespund. Aceasta se numește unire externă completă, iar Access nu le acceptă în mod explicit. Cu toate acestea, puteți utiliza o asociere încrucișată și criterii pentru a obține același efect.
Uniri încrucișate: toate datele, combinate în toate modurile posibile
De cele mai multe ori, o asociere încrucișată este un efect secundar al adăugării a două tabele la o interogare, apoi uitați să le asociați. Access interpretează acest lucru 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 unire produce rareori rezultate utile. Dar există câteva cazuri în care o asociere încrucișată este exact ceea ce vă trebuie.
Uniri inegale: cum ar fi o asociere obișnuită, dar utilizând o comparație diferită pentru a combina rânduri
Unirile inegale utilizează un operator diferit de semnul egal (=) pentru a compara valori și a determina dacă și cum se combină datele. Unirile 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 unde există o valoare comună în ambele tabele asociate
Dacă doriți să afișați doar rândurile care au valori corespondente în câmpul asociat, utilizați o asociere internă. Access creează automat asocieri interne.
Unirile interne reprezintă cel mai comun tip de unire. Acestea spun unei interogări 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 rulează 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ă?
De cele mai multe ori 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, atunci 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 tabelele respective au fiecare un câmp cu același tip de date sau compatibil și unul dintre câmpurile de asociere este un cheie primară. Simbolurile "unu" și "mai mulți" 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 aceste interogări, Access nu creează automat asocieri interne între aceste interogări sau între interogări și tabele. În general, ar trebui să le creați singur. Creați o unire 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ă
Unirile interne sunt specificate în SQL în clauza FROM, așa cum se arată mai jos:
FROM tabel1 INNER JOIN tabel2 ON tabel1.comparare tabel2 câmp1.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 |
Orice operator de comparație relativă: "=," "<," ">," "<=," ">=," sau "<>." |
Pentru mai multe informații despre sintaxa de unire internă, consultați subiectul Operațiunea INNER JOIN.
Afișați toate rândurile dintr-un tabel și rândurile corespunzătoare din celălalt tabel
Unirile externe spun unei interogări că, deși unele dintre rândurile de pe ambele părți ale asocierii corespund exact, interogarea ar trebui să includă toate rândurile dintr-un tabel și, de asemenea, rândurile din celălalt tabel care au o valoare comună pe ambele părți ale asocierii.
Unirile externe pot fi uniri externe la stânga sau pot fi uniri externe la dreapta. Într-o asociere externă la stânga, interogarea include toate rândurile din primul tabel în clauza SQL statement FROM și numai rândurile din celălalt tabel în care câmpul de asociere conține valori comune ambelor tabele. Într-o asociere externă la dreapta, interogarea include toate rândurile din al doilea tabel în clauza SQL statement FROM și numai rândurile din celălalt tabel unde câmpul de asociere conține valori comune ambelor tabele.
Notă: Vă puteți da seama cu ușurință care 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 să comutați la vizualizarea SQL, apoi să examinați clauza FROM.
Deoarece unele rânduri de pe o parte a unei uniri externe nu vor avea rânduri corespondente din celălalt tabel, unele dintre câmpurile returnate în rezultatele interogării din celălalt tabel vor fi goale atunci când rândurile nu corespund.
Cum utilizez o asociere externă?
Creați o unire externă prin modificarea unei uniri interne existente. Dacă nu există o unire internă, creați una, apoi transformați-o într-o unire externă.
Modificarea unei uniri interne într-o unire 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ă de la sursa de date unde toate rândurile vor fi incluse în sursa de date, unde vor fi incluse doar rândurile care satisfac condiția de asociere.
Uniri externe ambigue
În cazul în care creați o interogare care conține o operațiune LEFT JOIN și INNER JOIN, este posibil ca Access să nu poată determina ce operațiune de asociere să efectueze prima. Deoarece rezultatele diferă în funcție de efectuarea asocierii la stânga sau a asocierii interne, Access afișează un mesaj de eroare:
Pentru a corecta această eroare, trebuie să modificați interogarea astfel încât să fie clar ce asociere să se efectueze mai întâi.
Sintaxa SQL pentru o unire externă
Unirile externe sunt specificate în SQL în clauza FROM, așa cum se arată mai jos:
FROM tabel1 [ STÂNGA | RIGHT ] JOIN tabel2
ON tabel1.câmp1 comparare tabel2.câmp2Operaț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 |
Orice operator de comparație relativă: "=," "<," ">," "<=," ">=," sau "<>." |
Pentru mai multe informații despre sintaxa de unire externă, consultați subiectul OPERAȚIUNI LEFT JOIN, RIGHT JOIN.
Afișați toate rândurile din ambele tabele și asociați-le acolo unde 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 uniri 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 unire externă completă:
-
Creați o interogare care are o unire externă la stânga în câmpul pe care doriți să-l utilizați pentru o unire 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 punctul și virgula de la sfârșitul clauzei FROM, apoi apăsați 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 unire 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 LEFT JOIN la RIGHT JOIN.
-
Ștergeți punctul și virgula de la sfârșitul celei de-a doua clauze FROM, apoi apăsați enter.
-
Adăugați o clauză WHERE care specifică faptul că valoarea câmpului de 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]Adăugați 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.
Uniri încrucișate
Unirile încrucișate sunt diferite de unirile interioare și externe, prin faptul că nu sunt reprezentate explicit în Access. Într-o asociere încrucișată, fiecare rând dintr-un tabel este combinat cu fiecare rând din alt tabel, rezultând ceea ce se numește produs în cruce sau produs cartezian. De fiecare dată când rulați o interogare care are tabele care nu sunt asociate explicit, rezultatul este un produs încrucișat. Unirile încrucișate sunt de obicei neintenționate, dar există cazuri în care pot fi utile.
De ce aș folosi o asociere încrucișată?
Dacă doriți să examinați fiecare combinație posibilă de rânduri între două tabele sau interogări, utilizați o asociere încrucișată. De exemplu, să presupunem că afacerea dvs. a avut un an spectaculos și luați în considerare acordarea de bonificații 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 de bonificație posibile și să le combinați pe cele două într-o altă interogare care efectuează o asociere încrucișată. Veți avea o interogare care afișează un set de bonificații ipotetice pentru fiecare client.
Cum utilizez o asociere încrucișată?
O asociere încrucișată este produsă oricâ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 explicit niciunui alt tabel sau interogare la fiecare alt rând din rezultate. Luați în considerare scenariul de bonificație de la paragraful precedent. Să presupunem că aveți 91 de clienți și că doriți să analizați cinci procente posibile de bonificație. Asocierea încrucișată produce 455 de rânduri (produsul 91 și 5).
După cum vă puteți imagina, unirile încrucișate neintenționate pot crea un număr enorm 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 sfârșit, interogările care utilizează asocieri încrucișate neintenționate pot dura foarte mult timp.
1. Câmpurile încercuite trebuie să fie unite între ele.
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.
Unirea tabelelor pe baza unei inegalități între valorile de câmp
Unirile nu trebuie să se bazeze pe echivalența câmpurilor asociate. O asociere se poate baza pe orice operator de comparație, cum ar fi mai mare decât (>), mai mic decât (<) sau nu este egală cu (<>). Unirile care nu se bazează pe echivalență se numesc 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, unirile inegale se bazează pe operatorii de comparație mai mari decât (>), mai mici decât (<), mai mari sau egale cu (>=) sau mai mici sau egale cu (<=). Unirile inegale care se bazează pe operatorul nu este egal cu (<>) pot returna aproape la fel de multe rânduri ca asocieri încrucișate, iar rezultatele pot fi dificil de interpretat.
Cum utilizez o asociere inegală?
Unirile 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 de comparație egal (=) și să-l schimbați cu operatorul pe care doriți să-l utilizați. După ce faceți acest lucru, puteți deschide din nou interogarea doar în vizualizarea Proiect dacă mai întâi modificați operatorul de comparație înapoi la (=) î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 cu 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 DELETE.
-sau-
-
În grila de proiectare a interogării, faceți clic dreapta pe asocierea pe care doriți să o eliminați, apoi faceți clic pe Ștergere.