Kada uključite više izvora podataka u Access upit, koristite spajanja da biste ograničili zapise koje želite da vidite, na osnovu načina na koji su izvori podataka povezani jedan sa drugim. Spojove koristite i za kombinovanje zapisa iz oba izvora podataka, tako da svaki par zapisa iz izvora postaje jedan zapis u rezultatima upita.
Ovaj članak govori o različitim tipovima spajanja i pokazuje vam kako da ih koristite u upitu. Spajanje se podrazumevano automatski kreira ako već postoji relacija između dva izvora podataka koju koristite u upitu. Spajanje se pravi i ako postoje polja koja jasno odgovaraju jedno drugom. Možete da izbrišete automatski kreirano spajanje. Ovaj članak pruža osnovne informacije o relacijama između tabela, uključujući i to kako da je kreirate.
Napomena: Upite možete da spojite na isti način kao što spajate tabele, kao i da spojite obe tabele.
U ovom članku:
Pregled
Baza podataka je kolekcija tabela podataka koje nose logičke relacije jedna sa drugom. Relacije koristite da biste povezali tabele po poljima koja su im zajednička. Tabela može da bude deo bilo kog broja relacija, ali svaka relacija uvek ima tačno dve tabele. U upitu relaciju predstavlja spajanje.
Kada dodate tabele u upit, Pristup spajanja zasnovana na relacijama koje su definisane između tabela. Možete ručno da kreirate spajanja u upitima, čak i ako ne predstavljaju relacije koje su već definisane. Ako koristite druge upite (umesto ili pored tabela) kao izvore podataka za upit, možete da kreirate spajanja između izvornih upita, kao i između tih upita i svih tabela koje koristite kao izvore podataka.
Spajanja se ponašaju slično kriterijumima upita po tome što uspostavljaju pravila koja podaci moraju da se podudaraju kako bi bila uključena u operacije upita. Za razliku od kriterijuma, spajanja takođe navode da će se svaki par redova koji zadovoljavaju uslove spajanja kombinovati u skupu zapisa da bi se formirao jedan red.
Postoje četiri osnovna tipa spajanja: unutrašnja spajanja, spoljna spajanja, unakrsna spajanja i nejednaka spajanja. Ovaj članak istražuje svaki tip spoja koji možete da koristite, zašto koristite svaki tip i kako da kreirate spajanja.
Spajanja su za upite koje su relacije sa tabelama: pokazatelj toga kako se podaci u dva izvora mogu kombinovati na osnovu vrednosti podataka koje su im zajedničke. Evo ilustracije spajanja u prikazu dizajna upita sa svojstvima spoja otvorenim u dijalogu:
Ova linija između tabela predstavlja spajanje. Kliknite dvaput na spoj da biste otvorili dijalog Svojstva spoja (opisano) i pregledali ili promenili spoj.
Spajanja su ponekad pravac. Ova oblast dijaloga prikazuje koja je tabela u spajanja i koja polja se koriste za spajanje tabela.
Ova oblast određuje tip spajanja: opcija 1 je unutrašnje spajanje, 2 je levi spoljni spoj, a 3 je desni spoljni spoj.
Polja iz obe tabele mogu da se koriste, a podaci koji se tiče datog zadatka prikazuju se iz svake od njih. U unutrašnjem spajaju se nikakvi drugi podaci. U spoljnom spoju, nepovezani zapisi iz jedne tabele takođe su uključeni u rezultate upita.
Tipovi spajanja
Postoje četiri osnovna tipa spajanja: unutrašnja spajanja, spoljna spajanja, unakrsna spajanja i nejednaka spajanja. Unakrsna spajanja i nejednaka spajanja su napredni tipovi spajanja i retko se koriste, ali trebalo bi da znate da imaju potpuno razumevanje kako spajanja funkcionišu.
Unutrašnja spajanja: kombinovani su samo srodni podaci iz obe tabele
Unutrašnji spoj je spajanje u kojem Access uključuje podatke iz tabele samo ako postoje odgovarajući podaci u povezanoj tabeli i obrnuto. Najčešće ćete koristiti unutrašnja spajanja. Kada kreirate spoj i ne navedete kakav je to spoj, Access pretpostavlja da želite unutrašnje spajanje. Unutrašnja spajanja su korisna zato što vam omogućavaju da kombinujete podatke iz dva izvora na osnovu deljenih vrednosti – tako da vidite podatke samo kada imate potpunu sliku.
Spoljna spajanja: svi povezani podaci su ispravno kombinovani, kao i svi preostali zapisi iz jedne tabele
Spoljno spajanje je kao unutrašnje spajanje, ali dodaje preostale redove iz jedne od tabela. Spoljna spajanja su u smeru: levi spoljni spoj uključuje sve zapise iz leve tabele – prvu tabelu u spajaju – a desni spoljni spoj uključuje sve zapise iz desne tabele – drugu tabelu u spajanje.
Potpuna spoljna spajanja: svi podaci, kombinovani gde je izmenljivo
U nekim sistemima spoljno spajanje može da obuhvati sve redove iz obe tabele, sa kombinovanim redovima kada se odgovaraju. To se naziva potpuno spoljno spajanje, a Access ih ne podržava izričito. Međutim, možete da koristite unakrsno spajanje i kriterijume da biste postigli isti efekat.
Unakrsna spajanja: svi podaci, kombinovani na svaki mogući način
Unakrsno spajanje je u većini vreme neodložnog efekta dodavanja dve tabele u upit, a zatim zaboravlja da ih spoji. Access tumači ovo da bi značio da želite da vidite svaki zapis iz jedne tabele u kombinaciji sa svakim zapisom iz druge tabele – svaku moguću kombinaciju zapisa. Pošto podaci ne mogu da se kombinuju, ova vrsta spajanja retko daje korisne rezultate. Ali postoji nekoliko slučajeva kada je spoj krsta baš ono što vam je potrebno.
Nejednaka spajanja: kao standardno spajanje, ali koristi drugačije poređenje za kombinovanje redova
Nejednaka spajanja koriste operator koji nije znak jednakosti (=) za poređenje vrednosti i utvrđivanje toga da li i kako kombinovati podatke. Nejednaka spajanja nisu izričito podržana, ali možete da koristite unakrsno spajanje i kriterijume da biste postigli isti efekat.
Prikaži redove u kojima zajednička vrednost postoji u obe spojene tabele
Ako želite da prikažete samo one redove koji imaju vrednosti koje se podudaraju u spojenim polju, koristite unutrašnje spajanje. Access automatski kreira unutrašnja spajanja.
Unutrašnja spajanja su najčešći tip spajanja. Oni kažu upitu da redovi iz jedne od spojenih tabela odgovaraju redovima u drugoj tabeli, na osnovu podataka u spojenih polja. Kada se pokrene upit sa unutrašnjim spajanje, samo redovi u kojima zajednička vrednost postoji u obe spojena tabela biće uključeni u operacije upita.
Kako se koristi unutrašnje spajanje?
Najčešće ne morate ništa da uradite da biste koristili unutrašnji spoj. Ako tabele koje dodate u upit već imaju relacije, Access automatski kreira unutrašnje spajanje između svakog para povezanih tabela, kada dodate tabele. Ako je nametnut referencijalni integritet, Access takođe prikazuje broj „1“ iznad linije spajanja da bi pokazao koja se tabela nalazi na strani „jedan“ za odnos jedan-prema-više i simbol za beskonačno (∞) da bi pokazao koja se tabela nalazi na strani „više“.
Čak i ako niste kreirali relacije, Access automatski kreira unutrašnja spajanja ako dodate dve tabele u upit, a te tabele imaju polje sa istim ili kompatibilnim tipom podataka, a jedno od polja za spajanje je primarni ključ. Simboli "jedan" i "više" ne prikazuju se u ovom slučaju zato što referencijalni integritet nije nametnut.
Ako dodajete upite u upit, a niste kreirali relacije između tih upita, Access neće automatski kreirati unutrašnja spajanja između tih upita ili između upita i tabela. Obično bi trebalo sami da ih kreirate. Unutrašnji spoj kreirate prevlačenjem polja iz jednog izvora podataka u polje u drugom izvoru podataka. Access prikazuje liniju između dva polja da bi prikazao da je spajanje kreirano.
SQL sintaksa za unutrašnji spoj
Unutrašnja spajanja su navedena u SQL-u u odredbi FROM, kao što je prikazano ispod:
FROM tabela1 INNER JOIN tabela2 ON tabela1.polje1 uporedi tabelu2.polje2
Operacija unutrašnjeg spoja sastoji se od tri dela:
Deo |
Opis |
tabela 1, tabela 2 |
Imena tabela iz kojih se kombinuju zapisi. |
polje 1, polje 2 |
Imena polja koja se spajaju. Ako nisu numerička, polja moraju pripadati istom tip podatka i sadržati istu vrstu podataka, ali ne moraju da imaju isto ime. |
Uporedite |
Bilo koji relacioni operator poređenja: „=,“ „<,“ „>,“ „<=,“ „>=,“ ili „<>.“ |
Više informacija o sintaksi unutrašnjeg pridruživanja potražite u temi OPERACIJA INNER JOIN.
Prikaži sve redove iz jedne tabele, a odgovarajuće redove iz druge tabele
Spoljna spajanja saopštaju upitu da, iako neki redovi na obe strane spoja tačno odgovaraju, upit treba da sadrži sve redove iz jedne tabele, kao i redove iz druge tabele koji dele zajedničku vrednost sa obe strane spoja.
Spoljna spajanja mogu da budu leva spoljna spajanja ili mogu da budu desna spoljna spajanja. U levom spoljnom spajanju upit uključuje sve redove iz prve tabele u odredbi SQL izraz FROM i samo redove iz druge tabele u kojoj polje za spajanje sadrži vrednosti zajedničke za obe tabele. U desnom spoljnom spajanju upit uključuje sve redove iz druge tabele u odredbi SQL izraz FROM i samo redove iz druge tabele u kojoj polje za spajanje sadrži vrednosti zajedničke za obe tabele.
Napomena: Lako možete da vidite koja je leva tabela ili desna tabela u datom spoju tako što ćete kliknuti dvaput na spoj, a zatim pogledati dijalog Svojstva spoja . Možete i da se prebacite na SQL prikaz, a zatim ispitate odredbu FROM.
Pošto neki redovi sa jedne strane spoljnog spajanja neće imati odgovarajuće redove iz druge tabele, neka polja vraćena u rezultate upita iz te druge tabele biće prazna kada redovi ne odgovaraju.
Kako da koristim spoljni spoj?
Spoljno spajanje kreirate menjanjem postojećeg unutrašnjeg spajanja. Ako ne postoji unutrašnje spajanje, možete ga kreirati, a zatim ga promeniti u spoljni spoj.
Promena unutrašnjeg spajanja u spoljni spoj
-
U prikazu dizajna upita kliknite dvaput na spoj koji želite da promenite.
Pojaviće se dijalog Svojstva spoja.
-
U dijalogu Svojstva spajanja obratite beleške na izbore navedene pored opcije 2 i opcije 3.
-
Izaberite opciju koju želite da koristite i kliknite na dugme U redu.
-
Access prikazuje spoj i prikazuje strelicu koja pokazuje nadole iz izvora podataka gde će svi redovi biti uključeni u izvor podataka gde će biti obuhvaćeni samo redovi koji zadovoljavaju uslov spoja.
Dvosmislena spoljna spajanja
Ako kreirate upit koji sadrži operacije LEFT JOIN i INNER JOIN, Access možda neće moći da utvrdi koju operaciju spajanja treba prvo izvršiti. Pošto se rezultati razlikuju u zavisnosti od toga da li se prvo izvršava spajanje levo ili unutrašnje, Access prikazuje poruku o grešci:
Da biste ispravili ovu grešku, morate izmeniti upit tako da bude jasno koje pridruživanje treba prvo izvršiti.
SQL sintaksa za spoljni spoj
Spoljna spajanja su navedena u SQL-u u odredbi FROM, kao što je prikazano ispod:
FROM tabela1 [ LEFT | RIGHT ] JOIN tabela2
ON tabela1.polje1 poređenje tabela2.polje2Operacije LEFT JOIN i RIGHT JOIN imaju sledeće delove:
Deo |
Opis |
tabela 1, tabela 2 |
Imena tabela iz kojih se kombinuju zapisi. |
polje 1, polje 2 |
Imena spojenih polja. Polja moraju da pripadaju istom tip podatka i da sadrže istu vrstu podataka, ali ne moraju imati isto ime. |
Uporedite |
Bilo koji relacioni operator poređenja: „=,“ „<,“ „>,“ „<=,“ „>=,“ ili „<>.“ |
Više informacija o sintaksi spoljnog pridruživanja potražite u temama LEFT JOIN, RIGHT JOIN Operacije.
Prikažite sve redove iz obe tabele i spojite ih tamo gde postoji zajednička vrednost
Kada želite da prikažete sve redove iz dve tabele i da ih spojite na osnovu zajedničkih vrednosti, koristite potpuno spoljno spajanje. Access ne podržava izričito potpuna spoljna spajanja, ali možete postići isti efekat pomoću upita za združivanje. Sledeća procedura objašnjava kako to da uradite, ali ako želite više informacija o upitima za združivanje, pogledajte odeljak Takođe pogledajte.
Da biste koristili upit za združivanje za izvršavanje potpunog spoljnog spajanja:
-
Kreirajte upit koji ima levi spoljni spoj na polju koje želite da koristite za potpuno spoljno spajanje.
-
Na kartici Početak, u grupi Prikazi kliknite na dugme Prikaži, a zatim izaberite stavku SQL prikaz.
-
Pritisnite kombinaciju tastera CTRL+C da biste kopirali SQL kôd.
-
Izbrišite tačku i zarez na kraju odredbe FROM, a zatim pritisnite taster ENTER.
-
Otkucajte tekst UNION, a zatim pritisnite taster ENTER.
Napomena: Nemojte da koristite SVE ključnu reč kada koristite upit za združivanje za izvršavanje potpunog spoljnog spajanja.
-
Pritisnite kombinaciju tastera CTRL+V da biste nalepili SQL kôd koji ste kopirali u 3. koraku.
-
U kodu koji ste nalepili promenite left JOIN u RIGHT JOIN.
-
Izbrišite tačku i zarez na kraju druge odredbe FROM, a zatim pritisnite taster ENTER.
-
Dodajte odredbu WHERE koja navodi da je vrednost polja za spajanje NULL u prvoj tabeli navedenoj u odredbi FROM (levoj tabeli).
Na primer, ako je odredba FROM:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Dodaćete sledeću odredbu WHERE:
WHERE Products.ID IS NULL
-
Otkucajte tačku i zarez (;) na kraju odredbe WHERE da biste naznačili kraj upita za združivanje.
-
Na kartici Dizajn, u grupi Rezultati kliknite na dugme Pokreni.
Unakrsna spajanja
Unakrsna spajanja se razlikuju od unutrašnjih i spoljnih spajanja po tome što nisu izričito predstavljena u programu Pristup. U unakrsno spajanje svaki red iz jedne tabele kombinuje se sa svakim redom iz druge tabele, što dovodi do toga da se proizvod zove unakrsni proizvod ili kartezijski proizvod. Svaki put kada pokrenete upit koji ima tabele koje nisu izričito pridružene, dobija se unakrsni proizvod. Unakrsni spojevi su obično nenamerni, ali postoje slučajevi kada mogu da budu korisni.
Zaљto bih koristio unakrsni spoj?
Ako želite da ispitate sve moguće kombinacije redova između dve tabele ili upita, koristite unakrsno spajanje. Na primer, pretpostavimo da je vaše preduzeće imalo spektakularnu godinu i razmišljate da klijentima date rabate. Možete da napravite upit koji sabira kupovine svakog klijenta, napravite malu tabelu koja ima nekoliko mogućih procenata rabata i kombinujete ih u drugom upitu koji izvršava unakrsno spajanje. Završavate sa upitom koji prikazuje skup hipotetičkih rabata za svakog klijenta.
Kako se koristi unakrsni spoj?
Unakrsno spajanje se pravi svaki put kada uključite tabele ili upite u upit i ne kreirate bar jedno eksplicitno spajanje za svaku tabelu ili upit. Access kombinuje svaki red iz svake tabele ili upita koji nije izričito pridružen bilo kojoj drugoj tabeli ili upitu u svaki drugi red u rezultatima. Razmotrite scenario rabata iz prethodnog pasusa. Pretpostavimo da imate 91 klijenta i da želite da pogledate pet mogućih procenata rabata. Vaš unakrsni spoj proizvodi 455 redova (proizvod 91 i 5).
Kao što možete da zamislite, nenamerni unakrsni spojovi mogu da kreiraju veliki broj redova u rezultatima upita. Štaviše, ovi rezultati su obično besmisleni jer ako zapravo ne nameravate da kombinujete svaki red sa svakim drugim redom, većina kombinovanih redova koji se pojavljuju u rezultatima neće imati smisla. Na kraju, upitima koji koriste nenamerno unakrsno spajanje može biti potrebno mnogo vremena da se pokreću.
1. Zaokružena polja bi trebalo da se spoje.
1. Obratite paћnja na veoma veliki broj zapisa.
1. Imajte na umu da je broj zapisa mnogo manji.
Spajanje tabela na osnovu neekvaliteta vrednosti polja
Spajanja ne moraju da budu zasnovana na jednakosti spojenih polja. Spajanje može biti zasnovano na bilo kom operatoru poređenja, kao što je veće od (>), manje od (<) ili nije jednako (<>). Spajanja koja nisu zasnovana na jednakosti nazivaju se nejednaka spajanja.
Ako želite da kombinujete redove dva izvora podataka na osnovu vrednosti polja koje nisu jednake, koristite nejednako spajanje. Nejednaka spajanja se obično zasnivaju na operatorima poređenja većih od (>), manjih od (<), većih ili jednakih (>=) ili manjih ili jednakih (<=). Nejednaka spajanja koja su zasnovana na operatoru nije jednako (<>) mogu da vrate skoro onoliko redova koliko je ukrštenih spajanja, a može biti teško protumačiti rezultate.
Kako se koristi nejednako spajanje?
Nejednaka spajanja nisu podržana u prikazu dizajna. Ako želite da ih koristite, to morate da uradite pomoću SQL prikaza. Međutim, možete da kreirate spajanje u prikazu dizajna, prebacite se na SQL prikaz, pronađete operator poređenja jednakosti (=) i promenite ga u operator koji želite da koristite. Kada to uradite, upit možete ponovo da otvorite u prikazu dizajna samo ako prvo vratite operator poređenja na jednako (=) u SQL prikazu.
Brisanje spajanja
Ako Access automatski kreira spoj koji ne želite ili ako kreirate spoj greškom – na primer, spoj između dva polja koja imaju različite tipove podataka – možete da izbrišete spoj.
-
U koordinatnoj mreži za dizajn upita kliknite na spoj koji želite da uklonite.
-
Pritisnite taster DELETE.
– ili –
-
U koordinatnoj mreži za dizajn upita kliknite desnim tasterom miša na spoj koji želite da uklonite, a zatim izaberite stavku Izbriši.