Ponekad ćete možda želeti da kombinujete zapise iz jedne tabele ili upita sa zapisima iz jedne ili više drugih tabela u jedan rezultat. To radi upit za združivanje u programu Access.
Da biste dobro razumeli upite za združivanje, prvo treba da se upoznate sa dizajniranjem osnovnih upita u programu Access. Da biste saznali više o dizajniranju upita za izbor, pogledajte članak Pravljenje jednostavnog upita za izdvajanje.
Proučite radni primer upita za združivanje
Ako nikada ranije niste napravili upit za združivanje, možda će vam biti korisno da prvo proučite radni primer u Northwind Access predlošku. Možete da pronađete predložak Northwind uzorka na stranici "Prvi koraci" programa Access tako što ćete izabratistavku "Novadatoteka>". Možete da preuzmete kopiju i direktno iz predloška uzorka preduzeća Northwind.
Kada Access otvori Northwind bazu podataka, odbacite dijalog za prijavu koji se prvi pojavi, a zatim razvijte okno za navigaciju. Izaberite vrh okna za navigaciju, a zatim izaberite stavku "Tip objekta " da biste organizovali sve objekte baze podataka po tipu. Zatim razvijte grupu "Upiti " i videćete upit " Transakcije proizvoda".
Upiti za združivanje se lako razlikuju od drugih objekata upita jer imaju posebnu ikonu koja liči na dva isprepletena kruga koji predstavljaju skup nastao sjedinjavanjem dva skupa:
Za razliku od normalnih upita za izdvajanje i radnje, tabele nisu povezane u upit za združivanje. To znači da ne možete da koristite Access grafički dizajner upita za pravljenje ili uređivanje upita za združivanje. Ako otvorite upit za združivanje u oknu za navigaciju, Access ga otvara i prikazuje rezultate u prikazu lista sa podacima. U okviru "Prikazi " na kartici " Početak " imajte na umu da prikaz dizajna nije dostupan kada radite sa upitima za združivanje. Možete samo da se prebacujete između prikaza lista sa podacima i SQL prikaza.
Da biste nastavili proučavanje ovog primera upita za združivanje, izaberite stavkuPrikazi>"Početak>"SQL prikaz da biste videli SQL sintaksu koja ga definiše. U ovoj ilustraciji smo uneli dodatni razmak da SQL biste lako mogli da uočite različite delove koji ulaze u sastav upita za združivanje.
Hajde da detaljno pogledamo SQL sintaksu ovog upita za združivanje iz Northwind baze podataka:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Prvi i treći deo ove SQL izjave u suštini predstavljaju dva upita za izbor. Ovi upiti preuzimaju dva različita skupa zapisa; jedan iz tabele Porudžbine proizvoda, a drugi iz tabele Kupovine proizvoda.
Drugi deo ove SQL izjave je ključna UNION reč, koja govori programu Access da kombinuje ova dva skupa zapisa.
Poslednji deo ove SQL izjave određuje redosled kombinovanih zapisa pomoću izraza ORDER BY . U ovom primeru, Access opadajućim redosledom poručuje sve zapise prema polju "Datum porudžbine".
Napomena
Upiti za združivanje su uvek samo za čitanje u programu Access; ne možete da promenite vrednosti u prikazu lista sa podacima.
Napravite upit za združivanje pravljenjem i kombinovanjem upita za izdvajanje
Iako možete da napravite upit za združivanje tako što ćete napisati SQL sintaksu direktno u SQL prikazu, možda će vam biti lakše da ga napravite iz delova pomoću upita za izdvajanje. Zatim možete da kopirate i nalepite SQL delove u kombinovani upit za združivanje.
Ako želite da preskočite čitanje koraka i da umesto toga pogledate primer, pređite na sledeći odeljak, Pogledajte primer pravljenja upita za združivanje.
- Na kartici Kreiranje, u grupi Upiti kliknite na dugme Dizajn upita.
- Kliknite dvaput na tabelu koja sadrži polja koja želite da uključite. Tabela će biti dodata u prozor za dizajn upita.
- U prozoru za dizajn upita kliknite dvaput na svako polje koje hoćete da uključite. Dok birate polja, uverite se da ste dodali isti broj polja, istim redosledom kao i u druge upite za izdvajanje. Obratite pažnju na tipove podataka polja i proverite da li imaju kompatibilne tipove podataka sa poljima na istoj poziciji u drugim upitima koje kombinujete. Na primer, ako prvi upit za izdvajanje ima pet polja od kojih prvo sadrži podatke o datumu/vremenu, proverite da li svaki od drugih upita za izdvajanje koje kombinujete takođe ima pet polja od kojih prvo sadrži podatke o datumu/vremenu i tako dalje.
- Opcionalno, dodajte kriterijume u polja tako što ćete otkucati odgovarajuće izraze u redu „Kriterijumi“ u koordinatnoj mreži polja.
- Kada dodate polja i kriterijume polja, trebalo bi da pokrenete upit za izdvajanje i pregledate njegov rezultat. Na kartici Dizajn, u grupi Rezultati kliknite na dugme Pokreni.
- Prebacite upit na prikaz dizajna.
- Sačuvajte upit za izdvajanje i ostavite ga otvorenog.
- Ponovite ovu proceduru za svaki od upita za izdvajanje koje želite da kombinujete.
Sada kada ste napravili upite za izdvajanje, vreme je da ih kombinujete. U ovom koraku ćete napraviti upit za združivanje tako što ćete kopirati i nalepiti izjave SQL .
- Na kartici Kreiranje, u grupi Upiti kliknite na dugme Dizajn upita.
- Na kartici Dizajn, u grupi Upit kliknite na stavku Združivanje. Access skriva prozor dizajna upita, a prikazuje karticu objekta SQL prikaza . U ovom trenutku kartica je prazna.
- Izaberite karticu za prvi upit za izdvajanje koji želite da kombinujete u upitu za združivanje.
- Na kartici " Početak " izaberite stavku ">Prikaži SQL prikaz".
- Kopirajte
SQLizraz za upit za izdvajanje. Izaberite karticu za upit za združivanje koji ste počeli da pravite ranije. - Nalepite
SQLizraz za upit za izdvajanje u karticu objekta u SQL prikazu upita za združivanje. - Izbrišite znak tačka i zarez (
;) na kraju izraza upitaSQLza izdvajanje. - Pritisnite taster Enter da biste premestili kursor za jedan red nadole, a zatim kucajte
UNIONu novom redu. - Izaberite karticu za sledeći upit za izdvajanje koji želite da kombinujete u upitu za združivanje.
- Ponovite korake od 5. do 10. dok ne kopirate i nalepite sve
SQLizjave za upite za izdvajanje u prozor SQL prikaza upita za združivanje. Nemojte brisati tačku i zarez niti kucati išta nakon izjave za poslednjiSQLupit za izdvajanje. - Na kartici Dizajn, u grupi Rezultati kliknite na dugme Pokreni.
Rezultati upita za združivanje pojavljuju se u prikazu lista sa podacima.
Pogledajte primer pravljenja upita za združivanje
Evo primera koji možete ponovo da napravite u probnoj Northwind bazi podataka. Ovaj upit za združivanje prikuplja imena osoba iz tabele Klijenti i kombinuje ih sa imenima osoba iz tabele Dobavljači. Ako želite da ispratite ovaj primer, ponavljajte ove korake u svojoj kopiji probne Northwind baze.
Evo koraka potrebnih za pravljenje ovog primera:
Napravite dva upita za izdvajanje koji se zovu Upit1 i Upit2 tako da izvor podataka za prvi bude tabela „Klijenti“, a za drugi tabela „Dobavljači“. Koristite polja „Ime“ i „Prezime“ kao vrednosti za prikaz.
Napravite novi upit koji se zove Upit3 i koji je u početku bez izvora podataka, a zatim kliknite na komandu Sjedinjavanje na kartici Dizajn da biste ovaj upit pretvorili u upit za združivanje.
Kopirajte i nalepite SQL izjave iz Upita1 i Upita2 u Upit3. Uverite se da ste uklonili nepotrebne tačke i zareze i dodali ključnu
UNIONreč. Zatim možete da proverite rezultate u prikazu lista sa podacima.Dodajte odredbu poručivanja u jedan od upita, a zatim nalepite
ORDER BYizraz u upit za združivanje u SQL prikazu. Imajte na umu da se u Upitu3, upitu za združivanje, neposredno pre dodavanja poručivanja, prvo uklanjaju tačke i zarezi, a zatim ime tabele iz imena polja.Završni
SQLkoji kombinuje i sortira imena za ovaj probni upit za združivanje glasi ovako:SELECT Customers.Company, Customers.[Last Name], Customers.[First Name] FROM Customers UNION SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name] FROM Suppliers ORDER BY [Last Name], [First Name];
Ako imate iskustva u pisanju SQL sintakse, možete da napišete sopstvenu SQL izjavu za upit za združivanje direktno u SQL prikazu. Međutim, možda će vam biti korisno da pratite pristup kopiranja i lepljenja SQL-a iz drugih objekata upita. Svaki upit može da bude mnogo složeniji od jednostavnih upita za izdvajanje koji su ovde korišćeni kao primeri. Može biti korisno da pažljivo napravite i testirate svaki upit pre nego što ih iskombinujete u upit za združivanje. Ako se upit za združivanje ne pokrene, možete da prilagodite svaki upit pojedinačno dok ne uspe i da zatim ponovo napravite upit za združivanje sa ispravljenom sintaksom.
Pregledajte preostale odeljke u ovom članku da biste saznali više saveta i trikova o korišćenju upita za združivanje.
Kombinujte tri ili više tabela ili upita u upit za združivanje
U primeru iz prethodnog odeljka u kom se koristi Northwind baza podataka kombinuju se podaci iz samo dve tabele. Međutim, veoma lako možete da iskombinujete tri ili više tabela u upit za združivanje. Na primer, na osnovu prethodnog primera, u rezultat upita možete da uključite i imena zaposlenih. Možete da postignete taj zadatak dodavanjem trećeg upita i kombinovanjem sa prethodnim SQL izrazom uz dodatnu ključnu reč UNION, na sledeći način:
SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers
UNION
SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers
UNION
SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
Kada pogledate rezultate u prikazu lista sa podacima, svi zaposleni će biti navedeno ime preduzeća uzorak, koji verovatno nije korisno. Ako želite da to polje pokazuje da li je osoba interni zaposleni, zaposleni dobavljača ili zaposleni klijenta, možete da uključite fiksnu vrednost umesto imena preduzeća. Evo kako to SQL izgleda:
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
UNION
SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers
UNION
SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
Evo kako izgleda rezultat u prikazu lista sa podacima. Access prikazuje ovih pet probnih zapisa:
| Zapošljavanje | Prezime | Ime |
|---|---|---|
| Interno | Jović | Nada |
| Interno | Mlađenović | Sara |
| Dobavljač | Jevtić | Sava |
| Klijent | Rašković | Slobodan |
| Klijent | Pavle Đorović | Srećko |
Možete još više smanjiti upit jer Access čita imena izlaznih polja samo iz prvog upita u upitu za združivanje. Ovde se uklanja izlaz iz drugog i trećeg odeljka upita:
SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers
UNION
SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
UNION
SELECT "In-house", [Last Name], [First Name]
FROM Employees
ORDER BY [Last Name], [First Name];
Filtriranje u upitima za združivanje
U Access upitu za združivanje naručivanje je dozvoljeno samo jednom, ali svaki upit možete da filtrirate pojedinačno. Na osnovu upita za združivanje u prethodnom odeljku, evo primera koji filtrira svaki upit dodavanjem odredbe WHERE .
SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
WHERE [State/Province] = "UT"
UNION
SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
WHERE [Job Title] = "Sales Manager"
UNION
SELECT "In-house", Employees.[Last Name], Employees.[First Name]
FROM Employees
WHERE City = "Seattle"
ORDER BY [Last Name], [First Name];
Prebacite se na prikaz lista sa podacima i videćete rezultate slične ovima:
| Zapošljavanje | Prezime | Ime |
|---|---|---|
| Dobavljač | Daničić | Jovana K. |
| Interno | Jović | Nada |
| Klijent | Kojić | Predrag |
| Interno | Simović | Dragoslava |
| Dobavljač | Vuković | Dunja |
| Klijent | Jokanović | Đorđe |
| Dobavljač | Jovović | Nenad |
| Dobavljač | Sovrlić | Luka |
| Interno | Stanković | Nebojša |
| Dobavljač | Todorović | Snežana |
| Interno | Macura | Obrad |
Mešanje tipova podataka
Ako su upiti koje objedinite veoma različiti, možete naići na situaciju u kojoj se u izlaznom polju moraju kombinovati podaci različitih tipova. U tom slučaju, upit za združivanje će najčešće davati rezultate kao podatke tekstualnog tipa jer taj tip podataka može da sadrži i tekst i brojeve.
Da biste saznali kako ovo funkcioniše, koristićemo upit za združivanje Transakcije proizvoda u Northwind bazi podataka. Otvorite tu probnu bazu podataka, a zatim otvorite upit Transakcije proizvoda u prikazu lista sa podacima. Poslednjih deset zapisa trebalo bi da budu slični ovom izlazu:
| ID proizvoda | Datum porudžbine | Ime preduzeća | Transakcija | Količina |
|---|---|---|---|---|
| 77 | 22.1.2006. | Dobavljač B | Kupovina | 60 |
| 80 | 22.1.2006. | Dobavljač D | Kupovina | 75 |
| 81 | 22.1.2006. | Dobavljač A | Kupovina | 125 |
| 81 | 22.1.2006. | Dobavljač A | Kupovina | 200 |
| 7 | 20.1.2006. | Preduzeće D | Prodaja | 10 |
| 51 | 20.1.2006. | Preduzeće D | Prodaja | 10 |
| 80 | 20.1.2006. | Preduzeće D | Prodaja | 10 |
| 34 | 15.1.2006. | Preduzeće AA | Prodaja | 100 |
| 80 | 15.1.2006. | Preduzeće AA | Prodaja | 30 |
Recimo da želite da razdelite polje "Količina" na dva polja: "Kupovina" i "Prodaja". Recimo da želite i da dobijete fiksnu vrednost nula za polje bez vrednosti. Evo kako SQL izgleda ovaj upit za združivanje:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], 0 As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, 0 As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Ako se prebacite na prikaz lista sa podacima, videćete poslednjih deset zapisa koji su sada prikazani ovako:
| ID proizvoda | Datum porudžbine | Ime preduzeća | Transakcija | Kupovina | Prodaja |
|---|---|---|---|---|---|
| 74 | 22.1.2006. | Dobavljač B | Kupovina | 20 | 0 |
| 77 | 22.1.2006. | Dobavljač B | Kupovina | 60 | 0 |
| 80 | 22.1.2006. | Dobavljač D | Kupovina | 75 | 0 |
| 81 | 22.1.2006. | Dobavljač A | Kupovina | 125 | 0 |
| 81 | 22.1.2006. | Dobavljač A | Kupovina | 200 | 0 |
| 7 | 20.1.2006. | Preduzeće D | Prodaja | 0 | 10 |
| 51 | 20.1.2006. | Preduzeće D | Prodaja | 0 | 10 |
| 80 | 20.1.2006. | Preduzeće D | Prodaja | 0 | 10 |
| 34 | 15.1.2006. | Preduzeće AA | Prodaja | 0 | 100 |
| 80 | 15.1.2006. | Preduzeće AA | Prodaja | 0 | 30 |
Nastavljajući sa ovim primerom, šta ako želite da polja sa nultim vrednostima budu prazna? Možete da izmenite opciju SQL da ne prikazuje ništa umesto nule dodavanjem ključne reči, kao što je prikazano Null ovde:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Međutim, kao što ste možda primetili prilikom prebacivanja na prikaz lista sa podacima, sada imate neočekivani rezultat. U koloni „Kupovina“ je opozvan izbor u svakom polju:
| ID proizvoda | Datum porudžbine | Ime preduzeća | Transakcija | Kupovina | Prodaja |
|---|---|---|---|---|---|
| 74 | 22.1.2006. | Dobavljač B | Kupovina | ||
| 77 | 22.1.2006. | Dobavljač B | Kupovina | ||
| 80 | 22.1.2006. | Dobavljač D | Kupovina | ||
| 81 | 22.1.2006. | Dobavljač A | Kupovina | ||
| 81 | 22.1.2006. | Dobavljač A | Kupovina | ||
| 7 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 51 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 80 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 34 | 15.1.2006. | Preduzeće AA | Prodaja | 100 | |
| 80 | 15.1.2006. | Preduzeće AA | Prodaja | 30 |
To se događa zato Access određuje tipove podataka polja iz prvog upita. U ovom primeru „Null“ nije broj.
Šta se dešava ako pokušate da umetnete praznu nisku umesto prazne vrednosti polja? Ovaj SQL pokušaj može da izgleda ovako:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], "" As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, "" As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Kada se prebacite na prikaz lista sa podacima, videćete da Access preuzima vrednosti stavke „Kupovina“, ali ih je konvertovao u tekst. Znate da su ovo tekstualne vrednosti po tome što su poravnate ulevo u prikazu lista sa podacima. Prazna niska u prvom upitu nije broj, zbog čega i vidite ove rezultate. Primetićete da su i vrednosti stavke „Prodaja“ konvertovane u tekst jer zapisi o kupovini sadrže praznu nisku.
| ID proizvoda | Datum porudžbine | Ime preduzeća | Transakcija | Kupovina | Prodaja |
|---|---|---|---|---|---|
| 74 | 22.1.2006. | Dobavljač B | Kupovina | 20 | |
| 77 | 22.1.2006. | Dobavljač B | Kupovina | 60 | |
| 80 | 22.1.2006. | Dobavljač D | Kupovina | 75 | |
| 81 | 22.1.2006. | Dobavljač A | Kupovina | 125 | |
| 81 | 22.1.2006. | Dobavljač A | Kupovina | 200 | |
| 7 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 51 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 80 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 34 | 15.1.2006. | Preduzeće AA | Prodaja | 100 | |
| 80 | 15.1.2006. | Preduzeće AA | Prodaja | 30 |
Kako da rešite ovu zagonetku?
Jedno od rešenja je da nametnete da upit očekuje da vrednost polja bude broj. To možete da uradite pomoću ovog izraza:
IIf(False, 0, Null)
Uslov koji treba proveriti, False, nikada Truenije , tako da izraz uvek vraća Null. Međutim, Access i dalje procenjuje obe opcije izlaza i tretira izlaz kao numerički ili Null.
Evo kako možemo da koristimo ovaj izraz u ovom radnom primeru:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], IIf(False, 0, Null) As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Ne morate da menjate drugi upit.
Ako se prebacite na prikaz lista sa podacima, videćete rezultat koji želimo:
| ID proizvoda | Datum porudžbine | Ime preduzeća | Transakcija | Kupovina | Prodaja |
|---|---|---|---|---|---|
| 74 | 22.1.2006. | Dobavljač B | Kupovina | 20 | |
| 77 | 22.1.2006. | Dobavljač B | Kupovina | 60 | |
| 80 | 22.1.2006. | Dobavljač D | Kupovina | 75 | |
| 81 | 22.1.2006. | Dobavljač A | Kupovina | 125 | |
| 81 | 22.1.2006. | Dobavljač A | Kupovina | 200 | |
| 7 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 51 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 80 | 20.1.2006. | Preduzeće D | Prodaja | 10 | |
| 34 | 15.1.2006. | Preduzeće AA | Prodaja | 100 | |
| 80 | 15.1.2006. | Preduzeće AA | Prodaja | 30 |
Drugi način da postignete isti rezultat jeste da dodate upite ispred upita za združivanje sa nekim drugim upitom:
SELECT
0 As [Product ID], Date() As [Order Date],
"" As [Company Name], "" As [Transaction],
0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False
Za svako polje Access vraća fiksne vrednosti tipa podataka koji definišete. Naravno, ne želite da se izlaz ovog upita meša sa rezultatima, a da biste to izbegli, treba da dodate odredbu WHERE vrednosti False:
WHERE False
Ovo je mali trik. Pošto je uslov uvek netačan, upit ne vraća ništa. Kada iskombinujemo ovu izjavu sa postojećim SQL-om, dobijamo dovršenu izjavu koja glasi ovako:
SELECT
0 As [Product ID], Date() As [Order Date],
"" As [Company Name], "" As [Transaction],
0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False
UNION
SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]
UNION
SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
Napomena
U ovom primeru, kombinovani upit u Northwind bazi podataka vraća 100 zapisa, dok dva pojedinačnih upita vraćaju 58 i 43 zapisa, što je ukupno 101 zapis. Do ove razlike dolazi zato što dva zapisa nisu jedinstvena. Pogledajte članak Rad sa jedinstvenim zapisima u upitima za združivanje koristeći UNION ALL da biste saznali kako da rešite ovaj scenario koristeći UNION ALL.
Dodavanje ukupnih vrednosti u upit za združivanje
Posebna upotreba upita za združivanje jeste kombinovanje skupa zapisa sa jednim zapisom koji sadrži zbir jednog ili više polja.
Evo još jednog primera koji možete da napravite u probnoj Northwind bazi podataka da bismo ilustrovali kako da dobijete ukupnu vrednost u upitu za združivanje.
Napravite novi jednostavan upit da biste prikazali kupovinu piva (ID proizvoda = 34 u Northwind bazi podataka) koristeći sledeću SQL sintaksu:
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) ORDER BY [Purchase Order Details].[Date Received];Pređite na prikaz lista sa podacima i trebalo bi da vidite četiri kupovine:
Datum prijema Količina 22.1.2006. 100 22.1.2006. 60 4.4.2006. 50 5.4.2006. 300 Da biste dobili ukupnu vrednost, napravite jednostavan agregatni upit pomoću sledećeg SQL-a:
SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34))Pređite na prikaz lista sa podacima i trebalo bi da vidite samo jedan zapis:
Maksimalan datum prijema Zbir količine 5.4.2006. 510 Iskombinujte ova dva upita u upit za združivanje da biste na početak zapisa o kupovini dodali zapis sa ukupnom količinom:
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) UNION SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity FROM [Purchase Order Details] WHERE ((([Purchase Order Details].[Product ID])=34)) ORDER BY [Purchase Order Details].[Date Received];Prebacite se na prikaz lista sa podacima i trebalo bi da vidite četiri kupovine sa zbirom za svaku od njih, nakon čega dolazi zapis sa ukupnom količinom:
Datum prijema Količina 22.1.2006. 60 22.1.2006. 100 4.4.2006. 50 5.4.2006. 300 5.4.2006. 510
To bi bilo sve o osnovama dodavanja ukupnih vrednosti u upit za združivanje. Ne bi bilo loše ni da dodate fiksne vrednosti u oba upita, kao što su "Detalj" i "Ukupna vrednost" da biste vizuelno razdvojili zapis sa ukupnom vrednošću od ostalih zapisa. Možete da pregledate pomoću fiksnih vrednosti u odeljku Kombinujte tri ili više tabela ili upita u upit za združivanje.
Rad sa jedinstvenim zapisima u upitima za združivanje koristeći UNION ALL
Upiti za združivanje u programu Access podrazumevano obuhvataju samo jedinstvene zapise. Ali, šta ako želite da uključite sve zapise? Drugi primer bi ovde bio koristan.
U prethodnom odeljku, pokazali smo vam kako da napravite ukupnu vrednost u upitu za združivanje. Izmenite taj upit SQL za združivanje da biste uključili Product ID = 48:
SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
UNION
SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
ORDER BY [Purchase Order Details].[Date Received];
Pređite na prikaz lista sa podacima i trebalo bi da vidite prilično nepouzdan rezultat:
| Datum prijema | Količina |
|---|---|
| 22.1.2006. | 100 |
| 22.1.2006. | 200 |
Naravno, jedan zapis ne vraća dvaput veću ukupnu količinu.
Ovaj rezultat vidite zato što je jednog dana ista količina čokolade prodata dva puta, kao što je evidentirano u tabeli "Detalji o porudžbenici". Evo jednostavnog upita za izdvajanje koji prikazuje oba zapisa u Northwind bazi podataka:
| ID porudžbenice | Proizvod | Količina |
|---|---|---|
| 100 | Northwind Traders čokolada | 100 |
| 92 | Northwind Traders čokolada | 100 |
U pomenutom upitu za združivanje možete da vidite da polje "ID porudžbenice" nije obuhvaćeno i da dva polja ne čine dva jedinstvena zapisa.
Ako želite da obuhvatite sve zapise, koristite umesto UNION ALL u UNION programu SQL. To će najverovatnije uticati na sortiranje rezultata, tako da ne bi bilo loše da dodate odredbu ORDER BY da biste odredili redosled sortiranja. Evo izmene SQL na osnovu prethodnog primera:
SELECT [Purchase Order Details].[Date Received], Null As [Total], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
UNION ALL
SELECT Max([Date Received]), "Total" As [Total], Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))
ORDER BY [Total];
Prebacite se na prikaz lista sa podacima i trebalo bi da kao poslednji zapis vidite sve detalje pored ukupne vrednosti:
| Datum prijema | Ukupno | Količina |
|---|---|---|
| 22.1.2006. | 100 | |
| 22.1.2006. | 100 | |
| 22.1.2006. | Ukupno | 200 |
Koristite upit za združivanje da biste filtrirali zapise u obrascu putem kontrole kombinovanog okvira
Uobičajena upotreba upita za združivanje jeste da se on koristi kao izvor zapisa za kontrolu kombinovanog okvira u obrascu. Možete da koristite taj kombinovani okvir da biste izabrali vrednost za filtriranje zapisa u obrascu. Na primer, za filtriranje podataka o zaposlenima prema gradu.
Da biste videli kako ovo funkcioniše, evo još jednog primera koji možete da napravite u probnoj Northwind bazi podataka radi ilustracije ovog scenarija.
Napravite jednostavan upit za izdvajanje pomoću ove
SQLsintakse:SELECT Employees.City, Employees.City AS Filter FROM Employees;Pređite na prikaz lista sa podacima i trebalo bi da vidite sledeće rezultate:
Grad Filter Subotica Subotica Novi Sad Novi Sad Kragujevac Kragujevac Sombor Sombor Subotica Subotica Kragujevac Kragujevac Subotica Subotica Kragujevac Kragujevac Subotica Subotica Gledajući te rezultate, možda nećete uspeti da vidite u čemu je njihova vrednost. Međutim, razvijte upit i pretvorite ga u upit za združivanje koristeći sledeće
SQL:SELECT Employees.City, Employees.City AS Filter FROM Employees UNION SELECT "<All>", "*" AS Filter FROM Employees ORDER BY City;Pređite na prikaz lista sa podacima i trebalo bi da vidite sledeće rezultate:
Grad Filter <Sve> * Novi Sad Novi Sad Sombor Sombor Kragujevac Kragujevac Subotica Subotica Access objedinjuje devet prethodno prikazanih zapisa sa fiksnim vrednostima polja <"All> i "*". Pošto ova odredba za združivanje ne sadrži
UNION ALL, Access vraća samo jedinstvene zapise. To znači da se svaki grad vraća samo jednom sa fiksnim identičnim vrednostima.Pošto sada imate dovršeni upit za združivanje koji prikazuje ime svakog grada samo jednom, kao i opciju koja efikasno bira sve gradove, možete da koristite ovaj upit kao izvor zapisa za kombinovani okvir u obrascu. Koristeći ovaj konkretni primer kao model, možete da napravite kontrolu kombinovanog okvira u obrascu, postavite ovaj upit kao izvor zapisa, postavite svojstvo „Širina kolone“ za kolonu „Filter“ na 0 (nula) da biste ga vizuelno sakrili i da zatim postavite svojstvo „Povezana kolona“ na vrednost 1 da biste označili indeks druge kolone. U
Filtersvojstvu samog obrasca zatim možete da dodate kôd poput sledećeg da biste aktivirali filter obrasca pomoću vrednosti izabrane u kontroli kombinovanog okvira:Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'" Me.FilterOn = TrueKorisnik obrasca može zatim da filtrira zapise obrasca po imenu određenog grada ili da izabere <sve> da bi prikazao listu svih zapisa za sve gradove.