Kai į "Access" užklausą įtraukiate kelis duomenų šaltinius, naudojate sujungimus, kad apribotumėte įrašus, kuriuos norite matyti, atsižvelgiant į tai, kaip duomenų šaltiniai yra susiję vienas su kitu. Sujungimus taip pat galite naudoti įrašams iš abiejų duomenų šaltinių sujungti, kad kiekviena įrašų pora iš šaltinių taptų vienu įrašu užklausos rezultatuose.
Šiame straipsnyje aptariami įvairūs jungčių tipai 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 juos sukurti.
Pastaba
Užklausas galima sujungti tokiu pačiu būdu kaip sujungiant lenteles, taip pat galima sujungti abi.
Šiame straipsnyje:
- Apžvalga
- Jungčių tipai
- Rodyti eilutes, kurių bendra reikšmė yra abiejose sujungtose lentelėse
- Visų vienos lentelės eilučių ir atitinkamų eilučių iš kitos lentelės rodymas
- Rodyti visas abiejų lentelių eilutes ir jas sujungti, kai yra bendra reikšmė
- Kryžminiai sujungimai
- Lentelių sujungimas remiantis laukų reikšmių nelygybe
- Jungties naikinimas
Apžvalga
Duomenų bazė yra duomenų lentelių, turinčių loginius tarpusavio ryšius, rinkinys. Ryšiai naudojami norint sujungti lenteles pagal bendrus laukus. Lentelė gali būti bet kokio ryšių skaičiaus dalis, tačiau kiekviename ryšyje visada yra lygiai dvi lentelės. Užklausoje ryšys nurodomas kaip jungtis.
Kai į užklausą įtraukiate lentelių, "Access" sukuria jungtis, pagrįstas apibrėžtais ryšiais tarp lentelių. Galite rankiniu būdu sukurti užklausų jungtis, net jei jos nenurodo jau apibrėžtų ryšių. Jei naudojate kitas užklausas (vietoj lentelių arba kartu su lentelėmis) kaip užklausos duomenų šaltinį, galite sukurti jungtis tarp šaltinio užklausų ir tarp tų užklausų ir bet kokių lentelių, kurias naudojate kaip duomenų šaltinį.
Jungtys veikia panašiai kaip užklausos kriterijai, nes nustato taisykles, kurias duomenys turi atitikti, kad būtų įtraukti į užklausos operacijas. Skirtingai nei kriterijai, sujungimai taip pat nurodo, kad kiekviena sujungimo sąlygas atitinkanti eilučių pora įrašų rinkinyje bus sujungta į vieną eilutę.
Yra keturi pagrindiniai sujungimų tipai: vidiniai sujungimai, išoriniai sujungimai, kryžminiai sujungimai ir nelygūs sujungimai. Šiame straipsnyje aptariami kiekvieno tipo sujungimai, kuriuos galite naudoti, kodėl juos naudojate ir kaip sukurti sujungimus.
Sujungimai yra užklausoms tie patys ryšiai su lentelėmis: nurodo, kaip galima sujungti dviejų šaltinių duomenis atsižvelgiant į bendras duomenų reikšmes. Čia pateikiama užklausos dizaino rodinio jungties su dialogo lange atidarytomis jungties ypatybėmis iliustracija:
Ši linija tarp lentelių reiškia sujungimą. Dukart spustelėkite jungtį, kad atidarytumėte dialogo langą Sujungimo ypatybės (pavaizduota) ir peržiūrėtumėte arba pakeistumėte jungtį.
Jungtys kartais būna kryptinės. Šioje dialogo lango srityje rodoma, kuri lentelė yra sujungta ir kurie laukai naudojami lentelėms sujungti.
Ši sritis nustato sujungimo tipą: 1 parinktis yra vidinis sujungimas, 2 – kairysis išorinis sujungimas ir 3 – dešinysis išorinis sujungimas.
Galima naudoti abiejų lentelių laukus ir kiekvienos lentelės duomenis, susijusius su tam tikra užduotimi. Į vidinį sujungimą neįtraukiami jokie kiti duomenys. Išorinėje jungtyje 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 nelygūs sujungimai. Kryžminiai ir nelygūs sujungimai yra išplėstiniai sujungimų tipai ir retai naudojami, tačiau turėtumėte žinoti apie juos, kad gerai suprastumėte, kaip veikia sujungimai.
Vidiniai sujungimai: tik susiję duomenys iš abiejų lentelių kartu
Vidinis sujungimas yra tas, kuriame "Access" įtraukia duomenis iš lentelės tik tuo atveju, jei susijusioje lentelėje yra atitinkamų duomenų, ir atvirkščiai. Daugeliu atvejų naudosite vidinius sujungimus. Kai kuriate jungtį ir nenurodote kokios tai jungties, "Access" laiko, kad norite vidinės jungties. Vidinės jungtys naudingos, nes leidžia sujungti duomenis iš dviejų šaltinių pagal bendras reikšmes, todėl duomenis matote tik tada, kai susidaro išsamus vaizdas.
Išoriniai sujungimai: visi susiję duomenys tinkamai sujungti ir visi likę įrašai iš vienos lentelės
Išorinis sujungimas yra panašus į vidinį sujungimą, tačiau jis prideda likusias eilutes iš vienos iš lentelių. Išoriniai sujungimai yra kryptiniai: kairysis išorinis sujungimas apima visus įrašus iš kairiosios lentelės – pirmoji sujungimo lentelė – o dešinysis išorinis sujungimas apima visus įrašus iš dešiniosios lentelės – antroji sujungimo lentelė.
Išsamūs išoriniai sujungimai: visi duomenys, sujungti kur į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 ir "Access" jų aiškiai nepalaiko. Tačiau galite naudoti kryžminį sujungimą ir kriterijus tam pačiam rezultatui pasiekti.
Kryžminiai sujungimai: visi duomenys, sujungti visais įmanomais būdais
Dažniausiai kryžminis sujungimas yra šalutinis poveikis, kai į užklausą įtraukiamos dvi lentelės ir pamirštama jas prijungti. "Access" supranta, kad norite matyti kiekvieną įrašą iš vienos lentelės kartu su kiekvienu įrašu iš kitos lentelės – visus galimus įrašų derinius. Kadangi neįmanoma sujungti duomenų, tokio tipo sujungimas retai duoda naudingų rezultatų. Tačiau yra keletas atvejų, kai kryžminis sujungimas yra būtent tai, ko jums reikia.
Nelygios jungtys: kaip įprastas sujungimas, tačiau naudojant kitokį palyginimą eilutėms sujungti
Nelygios jungtys naudoja kitą operatorių nei lygybės ženklas (=), kad būtų galima palyginti reikšmes ir nustatyti, ar reikia sujungti duomenis ir kaip tai daryti. Nelygūs sujungimai nėra aiškiai palaikomi, bet galite naudoti kryžminį sujungimą ir kriterijus tam pačiam rezultatui pasiekti.
Rodyti eilutes, kurių bendra reikšmė yra abiejose sujungtose lentelėse
Jei norite rodyti tik tas eilutes, kurių sujungto lauko reikšmės sutampa, 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 eilutes kitoje lentelėje, atsižvelgiant į duomenis sujungtuose laukuose. Paleidus užklausą su vidiniu sujungimu, į užklausos operacijas bus įtrauktos tik tos eilutės, kuriose bendra reikšmė yra abiejose sujungtose lentelėse.
Kaip naudoti vidinį sujungimą?
Paprastai, norint naudoti vidinį sujungimą, nieko nereikia daryti. Jei lentelės, kurias įtraukiate į užklausą, jau turi ryšius, "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 lentelė yra ryšio "vienas su daugeliu" pusėje "vienas", ir rodo begalybės simbolį (∞), reiškiantį, kuri lentelė yra dalis "daugelis".
Net jei nesate sukūrę ryšių, "Access" automatiškai sukuria vidinius sujungimus, jei į užklausą įtraukiate dvi lenteles ir kiekvienoje lentelėje yra po lauką, kurio duomenų tipas yra vienodas arba suderinamas, o vienas iš sujungimo laukų yra pirminis raktas. Šiuo atveju simboliai "vienas" ir "daugelis" nerodomi, nes nuorodų vientisumas neįgalintas.
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ų ar tarp užklausų ir lentelių. Paprastai turėtumėte juos kurti patys. Vidinį sujungimą sukursite nuvilkdami lauką iš vieno duomenų šaltinio į lauką kitame duomenų šaltinyje. „Access“ rodo liniją tarp dviejų laukų, kuri nurodo sukurtą jungtį.
Vidinio sujungimo SQL sintaksė
Vidinės jungtys nurodytos SQL sąlygoje FROM, kaip parodyta toliau:
FROM table1 INNER JOIN lentelė2 ON table1. laukas1 palyginti lentelę2. laukas2
Operacija INNER JOIN yra sudaryta iš šių dalių:
| Dalis | Aprašymas |
|---|---|
| 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ų tipo 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 inner join sintaksę ieškokite temoje INNER JOIN operacija.
Visų vienos lentelės eilučių ir atitinkamų eilučių iš kitos lentelės rodymas
Išorinės jungtys užklausai nurodo, kad nors kai kurios eilutės abiejose jungties pusėse tiksliai atitinka, užklausa turi apimti visas eilutes iš vienos lentelės ir taip pat tas eilutes iš kitos lentelės, kurios turi bendrą reikšmę abiejose jungties pusėse.
Išoriniai sujungimai gali būti kairysis išorinis sujungimas arba gali būti dešinysis išorinis sujungimas. Kairiajame išoriniame sujungime užklausa apima visas eilutes iš pirmos lentelės SQL sakinyje FROM sąlygoje ir tik tas eilutes iš kitos lentelės, kurių sujungimo lauke yra reikšmės, bendros abiem lentelėms. Dešiniajame išoriniame sujungime užklausa apima visas eilutes iš antrosios lentelės SQL sakinyje FROM ir tik tas eilutes iš kitos lentelės, kurių sujungimo lauke yra reikšmės, bendros abiem lentelėms.
Pastaba
Galite lengvai nustatyti, kuri lentelė yra kairioji ar dešinioji tam tikros jungties lentelė, dukart spustelėję jungtį ir tada pažiūrėję dialogo lange Sujungimo ypatybės . Taip pat galite perjungti SQL rodinį ir tada išnagrinėti sąlygą FROM.
Kadangi kai kurios eilutės vienoje išorinio sujungimo pusėje neturės atitinkančių eilučių iš kitos lentelės, kai kurie laukai, pateikti užklausos rezultatuose iš tos kitos lentelės, bus tušti, kai eilutės neatitiks.
Kaip naudoti išorinį sujungimą?
Išorinis sujungimas sukuriamas modifikuojant esamą vidinį sujungimą. Jei vidinės jungties nėra, sukurkite vieną, tada pakeiskite į išorinę jungtį.
Vidinės jungties keitimas išorine jungtimi
- Užklausos dizaino rodinyje dukart spustelėkite norimą keisti jungtį.
Bus atidarytas dialogo langas Sujungimo ypatybės. - Dialogo lange Sujungimo ypatybės atkreipkite dėmesį į pasirinkimus, pateiktus šalia 2 ir 3 parinkčių.
- Spustelėkite norimą naudoti parinktį, tada – Gerai.
- "Access" rodo jungtį ir rodyklę, nukreiptą nuo duomenų šaltinio, į kurį bus įtrauktos visos eilutės, į duomenų šaltinį, kuriame bus įtrauktos tik sujungimo sąlygą atitinkančios eilutės.
Dviprasmiški išoriniai sujungimai
Jei kuriate 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 kairysis arba vidinis sujungimas atliekamas pirmas, programa "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 table1 [ LEFT | RIGHT ] JOIN table2
ON lentelė1.laukas1 palyginti lentelė2.laukas2
Operacijos LEFT JOIN ir RIGHT JOIN yra sudarytos iš šių dalių:
| Dalis | Aprašymas |
|---|---|
| lentelė1, lentelė2 | Lentelių, kurių įrašai suderinti, pavadinimai. |
| laukas1, laukas2 | Sujungiamų laukų pavadinimai. Laukai turi būti to paties duomenų tipo 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ę ieškokite temoje LEFT JOIN, RIGHT JOIN operacijos.
Rodyti visas abiejų lentelių eilutes ir jas sujungti, kai yra bendra reikšmė
Norėdami rodyti visas dviejų lentelių eilutes ir sujungti jas pagal bendras reikšmes, naudojate visą išorinį sujungimą. "Access" aiškiai nepalaiko visiškų išorinių sujungimų, tačiau tą patį galite pasiekti naudodami "union" užklausą. Toliau pateiktoje procedūroje aiškinama, kaip tai padaryti, bet jei norite daugiau informacijos apie "union" užklausas, žr. skyrių Taip pat žiūrėkite .
Jei norite naudoti sujungimo užklausą visiškam išoriniam sujungimui atlikti:
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, tada paspauskite ENTER.
Įveskite UNION ir paspauskite klavišą ENTER.
Pastaba
Nenaudokite raktažodžio ALL, kai naudojate sujungimo užklausą visiškam išoriniam sujungimui atlikti.
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, tada paspauskite ENTER.
Įtraukite sąlygą WHERE, kuri nurodo, kad sujungimo lauko reikšmė yra NULL pirmoje lentelėje, pateiktoje 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]Reikėtų įtraukti šią sąlygą WHERE:
WHERE Products.ID IS NULLĮveskite kabliataškį (;) sąlygos WHERE pabaigoje, nurodantį "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 programoje "Access". Kryžminiame sujungime kiekviena vienos lentelės eilutė sujungiama su kiekviena kitos lentelės eilute, taip gaunama vadinamoji kryžminė sandauga arba Dekarto sandauga. Kiekvieną kartą, kai vykdote užklausą, kurioje yra lentelių, kurios nėra aiškiai sujungtos, gaunamas kryžminis produktas. Kryžminiai sujungimai dažniausiai būna netyčiniai, tačiau yra atvejų, kai jie gali būti naudingi.
Kodėl turėčiau naudoti kryžminį sujungimą?
Jei norite išnagrinėti visus galimus dviejų lentelių ar užklausų eilučių derinius, naudokite kryžminį sujungimą. Pavyzdžiui, tarkime, jūsų verslo metai buvo įspūdingi ir jūs svarstote galimybę suteikti nuolaidas savo klientams. Galite sukurti užklausą, kuri susumuoja kiekvieno kliento pirkimus, sukurti mažą lentelę su keliais galimais grąžinimo procentais ir sujungti juos į kitą užklausą, kuri atlieka kryžminį sujungimą. Gausite užklausą, kurioje bus rodomas kiekvieno kliento hipotetinių grąžinimų rinkinys.
Kaip naudoti kryžminį sujungimą?
Kryžminis sujungimas sukuriamas kaskart, kai į užklausą įtraukiate lenteles ar užklausas ir nesukuriate bent vieno tikslaus sujungimo kiekvienai lentelei ar užklausai. "Access" sujungia kiekvieną kiekvienos lentelės ar užklausos eilutę, kuri nėra aiškiai sujungta su jokia kita lentele ar užklausa, su kiekviena kita rezultatų eilute. Apsvarstykite ankstesnės pastraipos grąžinimo scenarijų. Tarkime, turite 91 klientą ir norite peržiūrėti penkis galimus grąžinimo procentus. Jūsų kryžminis sujungimas sukuria 455 eilutes (91 ir 5 sandauga).
Kaip galite įsivaizduoti, netyčiniai kryžminiai sujungimai gali sukurti daugybę eilučių jūsų užklausos rezultatuose. Be to, šie rezultatai paprastai yra beprasmiai, nes jei iš tikrųjų neketinate sujungti kiekvienos eilutės su kiekviena kita eilute, dauguma sujungtų eilučių, kurios rodomos rezultatuose, neturės prasmės. Galiausiai, užklausų, kuriose naudojami netyčiniai kryžminiai sujungimai, vykdymas gali užtrukti labai ilgai.
1. Apskritimu apibraukti laukai turi būti sujungti vienas su kitu.
1. Atkreipkite dėmesį, kad labai daug įrašų.
1. Atkreipkite dėmesį, kad įrašų skaičius yra daug mažesnis.
Lentelių sujungimas remiantis laukų reikšmių nelygybe
Sujungimai nebūtinai turi 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 (<>). Lygiavertiškumu nepagrįsti sujungimai vadinami nelygiais sujungimais.
Jei norite sujungti dviejų duomenų šaltinių eilutes pagal nelygias laukų reikšmes, naudokite nelygų sujungimą. Paprastai nelygūs sujungimai grindžiami arba didesniu nei (>), mažesniu nei (<), didesniu arba lygiu (>=), arba mažesniu arba lygiu (<=) lyginimo operatoriais. Nelygios jungtys, pagrįstos operatoriumi nelygu (<>), gali grąžinti beveik tiek pat eilučių, kiek ir kryžminių sujungimų, todėl rezultatus gali būti sunku interpretuoti.
Kaip naudoti nelygią jungtį?
Nelygios jungtys dizaino rodinyje nepalaikomos. Jei norite juos naudoti, turite tai padaryti naudodami SQL rodinį. Tačiau jungtį galite sukurti dizaino rodinyje, perjungti į SQL rodinį, rasti lygų (=) lyginimo operatorių ir pakeisti jį į norimą naudoti operatorių. Tai padarę, vėl galėsite atidaryti užklausą dizaino rodinyje, tik jei pirmiausia SQL rodinyje vėl pakeisite lyginimo operatorių į lygybę (=).
Jungties naikinimas
Jei "Access" automatiškai sukuria jungtį, kurios nenorite, arba jei jungtį sukuriate per klaidą, pvz., jungtį tarp dviejų laukų, kurių duomenų tipai skirtingi, jungtį galite panaikinti.
- Užklausos dizaino tinklelyje spustelėkite norimą pašalinti jungtį.
- Paspauskite DELETE.
–arba–
- Užklausos dizaino tinklelyje dešiniuoju pelės mygtuku spustelėkite norimą šalinti jungtį, tada spustelėkite Naikinti.
Įrašų įtraukimas į lentelę naudojant papildymo užklausąKelių išrinkimo užklausų rezultatų sujungimas naudojant sujungimo užklausąUžklausos pagal kelias lenteles kūrimasRyšių kūrimas, redagavimas ar naikinimas