reklama

Microsoft Access je pravděpodobně nejúčinnějším nástrojem v celé sadě Microsoft Office, přesto však mystifikuje (a někdy děsí) mocenské uživatele Office. Jak má někdo s použitím tohoto nástroje strmější křivku učení než Word nebo Excel? Tento týden, Bruce Epper se podívám na některé z otázek vyvolaných touto otázkou od jednoho z našich čtenářů.

Čtenář se ptá:

Mám potíže s napsáním dotazu v aplikaci Microsoft Access.

Mám databázi se dvěma tabulkami produktů obsahujícími společný sloupec s číselným kódem produktu a přidruženým názvem produktu.

Chci zjistit, které produkty z tabulky A najdete v tabulce B. Chci přidat sloupec nazvaný Výsledky, který obsahuje název produktu z tabulky A, pokud existuje, a název produktu z tabulky B, pokud v tabulce A neexistuje.

Máte nějakou radu?

Bruceova odpověď:

Microsoft Access je systém správy databází (DBMS) určený pro použití na počítačích Windows i Mac. Pro zpracování a ukládání dat využívá databázový stroj Microsoft Jet. Poskytuje také grafické rozhraní pro uživatele, které téměř eliminuje potřebu porozumět Structured Query Language (SQL).

instagram viewer

SQL je příkazový jazyk používaný k přidávání, mazání, aktualizaci a vracení informací uložených v databázi a také upravovat základní komponenty databáze, jako je přidávání, mazání nebo úpravy tabulek nebo indexy.

Výchozí bod

Pokud ještě nemáte nějaké znalosti o přístupu nebo jiném RDBMS, doporučujeme vám začít s těmito prostředky před pokračováním:

  • Co je to databáze? Co je vlastně databáze? [MakeUseOf vysvětluje]Pro programátora nebo technologického nadšence je koncept databáze něco, co lze skutečně považovat za samozřejmost. Pro mnoho lidí je však koncepce samotné databáze trochu cizí ... Přečtěte si více kde Ryan Dube používá Excel k zobrazení základů relačních databází.
  • Stručný průvodce, jak začít s aplikací Microsoft Access 2007 Stručný průvodce, jak začít s aplikací Microsoft Access 2007 Přečtěte si více což je přehled na vysoké úrovni o přístupu a komponentách, které tvoří databázi aplikace Access.
  • Stručný návod k tabulkám v aplikaci Microsoft Access 2007 Stručný návod k tabulkám v aplikaci Microsoft Access 2007 Přečtěte si více se podívá na vytvoření první databáze a tabulek pro uložení strukturovaných dat.
  • Stručný návod k dotazům v aplikaci Microsoft Access 2007 Stručný návod k dotazům v aplikaci Microsoft Access 2007 Přečtěte si více dívá se na prostředky k návratu určitých částí dat uložených v databázových tabulkách.

Díky základnímu porozumění pojmům uvedeným v těchto článcích bude trochu snazší strávit následující.

Vztahy a normalizace databáze

Představte si, že provozujete společnost prodávající 50 různých typů widgetů po celém světě. Máte klientskou základnu 1 250 a v průměru za měsíc prodáte těmto klientům 10 000 widgetů. Momentálně používáte ke sledování všech těchto prodejů jednu tabulku - ve skutečnosti jedinou databázovou tabulku. A každý rok přidává do tabulky tisíce řádků.

plochý stůl-1plochý stůl-2

Výše uvedené obrázky jsou součástí tabulky pro sledování objednávek, kterou používáte. Nyní řekněte, že oba tito klienti od vás kupují widgety několikrát ročně, takže pro oba z nich máte mnohem více řádků.

Pokud se Joan Smith ožení s Tedem Bainesem a vezme si příjmení, musí být nyní změněn každý řádek, který obsahuje její jméno. Tento problém je znásoben, pokud náhodou máte dva různé klienty se jménem „Joan Smith“. Je jen mnohem těžší udržet vaše údaje o prodeji konzistentní kvůli poměrně běžné události.

Pomocí databáze a normalizací dat můžeme jednotlivé položky rozdělit do několika tabulek, jako jsou zásoby, klienti a objednávky.

normalizace

Když se podíváme na část klienta z našeho příkladu, odebereme sloupce pro jméno klienta a adresu klienta a vložíme je do nové tabulky. Na obrázku výše jsem také lépe rozdělil věci, abych získal podrobnější přístup k datům. Nová tabulka také obsahuje sloupec pro primární klíč (ClientID) - číslo, které bude použito pro přístup ke každému řádku v této tabulce.

V původní tabulce, kde jsme tato data odstranili, jsme přidali sloupec pro cizí klíč (ClientID), což je odkazy na správný řádek obsahující informace o tomto konkrétním klientovi.

Nyní, když Joan Smith změní své jméno na Joan Baines, je třeba tuto změnu provést pouze jednou v klientské tabulce. Každý další odkaz ze spojených tabulek vytáhne správné jméno klienta a zprávu, která se zabývá tím, za co si Joan zakoupila posledních 5 let dostane všechny rozkazy pod svým panenským i ženatým jménem, ​​aniž by musela změnit, jak je zpráva uvedena generováno.

Další výhodou je také snížení celkového množství spotřebovaného úložiště.

Připojte se k typům

SQL definuje pět různých typů spojení: VNITŘNÍ, LEVÝ VNĚJŠÍ, PRAVÝ VNĚJŠÍ, PLNÝ VNĚJŠÍ a CROSS. Klíčové slovo OUTER je v příkazu SQL volitelné.

Microsoft Access umožňuje použití INNER (výchozí), LEFT OUTER, RIGHT OUTER a CROSS. FULL OUTER není podporován jako takový, ale pomocí LEFT OUTER, UNION ALL a RIGHT OUTER může být zfalšován za cenu dalších cyklů CPU a operací I / O.

Výstup spojení CROSS obsahuje každý řádek levé tabulky spárovaný s každým řádkem pravé tabulky. Jediný okamžik, kdy jsem kdy viděl připojení CROSS, je během testování zátěže databázových serverů.

Podívejme se, jak fungují základní spojení, pak je upravíme tak, aby vyhovovaly našim potřebám.

Začněme vytvořením dvou tabulek, ProdA a ProdB, s následujícími vlastnostmi návrhu.

access-table-defs

AutoNumber je automaticky inkrementující dlouhé celé číslo přiřazené k položkám, jak jsou přidávány do tabulky. Možnost Text nebyla změněna, takže bude akceptovat textový řetězec dlouhý až 255 znaků.

Nyní je vyplňte některými daty.

přístupové tabulky

Abych ukázal rozdíly v tom, jak fungují tři typy spojení, odstranil jsem položky 1, 5 a 8 z ProdA.

Poté vytvořte nový dotaz na Vytvořit> Návrh dotazu. V dialogu Zobrazit tabulku a vyberte obě tabulky klikněte na Přidat, pak Zavřít.

new-query

Klikněte na ProductID v tabulce ProdA, přetáhněte jej do ProductID v tabulce ProdB a uvolněte tlačítko myši pro vytvoření vztahu mezi tabulkami.

design_view

Klepněte pravým tlačítkem myši na řádek mezi tabulkami představující vztah mezi položkami a vyberte Připojit vlastnosti.

join_properties

Ve výchozím nastavení je vybrán typ spojení 1 (INNER). Možnost 2 je spojením VNĚJŠÍ VNĚJŠÍ a 3 je spojením Vpravo VNĚJŠÍ.

Nejprve se podíváme na spojení INNER, takže kliknutím na OK dialog zavřete.

V návrháři dotazů vyberte z rozevíracího seznamu pole, která chceme vidět.

design-view-2

Když spustíme dotaz (červený vykřičník v pásu karet), zobrazí pole ProductName z obou tabulek s hodnotou z tabulky ProdA v prvním sloupci a ProdB ve druhém.

vnitřní spojení

Všimněte si, že výsledky ukazují pouze hodnoty, kde je ProductID v obou tabulkách stejný. I když v tabulce ProdB existuje položka pro ProductID = 1, nezobrazí se ve výsledcích, protože ProductID = 1 v tabulce ProdA neexistuje. Totéž platí pro ProductID = 11. Existuje v tabulce ProdA, ale nikoli v tabulce ProdB.

designová stuha

Pomocí tlačítka Zobrazit na pásu karet a přepnutím do zobrazení SQL můžete vidět dotaz SQL generovaný návrhářem, který byl použit k získání těchto výsledků.

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

Vraťte se zpět do návrhového zobrazení a změňte typ spojení na 2 (LEFT OUTER). Spusťte dotaz a podívejte se na výsledky.

left_outer_join

Jak vidíte, ve výsledcích je reprezentován každý záznam v tabulce ProdA, zatímco ve výsledcích se zobrazí pouze ty v ProdB, které mají odpovídající položku ProductID v tabulce ProdB.

Prázdné místo ve sloupci ProdB.ProductName je speciální hodnota (NULL), protože v tabulce ProdB není odpovídající hodnota. To se ukáže později.

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

Zkuste to samé s třetím typem spojení (PRAVÝ VONKAJŠÍ).

right_outer_join

Výsledky ukazují vše z tabulky ProdB, zatímco zobrazuje prázdné (známé jako NULL) hodnoty, kde tabulka ProdA nemá odpovídající hodnotu. Dosud nás to přibližuje výsledkům požadovaným v otázce čtenáře.

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

Použití funkcí v dotazu

Výsledky funkce mohou být také vráceny jako součást dotazu. Chceme, aby se v naší sadě výsledků objevil nový sloupec s názvem „Výsledky“. Její hodnota bude obsahem sloupce ProductName tabulky ProdA, pokud má ProdA hodnotu (není NULL), jinak by měla být převzata z tabulky ProdB.

K vytvoření tohoto výsledku lze použít funkci Immediate IF (IIF). Funkce má tři parametry. První je podmínka, která musí vyhodnotit na hodnotu True nebo False. Druhý parametr je hodnota, která má být vrácena, pokud je podmínka true, a třetí parametr je hodnota, která má být vrácena, pokud je podmínka False.

Plně funkční konstrukce naší situace vypadá takto:

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

Všimněte si, že parametr podmínky nekontroluje rovnost. Hodnota Null v databázi nemá hodnotu, kterou lze porovnat s jakoukoli jinou hodnotou, včetně jiné hodnoty Null. Jinými slovy, Null se nerovná Null. Vůbec. Abychom to obešli, namísto toho zkontrolujeme hodnotu pomocí klíčového slova „Je“.

Mohli jsme také použít „není notný“ a změnit pořadí parametrů True a False tak, abychom dosáhli stejného výsledku.

Při vkládání do produktu Query Designer musíte do položky Field: zadat celou funkci. Chcete-li vytvořit sloupec „Výsledky“, musíte použít alias. Chcete-li to provést, předmluvte funkci „Výsledky:“, jak je vidět na následujícím obrázku.

design s pravými a vnějšími výsledky

Ekvivalentním kódem SQL by to bylo:

VÝBĚR 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;

Nyní, když spustíme tento dotaz, přinese tyto výsledky.

right_outer_with_aliased_results

Zde vidíme pro každou položku, kde má tabulka ProdA hodnotu, tato hodnota se projeví ve sloupci Výsledky. Pokud v tabulce ProdA není záznam, objeví se položka z ProdB ve výsledcích, což je přesně to, co náš čtenář požádal.

Další zdroje pro výuku aplikace Microsoft Access najdete v Joel Lee's Jak se naučit Microsoft Access: 5 zdrojů online zdarma Jak se naučit Microsoft Access: 5 zdrojů online zdarmaMusíte spravovat velké množství dat? Měli byste se podívat do aplikace Microsoft Access. Naše bezplatné studijní zdroje vám mohou pomoci začít a naučit se dovednosti pro složitější projekty. Přečtěte si více .

Bruce hraje s elektronikou od 70. let, s počítači od počátku 80. let a přesně odpovídá na otázky o technologii, kterou celou dobu nepoužíval ani neviděl. Také se otráví tím, že se pokouší hrát na kytaru.