Kai įtraukiate kelis duomenų šaltinius į "Access" užklausą, naudojate sujungimus, kad apribotumėte įrašus, kuriuos norite matyti, atsižvelgdami į tai, kaip duomenų šaltiniai yra tarpusavyje susiję. Taip pat sujungimus naudojate norėdami sujungti įrašus iš abiejų duomenų šaltinių, kad kiekviena įrašų iš šaltinių pora užklausos rezultatuose taptų vienu įrašu.
Šiame straipsnyje aptariami įvairių tipų sujungimai ir parodoma, kaip juos naudoti užklausoje. Pagal numatytuosius nustatymus jungtis sukuriama automatiškai, jei tarp dviejų duomenų šaltinių, kuriuos naudojate užklausoje, jau yra ryšys. Sujungimas taip pat sukuriamas, jei yra laukų, kurie aiškiai atitinka vienas kitą. Galite panaikinti automatiškai sukurtą jungtį. Šiame straipsnyje pateikiama pagrindinė informacija apie lentelių ryšius, įskaitant tai, kaip jį sukurti.
Pastaba: Galite sujungti užklausas taip pat, kaip sujungiate lenteles, taip pat galite sujungti abi.
Šiame straipsnyje
Apžvalga
Duomenų bazė yra duomenų lentelių rinkinys, kuriame yra loginiai ryšiai. Ryšius naudojate norėdami sujungti lenteles pagal bendrus laukus. Lentelė gali būti bet kokio ryšių skaičiaus dalis, bet kiekvienas ryšys visada turi lygiai dvi lenteles. Užklausoje ryšys vaizduojamas sujungimu.
Kai į užklausą įtraukiate lentelių, Access sukuria sujungimus, pagrįstus ryšiais, kurie buvo apibrėžti tarp lentelių. Galite rankiniu būdu kurti sujungimus užklausose, net jei jie neatspindi jau apibrėžtų ryšių. Jei kaip užklausos duomenų šaltinius naudojate kitas užklausas (o ne lenteles arba kartu su jomis), galite kurti jungtis tarp šaltinio užklausų, taip pat tarp tų užklausų ir visų lentelių, kurias naudojate kaip duomenų šaltinius.
Sujungimai veikia panašiai kaip užklausos kriterijai, kai jie nustato taisykles, kurios turi atitikti duomenis, kad būtų įtraukti į užklausos operacijas. Skirtingai nei kriterijai, sujungimai taip pat nurodo, kad kiekviena eilučių pora, atitinkanti sujungimo sąlygas, bus sujungta įrašų rinkinyje, kad būtų sudaryta viena eilutė.
Yra keturi pagrindiniai sujungimų tipai: vidiniai sujungimai, išoriniai sujungimai, kryžminiai sujungimai ir nevienodi sujungimai. Šiame straipsnyje aptariamas kiekvieno tipo galimas naudoti sujungimas, kodėl naudojate kiekvieną tipą ir kaip kurti sujungimus.
Sujungimai skirti užklausoms, kokie ryšiai su lentelėmis: nurodymas, kaip dviejų šaltinių duomenis galima derinti pagal bendras duomenų reikšmes. Pateikiame užklausos dizaino rodinio sujungimo ypatybių atidarymo dialogo lange iliustraciją:
Ši linija tarp lentelių reiškia sujungimą. Dukart spustelėkite jungtį, kad atidarytumėte dialogo langą Sujungimo ypatybės (pavaizduotas) ir peržiūrėtumėte arba pakeistumėte sujungimą.
Sujungimai kartais yra kryptiniai. Šioje dialogo lango srityje rodoma, kuri lentelė yra sujungimo lentelė ir kurie laukai naudojami lentelėms sujungti.
Ši sritis nustato sujungimo tipą: 1 parinktis yra vidinis sujungimas, 2 – kairysis išorinis sujungimas, 3 – dešinysis išorinis sujungimas.
Galima naudoti abiejų lentelių laukus, o duomenys, susiję su nurodyta užduotimi, rodomi kiekvienoje iš jų. Vidiniame sujungime jokie kiti duomenys neįtraukiami. Išoriniame sujungime nesusiję įrašai iš vienos lentelės taip pat įtraukiami į užklausos rezultatus.
Jungčių tipai
Yra keturi pagrindiniai sujungimų tipai: vidiniai sujungimai, išoriniai sujungimai, kryžminiai sujungimai ir nevienodi sujungimai. Kryžminiai sujungimai ir nelygios sujungimai yra išplėstiniai jungčių tipai ir yra retai naudojami, tačiau turėtumėte apie juos žinoti, kad gerai suprastumėte, kaip veikia sujungimai.
Vidiniai sujungimai: sujungti tik susiję duomenys iš abiejų lentelių
Vidinis sujungimas yra tas, kuriame "Access" įtraukia duomenis tik iš lentelės, jei susijusioje lentelėje yra atitinkamų duomenų, ir atvirkščiai. Dažniausiai naudosite vidinius sujungimus. Kai kuriate jungtį ir nenurodote, koks yra sujungimas, "Access" daro prielaidą, kad jums reikia vidinio sujungimo. Vidiniai sujungimai yra naudingi, nes jie leidžia sujungti dviejų šaltinių duomenis pagal bendrinamas reikšmes, todėl duomenis matysite tik tada, kai bus pateiktas išsamus paveikslėlis.
Išoriniai sujungimai: visi susiję duomenys sujungti tinkamai, taip pat visi likę įrašai iš vienos lentelės
Išorinis sujungimas yra tarsi vidinis sujungimas, tačiau prideda likusias eilutes iš vienos lentelės. Išoriniai sujungimai yra kryptiniai: kairysis išorinis sujungimas apima visus įrašus iš kairiosios lentelės – pirmą sujungimo lentelę , o dešinysis išorinis sujungimas apima visus įrašus iš dešiniosios lentelės – antrą sujungimo lentelę.
Visos išorinės sujungimai: visi duomenys, sujungti, jei įmanoma
Kai kuriose sistemose išorinis sujungimas gali apimti visas eilutes iš abiejų lentelių, o eilutės sujungiamos, kai jos atitinka. Tai vadinama visišku išoriniu sujungimu, o "Access" aiškiai jų nepalaiko. Tačiau galite naudoti kryžminį sujungimą ir kriterijus, kad pasiektumėte tą patį rezultatą.
Kryžminiai sujungimai: visi duomenys, sujungti visais įmanomais būdais
Daugeliu atvejų kryžminė jungtis yra šalutinis poveikis, kai į užklausą įtraukiamos dvi lentelės ir pamirštama jas sujungti. "Access" supranta, kad norite matyti kiekvieną įrašą iš vienos lentelės kartu su kiekvienu kitos lentelės įrašu – visais galimais įrašų deriniais. Kadangi negalima sujungti jokių duomenų, tokio tipo sujungimai retai pateikia naudingų rezultatų. Tačiau yra keletas atvejų, kai kryžminis sujungimas yra tai, ko jums reikia.
Nelygios sujungimai: pvz., įprasta jungtis, bet eilučių sujungimui naudoti skirtingą palyginimą
Nelygios sujungimai naudoja ne lygybės ženklą (=), o kitą operatorių reikšmėms palyginti ir nustatyti, ar ir kaip sujungti duomenis. Nevienodi sujungimai nėra aiškiai palaikomi, tačiau galite naudoti kryžminį sujungimą ir kriterijus, kad pasiektumėte tą patį rezultatą.
Rodyti eilutes, kuriose yra bendra reikšmė abiejose sujungtose lentelėse
Jei norite rodyti tik tas eilutes, kurių reikšmės sutampa sujungtame lauke, naudokite vidinį sujungimą. "Access" automatiškai sukuria vidinius sujungimus.
Tai dažniausiai pasitaikantis sujungimų tipas. Jie nurodo užklausai, kad vienos iš sujungtų lentelių eilutės atitinka kitos lentelės eilutes, remiantis sujungtų laukų duomenimis. Vykdant užklausą su vidiniu sujungimu, į užklausos operacijas bus įtraukiamos tik tos eilutės, kurių bendra reikšmė yra abiejose sujungtose lentelėse.
Kaip naudoti vidinį sujungimą?
Daugeliu atvejų jums nereikia nieko daryti, kad galėtumėte naudoti vidinį sujungimą. Jei lentelės, kurias įtraukiate į užklausą, jau turi ryšių, "Access" automatiškai sukuria vidinį sujungimą tarp kiekvienos susijusios lentelės poros, kai įtraukiate lenteles. Jei nuorodų vientisumas įgalintas, „Access“ virš sujungimo eilutės taip pat rodo „1“, reiškiantį, kuri ryšys „vienas – daug“ lentelė yra dalis „vienas“, ir rodo begalybės simbolį (∞), reiškiantį, kuri lentelė yra dalis „daugelis“.
Net jei nesukūrėte ryšių, "Access" automatiškai sukuria vidinius sujungimus, jei į užklausą įtraukiate dvi lenteles, o kiekvienoje lentelėje yra laukas su tuo pačiu arba suderinamu duomenų tipu, o vienas iš sujungimo laukų yra pirminis raktas. Šiuo atveju simboliai "vienas" ir "daugelis" nerodomi, nes neįgalintas nuorodų vientisumas.
Jei į užklausą įtraukiate užklausų ir nesukuriate ryšių tarp tų užklausų, "Access" automatiškai nesukuria vidinių jungčių tarp tų užklausų arba tarp užklausų ir lentelių. Paprastai, jūs turėtumėte sukurti juos patys. Vidinį sujungimą sukuriate vilkdami lauką iš vieno duomenų šaltinio į lauką kitame duomenų šaltinyje. „Access“ rodo liniją tarp dviejų laukų, kuri nurodo sukurtą jungtį.
Vidinio sujungimo SQL sintaksė
Vidiniai sujungimai nurodyti SQL sąlygoje FROM, kaip parodyta toliau:
FROM lentelė1 INNER JOIN lentelė2 ON lentelė1.field1 compare table2.laukas2
Operacija INNER JOIN yra sudaryta iš šių dalių:
Dalis |
Aprašas |
lentelė1, lentelė2 |
Lentelių, kurių įrašai suderinti, pavadinimai. |
laukas1, laukas2 |
Sujungiamų laukų pavadinimai. Jei jie nėra skaičius, laukai turi būti to paties duomenų tipas ir turėti vienodos rūšies duomenis, bet jų pavadinimas negali būti toks pat. |
palyginti |
Bet kuris santykinis lyginimo operatorius: „=“, „<“, „>“, „<=“, „>=“ arba „<>“. |
Daugiau informacijos apie vidinio sujungimo sintaksę žr. temoje OPERACIJA INNER JOIN.
Rodyti visas vienos lentelės eilutes ir atitinkamas kitos lentelės eilutes
Išoriniai sujungimai nurodo užklausą, kad nors kai kurios eilutės abiejose sujungimo pusėse tiksliai atitinka, užklausoje turi būti visos eilutės iš vienos lentelės, taip pat tos eilutės iš kitos lentelės, kurios turi bendrą reikšmę abiejose sujungimo pusėse.
Išoriniai sujungimai gali būti kairieji išoriniai sujungimai arba dešinieji išoriniai sujungimai. Kairiojo išorinio sujungimo užklausoje yra visos eilutės iš pirmosios lentelės SQL sakinio FROM sąlygoje ir tik tos eilutės iš kitos lentelės, kuriose jungiamajame lauke yra abiems lentelėms bendros reikšmės. Dešiniame išoriniame sujungime užklausoje yra visos eilutės iš antros lentelės SQL sakinio FROM sąlygoje ir tik tos eilutės iš kitos lentelės, kuriose jungiamajame lauke yra abiems lentelėms bendros reikšmės.
Pastaba: Galite lengvai nustatyti, kuri lentelė yra kairioji arba dešinioji nurodyto sujungimo lentelė, dukart spustelėję sujungimą ir tada pažvelgę į dialogo langą Sujungimo ypatybės . Taip pat galite perjungti į SQL rodinį, tada patikrinti sąlygą FROM.
Kai kurios eilutės, esančių vienoje išorinio sujungimo pusėje, neturės atitinkamų kitos lentelės eilučių, todėl kai kurie užklausos rezultatai iš tos kitos lentelės bus tušti, kai eilutės neatitinka.
Kaip naudoti išorinį sujungimą?
Išorinį sujungimą galite sukurti modifikuodami esamą vidinį sujungimą. Jei vidinio sujungimo nėra, galite jį sukurti ir pakeisti į išorinį sujungimą.
Vidinio sujungimo keitimas išoriniu sujungimu
-
Užklausos dizaino rodinyje dukart spustelėkite norimą keisti sujungimą.
Bus atidarytas dialogo langas Sujungimo ypatybės.
-
Dialogo lange Sujungimo ypatybės atkreipkite dėmesį į šalia 2 ir 3 parinkties išvardytus pasirinkimus.
-
Spustelėkite norimą naudoti parinktį, tada – Gerai.
-
"Access" rodo jungtį ir rodo rodyklę, nukreiptą iš duomenų šaltinio, kur visos eilutės bus įtrauktos į duomenų šaltinį, kur bus įtrauktos tik tos eilutės, kurios atitinka sujungimo sąlygą.
Nevienareikšmiai išoriniai sujungimai
Jei sukuriate užklausą, kurioje yra LEFT JOIN ir INNER JOIN, "Access" gali nepavykti nustatyti, kurią sujungimo operaciją atlikti pirmiausia. Kadangi rezultatai skiriasi atsižvelgiant į tai, ar iš pradžių atliekamas kairysis sujungimas, ar vidinis sujungimas, "Access" rodo klaidos pranešimą:
Norėdami ištaisyti šią klaidą, turite modifikuoti užklausą, kad būtų aišku, kurį sujungimą atlikti pirmiausia.
Išorinio sujungimo SQL sintaksė
Išoriniai sujungimai nurodyti SQL sąlygoje FROM, kaip parodyta toliau:
FROM lentelė1 [ LEFT | RIGHT ] JOIN lentelė2
ON lentelė1.laukas1 palyginti lentelę2.laukas2Operacijos LEFT JOIN ir RIGHT JOIN yra sudarytos iš šių dalių:
Dalis |
Aprašas |
lentelė1, lentelė2 |
Lentelių, kurių įrašai suderinti, pavadinimai. |
laukas1, laukas2 |
Sujungiamų laukų pavadinimai. Laukai turi būti to paties duomenų tipas ir turėti vienodos rūšies duomenis, bet jie neprivalo turėti to paties pavadinimo. |
palyginti |
Bet kuris santykinis lyginimo operatorius: „=“, „<“, „>“, „<=“, „>=“ arba „<>“. |
Daugiau informacijos apie išorinio sujungimo sintaksę žr. temoje LEFT JOIN, RIGHT JOIN operacijos.
Rodyti visas eilutes iš abiejų lentelių ir sujungti jas ten, kur yra bendra reikšmė
Jei norite rodyti visas eilutes iš dviejų lentelių ir sujungti jas pagal bendrąsias reikšmes, naudokite visą išorinį sujungimą. "Access" aiškiai nepalaiko visų išorinių sujungimų, bet tą patį poveikį galite pasiekti naudodami "union" užklausą. Šioje procedūroje aiškinama, kaip tai padaryti, bet jei norite gauti daugiau informacijos apie "union" užklausas, žr. skyrių Taip pat žiūrėkite.
Norėdami naudoti "union" užklausą, kad atliktumėte visą išorinį sujungimą:
-
Sukurkite užklausą su kairiuoju išoriniu sujungimu lauke, kurį norite naudoti visam išoriniam sujungimui.
-
Skirtuko lapo Pagrindinis grupėje Rodiniai spustelėkite Rodinys, tada spustelėkite SQL rodinys.
-
Paspauskite CTRL + C, kad nukopijuotumėte SQL kodą.
-
Panaikinkite kabliataškį sąlygos FROM pabaigoje ir paspauskite ENTER.
-
Įveskite UNION ir paspauskite klavišą ENTER.
Pastaba: Nenaudokite raktažodžio ALL, kai naudojate "union" užklausą viso išorinio sujungimo atlikimui.
-
Paspauskite CTRL + V, kad įklijuotumėte SQL kodą, kurį nukopijavote atlikdami 3 veiksmą.
-
Įklijuotame kode pakeiskite LEFT JOIN į RIGHT JOIN.
-
Panaikinkite kabliataškį antrosios sąlygos FROM pabaigoje ir paspauskite ENTER.
-
Įtraukite sąlygą WHERE, kuri nurodo, kad sujungimo lauko reikšmė yra NULL pirmoje lentelėje, nurodytoje sąlygoje FROM (kairiojoje lentelėje).
Pavyzdžiui, jei sąlyga FROM yra:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Turėtumėte įtraukti šią sąlygą WHERE:
WHERE Products.ID IS NULL
-
Įveskite kabliataškį (;) sąlygos WHERE pabaigoje, kad nurodytumėte "union" užklausos pabaigą.
-
Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Kryžminiai sujungimai
Kryžminiai sujungimai skiriasi nuo vidinių ir išorinių sujungimų tuo, kad jie nėra aiškiai pateikti Access. Naudojant kryžminę jungtį, kiekviena eilutė iš vienos lentelės sujungiama su kiekviena eilute iš kitos lentelės, todėl gaunamas kryžminis produktas arba dekarto produktas. Kai vykdote užklausą, kurioje yra lentelių, kurios nėra aiškiai sujungtos, gaunamas kryžminis produktas. Kryžminiai sujungimai paprastai yra netyčiniai, tačiau yra atvejų, kai jie gali būti naudingi.
Kodėl turėčiau naudoti kryžminį sujungimą?
Jei norite patikrinti kiekvieną galimą eilučių derinį tarp dviejų lentelių ar užklausų, naudokite kryžminę jungtį. Pavyzdžiui, tarkime, kad jūsų įmonėje buvo įspūdingi metai, o jūs ketinate grąžinti savo klientams. Galite sukurti užklausą, kuri susumuoja kiekvieno kliento pirkinius, sukurti nedidelę lentelę su keliais galimais grąžinimo procentais ir sujungti juos kitoje užklausoje, kuri atlieka kryžminį sujungimą. Gausite užklausą, kurioje rodomas kiekvieno kliento hipotetinių grąžinimų rinkinys.
Kaip naudoti kryžminį sujungimą?
Kryžminė jungtis sukuriama kaskart, kai į užklausą įtraukiate lentelių ar užklausų ir nesukuriate kiekvienos lentelės ar užklausos bent vienos aiškaus sujungimo. "Access" sujungia kiekvieną eilutę iš kiekvienos lentelės ar užklausos, kuri nėra tiesiogiai sujungta su jokia kita lentele ar užklausa, su kiekviena kita rezultatų eilute. Apsvarstykite ankstesnės pastraipos grąžinimo scenarijų. Tarkime, kad turite 91 klientą ir norite peržiūrėti penkis galimus grąžinimo procentus. Jūsų kryžminis sujungimas sukuria 455 eilutes (produktas 91 ir 5).
Kaip galite įsivaizduoti, netyčiniai kryžminiai sujungimai užklausos rezultatuose gali sukurti didžiulį eilučių skaičių. Be to, šie rezultatai paprastai yra bereikšmiai, nes jei iš tikrųjų neketinate sujungti kiekvienos eilutės su kiekviena kita eilute, dauguma rezultatuose rodomų sujungtų eilučių nebus prasmingos. Galiausiai, užklausos, kurios naudoja netyčinius kryžminius sujungimus, gali užtrukti labai ilgai.
1. Apibraukti laukai turi būti sujungti tarpusavyje.
1. Atkreipkite dėmesį į labai daug įrašų.
1. Atkreipkite dėmesį, kad įrašų skaičius yra daug mažesnis.
Lentelių sujungimas remiantis nelygybe lauko reikšmėse
Sujungimai neprivalo būti pagrįsti sujungtų laukų lygiavertiškumu . Sujungimas gali būti pagrįstas bet kuriuo lyginimo operatoriumi, pvz., daugiau nei (>), mažiau nei (<) arba nelygu (<>). Sujungimai, kurie nėra pagrįsti lygiavertiškumu, vadinami nelygiais sujungimais.
Jei norite sujungti dviejų duomenų šaltinių eilutes, pagrįstas nelygu laukų reikšmėmis, naudokite nelygią jungtį. Paprastai nevienodi sujungimai yra pagrįsti daugiau nei (>), mažiau nei (<), daugiau arba lygu (>=) arba mažiau arba lygu (<=) lyginimo operatoriams. Nelygios sujungimai, pagrįsti nelygu (<>) operatorius gali grąžinti beveik tiek eilučių, kiek kryžminių sujungimų, o rezultatus gali būti sunku suprasti.
Kaip naudoti nelygią jungtį?
Nelygios sujungimai dizaino rodinyje nepalaikomi. Jei norite juos naudoti, turite tai padaryti naudodami SQL rodinį. Tačiau galite sukurti sujungimą dizaino rodinyje, perjungti į SQL rodinį, rasti lygų (=) lyginimo operatorių ir pakeisti jį į norimą naudoti operatorių. Tai atlikę, galite dar kartą atidaryti užklausą dizaino rodinyje, jei pirmiausia pakeisite lyginimo operatorių į lygų (=) SQL rodinyje.
Naikinti jungtį
Jei "Access" automatiškai sukuria sujungimą, kurio nenorite, arba jei per klaidą sukuriate sujungimą, pvz., jungtį tarp dviejų laukų, kurių duomenų tipai skirtingi, galite panaikinti sujungimą.
-
Užklausos dizaino tinklelyje spustelėkite norimą pašalinti sujungimą.
-
Paspauskite DELETE.
–arba–
-
Užklausos dizaino tinklelyje dešiniuoju pelės mygtuku spustelėkite norimą pašalinti sujungimą, tada spustelėkite Naikinti.