Lentelių ir užklausų sujungimas

Svarbu :  Šis straipsnis išverstas naudojant mašininį vertimą, žr. atsakomybės atsisakymą. Su šio straipsnio versija anglų kalba galite susipažinti čia .

Kai į užklausą įtraukiate kelis duomenų šaltinius, naudokite sujungimus, kad apribotumėte įrašus, kurių nenorite matyti, atsižvelgdami į tai, kaip duomenys yra vienas su kitu susiję. Taip pat naudokite sujungimus įrašams iš abiejų duomenų šaltinių derinti taip, kad kiekviena įrašų pora iš šaltinių taptų vienu įrašu užklausos rezultatuose.

Šiame straipsnyje aptariami įvairūs sujungimų tipai ir parodo, kaip juos naudoti užklausoje. Pagal numatytuosius nustatymus sujungimo automatiškai sukuriama jei jau yra ryšio tarp dviejų duomenų šaltinius, galite naudoti užklausoje. Sujungimo sukuriamas taip pat, jei yra laukų, kurie aiškiai atitinka tarpusavyje. Galite panaikinti yra automatiškai sukurtą prisijungti. Šiame straipsnyje pateikiama pagrindinė informacija apie lentelių ryšius, įskaitant tai, kaip ją sukursite.

Pastaba : Sujunkite lenteles, ir taip pat galite prisijungti ir taip pat galite prisijungti užklausų.

Šiame straipsnyje

Peržvalga

Rodomos eilutės, kurioje yra bendrų reikšmių abiejų sujungtų lentelių

Rodomos visos eilutės iš vienos lentelės ir atitinkamos eilutės iš kitos lentelės

Rodomos visos eilutės iš abiejų lentelių, ir prie jų prisijungti, jei yra bendrų reikšmių

Kryžminis sujungimas

Sujunkite lenteles, atsižvelgiant į laukų reikšmių nelygiavertiškumą

Sujungimo naikinimas

Peržvalga

Duomenų bazėje yra lentelių duomenų, kad ant loginių ryšių tarpusavyje rinkinys. Prisijungti lentelių laukus, kad jie turi bendrą naudojate ryšius. Lentelės gali būti bet koks simbolių ryšių dalis, tačiau kiekvieno ryšio visada turi tiksliai dvi lenteles. Užklausos, ryšys rodomas sujungimu.

Įtraukus lenteles į užklausą programa Microsoft Office Access 2007 sukuria sujungimus atsižvelgdama į nurodytą ryšį tarp lentelių. Galite kurti sujungimus ir užklausas neautomatiniu būdu, net jeigu jie nenurodo jau nustatytų ryšių. Jei naudojate kitas užklausas (vietoj lentelių arba kaip lentelių priedą) kaip užklausos duomenų šaltinį, galite kurti sujungimus tarp šaltinio užklausų bei tarp tų užklausų ir bet kurių lentelių, kurias jūs naudojate kaip duomenų šaltinį.

Sujungimai, panašiai kaip užklausos kriterijai, nustato taisykles, kad į užklausų operacijas įtrauktini duomenys turi sutapti. Tačiau skirtingai nuo užklausos kriterijų, sujungimai nurodo, kad kiekviena eilučių pora, atitinkanti sujungimo sąlygas, sujungiama į įrašų rinkinį, kad sudarytų vieną eilutę.

Yra keturi pagrindiniai sujungimo tipai: vidinis, išorinis, kryžminis ir nelygiavertis. Šiame straipsnyje tiriamas kiekvienas galimas naudoti sujungimo tipas, kodėl jis naudojamas ir kaip jį sukurti.

Puslapio viršus

Rodomos eilutės, kurioje yra bendrų reikšmių abiejų sujungtų lentelių

Jei norite, kad būtų rodomos tik tos eilutės, kuriose yra atitinkamų reikšmių jungtiniame lauke, naudokite tik vidinį sujungimą. „Access“ sukurs vidinius sujungimus automatiškai.

Vidinis sujungimas yra dažniausiai pasitaikantis sujungimo tipas. Jį naudojant užklausoje, nurodoma, kad vienos iš sujungtų lentelių eilutės atitinka kitos lentelės eilutes atsižvelgiant į sujungtų laukų duomenis. Paleidus užklausą, turinčią vidinį sujungimą, į užklausos operacijas į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 naudoti vidinį sujungimą. Jei lenteles, kurias įtraukiate į užklausą jau yra ryšių, "Access" automatiškai kuria vidinio sujungimo tarp visų susijusių lentelių, kai norite įtraukti lenteles. Jei nuorodų vientisumas būtų vykdomas, Access virš sujungimo liniją, kuri lentelė yra "vienas" pusėje į ryšys „vienas – daug“ ir begalybės simbolis () parodyti, kuri lentelė yra pusėje "daug" taip pat rodo "1".

Net jei nekūrėte ryšių, programa Access automatiškai sukuria vidinį sujungimą, jei į užklausą įtraukiate dvi lenteles, kuriose yra laukas, turintis tokius pačius arba suderinamo tipo duomenis, o vienas iš sujungimo laukų yra pirminis raktas. Simboliai „vienas“ ir „daugelis“ šiuo atveju nerodomi, nes nuorodų vientisumas neįgalintas.

Jei prie užklausos pridedate kitas užklausas ir tarp jų nesukuriate ryšių, programa Access automatiškai nesukuria vidinio sujungimo tarp tų užklausų ar užklausų ir lentelių. Paprastai turite sukurti jį patys. Vidinis sujungimas kuriamas velkant vieno duomenų šaltinio lauką į kito duomenų šaltinio lauką. Programa Access nubrėžia liniją tarp tų dviejų laukų, parodydama, kad buvo sukurtas sujungimas.

Vidinio sujungimo SQL sintaksė

Vidinis sujungimas SQL sąlygoje FROM nurodomas taip:

FROM lentelė1 INNER JOIN lentelė2 ON lentelė1.laukas1lyginimo_operatorius lentelė2.laukas2

Operacija INNER JOIN sudaryta iš šių dalių:

Dalis

Aprašas

lentelė1, lentelė2

Lentelių, kurių įrašai sujungiami, 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 jie negali turėti to paties pavadinimo.

lyginimo_operatorius

Bet kuris santykinis lyginimo operatorius: „=“, „<“, „>“, „<=“, „>=“ arba „<>“.

Daugiau informacijos apie vidinio sujungimo sintaksę rasite temoje Operacija INNER JOIN.

Puslapio viršus

Rodomos visos eilutės iš vienos lentelės ir atitinkamos eilutės iš kitos lentelės

Naudojant išorinį sujungimą nurodoma, kad užklausa turėtų įtraukti visas vienos lentelės eilutes ir bendrą reikšmę abiejose sujungimo pusėse turinčias kitos lentelės eilutes, nors kai kurios eilutės abiejose sujungimo pusėse visiškai vienodos.

Išorinis sujungimas gali būti kairysis arba dešinysis. Kairiojo išorinio sujungimo užklausos SQL sakinio sąlygoje FROM yra visos eilutės iš pirmosios lentelės ir tik tos eilutės iš kitos lentelės, kurių sujungiamajame lauke yra bendros abiejų lentelių reikšmės. Dešiniojo išorinio sujungimo užklausos SQL sakinio sąlygoje FROM yra visos eilutės iš antrosios lentelės ir tik tos eilutės iš kitos lentelės, kurių sujungiamajame lauke yra bendros abiejų lentelių reikšmės.

Pastaba : Galima lengvai pasakyti, kuri sujungimo lentelė yra kairioji, kuri dešinioji, dukart spustelėjus sujungimą ir peržiūrėjus dialogo langą Sujungimo ypatybės. Taip pat galite perjungti SQL rodinį ir ištirti sąlygą FROM.

Kadangi kai kurios vienos išorinio sujungimo pusės eilutės neturi atitinkamų eilučių kitoje lentelėje, keli kitos lentelės laukai, kuriuos grąžins užklausos rezultatai, bus tušti dėl eilučių neatitikimo.

Kaip naudoti išorinį sujungimą?

Galite kurti išorinį sujungimą modifikuodami esamą vidinį sujungimą. Jei vidinio sujungimo nėra, galite jį sukurti, tada pakeisti jį išoriniu sujungimu.

Vidinio sujungimo keitimas išoriniu sujungimu

  1. Užklausos dizaino rodinyje dukart spustelėkite norimą keisti sujungimą.

    Rodomas dialogo langas Sujungimo ypatybės.

  2. Dialogo lange Sujungimo ypatybės pažymėkite pasirinkimus, išvardytus šalia parinkčių 2 ir 3.

  3. Spustelėkite norimą naudoti parinktį, tada – Gerai.

  4. Programa Access rodo sujungimą ir rodyklę, nukreiptą nuo duomenų šaltinio, kurio visos eilutės bus įtrauktos, į duomenų šaltinį, iš kurio bus įtrauktos tik eilutės, atitinkančios sujungimo sąlygą.

Neaiškūs išoriniai sujungimai

Jei jūs creaate užklausą, kurioje yra LEFT JOIN ir vidinio sujungimo, prieigos gali būti galima nustatyti, kurį sujungimą operacija atkilti pirmiausiai. Kadangi rezultatai skiriasi atsižvelgiant į tai, ar kairysis sujungimas arba vidinio sujungimo atliekamas pirmą kartą, programa Access rodo klaidos pranešimą:

Norėdami išspręsti šią klaidą, galite modifikuoti užklausą, kad būtų aišku, kurį sujungimą perfom pirmą kartą.

Išorinio sujungimo SQL sintaksė

Išorinis sujungimas SQL sąlygoje FROM nurodomas taip:

FROM lentelė1 [ LEFT | RIGHT ] JOIN lentelė2
ON lentelė1.laukas1lyginimo_operatorius lentelė2.laukas2

Operacijos LEFT JOIN ir RIGHT JOIN sudarytos iš šių dalių:

Dalis

Aprašas

lentelė1, lentelė2

Lentelių, kurių įrašai sujungiami, 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.

lyginimo_operatorius

Bet kuris santykinis lyginimo operatorius: „=“, „<“, „>“, „<=“, „>=“ arba „<>“.

Daugiau informacijos apie išorinio sujungimo sintaksę rasite temoje Operacijos LEFT JOIN ir RIGHT JOIN.

Puslapio viršus

Rodomos visos eilutės iš abiejų lentelių, ir prie jų prisijungti, jei yra bendrų reikšmių

Jei norite, kad rodomos visos eilutės iš dviejų lentelių ir prisijungti prie jų dažnai reikšmes, naudojate visam išoriniam sujungimui. Programa Access aiškiai nepalaiko visas išorinis sujungimas, tačiau jūs galite pasiekti tą patį efektą, naudojant "union" užklausą. Ši procedūra paaiškinama, kaip tai padaryti, bet jei norite gauti daugiau informacijos apie "union" užklausas, rasite skyriuje Taip pat žiūrėkite .

Norėdami naudoti sujungimo užklausą visam išoriniam sujungimui įvykdyti, atlikite toliau nurodytus veiksmus.

  1. Sukurkite užklausą, kurios kairysis išorinis sujungimas yra lauke, kurį norite naudoti visam išoriniam sujungimui.

  2. Skirtuko lapo Pagrindinis grupėje Rodiniai spustelėkite Rodinys, tada spustelėkite SQL rodinys.

  3. Paspaudę CTRL+C nukopijuokite SQL kodą.

  4. Panaikinkite kabliataškį sąlygos FROM gale, tada paspauskite klavišą ENTER.

  5. Įveskite UNION ir paspauskite klavišą ENTER.

    Pastaba : Kai sujungimo užklausą naudojate visam išoriniam sujungimui įvykdyti, nenaudokite raktažodžio ALL.

  6. Paspaudę CTRL+V įklijuokite 3 žingsnyje nukopijuotą SQL kodą.

  7. Įklijuotame kode pakeiskite LEFT JOIN į RIGHT JOIN.

  8. Panaikinkite kabliataškį antrosios sąlygos FROM gale, tada paspauskite klavišą ENTER.

  9. Įtraukite sąlygą WHERE, nurodančią, kad sujungimo lauko reikšmė pirmojoje lentelėje, pateiktoje su sąlyga FROM (kairiojoje lentelėje), yra NULL.

    Pvz., jei sąlyga FROM yra:

    FROM Products RIGHT JOIN [Order Details] 
    ON Products.ID = [Order Details].[Product ID]

    Įtrauktumėte tokią sąlygą WHERE:

WHERE Products.ID IS NULL

  1. Sąlygos WHERE gale įveskite kabliataškį (;), taip nurodydami sujungimo užklausos pabaigą.

  2. Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.

Kryžminis sujungimas

Kryžminiai sujungimai skiriasi nuo vidinių ir išorinių sujungimų tuo, kad jie nėra atskirai rodomi programoje Office Access 2007. Naudojant kryžminį sujungimą kiekviena vienos lentelės eilutė yra sujungta su kiekviena kitos lentelės eilute ir sudaro vadinamą kryžminį produktą arba Dekarto sandaugą. Kaskart paleidus užklausą, turinčią atskirai nesujungtų lentelių, rezultatas yra kryžminis produktas. Kryžminis sujungimas dažniausiai nėra tyčinis, tačiau yra atvejų, kai toks sujungimas yra naudingas.

Kodėl reikėtų naudoti kryžminį sujungimą?

Jei norite ištirti kiekvieną galimą, dviejų lentelių arba užklausų eilučių kombinaciją, naudokite kryžminį sujungimą. Pavyzdžiui, įsivaizduokite, kad jūsų verslas šiais metais įspūdingai klestėjo ir dabar galvojate grąžinti klientams permokas. Galite sukurti užklausą, kuri susumuos kiekvieno kliento pirkinius, sukurs mažą lentelę, turinčią kelis galimus permokos grąžinimo procentus, ir sujungs su kita užklausa, atliksiančia kryžminį sujungimą. Gausite užklausą, rodančią kiekvieno kliento hipotetinį permokos grąžinimo procentų rinkinį.

Kaip naudoti kryžminį sujungimą?

Kryžminis sujungimas sukuriamas bet kada į užklausą įtraukus lenteles ar užklausas ir nesukūrus bent vieno atskiro kiekvienos lentelės ar užklausos sujungimo. Programa Access sujungia kiekvieną kiekvienos lentelės ar užklausos eilutę, kuri rezultatuose nėra atskirai sujungta su bet kurios kitos lentelės ar užklausos kiekviena kita eilute. Apsvarstykite ankstesnės pastraipos permokos grąžinimo įvykių seką. Įsivaizduokite, kad turite 91 klientą ir norite matyti penkis galimus permokos grąžinimo procentus. Jūsų kryžminis sujungimas sudaro 455 eilutes (91 ir 5 produktas).

Kaip jau supratote, naudojant kryžminį sujungimą užklausos rezultatuose gali būti sukurta daugybė eilučių. Be to, paprastai šie rezultatai yra bereikšmiai, nes jei išties neketinate kiekvienos eilutės sujungti su kiekviena kita eilute, dauguma sujungtų eilučių, rodomų rezultatuose, nieko nereikš. Galų gale užklausos, naudojančios netyčinį kryžminį sujungimą, gali trukti labai ilgai.

Netyčinis kryžminis užklausos dizaino rodinio sujungimas
Netyčinis kryžminis užklausos dizaino rodinio sujungimas.

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

Netyčinis kryžminis produktas
Aukščiau vaizduojamas netyčinio kryžminio sujungimo grąžintas kryžminis produktas.

1. Atkreipkite dėmesį į labai didelį įrašų skaičių

Teisingas užklausos rezultatas
Rezultatai, sukūrus teisingą sujungimą.

1. Atkreipkite dėmesį į tai, kad įrašų skaičius kur kas mažesnis.

Puslapio viršus

Sujunkite lenteles, atsižvelgiant į laukų reikšmių nelygiavertiškumą

Sujungimai neprivalo būti pagrįsti sujungiamų laukų lygiavertiškumu. Sujungimas gali būti sukurtas naudojant bet kurį lyginimo operatorių, pvz., daugiau nei (>), mažiau nei (<) arba nelygu (<>). Sujungimas, nepagrįstas lygiavertiškumu, vadinamas nelygiaverčiu sujungimu.

Jei norite sujungti dviejų duomenų šaltinių eilutes remdamiesi nelygiavertėmis lauko reikšmėmis, naudokite nelygiavertį sujungimą. Paprastai nelygiavertis sujungimas yra sukurtas naudojant lyginimo operatorius daugiau nei (>), mažiau nei (<), daugiau arba lygu (>=) ir mažiau arba lygu (<=). Nelygiavertis sujungimas, sukurtas naudojant operatorių nelygu (<>), gali grąžinti beveik tiek pat eilučių, kiek ir kryžminis sujungimas, o rezultatai gali būti neaiškūs.

Kaip naudoti nelygiavertį sujungimą?

Dizaino rodinys nepalaiko nelygiaverčio sujungimo. Norėdami jį naudoti, turite įsijungti SQL rodinį. Tačiau galite sukurti sujungimą naudodami dizaino rodinį, perjungti SQL rodinį, rasti lyginimo operatorių lygu (=) ir pakeisti į norimą naudoti operatorių. Tai padarę, vėl atidaryti užklausą dizaino rodinyje galėsite tik po to, kai SQL rodinyje pakeisite lyginimo operatorių atgal į lygu (=).

Puslapio viršus

Sujungimo naikinimas

Jei „Access“ automatiškai sukuria sujungimą, kurio nenorite, arba jei sukuriate sujungimą per klaidą pavyzdžiui, sujungimą tarp dviejų laukų, kurių duomenų tipai nepanašūs, galite panaikinti šį sujungimą.

  1. Užklausos kūrimo tinklelyje spustelėkite norimą pašalinti sujungimą.

  2. Paspauskite DELETE.

Arba

  • Užklausos kūrimo tinklelyje dešiniuoju pelės mygtuku spustelėkite norimą pašalinti sujungimą, tada – Naikinti.

Puslapio viršus

Pastaba : Mašininio vertimo atsakomybės atsisakymas: Šis straipsnis išverstas naudojant kompiuterinę sistemą be žmogaus įsikišimo. „Microsoft“ pateikia šiuos mašininius vertimus norėdama padėti anglų kalbos nesuprantantiems vartotojams perskaityti turinį apie „Microsoft“ produktus, paslaugas ir technologijas. Šis straipsnis išverstas mašininio vertimo būdu, todėl jame gali būti žodyno, sintaksės ar gramatikos klaidų.

Taip pat žr.

Įrašų įtraukimas į lentelę naudojant papildymo užklausą

Jungimo rezultatų iš kelių užklausų žymėjimas naudojant "union" užklausos

Pagal kelių lentelių užklausos kūrimas

Kurti, redaguoti ar naikinti ryšį

Ar ši informacija buvo naudinga?

Kaip galėtume tai pagerinti?

Kaip galėtume tai pagerinti?

Siekiant apsaugoti jūsų privatumą, neįtraukite kontaktinės informacijos į atsiliepimus. Peržiūrėkite mūsų privatumo strategija.

Dėkojame už jūsų atsiliepimus!