Kā rakstīt Microsoft Access SQL vaicājumus no jauna

Kā rakstīt Microsoft Access SQL vaicājumus no jauna

Microsoft Access neapšaubāmi ir visspēcīgākais rīks visā Microsoft Office komplektā, tomēr tas mistizē (un dažreiz biedē) Office enerģijas lietotājus. Ar straujāku mācīšanās līkni nekā Word vai Excel, kā ikvienam vajadzētu apņemt galvu, izmantojot šo rīku? Šonedēļ Brūss Epers aplūkos dažus jautājumus, ko izraisījis viens no mūsu lasītājiem.





Lasītājs jautā:

Man ir problēmas rakstīt vaicājumu programmā Microsoft Access. Man ir datu bāze ar divām produktu tabulām, kas satur kopīgu kolonnu ar skaitlisku produkta kodu un saistītu produkta nosaukumu. Es vēlos uzzināt, kuri produkti no A tabulas ir atrodami Es vēlos pievienot kolonnu ar nosaukumu Rezultāti, kas satur produkta nosaukumu no A tabulas, ja tāds ir, un produkta nosaukumu no B tabulas, ja tā nav A tabulā. Vai jums ir kāds padoms?





Brūsa atbilde:

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





SQL ir komandu valoda, ko izmanto, lai pievienotu, dzēstu, atjauninātu un atgrieztu datu bāzē saglabāto informāciju, kā arī mainītu galvenos datu bāzes komponentus, piemēram, pievienotu, dzēstu vai mainītu tabulas vai rādītājus.

Sākumpunkts

Ja jums vēl nav zināma piekļuve Access vai citai RDBMS, es ieteiktu vispirms sākt ar šiem resursiem:



Ja jums būs pamatzināšanas par šajos rakstos sniegtajiem jēdzieniem, tālāk minētais būs nedaudz vieglāk sagremojams.

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

Iedomājieties, ka jūs vadāt uzņēmumu, kas visā pasaulē pārdod 50 dažādu veidu logrīkus. Jūsu klientu bāze ir 1250 un vidēji mēnesī šiem klientiem pārdodat 10 000 logrīku. Jūs pašlaik izmantojat vienu izklājlapu, lai izsekotu visus šos pārdošanas apjomus - faktiski vienu datu bāzes tabulu. Un katru gadu izklājlapai pievieno tūkstošiem rindu.





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 vairākas reizes gadā pērk no jums logrīkus, tāpēc jums abiem ir daudz vairāk rindu.





Ja Džoana Smita apprecas ar Tedu Bainsu un ņem viņa uzvārdu, tagad ir jāmaina katra rinda, kurā ir viņas vārds. Problēma kļūst sarežģītāka, ja jums ir divi dažādi klienti ar nosaukumu “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ājumus, klientus un pasūtījumus.

Vienkārši aplūkojot mūsu piemēra klienta daļu, mēs noņemtu slejas klienta vārdam un klienta adresei un ievietojām tās jaunā tabulā. Iepriekš redzamajā attēlā es arī esmu labāk sadalījis lietas, lai iegūtu detalizētāku piekļuvi datiem. Jaunajā tabulā ir arī sleja primārajai atslēgai (ClientID) - numurs, kas tiks izmantots, lai piekļūtu katrai šīs tabulas rindai.

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

Tagad, kad Džoana Smita maina savu vārdu uz Džoanu Bainu, izmaiņas tabulā Klienti ir jāveic tikai vienu reizi. Katra cita atsauce no pievienotajām tabulām iegūs pareizo klienta vārdu, un atskaite, kurā tiek aplūkots, ko Džoana ir iegādājusies pēdējos 5 gadus, saņems visus pasūtījumus ar savu pirmslaulības un precēto vārdu, nemainot pārskata ģenerēšanas veidu .

Kā papildu ieguvums tas samazina arī kopējo patērēto krātuves apjomu.

Pievienošanās veidi

SQL definē piecus dažādus savienojuma veidus: IEKŠĒJĀ, KREISĀ ĀRĒJĀ, RIGHT OUTER, FULL OUTER un CROSS. OUTER atslēgvārds nav obligāts SQL priekšrakstā.

Microsoft Access ļauj izmantot INNER (noklusējums), LEFT OUTER, RIGHT OUTER un CROSS. FULL OUTER netiek atbalstīts kā tāds, taču, izmantojot LEFT OUTER, UNION ALL un RIGHT OUTER, to var viltot, maksājot vairāk CPU ciklu un I/O darbību.

CROSS savienojuma izvade satur katru kreisās tabulas rindu pārī ar katru labās tabulas rindu. Vienīgo reizi, kad esmu redzējis CROSS savienojumu, tiek izmantots datu bāzes serveru slodzes pārbaude.

Apskatīsim, kā darbojas pamata savienojumi, pēc tam mēs tos pārveidosim atbilstoši savām vajadzībām.

Sāksim, izveidojot divas tabulas ProdA un ProdB ar šādām dizaina īpašībām.

Automātiskais numurs ir automātiski pieaugošs garš vesels skaitlis, kas piešķirts ierakstiem, kad tie tiek pievienoti tabulai. Opcija Teksts netika modificēta, tāpēc tā pieņems teksta virkni līdz 255 rakstzīmēm.

Tagad aizpildiet tos ar dažiem datiem.

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

Nākamais, izveidot jaunu vaicājumu dodoties uz Izveidot> Vaicājuma dizains . Dialoglodziņā Rādīt tabulu atlasiet abas tabulas un noklikšķiniet uz Pievienot , tad Aizvērt .

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

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

Pēc noklusējuma ir izvēlēts savienojuma veids 1 (INNER). 2. variants ir KREISĀS ĀRĒJĀ savienošana, bet 3. - PAREIZĀ ĀRĒJA savienošana.

Vispirms apskatīsim INNER pievienošanos, tāpēc noklikšķiniet uz Labi, lai noraidītu dialoglodziņu.

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

Kad mēs izpildām vaicājumu (sarkanā izsaukuma zīme lentē), tajā tiks parādīts lauks ProductName no abām tabulām ar vērtību no tabulas ProdA pirmajā kolonnā un ProdB otrajā.

Ņemiet vērā, ka rezultāti parāda tikai tās vērtības, kurās ProductID ir vienādas abās tabulās. Lai gan tabulā ProdB ir ieraksts ProductID = 1, tas netiek rādīts rezultātos, jo ProductID = 1 tabulā ProdA nepastāv. Tas pats attiecas uz ProductID = 11. Tas pastāv tabulā ProdA, bet ne tabulā ProdB.

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

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

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

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

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

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 (RIGHT OUTER).

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

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

Funkciju izmantošana vaicājumā

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

Šī rezultāta ģenerēšanai var izmantot funkciju Tūlītēja IF (IIF). Funkcijai ir trīs parametri. Pirmais ir nosacījums, kas jānovērtē līdz patiesai vai nepatiesai vērtībai. Otrais parametrs ir vērtība, kas jāatgriež, ja nosacījums ir True, un trešais parametrs ir vērtība, kas jāatgriež, ja nosacījums ir False.

Pilnīga mūsu situācijas funkciju struktūra izskatās šādi:

IIF(ProdA.ProductID Is Null, ProdB.ProductName,ProdA.ProductName)

Ņemiet vērā, 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 nulles vērtību. Citiem vārdiem sakot, Null nav vienāds ar Null. Kādreiz. Lai to novērstu, mēs pārbaudām vērtību, izmantojot atslēgvārdu “Ir”.

Mēs varējām izmantot arī “Is Not Null” un mainīt patieso un nepatieso parametru secību, lai iegūtu tādu pašu rezultātu.

Ievietojot to vaicājumu noformētājā, laukā: jāievada visa funkcija. Lai to izveidotu kolonnā “Rezultāti”, jāizmanto aizstājvārds. Lai to izdarītu, ievadiet funkciju ar rezultātu “Rezultāti:”, kā redzams nākamajā ekrānuzņēmumā.

Lai to izdarītu, ekvivalents SQL kods būtu šāds:

SELECT ProdA.ProductName, ProdB.ProductName, IIF(ProdA.ProductID Is Null,ProdB.ProductName,ProdA.ProductName) AS Results FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

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

faila nosaukums ir pārāk garš, lai to izdzēstu

Šeit mēs redzam katram ierakstam, kur tabulai ProdA ir vērtība, šī vērtība tiek atspoguļota kolonnā Rezultāti. Ja ProdA tabulā nav ieraksta, rezultāts no ProdB tiek parādīts rezultātos, ko tieši jautāja mūsu lasītājs.

Lai iegūtu vairāk resursu Microsoft Access apgūšanai, skatiet Džoela Lī rakstu Kā iemācīties Microsoft Access: 5 bezmaksas tiešsaistes resursi.

Kopīgot Kopīgot Čivināt E -pasts Vai ir vērts jaunināt uz Windows 11?

Windows ir pārveidots. Bet vai ar to pietiek, lai pārliecinātu jūs pāriet no Windows 10 uz Windows 11?

Lasīt Tālāk
Saistītās tēmas
  • Produktivitāte
  • Jautājiet ekspertiem
Par autoru Brūss Epers(Publicēti 13 raksti)

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

Vairāk no Bruce Epper

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu