Kada u upit programa Access uključite više izvora podataka, koristite spajanje da biste ograničili zapise koje želite vidjeti, na temelju međusobne povezanosti izvora podataka. Spojeve možete koristiti 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 opisuju razne vrste spojeva te se pokazuje kako ih koristiti u upitima. Po zadanom spoj se automatski stvara ako već postoji odnos između dva izvora podataka koja koristite u upitu. Spoj se stvara i ako postoje polja koja jedno drugome jasno odgovaraju. Automatski stvoreni spoj možete izbrisati. U ovom se članku navode osnovne informacije o odnosima između tablica, uključujući način stvaranja.
Napomena
Upite možete spajati na isti način kao što spajate tablice, a možete i spajati obje vrste.
Sadržaj članka
- Pregled
- Vrste spojeva
- Prikaz redaka u kojima postoji zajednička vrijednost u obje spojene tablice
- Prikaz svih redaka iz jedne tablice i odgovarajućih redaka iz druge tablice
- Prikažite sve retke iz obje tablice i spojite ih kada postoji zajednička vrijednost
- Unakrsni spojevi
- Spajanje tablica na temelju nejednakosti vrijednosti polja
- Brisanje spoja
Pregled
Baza podataka zbirka je tablica podataka u međusobnim logičkim logičkim odnosima. Odnosi se koriste da biste povezali tablice prema poljima koja su im zajednička. Tablica može biti dio bilo kojeg broja odnosa, ali svaki odnos uvijek ima točno dvije tablice. U upitu odnos predstavlja spoj.
Kada u upit dodate tablice, Access stvara spojeve utemeljene na odnosima koji su definirani između tablica. Spojeve 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 stvoriti spojeve između izvorišnih upita, kao i između tih upita i tablica koje koristite kao izvore podataka.
Spojevi se ponašaju slično kriterijima upita jer uspostavljaju pravila s kojima se podaci moraju podudarati da bi mogli biti obuhvaćeni operacijama upita. Za razliku od kriterija, spojevi navode i da će se svaki par redaka koji zadovoljava uvjete spajanja spojiti u skupu zapisa u jedan redak.
Postoje četiri osnovne vrste spajanja: unutarnji spojevi, vanjski spojevi, unakrsni spojevi i nejednaki spojevi. U ovom su članku opisane vrste spojeva koje možete koristiti, razlozi njihova korištenja i način stvaranja spojeva.
Spojevi su za upite ono što su odnosi u tablicama: pokazatelj načina na koji se podaci iz dvaju izvora mogu kombinirati na temelju zajedničkih vrijednosti podataka. Slijedi ilustracija spoja u prikazu dizajna upita sa svojstvima spoja otvorenima u dijaloškom okviru:
Crta između tablica predstavlja spoj. Dvokliknite spoj da biste otvorili dijaloški okvir Svojstva spoja (na slici) pa pregledajte ili promijenite spoj.
Spojevi su ponekad usmjereni. U tom području dijaloškog okvira prikazana je koja tablica u spoju i koja se polja koriste za spajanje tablica.
To područje određuje vrstu spoja: 1 je unutarnji spoj, 2 lijevi vanjski spoj, a 3 desni vanjski spoj.
Mogu se koristiti polja iz obje tablice te se iz svake prikazuju podaci koji se odnose na određeni zadatak. U unutarnjem spoju nisu obuhvaćeni nikakvi drugi podaci. U vanjskom spoju nepovezani zapisi iz jedne tablice također su uključeni u rezultate upita.
Vrste spojeva
Postoje četiri osnovne vrste spajanja: unutarnji spojevi, vanjski spojevi, unakrsni spojevi i nejednaki spojevi. Unakrsni spojevi i nejednaki spojevi napredne su vrste spojeva i rijetko se koriste, no trebali biste ih upoznati da biste u potpunosti razumjeli funkcioniranje spojeva.
Unutarnji spojevi: samo povezani podaci iz obiju tablica zajedno
Unutarnji je spoj onaj u kojem Access dodaje podatke iz tablice samo ako u povezanoj tablici postoje odgovarajući podaci i obrnuto. Većinu vremena koristit ćete unutarnje spojeve. Kada stvorite spoj, a ne navedete vrstu spoja, Access pretpostavlja da želite unutarnji spoj. Unutarnji spojevi korisni su jer omogućuju kombiniranje podataka iz dvaju izvora na temelju zajedničkih vrijednosti, pa podatke vidite samo kada imate potpunu sliku.
Vanjski spojevi: svi povezani podaci ispravno kombinirani te svi preostali zapisi iz jedne tablice
Vanjski je spoj sličan unutarnjem spoju, ali dodaje preostale retke iz jedne od tablica. Vanjska su pridruživanja usmjerena: lijevi vanjski spoj obuhvaća sve zapise iz lijeve tablice – prve tablice u pridruživanju – a desni vanjski spoj obuhvaća sve zapise iz desne tablice – druge tablice u pridruživanju.
Potpuni vanjski spojevi: svi podaci, kombinirani gdje je to moguće
U nekim sustavima vanjski spoj može obuhvaćati sve retke iz obiju tablica, a retke spojiti kada se podudaraju. To se naziva potpunim vanjskim spojem, a Access ga izričito ne podržava. No možete koristiti unakrsni spoj i kriterije da biste postigli isti učinak.
Unakrsni spojevi: svi podaci, kombinirani na sve moguće načine
Unakrsni spoj najčešće je nuspojava dodavanja dviju tablica u upit, a zatim zaboravljanja spojiti ih. Access to tumači na način 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, takva vrsta spajanja rijetko daje korisne rezultate. No nekoliko je slučajeva kada je unakrsni spoj upravo ono što vam treba.
Nejednaki spojevi: poput običnog spoja, ali koriste drugačiju usporedbu za kombiniranje redaka
Nejednaki spojevi koriste operator koji nije znak jednakosti (=) za usporedbu vrijednosti i određivanje hoće li se i kako podaci kombinirati. Nejednaka spajanja nisu izričito podržana, no možete koristiti unakrsni spoj i kriterije da biste postigli isti učinak.
Prikaz redaka u kojima postoji zajednička vrijednost u obje spojene tablice
Ako želite prikazati samo retke koji u spojenom polju sadrže podudarne vrijednosti, koristite unutarnji spoj. Access automatski stvara unutarnje spojeve.
Unutrašnja su pridruživanja najčešća. Oni upit obavještavaju da reci iz jedne spojene tablice odgovaraju recima u drugoj tablici, na temelju podataka u spojenim poljima. Kada se pokrene upit s unutarnjim spojem, samo oni reci u kojima postoji zajednička vrijednost u obje spojene tablice bit će uključeni u operacije upita.
Kako koristiti unutarnji spoj?
U većini slučajeva ne morate ništa učiniti da biste koristili unutarnji spoj. Ako su tablice koje dodajete u upit već u nekom odnosu, Access automatski stvara unutarnji spoj između svakog para povezanih tablica prilikom dodavanja tablica. Ako se nameće referencijalni integritet, Access prikazuje "1" iznad crte spajanja da bi pokazao koja je tablica na strani "jedan" u odnosu jedan-prema-više te znak beskonačnosti (∞) da bi pokazala koja je tablica na strani "više".
Čak i ako niste stvorili odnose, Access automatski stvara unutarnje spojeve ako u upit dodate dvije tablice, a svaka od tih tablica sadrži polje s istom ili kompatibilnom vrstom podataka, a jedno od spojenih polja primarni je ključ. Simboli "jedan" i "više" u ovom se slučaju ne prikazuju jer se referencijalni integritet ne nameće.
Ako upitu dodate upite, a niste stvorili odnose između tih upita, Access neće automatski stvoriti unutarnje spojeve između tih upita ni između upita i tablica. U pravilu biste ih trebali stvoriti sami. Unutarnji spoj stvarate povlačenjem polja iz jednog izvora podataka u polje na 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 spojevi navedeni su u SQL-u u uvjetu FROM, kao što je prikazano u nastavku:
FROM tablica1 INNER JOIN tablica2 ON tablica1. Polje1 Usporedba tablica2. 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 vrste podataka i sadržavati istovrsne podatke, ali ne moraju imati isti naziv. |
| usporedba | Bilo koji relacijski operator uspoređivanja: "=," "<," "><=," ">=," 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 spojevi govore upitu da, premda se neki reci na obje strane spoja točno podudaraju, upit mora obuhvatiti sve retke iz jedne tablice, kao i one retke iz druge tablice koji dijele zajedničku vrijednost na obje strane spoja.
Vanjski spojevi mogu biti lijevi vanjski spojevi ili desni vanjski spojevi. U lijevom vanjskom spoju upit obuhvaća sve retke iz prve tablice u uvjetu FROM SQL naredbe i samo one retke iz druge tablice u kojima polje za spajanje sadrži vrijednosti zajedničke objema tablicama. U desnom vanjskom spoju upit obuhvaća sve retke iz druge tablice u uvjetu FROM SQL naredbe i samo one retke iz druge tablice u kojima polje za spajanje sadrži vrijednosti zajedničke objema tablicama.
Napomena
Možete jednostavno prepoznati koja je lijeva ili desna tablica u nekom spoju tako da dvokliknete spoj, a zatim pregledate dijaloški okvir Svojstva spoja . Možete i prijeći u 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 koja se u rezultatima upita vraćaju iz te druge tablice bit će prazna ako se reci ne podudaraju.
Kako koristiti vanjski spoj?
Vanjski spoj možete stvoriti 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 pogledajte mogućnosti navedene uz mogućnost 2 i mogućnost 3.
- Kliknite željenu mogućnost pa U redu.
- Access prikazuje spoj i strelicu koja pokazuje od izvora podataka gdje će svi reci biti uvršteni na izvor podataka gdje će biti uvršteni samo reci koji zadovoljavaju uvjet spajanja.
Dvosmisleni vanjski spojevi
Ako stvorite upit koji sadrži operacije LEFT JOIN i INNER JOIN, Access možda neće moći odrediti koju operaciju spajanja treba najprije izvesti. Budući da se rezultati razlikuju ovisno o tome je li prvo izvedeno lijevo ili unutarnje spajanje, Access prikazuje poruku o pogrešci:
Da biste ispravili tu pogrešku, morate izmijeniti upit tako da bude jasno koje spajanje najprije želite izvesti.
SQL sintaksa za vanjski spoj
Vanjski spojevi navedeni su u SQL-u u uvjetu FROM, kao što je prikazano u nastavku:
FROM TABLE1 [ LEFT | RIGHT ] JOIN table2
ON tablica1.polje1 usporedba tablica2.polje2
Operacije 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 vrste podataka i sadržavati istovrsne podatke, ali ne moraju imati isti naziv. |
| usporedba | Bilo koji relacijski operator uspoređivanja: "=," "<," "><=," ">=," ili "<>." |
Dodatne informacije o sintaksi vanjskog spoja potražite u temi Operacije LEFT JOIN, RIGHT JOIN.
Prikažite sve retke iz obje tablice i spojite ih kada postoji zajednička vrijednost
Kada želite prikazati sve retke iz dviju tablica i spojiti ih na temelju zajedničkih vrijednosti, koristite potpuno vanjsko spajanje. Access ne podržava izričito potpune vanjske spojeve, no isti efekt možete postići pomoću upita s unijom. U sljedećem se postupku objašnjava kako to učiniti, no dodatne informacije o upitima s unijom potražite u odjeljku Vidi također .
Da biste pomoću upita s unijom izvršili potpuno vanjsko spajanje, učinite sljedeće:
Stvorite upit koji ima lijevi vanjski spoj na 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 pa pritisnite ENTER.
Upišite UNION, a zatim pritisnite Enter.
Napomena
Kada koristite upit s unijom za izvođenje cjelovitog vanjskog spoja, nemojte koristiti ključnu riječ ALL.
Pritisnite CTRL+V da biste zalijepili SQL kod koji ste kopirali u 3. koraku.
U kodu koji ste zalijepili promijenite LEFT JOIN u RIGHT JOIN.
Izbrišite točku sa zarezom na kraju druge rečenice FROM pa pritisnite ENTER.
U prvu tablicu navedenu u uvjetu FROM (lijevoj tablici) dodajte uvjet WHERE koji navodi da je vrijednost spojnog polja NULL.
Primjerice, ako je 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 NULLUpišite točku sa zarezom (;) na kraju uvjeta WHERE da biste označili kraj upita s unijom.
Na kartici Dizajn u grupi Rezultati kliknite Izvedi.
Unakrsni spojevi
Unakrsni se spojevi razlikuju od unutarnjih i vanjskih spojeva po tome što nisu eksplicitno zastupljeni u programu Access. U unakrsnom spoju svaki se redak iz jedne tablice spaja sa svakim retkom iz druge tablice, čime se dobiva ono što se naziva unakrsnim umnožkom ili kartezijanskim umnožkom. Svaki put kada pokrenete upit koji sadrži tablice koje nisu eksplicitno spojene, rezultat je unakrsni proizvod. Unakrsni spojevi obično su nenamjerni, ali u nekim slučajevima mogu biti korisni.
Zašto koristiti unakrsni spoj?
Ako želite ispitati sve moguće kombinacije redaka između dviju tablica ili upita, koristite unakrsni spoj. Pretpostavimo, primjerice, da je vaša tvrtka imala spektakularnu godinu i da razmišljate o davanja popusta klijentima. Možete stvoriti upit koji zbraja kupnje svakog klijenta, stvoriti malu tablicu s nekoliko mogućih postotaka rabata te te te dvije vrijednosti kombinirati u drugom upitu koji izvodi unakrsno spajanje. Dobivate upit koji prikazuje skup hipotetskih popusta za svakog klijenta.
Kako koristiti unakrsni spoj?
Unakrsni spoj stvara se svaki put kada u upit dodate tablice ili upite i ne stvorite barem jedan eksplicitni spoj za svaku tablicu ili upit. Access kombinira svaki redak iz svake tablice ili upita koji nije eksplicitno spojen ni s jednom drugom tablicom ili upitom sa svakim drugim retkom u rezultatima. Razmotrite scenarij rabata iz prethodnog odlomka. Pretpostavimo da imate 91 klijenta i da želite pogledati pet mogućih postotaka popusta. Unakrsnim spojem dobiva se 455 redaka (umnožak broja 91 i 5).
Kao što već možete zamisliti, nenamjerni unakrsni spojevi mogu stvoriti ogroman broj redaka u rezultatima upita. Osim toga, ti su rezultati općenito besmisleni jer ako zapravo ne namjeravate kombinirati svaki redak sa svakim drugim, većina kombiniranih redaka koji se pojavljuju u rezultatima neće imati smisla. I naposljetku, pokretanje upita koji koriste slučajna unakrsna spoja može potrajati vrlo dugo.
1. Zaokružena polja trebaju 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 nejednakosti vrijednosti polja
Spojevi se ne moraju temeljiti na jednakovrijednosti spojenih polja. Spoj se može temeljiti na bilo kojem operatoru usporedbe, npr. "veći od" (>), "manji od (<), ili nije jednako (<>). Spojevi koji se ne temelje na jednakosti nazivaju se nejednakim spojevima.
Ako želite spojiti retke dvaju izvora podataka na temelju vrijednosti polja koje nisu jednake, koristite nejednaki spoj. Različita spojeve obično se temelje na operatorima usporedbe "veći od" (>"), "manji od ili< jednak (>=), ili manji od ili jednak (<=). Nejednaki spojevi koji se temelje na operatoru nije jednako (<>) mogu vratiti gotovo isti broj redaka kao i unakrsni spojevi, a rezultate je teško protumačiti.
Kako koristiti nejednaki spoj?
Nejednaki spojevi nisu podržani u prikazu dizajna. Ako ih želite koristiti, to morate učiniti pomoću SQL prikaza. No možete stvoriti spoj u prikazu dizajna, prebaciti se u SQL prikaz, pronaći operator usporedbe jednako (=) i promijeniti ga u operator koji želite koristiti. Kada to učinite, upit u prikazu dizajna možete ponovno otvoriti samo ako najprije u SQL prikazu vratite operator usporedbe na znak jednakosti (=).
Brisanje spoja
Ako Access automatski stvori spoj koji ne želite ili ako spoj stvorite pogreškom – na primjer, spoj između dva polja s vrstama podataka koje nisu slične – spoj možete izbrisati.
- 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.
Dodavanje zapisa u tablicu pomoću upita s dodavanjemSpajanje rezultata nekoliko upita odabiranja pomoću upita s unijomStvaranje upita na temelju više tablicaStvaranje, uređivanje ili brisanje odnosa