Kada u upit programa Access u upit programa Access uvrstite više izvora podataka, pomoću spoja ograničite zapise koje želite vidjeti na temelju načina na koji su izvori podataka međusobno povezani. Spojevima se koriste i za kombiniranje zapisa iz oba izvora podataka da bi svaki par zapisa iz izvora postao jedan zapis u rezultatima upita.
U ovom se članku opisuje različite vrste spoja i objašnjava kako ih koristiti u upitu. Spoj se po zadanom automatski stvara ako u upitu već postoji odnos između dva izvora podataka. Spoj se stvara i ako postoje polja koja jasno odgovaraju jedni drugima. Automatski stvoreni spoj možete izbrisati. U ovom se članku navode osnovne informacije o odnosima između tablica, uključujući kako ga stvoriti.
Napomena: Upite možete pridružiti na isti način na koji se spajate u tablice, a možete se i pridružiti objema.
Sadržaj članka
Pregled
Baza podataka zbirka je tablica podataka koje međusobno sadrže logičke odnose. Odnose koristite za povezivanje tablica prema zajedničkim poljima. Tablica može biti dio bilo kojeg broja odnosa, ali svaki odnos uvijek ima točno dvije tablice. U upitu je odnos predstavljen spojom.
Kada dodate tablice u upit, Access spojove koji se temelje na odnosima definiranima između tablica. Spojove u upitima možete stvoriti ručno, čak i ako oni ne predstavljaju odnose koji su već definirani. Ako kao izvore podataka za upit koristite druge upite (umjesto tablica ili uz njih), možete stvarati spojke između izvorišnih upita te između tih upita i tablica koje koristite kao izvore podataka.
Spojovi se ponašaju slično kriterijima upita jer uspostavljaju pravila koja se moraju podudarati da bi se uvrstili u operacije upita. Za razliku od kriterija, spojevima se određuje i da će se svaki par redaka koji zadovoljavaju uvjete spoja kombinirati u skupu zapisa radi formiranje jednog retka.
Postoje četiri osnovne vrste spoja: unutarnji spoj, vanjski spoj, unakrsni spoj i nejednaka pridruživanja. U ovom se članku opisuje svaka vrsta spoja koju možete koristiti, zašto koristite svaku vrstu i kako stvoriti spoj.
Spojovi su upiti koji su odnosi prema tablicama: pokazatelj načina na koji se podaci iz dvaju izvora mogu kombinirati na temelju zajedničkih vrijednosti podataka. Evo ilustracije spoja u prikazu dizajna upita s otvorenim svojstvima spoja u dijaloškom okviru:
Ovaj redak između tablica predstavlja spoj. Dvokliknite spoj da biste otvorili dijaloški okvir Svojstva spoja (prikazan) i pregledali ili promijenili spoj.
Spojovi su ponekad usmjereni. Ovo područje dijaloškog okvira pokazuje koja je tablica u spoju i koja se polja koriste za spajanje tablica.
Ovo područje određuje vrstu spoja: 1. mogućnost je unutarnji spoj, 2 je lijevi vanjski spoj, a 3 desni vanjski spoj.
Polja iz obje tablice mogu se koristiti, a podaci koji se odnose na određeni zadatak prikazuju se iz svake od njih. U unutarnjem spoju nema drugih podataka. U vanjskom spoju nepovezani zapisi iz jedne tablice također su uključeni u rezultate upita.
Vrste spoja
Postoje četiri osnovne vrste spoja: unutarnji spoj, vanjski spoj, unakrsni spoj i nejednaka pridruživanja. Unakrsna spajanja i nejednaka pridruživanja napredne su vrste spoja i rijetko se koriste, ali o njima biste trebali znati potpuno razumijevanje načina na koji spoj funkcionira.
Unutrašnji spoj: kombinirani samo povezani podaci iz obje tablice
Unutarnji spoj onaj je u kojem Access obuhvaća samo podatke iz tablice ako u povezanoj tablici postoje odgovarajući podaci i obratno. Većinu vremena koristit ćete unutarnja pridruživanja. Kada stvorite spoj i ne odredite vrstu spoja, Access pretpostavlja da želite unutarnji spoj. Unutrašnji spoj je koristan jer vam omogućuju kombiniranje podataka iz dvaju izvora na temelju zajedničkih vrijednosti – tako da se podaci prikazuju samo kada postoji potpuna slika.
Vanjska pridruživanja: svi povezani podaci pravilno su spojeni, kao i svi ostali zapisi iz jedne tablice
Vanjski spoj je poput unutarnjeg spoja, ali dodaje preostale retke iz jedne od tablica. Vanjski spojovi usmjereni su: lijevi vanjski spoj obuhvaća sve zapise iz lijeve tablice – prvu tablicu u spoju – a desni vanjski spoj obuhvaća sve zapise iz desne tablice – drugu tablicu u spoju.
Puni vanjski spoj: svi podaci, kombinirani gdje je to moguće
U nekim sustavima vanjski spoj može obuhvaćati sve retke iz obje tablice, a reci su kombinirani kada odgovaraju. To se naziva potpuni vanjski spoj, a Access ih izričito ne podržava. No možete koristiti unakrsni spoj i kriterije da biste postigli isti učinak.
Cross joins: all the data, combined every possible way
Unakrsno pridruživanje većinom je nuspojava dodavanja dviju tablica u upit i zaboravljanja njihova pridruživanja. Access to tumači tako da želite vidjeti svaki zapis iz jedne tablice u kombinaciji sa svakim zapisom iz druge tablice – svaku moguću kombinaciju zapisa. Budući da se podaci ne mogu kombinirati, ta vrsta spoja rijetko daje korisne rezultate. No postoji nekoliko slučajeva kada je unakrsno pridruživanje upravo ono što vam je potrebno.
Nejednak spoj: poput običnog spoja, ali korištenjem druge usporedbe za kombiniranje redaka
Nejednaka pridruživanja koriste operator koji nije znak jednakosti (=) za usporedbu vrijednosti i utvrđivanje je li i kako kombinirati podatke. Nejednaka pridruživanja nisu izričito podržana, ali možete koristiti unakrsno pridruživanje i kriterije da biste postigli isti učinak.
Prikaz redaka u kojima u obje spojene tablice postoji zajednička vrijednost
Ako želite prikazati samo retke s podudarnim vrijednostima u spojenom polju, koristite unutarnji spoj. Access automatski stvara unutarnja pridruživanja.
Unutrašnja su pridruživanja najčešća. Oni kažu upitu da reci iz jedne od spojenih tablica odgovaraju recima u drugoj tablici na temelju podataka u spojenim poljima. Kada se pokrene upit s unutarnjim spojem, u operacije upita uvrstiti će se samo reci u kojima zajednička vrijednost postoji u obje spojene tablice.
Kako koristiti unutarnji spoj?
Većinu vremena ne morate učiniti ništa da biste koristili unutarnji spoj. Ako tablice koje dodate u upit već imaju odnose, Access automatski stvara unutarnje spajanje između svakog para povezanih tablica kada dodate tablice. Ako se primjenjuje referencijalna cjelovitost Access prikazuje "1" iznad crte spajanja da bi pokazao koja je tablice na strani "jednoga" u odnosu odnos preslikavanja jednog člana na više njih te znak beskonačnosti (∞) da bi pokazala koja je tablica na strani "više".
Čak i ako niste stvorili odnose, Access automatski stvara unutarnja pridruživanja ako u upit dodate dvije tablice, a te tablice imaju polje s istom ili kompatibilnom vrstom podataka, a jedno od spojnih polja je primarni ključ. Simboli "jedan" i "više" ne prikazuju se u ovom slučaju jer se referencijalni integritet ne nameće.
Ako upitu dodate upite i niste stvorili odnose između tih upita, Access neće automatski stvarati unutarnja pridruživanja između tih upita ni između upita i tablica. Obično biste ih trebali sami stvoriti. Unutarnji spoj stvarate povlačenjem polja iz jednog izvora podataka u polje u drugom izvoru podataka. Access će prikazati crtu između dva polja koja upućuje na to da je spoj stvoren.
SQL sintaksa za unutarnji spoj
Unutarnji spojovi navedeni su u SQL-u u uvjetu FROM, kao što je prikazano u nastavku:
FROM tablica1 INNER JOIN tablica2 ON tablica1.polje1 usporedi tablicu2.polje2
Operacija INNER JOIN sastoji se od sljedećih dijelova:
Dio |
Opis |
tablica1, tablica2 |
Nazivi tablica iz kojih se spajaju zapisi. |
polje1, polje2 |
Nazivi spojenih polja. Ako nisu numerička, polja moraju biti iste vrsta podatka i sadržavati istovrsne podatke, ali ne moraju imati isti naziv. |
usporedba |
Bilo koji relacijski operator usporedbe: "=," "<," ">," "<=," ">=," ili "<>." |
Dodatne informacije o sintaksi unutarnjeg spoja potražite u temi Operacija INNER JOIN.
Prikaz svih redaka iz jedne tablice i odgovarajućih redaka iz druge tablice
Vanjski spojovi obavještavaju upit da, iako neki reci na obje strane spoja točno odgovaraju, upit mora sadržavati sve retke iz jedne tablice, kao i retke iz druge tablice koji zajednički koriste zajedničku vrijednost s obje strane spoja.
Vanjska spoja mogu biti lijeva vanjska spoja ili mogu biti desna vanjska spoja. U lijevom vanjskom spoju upit obuhvaća sve retke iz prve tablice u SQL naredbi FROM i samo retke iz druge tablice u kojoj spojno polje sadrži vrijednosti zajedničke objema tablicama. U desnom vanjskom spoju upit obuhvaća sve retke iz druge tablice u SQL naredbi FROM i samo retke iz druge tablice u kojoj spojno polje sadrži vrijednosti zajedničke objema tablicama.
Napomena: Možete jednostavno odrediti koja je tablica lijeva tablica ili desna tablica u danom spoju tako da dvokliknete spoj, a zatim pogledate dijaloški okvir Svojstva spoja. Možete se i prebaciti na SQL prikaz, a zatim pregledati uvjet FROM.
Budući da neki reci na jednoj strani vanjskog spoja neće imati odgovarajuće retke iz druge tablice, neka polja vraćena u rezultatima upita iz te druge tablice bit će prazna kada reci ne odgovaraju.
Kako koristiti vanjski spoj?
Vanjski spoj stvarate izmjenom postojećeg unutarnjeg spoja. Ako unutarnji spoj ne postoji, stvorite ga, a zatim ga promijenite u vanjski spoj.
Promjena unutarnjeg spoja u vanjski spoj
-
U prikazu dizajna upita dvokliknite spoj koji želite promijeniti.
Prikazuje se dijaloški okvir Svojstva spoja.
-
U dijaloškom okviru Svojstva spoja obratite pozornost na odabire navedene uz mogućnost 2 i mogućnost 3.
-
Kliknite željenu mogućnost pa U redu.
-
Access prikazuje spoj i prikazuje strelicu koja pokazuje iz izvora podataka gdje će svi reci biti uključeni u izvor podataka gdje će biti obuhvaćeni samo reci koji zadovoljavaju uvjet spoja.
Dvosmisleni vanjski spoj
Ako stvorite upit koji sadrži LEFT JOIN i INNER JOIN, Access možda neće moći odrediti koju operaciju spajanja najprije izvesti. Budući da se rezultati razlikuju ovisno o tome izvodi li se prvo lijevo pridruživanje ili unutarnje pridruživanje, Access prikazuje poruku o pogrešci:
Da biste ispravili tu pogrešku, morate izmijeniti upit tako da je jasno koji spoj najprije izvesti.
SQL sintaksa za vanjski spoj
Vanjski spojovi navedeni su u SQL-u u uvjetu FROM, kao što je prikazano u nastavku:
FROM tablica1 [ LEFT | RIGHT ] JOIN tablica2 ON
tablica1.polje1 usporedi tablicu2.polje2Operacije LEFT JOIN i RIGHT JOIN imaju sljedeće dijelove:
Dio |
Opis |
tablica1, tablica2 |
Nazivi tablica iz kojih se spajaju zapisi. |
polje1, polje2 |
Nazivi spojenih polja. Polja moraju biti iste vrsta podatka i sadržavati istovrsne podatke, ali ne moraju imati isti naziv. |
usporedba |
Bilo koji relacijski operator usporedbe: "=," "<," ">," "<=," ">=," ili "<>." |
Dodatne informacije o sintaksi vanjskog spoja potražite u temi LEFT JOIN, RIGHT JOIN Operations.
Prikaži sve retke iz obje tablice i pridruži im se tamo gdje postoji zajednička vrijednost
Kada želite prikazati sve retke iz dvije tablice i pridružiti ih na temelju zajedničkih vrijednosti, koristite cijeli vanjski spoj. Access ne podržava eksplicitno puno vanjsko pridruživanje, ali isti učinak možete postići pomoću upita s unijom. U sljedećem se postupku objašnjava kako to učiniti, ali ako želite dodatne informacije o upitima s unijom, pročitajte odjeljak Vidi također .
Da biste koristili upit s unijom za izvođenje potpunog vanjskog spoja:
-
Stvorite upit s lijevim vanjskim spojom u polju koje želite koristiti za potpuni vanjski spoj.
-
Na kartici Polazno u grupi Prikazi kliknite Prikaz, a zatim SQL prikaz.
-
Pritisnite CTRL + C da biste kopirali SQL kod.
-
Izbrišite točku sa zarezom na kraju uvjeta FROM, a zatim pritisnite ENTER.
-
Upišite UNION, a zatim pritisnite Enter.
Napomena: Nemojte koristiti ključnu riječ ALL kada koristite upit s unijom za izvođenje potpunog vanjskog spoja.
-
Pritisnite CTRL + V da biste zalijepili SQL kod koji ste kopirali u 3. koraku.
-
U kodu koji ste zalijepili promijenite LEFT JOIN uRIGHT JOIN.
-
Izbrišite točku sa zarezom na kraju drugog uvjeta FROM, a zatim pritisnite ENTER.
-
Dodajte uvjet WHERE koji određuje da je vrijednost spojnog polja NULL u prvoj tablici na popisu u uvjetu FROM (lijeva tablica).
Ako je, primjerice, uvjet FROM:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Dodali biste sljedeći uvjet WHERE:
WHERE Products.ID IS NULL
-
Upišite točku sa zarezom (;) na kraju uvjeta WHERE da biste naznačili kraj upita s unijom.
-
Na kartici Dizajn u grupi Rezultati kliknite Izvedi.
Unakrsna spajanja
Unakrsni spojovi razlikuju se od unutarnjih i vanjskih spoja jer nisu eksplicitno predstavljeni u Access. U unakrsnom spoju svaki redak iz jedne tablice kombinira se sa svakim retkom iz druge tablice, što rezultira unakrsnim proizvodom ili kartezijskim proizvodom. Svaki put kada pokrenete upit koji sadrži tablice koje nisu izričito pridružene, rezultat je unakrsnog proizvoda. Unakrsni spojovi obično su nenamjerni, ali postoje slučajevi u kojima mogu biti korisni.
Zašto bih upotrijebio unakrsno spajanje?
Ako želite pregledati svaku moguću kombinaciju redaka između dviju tablica ili upita, koristite unakrsno spajanje. Pretpostavimo, primjerice, da je vaša tvrtka imala spektakularnu godinu, a vi razmišljate o davanjem popusta svojim klijentima. Možete izraditi upit koji zbrajati kupnje svakog klijenta, stvoriti malu tablicu s nekoliko mogućih postotaka popusta i kombinirati ta dva u drugom upitu koji izvodi unakrsno spajanje. Završit ćete s upitom koji prikazuje skup hipotetnih popusta za svakog klijenta.
Kako koristiti unakrsni spoj?
Unakrsni spoj stvara se svaki put kada u upit uvrstite tablice ili upite i ne stvarate barem jedan eksplicitni spoj za svaku tablicu ili upit. Access kombinira svaki redak iz svake tablice ili upita koji nisu izričito pridruženi bilo kojoj drugoj tablici ili upitu u svaki drugi redak u rezultatima. Razmotrite scenarij popusta iz prethodnog odlomka. Pretpostavimo da imate 91 korisnika i da želite pogledati pet mogućih postotaka popusta. Unakrsni spoj proizvodi 455 redaka (umnožak 91 i 5).
Kao što možete zamisliti, nenamjerna unakrsna pridruživanja mogu stvoriti veliki broj redaka u rezultatima upita. Osim toga, ti su rezultati obično beznačajni jer ako ne namjeravate kombinirati svaki redak sa svakim drugim retkom, većina kombiniranih redaka koji se pojavljuju u rezultatima neće imati smisla. Naposljetku, pokretanje upita koji koriste nenamjerne unakrsne spojove može potrajati.
1. Kružna polja moraju biti međusobno spojena.
1. Obratite pozornost na vrlo velik broj zapisa.
1. Imajte na umu da je broj zapisa mnogo manji.
Spajanje tablica na temelju nejednakost vrijednosti polja
Spojovi se ne moraju temeljiti na ekvivalentnosti spojenih polja. Spoj se može temeljiti na bilo kojem operatoru usporedbe, kao što je veće od (>), manje od (<) ili nije jednako (<>). Spojovi koji se ne temelje na ekvivalentnosti nazivaju se nejednakim spojima.
Ako želite kombinirati retke dvaju izvora podataka na temelju vrijednosti polja koje nisu jednake, koristite nejednak spoj. Nejednaka pridruživanja obično se temelje na većem od (>), manjem od (<), većem ili jednakom (>=) ili manje od ili jednako (<=) operatorima usporedbe. Nejednak spojevima koji se temelje na operatoru koji nije jednak (<>) može vratiti gotovo onoliko redaka koliko je unakrsnih spoja, a rezultate je teško protumačiti.
Kako koristiti nejednaki spoj?
Nejednaka pridruživanja nisu podržana u prikazu dizajna. Ako ih želite koristiti, to morate učiniti pomoću SQL prikaza. No spoj možete stvoriti u prikazu dizajna, prijeći u SQL prikaz, pronaći operator usporedbe jednakosti (=) i promijeniti ga u operator koji želite koristiti. Kada to učinite, upit možete ponovno otvoriti samo u prikazu dizajna ako prvi put promijenite operator usporedbe na jednako (=) u SQL prikazu.
Brisanje spoja
Ako Access automatski stvori spoj koji ne želite ili ako spoj stvorite pogreškom – primjerice, spoj između dva polja s različitim vrstama podataka – možete izbrisati spoj.
-
U rešetki dizajna upita kliknite spoj koji želite ukloniti.
-
Pritisnite tipku DELETE.
– ili –
-
U rešetki dizajna upita desnom tipkom miša kliknite spoj koji želite ukloniti, a zatim kliknite Izbriši.