Reklāma

Microsoft Access ir neapšaubāmi visspēcīgākais rīks visā Microsoft Office komplektā, tomēr tas noslēpj (un dažreiz arī biedē) Office enerģijas lietotājus. Ja kādam ir stāvāka mācīšanās līkne nekā Word vai Excel, kā kādam vajadzētu domāt par šī rīka izmantošanu? Šonedēļ, Brūss Epers apskatīsim dažus jautājumus, kurus pamudināja viens no mūsu lasītājiem.

Lasītājs jautā:

Man ir problēmas rakstīt vaicājumu Microsoft Access.

Man ir datu bāze ar divām produktu tabulām, kurās ir kopēja kolonna ar produkta ciparu kodu un ar to saistīto produkta nosaukumu.

Es vēlos uzzināt, kuri produkti no A tabulas ir atrodami B tabulā. Es gribu pievienot kolonnu ar nosaukumu Rezultāti, kurā ir produkta nosaukums no A tabulas, ja tāds pastāv, un produkta nosaukums no tabulas B, ja tāda nav A tabulā.

Vai jums ir kāds padoms?

Brūsa atbilde:

Microsoft Access ir datu bāzu pārvaldības sistēma (DBVS), kas paredzēta izmantošanai gan Windows, gan Mac mašīnās. Datu apstrādei un glabāšanai tas izmanto Microsoft Jet datu bāzes dzinēju. Tas lietotājiem nodrošina arī grafisko saskarni, kas gandrīz novērš nepieciešamību izprast strukturēto vaicājumu valodu (SQL).

instagram viewer

SQL ir komandu valoda, ko izmanto, lai pievienotu, izdzēstu, atjauninātu un atgrieztu informāciju, kas glabājas datu bāzi, kā arī modificēt galvenos datu bāzes komponentus, piemēram, pievienojot, dzēšot vai mainot tabulas vai indeksi.

Sākumpunkts

Ja jums vēl nav zināmu par Access vai citu RDBMS, es ieteiktu pirms turpināt:

  • Kas ir datu bāze? Tātad, kas jebkurā gadījumā ir datu bāze? [MakeUseOf skaidrojumi]Programmētājam vai tehnoloģiju entuziastam datu bāzes jēdziens ir kaut kas tāds, ko patiešām var uzskatīt par pašsaprotamu. Tomēr daudziem cilvēkiem pati datu bāzes jēdziens ir mazliet svešs ... Lasīt vairāk kur Raiens Dube izmanto programmu Excel, lai parādītu relāciju datu bāzu pamatus.
  • Īsa rokasgrāmata darba sākšanai ar Microsoft Access 2007 Īsa rokasgrāmata darba sākšanai ar Microsoft Access 2007 Lasīt vairāk kas ir piekļuves augsta līmeņa pārskats un komponenti, kas veido piekļuves datu bāzi.
  • Ātra tabula apmācībā Microsoft Access 2007 Ātra tabula apmācībā Microsoft Access 2007 Lasīt vairāk apskatīsim jūsu pirmās datu bāzes un tabulu izveidi, lai saglabātu savus strukturētos datus.
  • Ātra apmācība par vaicājumiem Microsoft Access 2007 Ātra apmācība par vaicājumiem Microsoft Access 2007 Lasīt vairāk apskatīti veidi, kā atgriezt īpašas datu daļas, kas glabājas datu bāzes tabulās.

Pamatzināšanas par šajos rakstos sniegtajiem jēdzieniem padarīs tālāk uzskaitītos nedaudz vieglāk sagremotus.

Datu bāzes attiecības un normalizēšana

Iedomājieties, ka jūs vadāt uzņēmumu, kas visā pasaulē pārdod 50 dažādu veidu preces. Jums ir 1 250 klientu un vidēji mēnesī šiem klientiem pārdodiet 10 000 preces. Pašlaik jūs izmantojat vienu izklājlapu, lai izsekotu visiem šiem pārdošanas apjomiem - faktiski vienu datu bāzes tabulu. Katru gadu izklājlapai tiek pievienoti tūkstošiem rindu.

plakanā galda-1plakanais galds-2

Iepriekš minētie attēli ir daļa no jūsu izmantotās pasūtījumu uzskaites izklājlapas. Tagad sakiet, ka abi šie klienti iegādājas preces no jums vairākas reizes gadā, tāpēc jums abiem ir daudz vairāk rindu.

Ja Džoana Smita apprecas ar Tedu Bainesu un ņem viņa uzvārdu, tagad jāmaina katra rinda, kurā ir viņas vārds. Problēma ir vēl sarežģītāka, ja jums ir divi dažādi klienti ar vārdu “Joan Smith”. Diezgan izplatīta notikuma dēļ ir kļuvis daudz grūtāk saglabāt pārdošanas datus konsekventus.

Izmantojot datu bāzi un normalizējot datus, mēs varam sadalīt preces vairākās tabulās, piemēram, krājumos, klientos un pasūtījumos.

normalizēšana

Apskatot mūsu piemēra klientu daļu, mēs noņemtu slejas Klienta vārds un Klienta adrese un ievietotu tās jaunā tabulā. Iepriekš redzamajā attēlā es arī esmu izdarījis labākas lietas, lai iegūtu precīzāku piekļuvi datiem. Jaunajā tabulā ir arī primārās atslēgas (ClientID) kolonna - numurs, kas tiks izmantots, lai piekļūtu katrai šīs tabulas rindai.

Sākotnējā tabulā, kurā mēs noņēmām šos datus, mēs pievienosim kolonnu Ārējai atslēgai (ClientID), kas ir saites uz pareizo rindu, kurā ir informācija par šo konkrēto klientu.

Tagad, kad Džoana Smita maina savu vārdu uz Džoana Bainesa, izmaiņas klientu tabulā jāveic tikai vienu reizi. Katrā citā atsaucē no apvienotajām tabulām tiks izvilkts pareizais klienta vārds un atskaite, kurā apskatīts, ko Džoana iegādājusies pēdējie 5 gadi saņems visus pasūtījumus gan ar pirmslaulības, gan ar precētiem vārdiem, un jums nebūs jāmaina ziņojuma sastādīšanas kārtība ģenerēts.

Kā papildu ieguvums tas samazina arī kopējo patērētās krātuves daudzumu.

Pievienojieties veidiem

SQL definē piecus dažādus savienojumu veidus: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER un CROSS. SQL paziņojumā OUTER atslēgvārds nav obligāts.

Microsoft Access ļauj izmantot INNER (noklusējums), LEFT OUTER, RIGHT OUTER un CROSS. FULL OUTER kā tāds netiek atbalstīts, bet, izmantojot LEFT OUTER, UNION ALL un RIGHT OUTER, to var nofilmēt uz citu CPU ciklu un I / O darbību rēķina.

CROSS savienojuma izvade satur katru kreisās tabulas rindu pārī ar katru labās tabulas rindu. Vienīgais gadījums, kad esmu redzējis CROSS pievienošanos, ir datu bāzes serveru slodzes pārbaude.

Apskatīsim, kā darbojas pamata savienojumi, tad mēs tos pārveidosim, lai tie atbilstu mūsu vajadzībām.

Sāksim ar divu tabulu, ProdA un ProdB, izveidošanu ar šādām dizaina īpašībām.

piekļuves tabula-def

AutoNumber ir automātiski pieaugošs vesels skaitlis, kas piešķirts ierakstiem, kad tie tiek pievienoti tabulai. Iespēja Teksts netika modificēta, tāpēc tā pieņems teksta virkni, kas nepārsniedz 255 rakstzīmes.

Tagad aizpildiet tos ar dažiem datiem.

piekļuves galdi

Lai parādītu atšķirības 3 savienojuma veidu darbībā, no ProdA esmu izdzēsis 1., 5. un 8. ierakstu.

Pēc tam izveidojiet jaunu vaicājumu, dodoties uz Izveidot> Vaicājuma dizains. Dialoglodziņā Rādīt tabulu atlasiet abas tabulas un noklikšķiniet uz Pievienot, tad Aizveriet.

jauns vaicājums

ProdA tabulā noklikšķiniet uz ProductID, tabulā ProdB velciet to uz ProductID un atlaidiet peles pogu, lai izveidotu saikni starp tabulām.

dizains_skats

Ar peles labo pogu noklikšķiniet uz līnijas starp tabulām, kas attēlo attiecības starp vienumiem un atlasiet Pievienoties īpašumiem.

join_properties

Pēc noklusējuma ir izvēlēts pievienošanās tips 1 (INNER). 2. variants ir savienojums ar kreiso un ārējo savienojumu, un 3. variants ir savienojums ar labo kreiso pusi.

Vispirms apskatīsim INNER pievienošanos, tāpēc noklikšķiniet uz Labi, lai pārtrauktu dialogu.

Vaicājumu izstrādātājā nolaižamajos sarakstos atlasiet laukus, kurus vēlamies redzēt.

dizains-skats-2

Kad mēs izpildīsim vaicājumu (lentē sarkans izsaukuma zīme), tas parādīs ProductName lauku no abām tabulām ar vērtību no tabulas ProdA pirmajā kolonnā un ProdB otrajā.

iekšējais savienojums

Ievērojiet, ka rezultāti parāda vērtības tikai tajās daļās, kur produkta ID ir vienāds. Pat ja ProdB tabulā ir ieraksts par ProductID = 1, tas rezultātos netiek parādīts, jo tabulā ProdA ProductID = 1 nav. Tas pats attiecas uz produktu ID = 11. Tas pastāv tabulā ProdA, bet ne tabulā ProdB.

dizains-lente

Izmantojot lentes pogu Skatīt un pārejot uz SQL skatu, jūs varat redzēt dizainera ģenerēto SQL vaicājumu, ko izmantoja šo rezultātu iegūšanai.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Atgriežoties pie dizaina skata, mainiet savienojuma veidu uz 2 (LEFT OUTER). Palaidiet vaicājumu, lai redzētu rezultātus.

left_outer_join

Kā redzat, katrs ProdA tabulas ieraksts tiek attēlots rezultātos, savukārt rezultātos tiek parādīti tikai tie ProdB ieraksti, kuriem ProdB tabulā ir atbilstošs ProductID ieraksts.

Tukša vieta kolonnā ProdB.ProductName ir īpaša vērtība (NULL), jo tabulā ProdB nav atbilstošas ​​vērtības. Tas vēlāk izrādīsies svarīgi.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Izmēģiniet to pašu ar trešo savienojuma veidu (PAREIZI ĀRĒJI).

right_outer_join

Rezultāti parāda visu, sākot no tabulas ProdB, kamēr tajā tiek parādītas tukšas (pazīstamas kā NULL) vērtības, ja tabulā ProdA nav atbilstošas ​​vērtības. Līdz šim tas mūs tuvina rezultātiem, kas vēlami mūsu lasītāja jautājumā.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA TIESISKĀS PIEVIENOŠANĀS ProdB ON ProdA.ProductID = ProdB.ProductID;

Funkciju izmantošana vaicājumā

Funkcijas rezultātus var arī atgriezt kā daļu no vaicājuma. Mēs vēlamies, lai rezultātu kopā tiktu parādīta jauna kolonna ar nosaukumu “Rezultāti”. Tās vērtība būs tabulas ProdA kolonas ProductName saturs, ja ProdA ir vērtība (tā nav NULL), pretējā gadījumā tā ir jāņem no tabulas ProdB.

Lai iegūtu šo rezultātu, var izmantot funkciju Tūlītēja IF (IIF). Funkcijai ir trīs parametri. Pirmais ir nosacījums, kas jānovērtē atbilstoši patiesai vai nepatiesai vērtībai. Otrais parametrs ir vērtība, kas jāatdod, ja nosacījums ir Patiess, un trešais parametrs ir vērtība, kas jāatdod, ja nosacījums ir nepatiess.

Pilnīga mūsu situācijas konstrukcija izskatās šādi:

IIF (ProdA.ProductID nav spēkā, ProdB.ProductName, ProdA.ProductName)

Ievērojiet, ka nosacījuma parametrs nepārbauda vienlīdzību. Null vērtībai datu bāzē nav vērtības, kuru varētu salīdzināt ar jebkuru citu vērtību, ieskaitot citu Null. Citiem vārdiem sakot, Null nav vienāds ar Null. Kādreiz. Lai to sasniegtu, mēs pārbaudām vērtību, izmantojot atslēgvārdu “Ir”.

Lai iegūtu tādu pašu rezultātu, mēs būtu varējuši izmantot arī “Nav Nav Null” un mainīt parametru Patiesais un Nepatiesais secību.

Ievietojot to Query Designer, ierakstiet visu funkciju laukā:. Lai to izveidotu, izveidojot kolonnu “Rezultāti”, jums jāizmanto aizstājvārds. Lai to izdarītu, ievadiet funkciju ar rezultātu “Rezultāti:”, kā parādīts nākamajā ekrānuzņēmumā.

labā-ārējā-aliased-rezultāts-dizains

Līdzvērtīgs SQL kods, lai to izdarītu, būtu:

SELECT ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID ir nulle, ProdB.ProductName, ProdA.ProductName) AS rezultāti no ProdA TIESISKĀS APVIENOŠANĀS ProdB ON ProdA.ProductID = ProdB.ProductID;

Tagad, kad mēs izpildīsim šo vaicājumu, tas parādīs šos rezultātus.

right_outer_with_aliased_results

Šeit mēs redzam katru ierakstu, kurā tabulai ProdA ir vērtība, šī vērtība tiek atspoguļota slejā Rezultāti. Ja tabulā ProdA nav ierakstu, ProdB ieraksts tiek parādīts rezultātos, tieši to lūdza mūsu lasītājs.

Plašāku informāciju par Microsoft Access apguvi skatiet Džoela Lī Kā iemācīties Microsoft Access: 5 bezmaksas tiešsaistes resursi Kā iemācīties Microsoft Access: 5 bezmaksas tiešsaistes resursiVai jums ir jāpārvalda liels datu apjoms? Jums vajadzētu izpētīt Microsoft Access. Mūsu bezmaksas studiju resursi var palīdzēt jums sākt darbu un apgūt prasmes sarežģītākiem projektiem. Lasīt vairāk .

Brūss spēlē ar elektroniku kopš 70. gadiem, datoriem kopš 80. gadu sākuma un precīzi atbild uz jautājumiem par tehnoloģijām, kuras viņš visu laiku nav izmantojis un redzējis. Viņš sevi kaitina arī mēģinot spēlēt ģitāru.