Reklama

Program Microsoft Access je pravdepodobne najúčinnejším nástrojom v celej sade balíka Microsoft Office, avšak mystifikuje (a niekedy vydesí) používateľov energie balíka Office. Ako má niekto s použitím tohto nástroja strmejšiu krivku učenia ako Word alebo Excel? Tento týždeň, Bruce Epper sa pozrieme na niektoré z otázok, ktoré táto otázka vyvolala od jedného z našich čitateľov.

Čitateľ žiada:

Mám problém s napísaním dopytu v programe Microsoft Access.

Mám databázu s dvoma tabuľkami produktov, ktoré obsahujú spoločný stĺpec s číselným kódom produktu a súvisiacim názvom produktu.

Chcem zistiť, ktoré výrobky z tabuľky A nájdete v tabuľke B. Chcem pridať stĺpec s názvom Výsledky, ktorý obsahuje názov produktu z tabuľky A, ak existuje, a názov produktu z tabuľky B, ak v tabuľke A neexistuje.

Máte nejaké rady?

Bruceova odpoveď:

Microsoft Access je databázový systém riadenia (DBMS) určený na použitie na počítačoch Windows aj Mac. Využíva databázový stroj Jet spoločnosti Microsoft na spracovanie a ukladanie údajov. Poskytuje tiež grafické rozhranie pre používateľov, ktoré takmer eliminuje potrebu porozumieť jazyku Structured Query Language (SQL).

SQL je príkazový jazyk používaný na pridávanie, odstraňovanie, aktualizáciu a vracanie informácií uložených v databázy, ako aj upravovať základné komponenty databázy, ako je pridávanie, odstraňovanie alebo úprava tabuliek alebo Indexy.

Štartovací bod

Ak ešte nemáte skúsenosti s programom Access alebo iným RDBMS, odporúčame vám začať s týmito zdrojmi skôr, ako budete pokračovať:

  • Čo je to databáza? Čo je vlastne databáza? [MakeUseOf vysvetľuje]Pre programátora alebo technologického nadšenca je koncept databázy niečo, čo možno skutočne považovať za samozrejmosť. Pre mnohých ľudí je však samotná koncepcia databázy trochu cudzia ... Čítaj viac kde Ryan Dube používa Excel na zobrazenie základov relačných databáz.
  • Stručný sprievodca Začíname s aplikáciou Microsoft Access 2007 Stručný sprievodca Začíname s aplikáciou Microsoft Access 2007 Čítaj viac čo je prehľad na vysokej úrovni o programe Access a komponentoch, ktoré tvoria databázu programu Access.
  • Stručný návod k tabuľkám v aplikácii Microsoft Access 2007 Stručný návod k tabuľkám v aplikácii Microsoft Access 2007 Čítaj viac sa pozrieme na vytvorenie prvej databázy a tabuliek na ukladanie štruktúrovaných údajov.
  • Stručný návod na otázky v aplikácii Microsoft Access 2007 Stručný návod na otázky v aplikácii Microsoft Access 2007 Čítaj viac skúma prostriedky na vrátenie konkrétnych častí údajov uložených v databázových tabuľkách.

Základné pochopenie pojmov uvedených v týchto článkoch uľahčí strávenie nasledujúceho.

Vzťahy a normalizácia databázy

Predstavte si, že prevádzkujete spoločnosť predávajúcu 50 rôznych typov miniaplikácií po celom svete. Máte klientsku základňu 1 250 a v priemere mesačne týmto klientom predávate 10 000 miniaplikácií. Momentálne používate jedinú tabuľku na sledovanie všetkých týchto predajov - efektívne jedinú databázovú tabuľku. A každý rok sa do tabuľky pridajú tisíce riadkov.

Plochý stôl-1Plochý stôl-2

Vyššie uvedené obrázky sú súčasťou tabuľky sledovania objednávok, ktorú používate. Teraz povedzte, že obaja z týchto klientov od vás kupujú widgety niekoľkokrát do roka, takže pre obidvoch máte oveľa viac riadkov.

Ak sa Joan Smith ožení s Tedom Bainesom a vezme si svoje priezvisko, teraz je potrebné zmeniť každý riadok, ktorý obsahuje jej meno. Tento problém sa znásobuje, ak náhodou máte dvoch rôznych klientov s menom „Joan Smith“. Z dôvodu pomerne bežnej udalosti je oveľa ťažšie udržať konzistentnosť vašich údajov o predaji.

Použitím databázy a normalizáciou údajov môžeme jednotlivé položky rozdeliť do viacerých tabuliek, ako sú inventár, klienti a objednávky.

normalizácie

Pri pohľade na časť klienta z nášho príkladu by sme odstránili stĺpce pre meno klienta a adresu klienta a vložili ich do novej tabuľky. Na obrázku vyššie som tiež lepšie rozoznal veci, aby som získal podrobnejší prístup k údajom. Nová tabuľka obsahuje aj stĺpec pre primárny kľúč (ClientID) - číslo, ktoré sa použije na prístup ku každému riadku v tejto tabuľke.

V pôvodnej tabuľke, kde sme tieto údaje odstránili, sme pridali stĺpec pre cudzí kľúč (ClientID), čo je odkaz na správny riadok obsahujúci informácie o tomto konkrétnom klientovi.

Teraz, keď Joan Smith zmení svoje meno na Joan Baines, je potrebné túto zmenu vykonať iba raz v tabuľke Klient. Každý ďalší odkaz zo spojených tabuliek vytiahne správne meno klienta a správu, ktorá sa zameriava na to, čo si Joan kúpila posledných 5 rokov dostane všetky rozkazy pod jej slobodným aj ženatým menom bez toho, aby musela zmeniť spôsob správy generovaný.

Ďalšou výhodou je tiež zníženie celkového množstva spotrebovaného úložného priestoru.

Pripojte sa k typom

SQL definuje päť rôznych typov spojení: VNÚTORNÁ, ĽAVÁ VONKAJŠIA, PRAVÁ VONKAJŠIA, PLNÁ VONKAJŠIA CROSS. Kľúčové slovo VONKAJŠIE je v príkaze SQL voliteľné.

Program Microsoft Access umožňuje použitie INNER (predvolené), ĽAVÉ VONKAJŠIE, PRAVÉ VONKAJŠIE a CROSS. FULL OUTER nie je ako taký podporovaný, ale použitím LEFT OUTER, UNION ALL a RIGHT OUTER to môže byť falošný za cenu ďalších CPU cyklov a I / O operácií.

Výstup spojenia CROSS obsahuje každý riadok ľavej tabuľky spárovaný s každým radom pravej tabuľky. Jedinýkrát, čo som videl použité spojenie CROSS, je počas testovania záťaže databázových serverov.

Pozrime sa, ako fungujú základné spojenia, potom ich upravíme tak, aby vyhovovali našim potrebám.

Začnime vytvorením dvoch tabuliek, ProdA a ProdB, s nasledujúcimi vlastnosťami návrhu.

access-table-defs

Automatické číslo je automaticky zvyšujúce sa celé číslo, ktoré je priradené k položkám pri ich pridávaní do tabuľky. Možnosť Text sa nezmenila, takže bude akceptovať textový reťazec až do 255 znakov.

Teraz ich vyplňte niektorými údajmi.

prístupové stoly

Aby som ukázal rozdiely v tom, ako fungujú tri typy spojenia, odstránil som položky 1, 5 a 8 z ProdA.

Potom vytvorte nový dopyt prejdením na Vytvoriť> Návrh dopytov. Vyberte obe tabuľky z dialógového okna Zobraziť tabuľku a kliknite na Pridať, potom Zavrieť.

new-query

Kliknite na ProductID v tabuľke ProdA, pretiahnite ho do ProductID v tabuľke ProdB a uvoľnite tlačidlo myši, aby ste vytvorili vzťah medzi tabuľkami.

design_view

Pravým tlačidlom myši kliknite na riadok medzi tabuľkami, ktorý predstavuje vzťah medzi položkami a vyberte Pripojiť vlastnosti.

join_properties

V predvolenom nastavení je vybraté pripojenie typu 1 (INNER). Možnosť 2 je spojenie VNÚTORNÉ VONKAJŠIE a 3 je spojenie Vpravo VONKAJŠIE.

Najprv sa pozrieme na spojenie INNER, takže kliknutím na tlačidlo OK dialóg zatvoríte.

V zozname dopytov vyberte polia, ktoré chceme vidieť z rozbaľovacích zoznamov.

Design-View-2

Keď spustíme dotaz (červený výkričník v páse), zobrazí pole ProductName z oboch tabuliek s hodnotou z tabuľky ProdA v prvom stĺpci a ProdB v druhom.

inner_join

Všimnite si, že výsledky ukazujú iba hodnoty, v ktorých je ID produktu v oboch tabuľkách rovnaké. Aj keď v tabuľke ProdB existuje položka pre ProductID = 1, vo výsledkoch sa nezobrazí, pretože ProductID = 1 v tabuľke ProdA neexistuje. To isté platí pre ProductID = 11. Existuje v tabuľke ProdA, ale nie v tabuľke ProdB.

návrhu stuha

Použitím tlačidla Zobraziť na páse s nástrojmi a prepnutím na zobrazenie SQL môžete vidieť dotaz SQL vygenerovaný návrhárom, ktorý sa použil na získanie týchto výsledkov.

VYBERTE ProdA.ProductName, ProdB.ProductName Z ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Vráťte sa späť do návrhového zobrazenia a zmeňte typ spojenia na 2 (ĽAVÁ VONKAJŠIA). Spustením dotazu zobrazíte výsledky.

left_outer_join

Ako vidíte, vo výsledkoch je zastúpený každý záznam v tabuľke ProdA, zatiaľ čo vo výsledkoch sa zobrazia iba tie v databáze ProdB, ktoré majú zodpovedajúcu položku ProductID v tabuľke ProdB.

Prázdne miesto v stĺpci ProdB.ProductName je špeciálna hodnota (NULL), pretože v tabuľke ProdB neexistuje porovnávacia hodnota. Toto sa ukáže dôležité neskôr.

VYBERTE ProdA.ProductName, ProdB.ProductName Z ProdA ĽAVÉHO ZARIADENIA ProdB ON ProdA.ProductID = ProdB.ProductID;

Skúste to isté s tretím typom spojenia (Vpravo VONKA).

right_outer_join

Výsledky ukazujú všetko z tabuľky ProdB, zatiaľ čo ukazuje prázdne (známe ako NULL) hodnoty, kde tabuľka ProdA nemá zodpovedajúcu hodnotu. Doteraz nás to priblíži k výsledkom požadovaným v otázke našich čitateľov.

ZVOLTE ProdA.ProductName, ProdB.ProductName Z ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Používanie funkcií v dopyte

Výsledky funkcie sa môžu tiež vrátiť ako súčasť dotazu. Chceme, aby sa v našej skupine výsledkov zobrazil nový stĺpec s názvom Výsledky. Jeho hodnota bude obsahom stĺpca ProductName tabuľky ProdA, ak má ProdA hodnotu (nie je NULL), inak by sa mala prevziať z tabuľky ProdB.

Na vygenerovanie tohto výsledku sa môže použiť funkcia Okamžitý IF (IIF). Funkcia má tri parametre. Prvým je stav, ktorý sa musí vyhodnotiť na hodnotu True alebo False. Druhý parameter je hodnota, ktorá sa má vrátiť, ak je podmienka true, a tretí parameter je hodnota, ktorá sa má vrátiť, ak je podmienka False.

Konštrukcia plne funkčnej pre našu situáciu vyzerá takto:

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

Všimnite si, že parameter podmienky nekontroluje rovnosť. Hodnota Null v databáze nemá hodnotu, ktorú je možné porovnať s akoukoľvek inou hodnotou vrátane inej hodnoty Null. Inými slovami, Null sa nerovná Null. Ever. Aby sme to prekonali, namiesto toho skontrolujeme hodnotu pomocou kľúčového slova „Je“.

Mohli sme použiť aj „nie je nulové“ a zmeniť poradie parametrov True a False tak, aby sme dosiahli rovnaký výsledok.

Pri vkladaní do nástroja Query Designer musíte do položky Field: napísať celú funkciu. Ak chcete vytvoriť stĺpec „Výsledky“, musíte použiť alias. Ak to chcete urobiť, predznačte funkciu „Výsledky:“ tak, ako je to znázornené na nasledujúcom obrázku.

pravého vonkajšieho aliasom-results-design

Ekvivalentný kód SQL na to by bol:

VYBERTE ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID je Null, ProdB.ProductName, ProdA.ProductName) AS Výsledky OD ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Po spustení tohto dotazu prinesie tieto výsledky.

right_outer_with_aliased_results

Tu vidíme pre každý záznam, kde má tabuľka ProdA hodnotu, táto hodnota sa odráža v stĺpci Výsledky. Ak v tabuľke ProdA nie je žiadny záznam, položka z ProdB sa zobrazí vo výsledkoch, čo je presne to, čo náš čitateľ požiadal.

Ďalšie zdroje na učenie sa programu Microsoft Access nájdete v Joel Lee's Ako sa naučiť Microsoft Access: 5 bezplatných online zdrojov Ako sa naučiť Microsoft Access: 5 bezplatných online zdrojovMusíte spravovať veľké množstvo údajov? Mali by ste sa pozrieť do programu Microsoft Access. Naše bezplatné študijné zdroje vám môžu pomôcť začať a naučiť sa zručnosti pre komplexnejšie projekty. Čítaj viac .

Bruce hrá s elektronikou už od 70. rokov, počítače od začiatku 80. rokov a presne odpovedal na otázky týkajúce sa technológie, ktorú po celú dobu nepoužíva. Tiež sa hnevá tým, že sa pokúša hrať na gitaru.