Hogyan írhatunk Microsoft Access SQL lekérdezéseket a semmiből

Hogyan írhatunk Microsoft Access SQL lekérdezéseket a semmiből

A Microsoft Access vitathatatlanul a legerősebb eszköz a teljes Microsoft Office csomagban, mégis misztifikálja (és néha megijeszti) az Office energiafelhasználóit. A Wordnél vagy az Excelnél meredekebb tanulási görbével hogyan lehet bárkinek is feltekerni a fejét ennek az eszköznek a használatával? Ezen a héten Bruce Epper megvizsgál néhány kérdést, amelyet egyik olvasónk e kérdés ösztönöz.





Egy Olvasó megkérdezi:

Problémáim vannak a lekérdezés írásával a Microsoft Access szolgáltatásban. Van egy adatbázisom két terméktáblával, amelyek közös oszlopot tartalmaznak numerikus termékkóddal és a kapcsolódó terméknévvel. Szeretném megtudni, hogy mely termékek találhatók az A táblázatból Szeretnék hozzáadni egy Eredmények nevű oszlopot, amely tartalmazza az A táblázatból származó terméknevet, ha létezik, és a termék nevét a B táblázatból, ha nem létezik az A táblázatban.





Bruce válasza:

A Microsoft Access egy adatbáziskezelő rendszer (DBMS), amelyet Windows és Mac gépeken egyaránt használnak. Az adatok feldolgozásához és tárolásához a Microsoft Jet adatbázis -motorját használja. Ezenkívül 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.





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

Kiindulópont

Ha még nem ismeri az Accesset vagy más RDBMS -t, azt javaslom, hogy a folytatás előtt kezdje el ezeket az erőforrásokat:



Ha alapvető ismeretekkel rendelkezik az ezekben a cikkekben szereplő fogalmakról, akkor a következők könnyebben emészthetők.

Adatbázis kapcsolatok és normalizálás

Képzelje el, hogy egy céget vezet, amely 50 különböző típusú kütyüt forgalmaz a világ minden tájáról. 1250 ügyfélbázissal rendelkezik, és egy átlagos hónapban 10 000 kütyüt ad el ezeknek az ügyfeleknek. Jelenleg egyetlen táblázatot használ az összes ilyen értékesítés nyomon követésére - gyakorlatilag egyetlen adatbázistáblát. És minden évben több ezer sort ad hozzá a táblázathoz.





A fenti képek az Ön által használt rendeléskövetési táblázat részét képezik. Tegyük fel, hogy mindkét ügyfél évente többször vásárol widgeteket Öntől, így sokkal több sor áll rendelkezésre mindkettőhöz.





Ha Joan Smith feleségül veszi Ted Baines -t és felveszi a vezetéknevét, akkor minden egyes sort, amely tartalmazza a nevét, meg kell változtatni. A probléma tovább fokozódik, ha történetesen két különböző ügyfele van, Joan Smith néven. Egy meglehetősen gyakori esemény miatt sokkal nehezebbé vált az értékesítési adatok konzisztens megőrzése.

Egy adatbázis használatával és az adatok normalizálásával az elemeket több táblára oszthatjuk szét, például készletre, ügyfelekre és rendelésekre.

Ha csak a példánk ügyfélrészét nézzük, eltávolítjuk az Ügyfél neve és az Ügyfél címe oszlopokat, és új táblázatba helyezzük őket. A fenti képen én is jobban kitörtem a dolgokat az adatok részletesebb elérése érdekében. Az új táblázat tartalmaz egy elsődleges kulcs (ClientID) oszlopot is - ez a szám a táblázat minden sorának elérésére szolgál.

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

Most, amikor Joan Smith nevét Joan Baines -re változtatja, a változtatást csak egyszer kell elvégezni az Ügyfél táblázatban. Minden más hivatkozás az összekapcsolt táblázatokból lehívja a megfelelő ügyfélnevet, és egy jelentés, amely azt vizsgálja, mit vásárolt Joan az elmúlt 5 évben, minden megrendelést leánykori és házas nevén kap, anélkül, hogy módosítania kellene a jelentés elkészítésének módját .

További előny, hogy ez csökkenti a tárhely teljes mennyiségét is.

Csatlakozási típusok

Az SQL öt különböző csatlakozási típust határoz meg: BELSŐ, LEFT OUTER, RIGHT OUTER, FULL OUTER és CROSS. Az OUTER kulcsszó nem kötelező az SQL utasításban.

A Microsoft Access lehetővé teszi a BELSŐ (alapértelmezett), BAL BELSŐ, JOBB KÜLSŐ és KERESZT használatát. A FULL OUTER nem támogatott, de a LEFT OUTER, UNION ALL és a RIGHT OUTER használatával több CPU ciklus és I/O művelet árán hamisítható.

A CROSS csatlakozás kimenete a bal tábla minden sorát a jobb tábla minden sorával párosítja. Az egyetlen alkalom, amikor valaha láttam CROSS csatlakozást használni, az adatbázis -kiszolgálók terhelésvizsgálata során történt.

Vessünk egy pillantást arra, hogyan működnek az alapcsatlakozások, majd az igényeinknek megfelelően módosítjuk őket.

Kezdjük azzal, hogy létrehozunk két táblázatot, a ProdA -t és a ProdB -t, a következő tervezési tulajdonságokkal.

Az AutoNumber egy automatikusan növekvő hosszú egész szám, amelyet a táblázathoz adáskor hozzárendelünk a bejegyzésekhez. A Szöveg opció nem lett módosítva, ezért legfeljebb 255 karakter hosszú szöveges karakterláncot fogad el.

Most töltse fel őket bizonyos adatokkal.

Annak érdekében, hogy megmutassam a különbségeket a három csatlakozási típus működésében, töröltem az 1., 5. és 8. bejegyzést a ProdA -ból.

Következő, hozzon létre egy új lekérdezést azzal, hogy megy Létrehozás> Lekérdezéstervezés . Válassza ki mindkét táblázatot a Táblázat megjelenítése párbeszédpanelen és kattintson a Hozzáadás gombra , azután Bezárás .

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

Kattintson a jobb gombbal a táblázatok közötti vonalra, amely az elemek és a válassza a Tulajdonságok összekapcsolása lehetőséget .

Alapértelmezés szerint az 1 -es csatlakozási típus (BELSŐ) van kiválasztva. A 2. lehetőség a BALRA KÜLSŐ csatlakozás, a 3. pedig a JOBB KÜLSŐ csatlakozás.

Először a BELSŐ csatlakozást nézzük, ezért kattintson az OK gombra a párbeszédpanel elvetéséhez.

A lekérdezéstervezőben válassza ki a megjeleníteni kívánt mezőket a legördülő listákból.

Amikor futtatjuk a lekérdezést (a piros felkiáltójel a szalagon), akkor megjelenik a ProductName mező mindkét táblából, a ProdA táblázat értékével az első oszlopban, és a ProdB -vel a másodikban.

Figyelje meg, hogy az eredmények csak azokat az értékeket mutatják, ahol a ProductID azonos mindkét táblázatban. Annak ellenére, hogy van egy ProductID = 1 bejegyzés a ProdB táblázatban, ez nem jelenik meg az eredmények között, mivel a ProductID = 1 nem létezik a ProdA táblázatban. Ugyanez vonatkozik a ProductID = 11. termékre is. Ez létezik a ProdA táblázatban, de nem a ProdB táblázatban.

A menüszalag Nézet gombjának használatával és az SQL nézetre való váltással láthatja az eredmények lekérésére használt tervező által létrehozott SQL lekérdezést.

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

Visszatérve a Tervezési nézethez, módosítsa a csatlakozási típust 2 -re (LEFT OUTER). Futtassa a lekérdezést az eredmények megtekintéséhez.

Amint láthatja, a ProdA táblázat minden bejegyzése megjelenik az eredmények között, míg csak azok a ProdB -bejegyzések jelennek meg a találatok között, amelyek a ProdB táblázatban egyező ProductID bejegyzéssel rendelkeznek.

A ProdB.ProductName oszlop üres helye különleges érték (NULL), mivel nincs egyező érték a ProdB táblában. Ez később fontosnak bizonyul.

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

Próbálja meg ugyanezt a harmadik típusú csatlakozással (RIGHT OUTER).

Az eredmények mindent mutatnak a ProdB táblából, míg üres (NULL) értékeket jelenít meg, ahol a ProdA táblázat nem rendelkezik megfelelő értékkel. Ez eddig a legközelebb visz minket az olvasónk kérdésében várt eredményekhez.

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

Funkciók használata lekérdezésben

A függvény eredményei lekérdezés részeként is visszaadhatók. Azt szeretnénk, ha egy új „Eredmények” nevű oszlop jelenne meg eredményhalmazunkban. Ennek értéke a ProdA táblázat ProductName oszlopának tartalma lesz, ha a ProdA értékkel rendelkezik (nem NULL), ellenkező esetben a ProdB táblázatból kell venni.

Az azonnali IF (IIF) függvény használható az eredmény létrehozásához. A függvény három paramétert tartalmaz. Az első olyan feltétel, amelyet igaz vagy hamis értékre kell értékelni. A második paraméter a visszatérendő érték, ha a feltétel igaz, a harmadik paraméter pedig a hamis feltétel esetén visszaadandó érték.

A helyzetünkhöz tartozó teljes funkciókonstrukció így néz ki:

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

Vegye figyelembe, hogy a feltétel paraméter nem ellenőrzi az egyenlőséget. Az adatbázis Null értéke nem rendelkezik olyan értékkel, amely összehasonlítható bármely más értékkel, beleértve egy másik Null értéket is. Más szóval, a Null nem egyenlő a Null értékkel. Valaha. Ennek elkerülése érdekében az „Is” kulcsszó használatával ellenőrizzük az értéket.

Használhattuk az „Is Not Null” -t is, és módosíthattuk a True and False paraméterek sorrendjét, hogy ugyanazt az eredményt kapjuk.

Amikor ezt a Query Designer -be teszi, be kell írnia a teljes függvényt a Field: bejegyzésbe. Ahhoz, hogy létrehozza az 'Eredmények' oszlopot, használnia kell egy álnevet. Ehhez előzetesen írja be a funkciót az „Eredmények:” kifejezéssel, amint az a következő képernyőképen látható.

Ennek megfelelő SQL -kódja a következő lenne:

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;

Most, amikor ezt a lekérdezést futtatjuk, az eredményeket fogja produkálni.

a Kindle Fire átalakítása androidos táblagéppé

Itt láthatjuk minden olyan bejegyzésnél, 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ése megjelenik az Eredmények között, pontosan ezt kérte olvasónk.

A Microsoft Access elsajátításához további forrásokért tekintse meg Joel Lee Hogyan tanulja meg a Microsoft Accesset: 5 ingyenes online forrás.

Részvény Részvény Csipog Email Érdemes Windows 11 -re frissíteni?

A Windows újra lett tervezve. De ez elég ahhoz, hogy meggyőzze Önt, hogy váltson a Windows 10 -ről a Windows 11 -re?

Olvassa tovább
Kapcsolódó témák
  • Termelékenység
  • Kérdezze meg a szakértőket
A szerzőről Bruce Epper(13 cikk megjelent)

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 válaszol a technológiával kapcsolatos kérdésekre, amelyeket nem használt és nem is látott egész idő alatt. Bosszantja magát azzal is, hogy gitározni próbál.

Továbbiak Bruce Epper -től

Iratkozzon fel hírlevelünkre

Csatlakozz hírlevelünkhöz, ahol technikai tippeket, értékeléseket, ingyenes e -könyveket és exkluzív ajánlatokat találsz!

Feliratkozáshoz kattintson ide