Hirdetés

A Microsoft Access vitathatatlanul a leghatékonyabb eszköz a teljes Microsoft Office csomagban, mégis rejtélyesíti (és néha megijeszti) az Office energiafelhasználóit. A Word vagy az Excelnél meredekebb tanulási görbével hogyan kellene bárkinek a fejét ezen az eszközön körbevinni? Ezen a héten, Bruce Epper az egyik olvasónk e kérdése által ösztönözött néhány kérdést megvizsgálja.

Az olvasó azt kérdezi:

Nehezen tudok lekérdezést írni a Microsoft Access programban.

Van egy adatbázisom két terméktáblával, amelyek közös oszlopot tartalmaznak egy numerikus termékkóddal és a kapcsolódó terméknévvel.

Meg akarom tudni, hogy az A. táblázat mely termékei találhatók a B. táblázatban. Hozzá akarok adni egy Eredmények nevű oszlopot, amely tartalmazza az A táblázat terméknevét, ha létezik, és a termék nevét a B táblázatból, ha nem létezik az A. táblázatban.

Van tanácsod?

Bruce válasza:

A Microsoft Access egy adatbáziskezelő rendszer (DBMS), amelyet Windows és Mac gépeken egyaránt használtak. Az adatfeldolgozáshoz és tároláshoz a Microsoft Jet adatbázis-motorját használja. Ezenkívül egy grafikus felületet biztosít a felhasználók számára, amely szinte kiküszöböli a strukturált lekérdezési nyelv (SQL) megértésének szükségességét.

instagram viewer

Az SQL az a parancsnyelv, amelyet a tárolt információk hozzáadására, törlésére, frissítésére és visszaadására használnak adatbázis, valamint az alapvető adatbázis-összetevők módosítása, például táblázatok vagy. hozzáadása, törlése vagy módosítása indexek.

Kiindulópont

Ha még nem ismeri az Access vagy más RDBMS-t, azt javaslom, hogy kezdje meg a következő forrásokkal:

  • Tehát mi az adatbázis? Tehát mi is az adatbázis? [MakeUseOf magyarázat]Programozó vagy technológiai rajongó számára az adatbázis fogalma valami, amit valószínűleg magától értetődőnek tekinthetünk. Sokak számára azonban az adatbázis fogalma egy kicsit idegen ... Olvass tovább ahol Ryan Dube az Excel használatával megmutatja a relációs adatbázisok alapjait.
  • Gyors útmutató a Microsoft Access 2007 használatának megkezdéséhez Gyors útmutató a Microsoft Access 2007 használatának megkezdéséhez Olvass tovább amely az Access és az Access adatbázist alkotó összetevők magas szintű áttekintése.
  • Gyors bemutató az asztalokhoz a Microsoft Access 2007 programban Gyors bemutató az asztalokhoz a Microsoft Access 2007 programban Olvass tovább átnézi az első adatbázis és táblázatok létrehozását a strukturált adatok tárolására.
  • Gyors bemutató a Microsoft Access 2007 lekérdezéséhez Gyors bemutató a Microsoft Access 2007 lekérdezéséhez Olvass tovább megvizsgálja az adatbázis-táblázatokban tárolt adatok meghatározott részeinek visszatérítésére szolgáló eszközöket.

Az e cikkekben szereplő fogalmak alapvető ismerete megkönnyíti a következők megemlítését.

Adatbázis-kapcsolatok és normalizálás

Képzelje el, hogy egy olyan vállalkozást működtet, amely 50 különféle típusú kütyüt árusít az egész világon. 1,250 ügyfélkörrel rendelkezik, és egy átlagos hónapban 10 000 kütyü eladni ezeknek az ügyfeleknek. Jelenleg egyetlen táblázatot használ az összes értékesítés nyomon követésére - gyakorlatilag egyetlen adatbázistáblát. És minden évben ezer sor hozzáadódik a táblázathoz.

lapos-táblázat-1lapos asztal-2

A fenti képek a használt rendeléskövetési táblázat részét képezik. Most mondjuk, hogy mindkét ügyfél évente többször vásárol tőled kütyüket, így sokkal több sor van mindkettőhöz.

Ha Joan Smith feleségül veszi Ted Baines-t, és megveszi a vezetéknevét, akkor minden egyes sorát, amelyben a neve szerepel, meg kell változtatni. A problémát csak akkor súlyosbítja, ha két különböző ügyfél van, akik Joan Smith névvel rendelkeznek. A meglehetősen gyakori esemény miatt mostantól sokkal nehezebb az értékesítési adatait egységesen tartani.

Egy adatbázis használatával és az adatok normalizálásával különféle táblázatokba oszthatjuk az elemeket, például készlet, ügyfelek és megrendelések.

normalizálás

Csak a példa kliens részét tekintve eltávolítottuk az Ügyfél neve és az Ügyfél címe oszlopokat, és új táblázatokba rakjuk őket. A fenti képen jobban kitaláltam a dolgokat az adatok részletesebb hozzáférése érdekében. Az új táblázat tartalmaz egy oszlopot az Elsődleges kulcs (ClientID) számára is - egy számot, amelyet a táblázat minden sorának eléréséhez használnak.

Az eredeti táblázatba, amelyben eltávolítottuk ezeket az adatokat, hozzáveszünk egy oszlopot egy idegen kulcshoz (ClientID), amely hivatkozik a megfelelő sorra, amely tartalmazza az adott ügyfél adatait.

Most, amikor Joan Smith megváltoztatja a nevét Joan Baines-re, a változást csak egyszer kell elvégezni az Ügyféltáblában. Minden egyes hivatkozás a csatlakoztatott táblázatokból meghúzza a megfelelő ügyfélnevet és egy jelentést, amely azt vizsgálja, hogy Joan mit vásárolt az elmúlt 5 évben mind a megrendelések mind a leánykori, mind a házas neve alatt megkapódnak anélkül, hogy meg kellene változtatniuk a jelentés formáját generált.

További előnyként csökkenti az elfogyasztott tárhely teljes mennyiségét.

Csatlakozzon a típusokhoz

Az SQL öt különféle csatlakozást határoz meg: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER és CROSS. Az OUTER kulcsszó opcionális az SQL utasításban.

A Microsoft Access lehetővé teszi az INNER (alapértelmezett), LEFT OUTER, RIGHT OUTER és CROSS használatát. A FULL OUTER önmagában nem támogatott, de a LEFT OUTER, UNION ALL és a RIGHT OUTER használatával megcsalhatja a több CPU ciklus és az I / O műveletek költségén.

A CROSS illesztés kimenete a bal oldali asztal minden sorát tartalmazza a jobb oldali asztal minden sorával párosítva. Az egyetlen alkalommal, amikor láttam CROSS csatlakozást, az az adatbázis-kiszolgálók terhelési tesztelésekor.

Vessünk egy pillantást az alapvető csatlakozások működésére, majd ezeket módosítjuk az igényeinknek megfelelően.

Kezdjük két tábla létrehozásával, a ProdA-val és a ProdB-vel, a következő tervezési tulajdonságokkal.

hozzáférés-asztal-defs

Az AutoNumber egy automatikusan növekvő hosszú egész szám, amely hozzárendelésre kerül a bejegyzésekhez, amikor azok hozzáadódnak a táblázathoz. A Szöveg beállítást nem módosították, tehát legfeljebb 255 karakter hosszú szöveges karakterláncot fogadhat el.

Most töltsön fel néhány adatot.

access-asztalok

A 3 csatlakozástípus működésének különbségeinek bemutatása érdekében töröltem az 1., 5. és 8. bejegyzést a ProdA-ból.

Ezután hozzon létre egy új lekérdezést a következő linkre kattintva Létrehozás> Lekérdezés tervezése. Válassza ki mindkét táblát a Táblázat megjelenítése párbeszédpanelen és a kattintson a Hozzáadás gombra, akkor Bezárás.

Új-lekérdezés

Kattintson a ProductID-re a ProdA táblázatban, húzza a ProductID-re a ProdB táblázatban, és engedje el az egérgombot a táblák közötti kapcsolat létrehozásához.

design_view

Kattintson a jobb gombbal a táblák közötti sorra, amely az elemek és a kapcsolatát ábrázolja válassza a Csatlakozás tulajdonságokhoz lehetőséget.

join_properties

Alapértelmezés szerint az 1. csatlakozástípus (INNER) van kiválasztva. A 2. opció egy bal oldali csatlakozás és a 3. lehetőség egy jobb oldali csatlakozás.

Először az INNER csatlakozást fogjuk megnézni, tehát kattintson az OK gombra a párbeszédpanel elvetéséhez.

A lekérdezés-tervezőben válassza ki a legördülő listából azokat a mezőket, amelyeket látni szeretnénk.

tervezés-nézet-2

Amikor lekérdezést futtatunk (a piros felkiáltójel a szalagban), akkor megjelenik a ProductName mező mindkét táblában, az első oszlopban a ProdA tábla, a másodikban pedig a ProdB értékkel.

belső összekapcsolás

Vegye figyelembe, hogy az eredmények csak olyan értékeket mutatnak, amelyekben a ProductID azonos mindkét táblázatban. Annak ellenére, hogy a ProdB táblázatban van egy ProductID = 1 bejegyzés, ez nem jelenik meg az eredményekben, mivel a ProdA táblázatban a ProductID = 1 nem létezik. Ugyanez vonatkozik a ProductID = 11-re. A ProdA táblában létezik, a ProdB táblában azonban nem.

tervezés-szalag

A szalag Nézet gombjának használatával és az SQL nézetre váltással láthatja az SQL lekérdezést, amelyet a tervező generált az eredmények eléréséhez.

VÁLASSZA ProdA.ProductName, ProdB.ProductName-t a ProdA INNER CSATLAKOZÁSHOZ ProdB ON ON ProdA.ProductID = ProdB.ProductID;

Visszatérve a Design nézethez, változtassa meg a csatlakozás típusát 2-re (LEFT OUTER). Futtassa a lekérdezést az eredmények megtekintéséhez.

left_outer_join

Mint láthatja, a ProdA táblában minden bejegyzés megjelenik az eredményekben, míg csak azokban a ProdB-ben jelennek meg, amelyek megfelelnek a ProductID bejegyzésnek a ProdB táblázatban.

A ProdB.ProductName oszlopban lévő üres hely speciális érték (NULL), mivel a ProdB táblázatban nincs megfelelő érték. Ez később fontosnak bizonyul.

VÁLASSZA ProdA.ProductName, ProdB.ProductName-t a ProdA-tól balra. Csatlakozzon a ProdB-hez ON ProdA.ProductID = ProdB.ProductID;

Próbálja ki ugyanezt a harmadik csatlakozástípussal (RIGHT OUTER).

right_outer_join

Az eredmények mindent megmutatnak a ProdB táblától, míg üres (NULL néven ismert) értékeket mutat, ahol a ProdA táblázatnak nincs megfelelő értéke. Eddig ez közelebb hoz minket az olvasó kérdésében kívánt eredményekhez.

VÁLASSZA ProdA.ProductName, ProdB.ProductName-t a ProdA-tól, JOGI CSATLAKOZTATÁS: ProdA.ProductID = ProdB.ProductID;

Funkciók használata egy lekérdezésben

A függvény eredményeit a lekérdezés részeként is visszaadhatjuk. Azt akarjuk, hogy egy új, „Eredmények” oszlop jelenjen meg az eredménykészletben. Értéke a ProdA táblázat ProductName oszlopának tartalma, ha a ProdA értékkel rendelkezik (nem NULL), különben a ProdB táblából kell venni.

Az azonnali IF (IIF) funkció felhasználható ennek az eredménynek a generálására. A függvény három paramétert vesz igénybe. Az első olyan feltétel, amelyet igaz vagy hamis értékre kell értékelni. A második paraméter az érték, amelyet vissza kell adni, ha a feltétel igaz, és a harmadik paraméter az, amelyet vissza kell adni, ha a feltétel hamis.

A helyzetünk teljes funkcionális konstrukciója így néz ki:

IIF (a ProdA.ProductID érvénytelen, ProdB.ProductName, ProdA.ProductName)

Vegye figyelembe, hogy a feltétel paraméter nem ellenőrzi az egyenlőséget. Az adatbázis Null értékének nincs olyan értéke, amely összehasonlítható bármely más értékkel, beleértve egy másik Null értéket. Más szavakkal, a Null nem egyenlő a Null értékkel. Valaha. Ebből a célból inkább az „Is” kulcsszóval ellenőrizzük az értéket.

Használhattuk volna a 'Is Not Null' -t is, és megváltoztathattuk a True és False paraméterek sorrendjét, hogy ugyanazt az eredményt kapjuk.

Amikor ezt felteszi a Query Designerbe, a teljes függvényt be kell írnia a Field: bejegyzésbe. Az „Eredmények” oszlop létrehozásához meg kell adnia álnevet. Ehhez előzetesen be kell írnia a funkciót az „Eredmények:” elemre, ahogy a következő képernyőképen látható.

jobb külső álneve-eredmények-design

Ennek megfelelő SQL-kód a következő:

SELECT ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID Null, ProdB.ProductName, ProdA.ProductName) AS Eredmények A ProdA RIGHT JOIN PRODB ON ON ProdA.ProductID = ProdB.ProductID;

Most, amikor futtatjuk ezt a lekérdezést, az elő fogja hozni ezeket az eredményeket.

right_outer_with_aliased_results

Itt láthatjuk minden olyan bejegyzéshez, ahol a ProdA táblázatnak van értéke, ez az érték megjelenik az Eredmények oszlopban. Ha nincs bejegyzés a ProdA táblázatban, akkor a ProdB bejegyzés megjelenik az Eredmények pontban, pontosan az, amit az olvasó kérdezett.

A Microsoft Access tanulásához szükséges további forrásokért nézd meg Joel Lee-t A Microsoft Access elsajátítása: 5 ingyenes online forrás A Microsoft Access elsajátítása: 5 ingyenes online forrásNagy mennyiségű adatot kell kezelnie? Vizsgálja meg a Microsoft Access szolgáltatást. Ingyenes tanulmányi forrásunk segíthet Önnek az összetett projektek elindításában és a készségek elsajátításában. Olvass tovább .

Bruce a 70-es évek óta játszik az elektronikával, a 80-as évek eleje óta a számítógépekkel, és pontosan megválaszolja a technológiával kapcsolatos kérdéseket, amelyeket egész idő alatt nem használt, sem látott. Azt is bosszantja, hogy megpróbálja gitározni.