Lentelių ir užklausų sujungimas

Įtraukus į užklausą kelias lenteles ir norint gauti tinkamus rezultatus, reikia naudoti sujungimus. Sujungimas leidžia užklausai grąžinti įrašus iš kiekvienos norimos lentelės atsižvelgiant į tai, kaip jos susietos užklausoje. Šiame straipsnyje pateikiama koncepcinės informacijos apie sujungimus, aptariami įvairūs jų tipai ir parodoma, kaip jais naudotis.

Šiame straipsnyje


Įvadas

Pagrindinį sąryšinės duomenų bazės lygį sudaro loginiu ryšiu sujungtos lentelės. Ryšiais jungiami bendri lentelių laukai. Užklausoje 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 pradžia Puslapio pradžia

Vidinis sujungimas

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.

Kodėl reikėtų naudoti vidinį sujungimą?

Naudokite vidinį sujungimą norėdami grąžinti tik tas abiejų sujungtų lentelių eilutes, kurios sutampa sujungiamajame lauke.

Kaip naudoti vidinį sujungimą?

Paprastai jums nieko nereikia daryti, kad naudotumėte vidinį sujungimą. Jei anksčiau kūrėte ryšius tarp lentelių naudodami ryšių langą (santykių langas: objekto skirtuko lapas, kuriame galite peržiūrėti, kurti ir keisti lentelių ir užklausų santykius.), įtraukus susietas lenteles į užklausos dizaino rodinį (maketo rodinys: rodinys, kuris rodo duomenų bazės objektų – lentelių, užklausų, formų, ataskaitų ir makrokomandų – maketą. Dizaino rodinyje galite kurti naujus duomenų bazės objektus arba keisti esamų objektų dizainą.), programa Access automatiškai sukuria vidinį sujungimą. Jei nuorodų vientisumas (kreipimosi vientisumas: taisyklės, leidžiančios išlaikyti lentelių ryšius įtraukiant, naujinant arba naikinant įrašus.) įgalintas, taip pat programa Access virš sujungimo eilutės rodo „1“, reiškiantį, kuri ryšio Vienas su daugeliu (ryšys „vienas – daug“: dviejų lentelių ryšys, kuriame priminė kiekvieno įrašo rakto reikšmė atitinka daug susijusios lentelės lauke arba laukuose esančių įrašų.) lentelė yra dalis „vienas“, ir rodo begalybės simbolį (), reiškiantį, kuri lentelė yra dalis „daugelis“.

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 (pirminis raktas: vienas arba daugiau laukų (stulpelių), kurių reikšmės unikaliai nusako visus lentelės įrašus. Pirminis raktas neleidžia naudoti nulinių reikšmių ir jis visada turi būti unikalia rodykle. Pirminis raktas naudojamas lentelei susieti su išoriniais kitų lentelių raktais.). 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.

RodytiVidinio 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ų tipo (duomenų tipas: lauko charakteristika, apibrėžianti, kokio tipo duomenis jame galima laikyti. Duomenų tipai: Boolean, Integer, Long, Currency, Single, Double, Date, String ir Variant (numatytoji reikšmė).) 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 pradžia Puslapio pradžia

Išorinis sujungimas

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.

Kodėl reikėtų naudoti išorinį sujungimą?

Naudokite išorinį sujungimą, norėdami, kad visos vienos iš sujungimo lentelių eilutės būtų įtrauktos į jūsų rezultatus ir kad užklausa grąžintų tik tas kitos lentelės eilutes, kurios sujungiamajame lauke atitinka pirmosios lentelės eilutes.

Kaip naudoti išorinį sujungimą?

Išorinis sujungimas sukuriamas modifikuojant vidinį sujungimą.

Vidinio sujungimo keitimas išoriniu sujungimu

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

Rodomas dialogo langas Sujungimo ypatybės.

  1. Dialogo lange Sujungimo ypatybės pažymėkite pasirinkimus, išvardytus šalia parinkčių 2 ir 3.
  2. Spustelėkite norimą naudoti parinktį, tada – Gerai.
  3. 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ą.

RodytiIš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ų tipo (duomenų tipas: lauko charakteristika, apibrėžianti, kokio tipo duomenis jame galima laikyti. Duomenų tipai: Boolean, Integer, Long, Currency, Single, Double, Date, String ir Variant (numatytoji reikšmė).) 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 pradžia Puslapio pradžia

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 paaiškinimas 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 paaiškinimas Atkreipkite dėmesį į labai didelį įrašų skaičių

Teisingas užklausos rezultatas

Rezultatai, sukūrus teisingą sujungimą.
1 paaiškinimas Atkreipkite dėmesį į tai, kad įrašų skaičius kur kas mažesnis.

Puslapio pradžia Puslapio pradžia

Nelygiavertis sujungimas

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.

Kodėl reikėtų naudoti nelygiavertį sujungimą?

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 pradžia Puslapio pradžia

Sujungimo šalinimas

Jei netyčia sukūrėte sujungimą, pvz., sujungimą tarp dviejų laukų, kurių duomenų tipai nepanašūs, galite jį panaikinti. Norėdami panaikinti ryšį:

  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 pradžia Puslapio pradžia

 
 
Taikoma:
Access 2007