Kai "Access" užklausoje įtraukiate kelis duomenų šaltinius, naudodami sujungimus galite apriboti norimus matyti duomenis, atsižvelgdami į tai, kaip duomenų šaltiniai yra susiję tarpusavyje. Taip pat galite naudoti sujungimus, kad sujungtumėte įrašus iš abiejų duomenų šaltinių, kad kiekviena įrašų pora iš šaltinių taptų vienu įrašu užklausos rezultatuose.
Šiame straipsnyje aptariami įvairūs sujungimų tipai ir rodoma, kaip juos naudoti užklausoje. Numatyta, kad sujungimas automatiškai sukuriamas, jei jau yra ryšys tarp dviejų duomenų šaltinių, kuriuos naudojate užklausoje. Sujungimas taip pat sukuriamas, jei yra laukų, kurie aiškiai atitinka vieni kitus. Galite panaikinti automatiškai sukurtą sujungimą. Šiame straipsnyje pateikiama pagrindinė informacija apie lentelių ryšius, įskaitant tai, kaip ją sukurti.
Pastaba: Užklausas galite sujungti taip pat, kaip ir prie lentelių, taip pat galite prisijungti ir prie abiejų.
Šiame straipsnyje
Apžvalga
Duomenų bazė – tai duomenų lentelių rinkinys, kuriame yra loginiai ryšiai. Galite naudoti ryšius, kad sujungtumėte lenteles pagal jų bendrus laukus. Lentelė gali būti bet kokio ryšių skaičiaus dalis, tačiau kiekvienas ryšys visada turi tiksliai dvi lenteles. Užklausoje ryšys yra vaizduojamas sujungimu.
Kai įtraukiate lenteles į užklausą, Access sukuria sujungimus, sukurtus pagal ryšius, kurie buvo apibrėžti tarp lentelių. Galite rankiniu būdu kurti sujungimus užklausose, net jei jie neatspindi jau apibrėžtų ryšių. Jei naudojate kitas užklausas (o ne prie lentelių) kaip užklausos duomenų šaltinius, galite sukurti ryšius tarp šaltinio užklausų, taip pat tarp tų užklausų ir kitų lentelių, kurias naudojate kaip duomenų šaltinius.
Prisijungia panašiai kaip užklausos kriterijai, nes nustato taisykles, kurias duomenys turi atitikti, kad būtų įtraukti į užklausų operacijas. Skirtingai nei kriterijai, jungtys taip pat nurodo, kad kiekviena eilučių pora, atitinkanti sujungimo sąlygas, bus sujungta su įrašų rinkiniu, kad sudarytų vieną eilutę.
Yra keturi pagrindiniai sujungimo tipai: vidiniai sujungimai, išoriniai sujungimai, kryžminiai sujungimai ir nelygios jungtys. Šiame straipsnyje nagrinėjamas kiekvienas galite naudoti prisijungimo tipas, kodėl naudojate kiekvieną tipą ir kaip sukurti sujungimus.
Prisijungia prie užklausų, kurių ryšiai yra su lentelėmis: nurodymas, kaip dviejų šaltinių duomenys gali būti derinami, atsižvelgiant į jų bendrą duomenų reikšmę. Čia pateikiamas užklausos dizaino rodinio sujungimo iliustracija, kurios dialogo lange atidarytos sujungimo ypatybės:
Ši eilutė tarp lentelių atitinka sujungimą. Dukart spustelėkite sujungimą, kad atidarytumėte dialogo langą sujungimo ypatybės (pavaizduotas), ir peržiūrėkite arba pakeiskite sujungimą.
Jungtys kartais yra kryptinės. Šioje dialogo lango srityje rodoma, kuri lentelė yra jungimu, ir kokie laukai naudojami norint prisijungti prie lentelių.
Šioje srityje nustatomas sujungimo tipas: 1 parinktis yra vidinis sujungimas, 2 yra kairysis išoriniai sujungimo, o 3 – dešinysis išorinį sujungimą.
Galima naudoti laukus iš abiejų lentelių, o duomenys, kurie yra susiję su nurodyta užduotimi, rodomi kiekvienoje. Vidinio sujungimo metu jokie kiti duomenys neįtraukiami. Naudojant išorinį sujungimą, nesusiję vieno lentelės užrašai taip pat įtraukiami į užklausos rezultatus.
Sujungimų tipai
Yra keturi pagrindiniai sujungimo tipai: vidiniai sujungimai, išoriniai sujungimai, kryžminiai sujungimai ir nelygios jungtys. Kryžminis sujungimas ir nevienodas sujungimas yra Išplėstiniai sujungimo tipai ir retai naudojami, bet turėtumėte žinoti apie juos, kad būtų gerai suprantama, kaip veikia sujungimas.
Vidiniai sujungimai: tik susiję abiejų lentelių duomenys
Vidinis sujungimas yra toks, į kurį "Access" įtraukiamos tik lentelės duomenys, jei yra atitinkami duomenys susijusioje lentelėje, ir atvirkščiai. Didžiąją laiko dalį naudosite vidinius sujungimus. Kurdami sujungimą ir nenurodydami, kokio tipo prisijungimas yra, "Access" prisiima vidinį sujungimą. Vidiniai sujungimai yra naudingi, nes leidžia sujungti duomenis iš dviejų šaltinių, pagrįstų bendromis reikšmėmis, kad matytumėte tik duomenis, kai yra visas paveikslėlis.
Išoriniai sujungimai: tinkamai sujungti visi susiję duomenys ir visi likę vieno lentelės duomenys
Išorinė jungtis yra tarsi vidinis sujungimas, tačiau įtraukia likusias eilutes iš vienos iš lentelių. Išoriniai sujungimai yra kryptingi: kairysis išoriniai sujungimas yra visi kairiosios lentelės duomenys – pirmoji sujungimo lentelė – ir dešinysis išoriniai sujungimas yra visi dešiniosios lentelės įrašo – antroji "Join" lentelė.
Visas išoriniai sujungimai: visi duomenys, sujungti, kai įmanoma
Kai kuriose sistemose išoriniai sujungimo būdai gali apimti visas eilutes iš abiejų lentelių, kai jos sutampa su eilutėmis. Tai vadinama visišku išoriniu sujungimu, o programa "Access" jų nepalaiko. Tačiau galite naudoti kryžminį sujungimą ir kriterijus, kad pasiektumėte tokį patį efektą.
Kryžminis sujungimas: visi duomenys, sujungti visais įmanomais būdais
Didžiąją laiko dalį, kryžminis sujungimas yra šalutinė galimybė įtraukti dvi lenteles į užklausą ir tada pamiršti jas prisijungti. Programa "Access" interpretuos tai, kad norite matyti visus įrašus iš vienos lentelės kartu su kiekvienu įrašu iš kitos lentelės – kiekvieną galimą įrašų derinį. Kadangi jokie duomenys negali būti sujungti, šio tipo sujungimas retai pateikia naudingus rezultatus. Tačiau yra keletas atvejų, kai kryžminis sujungimas yra būtent tai, ko jums reikia.
Nevienodas sujungimas: kaip įprastas sujungimas, tačiau naudojant kitą palyginimą sujungti eilutes
Nevienodas sujungimas naudokite operatorių, išskyrus lygybės ženklą (=), kad palygintumėte reikšmes ir nustatytumėte, ar sujungti duomenis. Nevienodas sujungimas nėra aiškiai palaikomas, tačiau galite naudoti kryžminį sujungimą ir kriterijus, kad pasiektumėte tokį patį efektą.
Rodyti eilutes, kuriose abiejose sujungtose lentelėse yra bendroji reikšmė
Jei norite Rodyti tik tas eilutes, kuriose sujungtame lauke yra sutampančių reikšmių, naudokite vidinį sujungimą. "Access" automatiškai sukuria vidinį sujungimą.
Tai dažniausiai pasitaikantis sujungimų tipas. Jie nurodo užklausą, kurios eilutės vienoje iš sujungtų lentelių atitinka kitos lentelės eilutes, atsižvelgiant į sujungtuose laukuose esančius duomenis. Kai bus paleista užklausa su vidiniu prisijungimu, į užklausų operacijas bus įtrauktos tik tos eilutės, kurių abiejose sujungtose lentelėse yra bendroji reikšmė.
Kaip naudoti vidinį sujungimą?
Didžiąją laiko dalį jums nereikia nieko daryti, kad galėtumėte naudoti vidinį sujungimą. Jei lentelėse, kurias įtraukiate į užklausą jau turite ryšių, "Access" automatiškai sukuria vidinį sujungimą tarp kiekvienos susijusių lentelių 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 vidinį sujungimą, jei į užklausą įtraukiate dvi lenteles, o kiekvienoje iš jų 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 nuorodų vientisumas nėra vykdomas.
Jei į užklausą įtrauksite užklausų ir nesukūrėte ryšių tarp šių užklausų, "Access" automatiškai nesukuria vidinių sujungimų tarp šių užklausų arba užklausų ir lentelių. Paprastai juos turite sukurti patys. Kuriate vidinį sujungimą nuvilkę lauką iš vieno duomenų šaltinio į kito duomenų šaltinio lauką. „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.1 laukas palyginkite Lentelė2.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 vidinę sujungimo sintaksę rasite temoje Vidinė sujungimo operacija.
Rodyti visas eilutes iš vienos lentelės ir atitinkamos eilutės iš kitos lentelės
Išoriniai sujungimai nurodo užklausą, kuri nurodo, kad nors kelios abiejų sujungimo pusių eilutės tiksliai atitinka, užklausa turi apimti visas eilutes iš vienos lentelės, taip pat tas eilutes iš kitos lentelės, kurios bendrina abiejų sujungimo pusių bendrąją reikšmę.
Išoriniai sujungimai gali būti palikti išoriniai sujungimai arba gali būti dešiniojo išorinių sujungimų. Kairiojo išorinį sujungimą užklausa apima visas eilutes iš pirmos lentelės, esančios sąlygoje SQL sakinys, ir tik tas eilutes iš kitos lentelės, kurių sujungtame lauke yra bendros abiejų lentelių reikšmės. Dešiniojo išorinį sujungimą užklausa apima visas eilutes iš antrosios lentelės, esančios sąlygoje SQL sakinys, ir tik tas eilutes iš kitos lentelės, kurių sujungtame lauke yra bendros abiejų lentelių reikšmės.
Pastaba: Galite lengvai nustatyti, kuri lentelė yra kairioji lentelė arba Dešinioji lentelė, dukart spustelėję prisijungti, tada ieškote dialogo lange sujungimo ypatybės . Taip pat galite perjungti SQL rodinį, tada išnagrinėti sąlygą FROM.
Kadangi kai kurios vienos išorinės jungties pusės eilutės neturi atitinkamų eilučių iš kitos lentelės, kai kurios užklausos rezultatai iš tos kitos lentelės bus tušti, kai eilutės nesutampa.
Kaip naudoti išorinį sujungimą?
Išorinį sujungimą kuriate modifikuodami esamą vidinį sujungimą. Jei nėra vidinio sujungimo, galite jį sukurti, tada pakeisti jį išoriniu sujungimu.
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 pasirinkite pasirinkimus, išvardytus šalia 2 parinktis ir 3parinktį.
-
Spustelėkite norimą naudoti parinktį, tada – Gerai.
-
"Access" rodo sujungimą ir rodo rodyklę, kuri nukreipia iš duomenų šaltinio, kur visos eilutės bus įtrauktos į duomenų šaltinį, kuriame bus įtrauktos tik sujungimo sąlygą atitinkančios eilutės.
Neaiškūs išoriniai sujungimai
Jei sukuriate užklausą, kurioje yra KAIRYSIS sujungimas ir vidinis sujungimas, "Access" gali negalėti nustatyti, kurią sujungimo operaciją atlikti pirmiausia. Kadangi rezultatai skiriasi atsižvelgiant į tai, ar iš pradžių atliekamas kairysis arba vidinis sujungimas, "Access" rodo klaidos pranešimą:
Norėdami ištaisyti šią klaidą, turite modifikuoti užklausą, kad ji būtų aiški, kuri gali atlikti pirmąjį sujungimą.
Išorinį sujungimą turinti SQL sintaksė
Išoriniai sujungimai nurodyti "SQL" sąlygoje FROM, kaip parodyta toliau:
NUO 1lentelė [Left | DEŠINĖJE] prie Lentelė1
. 1 laukas palyginkite lentelę2. Laukas2
Operacijos 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šorinį sujungimo sintaksę rasite temoje LEFT JOIN, right Join Operations.
Rodyti visas abiejų lentelių eilutes ir prie jų prisijungti, kai yra bendroji reikšmė
Jei norite Rodyti visas eilutes iš dviejų lentelių ir prie jų prisijungti pagal įprastas reikšmes, naudokite visą išorinį sujungimą. "Access" aiškiai nepalaiko visų išorinių sujungimų, tačiau galite pasiekti tą patį efektą naudodami "Union" užklausą. Toliau aprašoma, kaip tai padaryti, tačiau jei norite gauti daugiau informacijos apie "Union" užklausas, žr. skyrių taip pat žr .
Norėdami naudoti "Union" užklausą, kad būtų atliktas visas vidinis sujungimas:
-
Sukurkite užklausą, kuri turi kairįjį išorinį sujungimą lauke, kurį norite naudoti visiškam 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ąlygą FROM, tada paspauskite klavišą "įveskite".
-
Įveskite UNION ir paspauskite klavišą ENTER.
Pastaba: Nenaudokite viso raktinio žodžio, kai naudojate "Union" užklausą, kad atliktumėte visą išorinį sujungimą.
-
Paspauskite CTRL + V, kad įklijuotumėte SQL kodą, kurį nukopijavote atlikdami 3 veiksmą.
-
Įklijuotame kode pakeiskite kairįjį sujungimą į dešinįjį sujungimą.
-
Panaikinkite kabliatašk antrosios iš sąlygų pabaigoje, tada paspauskite klavišą "įveskite".
-
Įtraukite sąlygą WHERE, kuri nurodo, kad sujungimo lauko reikšmė yra neapibrėžta pirmojoje lentelėje, pateiktoje sąlygoje FROM (kairioji lentelė).
Pavyzdžiui, jei sąlyga FROM yra:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Būtų įtraukta sąlyga WHERE:
WHERE Products.ID IS NULL
-
Įveskite kabliatašk (;) sąlygą WHERE, 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ų, nes jie nėra aiškiai atvaizduoti Access. Kryžminiu sujungimu kiekviena eilutė iš vienos lentelės yra sujungta su kiekviena eilute iš kitos lentelės, todėl tai yra vadinamasis kryžminis produktas arba Dekarto produktas. Kaskart paleidus užklausą su lentelėmis, kurios nėra tiesiogiai sujungtos, rezultatas yra kryžminis produktas. Kryžminis sujungimas paprastai yra netyčinis, 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ų kombinaciją tarp dviejų lentelių ar užklausų, naudokite kryžminį sujungimą. Pavyzdžiui, Tarkime, kad jūsų įmonė turi įspūdingų metų ir jūs ketinate suteikti nuolaidų klientams. Galite sukurti užklausą, kuri susumuos kiekvieno kliento pirkinius, sukurti mažą lentelę, kurioje yra keli galimi grąžinimo procentai, ir sujungti dvi kitoje užklausoje, atliekančia kryžminį sujungimą. Jūs turite užklausą, kuri pateikia kiekvieno kliento hipotetinių nuolaidų rinkinį.
Kaip naudoti kryžminį sujungimą?
Kryžminis sujungimas sukuriamas kiekvieną kartą, kai įtraukiate lenteles arba užklausas į užklausą ir nesukursite bent vieno aiškaus prisijungimo prie kiekvienos lentelės ar užklausos. Programa "Access" sujungia kiekvieną eilutę iš kiekvienos lentelės arba užklausos, kuri nėra tiesiogiai sujungta su jokia kita lentele arba užklausa su kiekviena kita rezultatų eilute. Apsvarstykite grąžinimo scenarijų iš ankstesnio paragrafo. Tarkime, kad turite "91" klientus ir norite peržvelgti penkis galimus grąžinimo procentus. Jūsų kryžminis sujungimas sukuria 455 eilutes (91 ir 5 produktą).
Kaip įsivaizduojate, netyčinis kryžminis sujungimas gali sukurti didelius užklausos rezultatų eilučių skaičius. Be to, šie rezultatai paprastai yra beprasmiška, nes jei iš tikrųjų neketinate kiekvieną eilutę sujungti su kiekviena kita eilute, Didžioji dalis kombinuotų eilučių, rodomų rezultatuose, nebus prasmės. Galiausiai, užklausos, naudojančios netyčinį kryžminį sujungimą, gali užtrukti.

1. Apibraukti laukai turi būti sujungti vienas su kitu.

1. Užsirašykite labai daug įrašo.

1. Nepamirškite, kad įrašo skaičius yra daug mažesnis.
Lentelių sujungimas pagal lauko reikšmių nelygiavertiškumą
Sujungimai neturi būti pagrįsti sujungtų laukų lygiavertiškumu . Sujungimas gali būti pagrįstas bet kokiu palyginimo operatoriumi, pvz., daugiau nei (>), mažiau nei (<) arba nelygu (<>). Sujungimai, kurie nėra pagrįsti lygiavertiškumu, vadinami Nelygiavertis sujungimas.
Jei norite sujungti dviejų duomenų šaltinių eilutes, pagrįstas nelygiomis lauko reikšmėmis, naudokite nelygų sujungimą. Paprastai Nelygiavertis sujungimas yra pagrįstas daugiau nei (>), mažiau nei (<), daugiau arba lygu (>=) arba mažiau arba lygu (<=) palyginimo operatorių. Nelygiavertis sujungimas, pagrįstas "nelygu (<>) operatoriumi, gali pateikti beveik tiek eilučių, kiek jų yra kryžminis sujungimas, o rezultatus gali būti sunku interpretuoti.
Kaip naudoti nelygiavertį sujungimą?
Nevienodas sujungimas nepalaikomas dizaino rodinyje. Jei norite juos naudoti, turite tai atlikti naudodami SQL rodinį. Tačiau galite sukurti sujungimą dizaino rodinyje, pereiti prie SQL rodinio, surasti lygu (=) palyginimo operatorių ir pakeisti jį operatoriumi, kurį norite naudoti. Kai tai padarysite, galite atidaryti tik dizaino rodinyje esančią užklausą, jei pirmą kartą pakeisite lyginimo operatorių lygu (=) SQL rodinyje.
Sujungimo panaikinimas
Jei "Access" automatiškai sukuria sujungimą, kurio nenorite, arba jei kuriate sujungimą per klaidą, pvz., sujungimą tarp dviejų laukų, kurių duomenų tipai nepanašūs, 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ą šalinti sujungimą, tada spustelėkite Naikinti.