Kui kaasate Accessi päringusse mitu andmeallikat, saate ühenduste abil piirata kuvatavaid kirjeid sõltuvalt sellest, kuidas andmeallikad on omavahel seotud. Ühendamiste abil saate kombineerida ka mõlemast andmeallikast pärit kirjeid, nii et iga allika kirjepaar muutub päringutulemites üheks kirjeks.
Selles artiklis käsitletakse eri tüüpi ühendusi ja kirjeldatakse, kuidas neid päringus kasutada. Vaikimisi luuakse ühendus automaatselt, kui kahe päringus kasutatava andmeallika vahel on seos juba olemas. Ühendus luuakse ka siis, kui on üksteisele selgelt vastavad väljad. Saate automaatselt loodud ühenduse kustutada. Sellest artiklist leiate põhiteavet tabeliseoste kohta (sh seose loomise kohta).
Märkus.: Päringuid saate ühendada samamoodi nagu tabeleid, samuti saate ühendada mõlemad.
Selle artikli teemad
Ülevaade
Andmebaas on andmetabelite kogum, mis kannavad omavahel loogilisi seoseid. Seoste abil saate tabeleid ühendada nende ühiste väljade järgi. Tabel võib olla osa mis tahes arvust seostest, kuid igal seosel on alati täpselt kaks tabelit. Päringus tähistab seost ühendus.
Kui lisate päringusse tabeleid, loob Access ühendused, mis põhinevad tabelite vahel määratletud seostel. Ühendusi saate päringutes käsitsi luua ka siis, kui need ei tähista juba määratletud seoseid. Kui kasutate päringu andmeallikana muid päringuid (tabelite asemel või lisaks sellele), saate luua ühendusi lähtepäringute, aga ka nende päringute ja tabelite vahel, mida kasutate andmeallikatena.
Ühendused käituvad sarnaselt päringukriteeriumidega, kuna need kehtestavad reeglid, millele andmed peavad vastama, et need kaasataks päringutoimingutesse. Erinevalt kriteeriumidest määravad ühendamised ka selle, et kõik liitmistingimustele vastavad ridade paarid ühendatakse kirjekomplektis üheks reaks.
Ühendamisi on nelja tüüpi: sisemised ühendamised, välised ühendamised, ristliitmised ja ebavõrdsed ühendused. Selles artiklis kirjeldatakse, millist tüüpi liitmisi saate kasutada, miks te igat tüüpi kasutate ja kuidas ühendusi luua.
Ühendused on päringud selle kohta, millised on seosed tabelitega: viide kahe allika andmete kombineerimise kohta nende ühiste andmeväärtuste põhjal. Siin on pilt ühendamisest päringu kujundusvaates, kus ühenduse atribuudid on dialoogiboksis avatud.
See tabelitevaheline joon tähistab ühendamist. Dialoogiboksi Ühendamisatribuudid (tähistatud) avamiseks ja ühenduse läbivaatamiseks või muutmiseks topeltklõpsake seda.
Ühendamised on mõnikord suunalised. Dialoogiboksi selles alas kuvatakse, milline tabel on ühendamisel ja milliseid välju kasutatakse tabelite ühendamiseks.
See ala määrab liitmistüübi: suvand 1 on sisemine ühendus, 2 on vasakpoolne välise ühendamise ja 3 parempoolne välise ühendamise.
Kasutada saab mõlema tabeli välju ja igast tabelist kuvatakse konkreetse ülesandega seotud andmed. Sisemises ühenduses ei kaasata muid andmeid. Välises ühendamises kaasatakse päringutulemitesse ka ühe tabeli seostamata kirjed.
Ühendamistüübid
Ühendamisi on nelja tüüpi: sisemised ühendamised, välised ühendamised, ristliitmised ja ebavõrdsed ühendused. Ristliitmised ja ebavõrdsed ühendused on täiustatud liitmistüübid ja neid kasutatakse harva, kuid te peaksite neist teadma, et saada täielik ülevaade sellest, kuidas ühendamised toimivad.
Sisemised ühendamised: kombineeritakse ainult mõlema tabeli seotud andmed
Sisemine ühendamine on see, kus Access kaasab tabeli andmed ainult siis, kui seotud tabelis on vastavad andmed, ja vastupidi. Enamasti kasutatakse sisemisi ühendusi. Kui loote ühenduse ja ei määra, mis tüüpi ühendamine see on, eeldab Access, et soovite sisemist ühendamist. Sisemised ühendamised on kasulikud, kuna need võimaldavad teil kombineerida kahest allikast pärinevaid andmeid ühisväärtuste põhjal, nii et andmed kuvatakse ainult siis, kui tervikpilt on olemas.
Välised ühendamised: kõik seotud andmed kombineeriti õigesti ja kõik ülejäänud kirjed ühest tabelist
Välise ühendamise funktsioon sarnaneb sisemise ühendusega, kuid lisab tabelist ülejäänud read. Välised ühendamised on suunalised: vasakpoolne välisühendamine hõlmab kõiki vasakpoolse tabeli kirjeid – esimest ühenduse tabelit – ja parempoolne välisühendamine sisaldab kõiki parempoolse tabeli kirjeid – ühenduse teist tabelit.
Täielikud välised ühendused: kõik andmed, võimaluse korral koos
Mõnes süsteemis võib välise ühendamise korral kaasata mõlema tabeli kõik read koos vastavate ridade liitmisega. Seda nimetatakse täielikuks väliseks ühendamiseks ja Access ei toeta neid otseselt. Sama efekti saavutamiseks saate aga kasutada ristühendamist ja kriteeriume.
Ristühendused: kõik andmed kombineerituna igal võimalikul viisil
Enamasti on ristühendamine kõrvalmõju kahe tabeli lisamisel päringusse ja seejärel unustab need ühendada. Access tõlgendab seda nii, et soovite kuvada ühe tabeli kõik kirjed koos iga kirjega teisest tabelist – iga võimaliku kirjekombinatsiooniga. Kuna andmeid ei saa kombineerida, annab seda tüüpi ühendamine harva kasulikke tulemusi. Kuid on mõned juhtumid, kui ristliitmine on just see, mida vajate.
Ebavõrdsed ühendused: nagu tavaline ühendamine, kuid ridade kombineerimine erineva võrdluse abil
Ebavõrdsed ühendused kasutavad väärtuste võrdlemiseks ja andmete kombineerimiseks muud tehtemärki peale võrdusmärgi (=). Ebavõrdseid ühendusi otseselt ei toetata, kuid sama efekti saavutamiseks saate kasutada ristühendamist ja kriteeriume.
Kuva read, kus mõlemas ühendatud tabelis on ühine väärtus
Kui soovite kuvada ainult need read, millel on ühendatud väljal vastavad väärtused, kasutage sisemist ühendamist. Access loob automaatselt sisemised ühendamised.
Sisemised ühendamised on kõige levinumat tüüpi ühendamised. Nad ütlevad päringule, et ühe ühendatud tabeli read vastavad ühendatud väljade andmete põhjal teise tabeli ridadele. Sisemise ühendamisega päringu käivitamisel kaasatakse päringutoimingutesse ainult need read, kus mõlemas ühendatud tabelis on ühine väärtus.
Kuidas kasutada sisemist ühendamist?
Enamasti pole sisemiseks ühendamiseks vaja midagi teha. Kui päringusse lisatavatel tabelitel on juba seosed, loob Access tabelite lisamisel automaatselt iga seotud tabelipaari vahel sisemise ühenduse. Kui jõustatakse viiteterviklus, kuvab Access ühendusejoone kohal arvu "1", et näidata, milline tabel asub üks-mitmele-seose poolel "üks", ja lõpmatuse sümboli (∞) seose poolel "mitmele" asuva tabeli puhul.
Isegi kui te pole seoseid loonud, loob Access automaatselt sisemised ühendused, kui lisate päringusse kaks tabelit ja kummalgi tabelil on sama või ühilduva andmetüübiga väli ja üks ühenduseväli on primaarvõti. Sümboleid "üks" ja "mitu" praegusel juhul ei kuvata, kuna viitamisterviklus pole jõustatud.
Kui lisate päringusse päringuid ja te pole loonud nende päringute vahel seoseid, ei loo Access automaatselt sisemisi ühendusi nende päringute ega päringute ja tabelite vahel. Üldiselt peaksite need ise looma. Sisemise ühenduse loomiseks lohistage väli ühest andmeallikast teise andmeallika väljale. Access kuvab kahe välja vahel joone näitamaks, et ühendus on loodud.
Sisemise ühendamise SQL-süntaks
Sisemised ühendamised määratakse FROM-klauslis SQL-klauslis, nagu allpool näidatud.
FROM tabel1 INNER JOIN tabel2 ON tabel1.field1 compare table2.väli2
Toiming INNER JOIN koosneb järgmistest osadest.
Osa |
Kirjeldus |
tabel1, tabel2 |
Nende tabelite nimed, mille kirjed liidetakse. |
väli1, väli2 |
Ühendatavate väljade nimed. Kui need pole numbriväljad, peab väljadel olema sama andmetüüp ja need peavad sisaldama sarnaseid andmeid, kuid neil ei pea olema sama nimi. |
compare |
Suvaline relatsiooniline võrdlusmärk: "=", "<", ">", "<=", ">=" või "<>". |
Sisemise ühendamise süntaksi kohta leiate lisateavet teemast Toiming INNER JOIN.
Kuva kõik read ühest tabelist ja vastavad read teisest tabelist
Välised ühendamised ütlevad päringule, et kuigi mõned ühenduse mõlemas servas asuvad read vastavad täpselt, peaks päring sisaldama kõiki ühe tabeli ridu ja ka teise tabeli ridu, millel on ühine väärtus ühenduse mõlemal poolel.
Välised ühendamised võivad olla vasakpoolsed välised ühendamised või parempoolsed välised ühendused. Vasakpoolses välises ühendamises kaasab päring kõik SQL-lause FROM-klausli esimese tabeli read ja ainult need read teisest tabelist, kus ühendamisväli sisaldab mõlema tabeli ühiseid väärtusi. Parempoolses välises ühendamises kaasab päring kõik SQL-lause FROM-klausli teise tabeli read ja ainult need read teisest tabelist, kus ühendamisväli sisaldab mõlema tabeli ühiseid väärtusi.
Märkus.: Saate hõlpsalt aru, milline tabel on antud ühenduse vasakpoolne või parempoolne tabel, topeltklõpsates ühendamist ja vaadates seejärel dialoogiboksi Ühendamisatribuudid . Samuti saate aktiveerida SQL-i vaate ja seejärel uurida FROM-klauslit.
Kuna mõnel välise ühendamise ühel küljel olevatel ridadel pole teisest tabelist vastavaid ridu, on mõned päringutulemites tagastatud väljad sellest teisest tabelist tühjad, kui read ei vasta.
Kuidas kasutada välist ühendamist?
Välise ühenduse loomiseks saate muuta olemasolevat sisemist ühendamist. Kui sisemist ühendamist pole, looge see ja seejärel muutke see väliseks ühenduseks.
Sisemise ühendamise muutmine väliseks ühendamiseks
-
Topeltklõpsake päringu kujundusvaates muudetavat ühendust.
Kuvatakse dialoogiboks Ühendamisatribuudid.
-
Märkige dialoogiboksis Ühendamisatribuudid üles valikute 2 ja 3 kõrval loetletud valikud.
-
Klõpsake suvandit, mida soovite kasutada ja seejärel nuppu OK.
-
Access kuvab ühenduse ja kuvab noole, mis osutab andmeallikast, kuhu kaasatakse kõik read andmeallikasse, kuhu kaasatakse ainult liitumistingimustele vastavad read.
Ebaselged välised ühendamised
Kui loote päringu, mis sisaldab vorminguid LEFT JOIN ja INNER JOIN, ei pruugi Access määratleda, milline ühendamistoiming esmalt sooritada. Kuna tulemused on erinevad olenevalt sellest, kas vasakpoolne või sisemine ühendamine tehakse esimesena, kuvab Access järgmise tõrketeate:
Tõrke parandamiseks peate päringut muutma nii, et sel oleks selge, milline ühendus esmalt sooritada.
Välise ühendamise SQL-süntaks
Välised ühendamised määratakse FROM-klauslis SQL-klauslis, nagu on näidatud allpool.
FROM tabel1 [ LEFT | RIGHT ] JOIN tabel2
ON tabel1.väli1 compare table2.field2Toimingud LEFT JOIN ja RIGHT JOIN koosnevad järgmistest osadest.
Osa |
Kirjeldus |
tabel1, tabel2 |
Nende tabelite nimed, mille kirjed liidetakse. |
väli1, väli2 |
Liidetavate väljade nimed. Väljadel peab olema sama andmetüüp ja need peavad sisaldama sarnaseid andmeid, kuid neil ei pea olema sama nimi. |
compare |
Suvaline relatsiooniline võrdlusmärk: "=", "<", ">", "<=", ">=" või "<>". |
Lisateavet välisühendamise süntaksi kohta leiate teemast LEFT JOIN, RIGHT JOIN Operations.
Kuva kõik mõlema tabeli read ja ühenda need siis, kui on olemas ühine väärtus
Kui soovite kuvada kahe tabeli kõik read ja ühendada need ühiste väärtuste põhjal, kasutage täielikku välist ühendamist. Access ei toeta konkreetselt täielikke väliseid ühendusi, kuid ühispäringu abil saate saavutada sama efekti. Järgmistes juhistes selgitatakse, kuidas seda teha, kuid kui soovite ühispäringute kohta lisateavet, lugege jaotist Vt ka .
Ühispäringu abil täieliku välisühendamise sooritamiseks tehke järgmist.
-
Looge päring, mis sisaldab vasakpoolset välist ühendamist väljal, mida soovite kasutada täielikuks väliseks ühendamiseks.
-
Klõpsake menüü Avaleht jaotise Vaated nuppu Vaade ning seejärel käsku SQL-i vaade.
-
SQL-koodi kopeerimiseks vajutage klahvikombinatsiooni CTRL+C.
-
Kustutage FROM-klausli lõpus olev semikoolon ja vajutage sisestusklahvi (ENTER).
-
Tippige UNION ja vajutage sisestusklahvi (ENTER).
Märkus.: Ärge kasutage märksõnu ALL, kui kasutate ühispäringu abil täielikku välist ühendamist.
-
3. juhises kopeeritud SQL-koodi kleepimiseks vajutage klahvikombinatsiooni CTRL+V.
-
Muutke kleebitud koodis laiend LEFT JOIN vorminguks RIGHT JOIN.
-
Kustutage teise FROM-klausli lõpus olev semikoolon ja vajutage sisestusklahvi (ENTER).
-
Lisage WHERE-klausel, mis määrab, et FROM-klauslis (vasakus tabelis) loetletud esimeses tabelis on liitmisvälja väärtus NULL.
Näiteks kui FROM-klausel on:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]Peaksite lisama järgmise WHERE-klausli:
WHERE Products.ID IS NULL
-
Tippige semikoolon (;) WHERE-klausli lõpus, et näidata ühispäringu lõppu.
-
Klõpsake menüü Kujundus jaotises Tulemid nuppu Käivita.
Ristliitmised
Ristliitmised erinevad sisemistest ja välistest ühendustest, kuna neid pole Access. Ristühendamisel kombineeritakse iga ühe tabeli rida teise tabeli iga reaga, mille tulemuseks on risttoode või Cartesi toode. Iga kord, kui käivitate päringu, mis sisaldab konkreetselt ühendamata tabeleid, on risttoode tulem. Ristliitmised on tavaliselt tahtmatud, kuid on juhtumeid, kus need võivad olla kasulikud.
Miks peaksin ristühendamist kasutama?
Kui soovite uurida kõiki võimalikke ridade kombinatsioone kahe tabeli või päringu vahel, kasutage ristühendamist. Oletagem näiteks, et teie ettevõttel on olnud suurepärane aasta ja kaalute klientidele tagasimaksete tegemist. Saate koostada päringu, mis summeerib iga kliendi ostud, luua väikese tabeli, millel on mitu võimalikku tagasimakseprotsenti, ja kombineerida need kaks teise ristühendamist teostavasse päringusse. Lõpuks on teil päring, mis kuvab iga kliendi hüpoteetiliste tagasimaksete kogumi.
Kuidas ristühendamist kasutada?
Ristühendamine luuakse iga kord, kui kaasate päringusse tabeleid või päringuid, ja te ei loo iga tabeli või päringu jaoks vähemalt ühte konkreetset ühendust. Access ühendab iga tabeli või päringu kõik read, mis pole ühegi teise tabeli või päringuga otseselt ühendatud, tulemite kõigisse ridadesse. Kaaluge eelmise lõigu tagasimaksestsenaariumi. Oletagem, et teil on 91 klienti ja soovite vaadata viit võimalikku tagasimakse protsenti. Ristliitmisel kuvatakse 455 rida (arvude 91 ja 5 toode).
Nagu võite ette kujutada, võivad soovimatud ristliitmised päringutulemites luua tohutul hulgal ridu. Lisaks on need tulemid üldiselt tähenduseta, sest kui te tegelikult ei kavatse kõiki ridu kõigi teiste ridadega kombineerida, pole suurem osa tulemites kuvatavatest kombineeritud ridadest mõttekas. Lõpuks võib tahtmatuid ristühendamisi kasutavate päringute käitamiseks kuluda väga kaua aega.
1. Ringidega väljad tuleb omavahel ühendada.
1. Arvestage, et kirjeid on väga palju.
1. Võtke arvesse, et kirjete arv on palju väiksem.
Tabelite ühendamine väljaväärtuste ebavõrdsuse põhjal
Ühendamised ei pea põhinema ühendatud väljade samaväärsusel . Ühendamine võib põhineda võrdlusmärgil , näiteks suurem kui (>), väiksem kui (<) või ei võrdu (<>). Ühendusi, mis ei põhine samaväärsusel, nimetatakse ebavõrdseteks ühendusteks.
Kui soovite kahe andmeallika read kombineerida väljaväärtuste põhjal, mis pole võrdsed, kasutage ebavõrdset ühendamist. Tavaliselt põhinevad ebavõrdsed ühendused kas suuremal kui (>), väiksem kui (<), suurem või võrdne (>=) või väiksem kui (<=) võrdlusmärke. Ebavõrdsed ühendused, mis põhinevad operaatoril ei võrdu (<>) võivad tagastada peaaegu nii palju ridu kui ristliitmised ja tulemusi võib olla raske tõlgendada.
Kuidas kasutada ebavõrdset liitumist?
Kujundusvaates ei toetata ebavõrdseid ühendusi. Kui soovite neid kasutada, peate seda tegema SQL-i vaates. Kuid saate luua ühenduse kujundusvaates, aktiveerida SQL-i vaate, otsida võrdub (=) võrdlusmärgi ja muuta selle tehtemärgiks, mida soovite kasutada. Pärast seda saate päringu uuesti kujundusvaates avada ainult siis, kui muudate võrdlusmärgi esmalt tagasi SQL-i vaates võrdseks (=).
Ühenduse kustutamine
Kui Access loob automaatselt ühenduse, mida te ei soovi, või kui loote ühenduse kogemata (nt kahe eri andmetüübiga välja vahel), saate ühenduse kustutada.
-
Klõpsake päringu kujundusruudustikus ühendust, mille soovite eemaldada.
-
Vajutage kustutusklahvi (DELETE).
-või-
-
Paremklõpsake päringu kujundusruudustikus ühendust, mille soovite eemaldada, ja seejärel klõpsake käsku Kustuta.