Közlekedési információs rendszerek I.

Hasonló dokumentumok
DLookup függvény 1. (5)

2012. tavaszi félév Vésı Tamás

Csoportosított adatok megjelenítése sorhalmaz függvények használatával

ADATBÁZIS-KEZELÉS. Funkcionális függés, normál formák

Programozás I gyakorlat

Belépési útmutató a MIAG weboldalra

EPER E-KATA integráció

Kérjük, hogy mielőtt elkezdené használni a Csavarhat webáruházat, gondosan olvassa végig ezt a segédletet.

Árverés kezelés ECP WEBSHOP BEÉPÜLŐ MODUL ÁRVERÉS KEZELŐ KIEGÉSZÍTÉS. v ECP WEBSHOP V1.8 WEBÁRUHÁZ MODULHOZ

Vektoros elemzés végrehajtása QGIS GRASS moduljával 1.7 dr. Siki Zoltán

HENYIR felhasználói dokumentáció

A táblázatkezelő felépítése

CAD-CAM

Vegyes tételek könyvelése felhasználói dokumentum Lezárva:

Beállítások CLASSBOOK-óratervező. Első belépés

B I T M A N B I v: T M A N

Adatbázis használat I. 5. gyakorlat

Vodafone ReadyPay. Használati útmutató

Adatbázisok, adattárh

HÁLÓZATSEMLEGESSÉG - EGYSÉGES INTERNET SZOLGÁLTATÁS-LEÍRÓ TÁBLÁZAT

SAP JAM. Felhasználói segédlet

AWP TELEPÍTÉSE- WINDOWS7 64 OPERÁCIÓS RENDSZEREN

Shared IMAP beállítása magyar nyelvű webmailes felületen

A pedagógus-előmeneteli rendszer informatikai támogató rendszerének fejlesztése Fűrész Edit Budapest, október 27.

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Webes adatbázis-kezelés MySQL és PHP használatával

E-ADÓ RENSZER HASZNÁLATI ÚTMUTATÓ

Adatbázisok* tulajdonságai

Felhasználói Kézikönyv Kisbanki NetBOSS - IVR

Számítógépes vírusok

Tájékoztató a szerződés módosításáról_munkaruházati termékek szállítása (5. rész)

ADATBÁZISKEZELÉS ADATBÁZIS

Nagyméretű dokumentumok hivatkozásai

Ablakok használata. 1. ábra Programablak

LOGISZTIKAI ADATBÁZIS RENDSZEREK SQL ALAPOK,

A könyv tartalomjegyzéke

Tartalom. 1. A dokumentum célja... 2

Üresként jelölt CRF visszaállítása

Adatbázis-kezelés. 7. SQL Táblák összekapcsolása

Adatbázisok. Mit jelent az, hogy adatbázis? Ismételjük át az alapfokon tanultakat!

9. előadás. Az ER modell. Jelölések, az ER séma leképezése relációs sémára. Adatbázisrendszerek előadás november 16.

Töltse ki értelemszerűen a vevő nevét, irányítószámát, település, utca házszám mezőket, valamint a partner adószáma mezőket.

Adatbázis-kezelés. Harmadik előadás

Az informatika oktatás téveszméi

ÚTMUTATÓ A KONTROLL ADATSZOLGÁLTATÁS ELKÉSZÍTÉSÉHEZ (2012-TŐL)

Adatok ábrázolása, adattípusok. Összefoglalás

Adatbázisok I Adatmodellek komponensei. Adatbázis modellek típusai. Adatbázisrendszer-specifikus tervezés

Korszerű geodéziai adatfeldolgozás Kulcsár Attila

A Hozzárendelési feladat megoldása Magyar-módszerrel

Vasúti információs rendszerek gyakorlat

Segítünk online ügyféllé válni Kisokos

Hálózati beállítások gyorsútmutatója

Bár a digitális technológia nagyon sokat fejlődött, van még olyan dolog, amit a digitális fényképezőgépek nem tudnak: minden körülmények között

Conjoint-analízis példa (egyszerűsített)

Szakképzés - Meghatalmazás használata

Ügyeljen arra, hogy a programmodul sorszáma és megnevezése azonos legyen a I. A program általános tartalma fejezet 11. pontjában írtakkal!

Tanúsítvány és hozzá tartozó kulcsok feltöltése Oberthur kártyára és Oberthur SIM termékre

Párhuzamos programozás

A Felhasználónév és Jelszó mezőkbe írjuk be az adatainkat, majd kattintsunk a Bejelentkezés gombra, vagy üssük le az Enter billentyűt.

TANMENET. Tantárgy: Informatika Osztály: 9B. Heti óraszám: 2

Digitális technika (VIMIAA01) Laboratórium 1

Egységes fejlesztési katasztert támogató informatikai modul, önkormányzati projektmenedzserek lehetőségei

Az Európai Szabadalmi Egyezmény végrehajtási szabályainak április 1-étől hatályba lépő lényeges változásai

Fejlesztı neve: LÉNÁRT ANETT. Tanóra / modul címe: CÉGES REKLÁMBANNER KÉSZÍTÉSE PROJEKTMÓDSZERREL

INFORMATIKAI ALAPISMERETEK

Pénzmosás és fellépés a terrorizmus ellen (változó szabályok) Dr. Király Júlia MNB Budapest, november 12.

EURÓPAI UNIÓ AZ EURÓPAI PARLAMENT 2006/0287 (COD) PE-CONS 3648/2/07 REV 2

Óravázlat. az ECDL oktatócsomaghoz. 5. modul. Adatbáziskezelés. Krea Kft Budapest, Szőlő u 21. Tel/fax: / krea@krea.

TANTÁRGYI ÚTMUTATÓ. Prezentáció és íráskészségfejlesztés. tanulmányokhoz

PÁLYÁZATI FELHÍVÁS - JELENTKEZÉSI LAP

Vodafone GPRS Kapcsolat létrehozása Win2000 alatt a Connect Me használata nélkül

Széchenyi István Egyetem Műszaki Tudományi Kar. A szakdolgozatok közös sablonja (a Kari Tanács i ülésén elfogadva)

Jelentés a kiértékelésről az előadóknak

SÜTIK TÖRLÉSE. Készült: Módosítva:

Az aktiválódásoknak azonban itt még nincs vége, ugyanis az aktiválódások 30 évenként ismétlődnek!

SZÁMÍTÓGÉPES NYELVI ADATBÁZISOK

A TÁMOP KIEMELT PROJEKT KERETÉBEN KIALAKÍTOTT INFORMATIKAI RENDSZER

FORTE MAP 5.0 Felhasználói tájékoztató

Adatbázisok I A relációs algebra

Közbeszerzési Értesítő száma: 2016/75. Eljárás fajtája: Közzététel dátuma: Iktatószám: 7466/2016 CPV Kód:

ADATBÁZIS-KEZELÉS ALAPOK I.

Adattípusok. Szám: pozitív egész, egész, valós, dátum + idő,... Szöveg, Formázott szöveg Kép Hang Mozgókép+Hang

Prop-Tech. Vázmérő. Telepítési és eltávolítási útmutató

E-számla igénylése három lépéssel!

Keretszerződés költöztetési, szállítási feladatok ellátására a Pécsi Tudományegyetemen-2- AF módosítás

6. SZÁMÚ FÜGGELÉK: AZ E.ON ENERGIASZOLGÁLTATÓ KFT. ÁLTAL E.ON KLUB KATEGÓRIÁBA SOROLT ÜGYFELEKNEK NYÚJTOTT ÁRAK, SZOLGÁLTATÁSOK

A Közbeszerzések Tanácsa (Szerkesztőbizottsága) tölti ki A hirdetmény kézhezvételének dátuma KÉ nyilvántartási szám

ÁFA felhasználói dokumentum Lezárva:

Szusza Ferenc labdarúgó sportlétesítmény fejlesztése

Project Management

Tartalomjegyzék. Tartalom 1/16

beállítások a postafiók használatához

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

TANTÁRGYI ÚTMUTATÓ. Logisztika. tanulmányokhoz

TANTÁRGYI ÚTMUTATÓ. Pénzügyi-számviteli informatika 2. tanulmányokhoz

Munkavédelmi technikus Munkavédelmi technikus

A) Belépés a Webinar felületére

Tanulmányi keretrendszer az APPI-ban

MEZŐGAZDASÁGI ALAPISMERETEK ÉRETTSÉGI VIZSGA II. A VIZSGA LEÍRÁSA

Átírás:

Közlekedési információs rendszerek I. számítógépes laborgyakorlat jegyzet Szerzők: Dr. Csiszár Csaba, Caesar Bálint, Csonka Bálint és Földes Dávid Kulcsszavak: információ, adat, adatbázis, SQL nyelv, Microsoft Access A tananyag összefoglalja az adatbázis-kezelő rendszerek és a számítógépes adatbázis-kezelés alapjaival kapcsolatos fogalmakat, ismeretanyagot. Az SQL nyelv parancsai és azok alkalmazási szabályai ( szavak + nyelvtan ) minta adatbázison keresztül kerülnek ismertetésre. A képzés során a hallgatók elsajátítják az adatmodellezés és az adatbázisok önálló tervezésének módszereit, és ezek alapján képessé válnak saját adatbázis létrehozására és az adatok több szempont szerinti feldolgozására.

Tartalomjegyzék Előszó 1 1. Az adatbázis-kezelés alapjai 2 Az adatbázis-kezelő rendszerek és szoftverek fejlődése 2 Az SQL nyelv jellemzői 4 A Microsoft Access jellemzői 5 Adattípusok 7 2. Normalizálás 9 Normalizálás lépései 1. példa 9 Normalizálás lépései 2. példa 12 N:M (több-több) kapcsolat felbontása kapcsolótáblával (fogalmi egyedtípussal) 13 Kapcsolatok létrehozása táblák ismételt hozzáadásával 14 Minta adatbázis szerkezete (táblán belüli kapcsolat) 15 3. Minta adatbázis létrehozása 17 A tábla szerkezet létrehozása 17 Minta adatok felvétele 19 4. SQL parancsok csoportosítása, SELECT parancs 20 DDL parancsok 20 DML parancsok 21 SELECT parancs szerkezete 21 SELECT lista elemei, alternatív oszlopnév 22 5. SELECT parancs 23 Rendezés (ORDER BY) 23 Hiányzó adatelem (NULL érték) problematika 23 Adatválaszték megtekintése (DISTINCT) 24 Sorfeltétel (WHERE) 24 Aritmetikai, logikai és összefűző operátorok 26 6. SELECT parancs 27 Függvények 27 Csoportképzés (GROUP BY) 29 Csoportfeltétel (HAVING) 32 7. Összetett lekérdezések 33 Listázás egyszerre több (kapcsolódó) táblából 33 Egymásra épülő lekérdezések 33 Beágyazott lekérdezés (subquery) 34 Kereszttáblás lekérdezések 35

8. DDL parancsok 37 CREATE parancs 37 Érvényességi szabályok (CONSTRAINT-ek) 37 Alapértelmezett érték 38 ALTER parancs 39 DROP parancs 39 9. DML parancsok 40 INSERT INTO parancs 40 UPDATE parancs 41 DELETE FROM parancs (rekord, táblatartalom) törlése 41 Rekordok uniója 42 Táblakészítő lekérdezés 42 10. Gyakorló feladatsorok 43 1. gyakorlati ZH-ra felkészítő feladatok 43 2. gyakorlati ZH-ra felkészítő feladatok 44 Irodalomjegyzék 45 Mellékletek 46

Előszó A közlekedési rendszerek (szervezetek) és folyamatok megszervezése, valamint célorientált működtetése magas színvonalú információellátást kíván. A közlekedési információs rendszerek célja az információigények kielégítése, melynek hatékonysága az erőforrásként kezelt adatbázis-szerkezeteken múlik. Az információnak és az azokat hordozó adatoknak értéke van, és ezért nem közömbös, hogy hogyan bánunk ezzel az értékkel. A közlekedési információs rendszerek legfontosabb soft összetevője az adat. A rendszerelemek és folyamatok között az áramló adatok teremtenek kapcsolatot. Az adatbázisok az adatok strukturált rendszere, amely az adatfelvételi és felhasználási folyamatok közötti időkülönbség áthidalását is lehetővé teszik (tárolás). Emellett az adatbázis fogalom az utóbbi időben kibővült a feldolgozási folyamatokkal is. Ennek megfelelően az adatbázis-kezeléssel összefüggő ismeretanyag elsősorban a tárolási szerkezet és a feldolgozási műveletek megtervezésére fókuszál. Mivel az adatok leképezik a működtetett rendszer összetevőit és folyamatait, ezért a közlekedési rendszerek felépítésének és működésének precíz ismerete és a megfelelő absztrakciós készség az adatmodellezéshez nélkülözhetetlen. A téma jelentőségét a napjainkban megfigyelhető, hosszabb folyamatként tekinthető ún. információrobbanás fokozza. A kezelt információk mennyiségét alapvetően a közlekedésben résztvevő alapfolyamati összetevők száma, az egyes összetevőkről gyűjtött jellemzők köre és a mintavételezési időköz befolyásolja. Az utóbbi két tényező miatt az utóbbi időszakban jelentősen nőtt a kezelendő adatok mennyisége, miközben a felhasználás során továbbra is kis időtartam áll rendelkezésre a lekérdezések lefuttatására. További kihívás a különböző forrásokból származó, eltérő formátumú, jelentéstartalmú, stb. információk összefésülése és közös kezelése, ami a közlekedés egész információs rendszerére kiterjedő integráció alapfeltétele [1]. A közlekedési információs rendszerek elemzésével, tervezésével és azokon belül az adatbázistervezéssel foglalkozó tantárgyak oktatása több évtizedes hagyományokra tekint vissza a Budapesti Műszaki és Gazdaságtudományi Egyetem Közlekedésmérnöki és Járműmérnöki Karának Közlekedésüzemi és Közlekedésgazdasági Tanszékén [2]. A relációs adatmodellezés és adatbázis-tervezés ismeretanyaga viszonylag stabilnak tekinthető. Ezt a tudásbázist adjuk át a hallgatóknak a folyamatosan változó szoftverek kínálta környezetben. Tehát az oktatás során elsősorban az időtálló ismeretekre fókuszálunk, miközben az adott szoftver alkalmazását is elsajátítják a hallgatók. A jegyzet összeállítását a tananyag folyamatos frissítése és didaktikai szempontok szerinti strukturálása, valamint az oktatás eredményei, tapasztalatai tették lehetővé [3]. Az adatbázis-kezelés ismeretköre a kifejlődés előzményeivel, alapjaival kezdődik. A fogalmakat és definícióikat, valamint azok egymásra épülését a hallgatók az előadási órákon sajátítják el, amelyet a gyakorlati foglalkozások példáin keresztül mélyítenek el. Terjedelmi korlátok miatt a jegyzet csak a tananyag vázát tartalmazza, így annak tartalma évről-évre változhat. A parancsok kipróbálása, gyakorlati elsajátítása számítógépes laborban történik, ami megkívánja a hallgatóságnak a laborfoglalkozásokon történő intenzív részvételét. A sokrétű anyag könnyebb elsajátításához a jegyzet fejezetei után gyakorlati feladatok szerepelnek. A tananyag végén a legfontosabbnak tartott irodalmi forrásoknak a megjelölését találjuk, amelyekből elmélyítési szándék esetén a témához tartozó további részletek megismerhetők. 1

1. Az adatbázis-kezelés alapjai Adatbázis: Felesleges átfedés nélkül együtt tárolt és egymással kapcsolatban lévő adatok együttese, összetett logikai szerkezetű adathalmaz. Korábban az adatbázis csupán a strukturált adathalmazt jelentette, ma már azonban a feldolgozási műveletek egy jelentős része is az adatbázis fogalmához tartozik. Az adatbázis szervezettsége lehetővé teszi a tárolt adatokhoz való hozzáférést és ezek módosítását. Az adatbázisok célja adatok megbízható tárolása, és gyors visszakereshetőségének biztosítása. Az adatbázis fogalma nem keverendő össze az adatbáziskezelővel, amely az adatbázis működtetésére, rendszerszintű és felhasználói folyamatainak szervezésére szolgál. Az adatbázisok tervezése adatmodell készítésével kezdődik. Adatmodell: valóság leképezése adatokra, azok kapcsolataira, felhasználásuk körülményeire, szabályaira. Az adatbázis szerkezetének a megtervezése. Az adatbázissal végzett műveleteket adatbázis-kezelésnek nevezzük, melynek célja, hogy a keletkező, rendelkezésre álló adatokból (amelyek volumene a technika fejlődésével folyamatosan nő) a leghatékonyabban felhasználható információkat nyerjük ki rövid lekérdezési idővel. Az adatok tárolása két síkon jelenik meg: logikai sík - mit tárolunk; milyen adatokat milyen összefüggésekben tárolunk; fizikai sík - hogyan tároljuk; hogyan érjük el azokat a fizikai háttértáron. A számítógépes adatfeldolgozás feladatai: 1. az adatbázis-szerkezet megtervezése, elkészítése, (az üres táblák és kapcsolataik definiálása), 2. adatbevitel az üres szerkezetbe (felhasználóbarát legyen), adatok formai és tartalmi ellenőrzése, 3. adatok aktualizálása: - új adat felvétel, - módosítás, - törlés. 4. adatok lekérdezésének megtervezése (ennek a szolgálatába állítjuk az adatmodellt) - egyszerű lekérdezés (pl. keresés, sorba rendezés), - összetett lekérdezés (pl. csoportosítás, feldolgozás). 1.1. Az adatbázis-kezelő rendszerek és szoftverek fejlődése Az adatok gyors, gépesített, tárolásának és visszakeresésének igénye már a múlt század első felében felmerült, amikor az első népesség nyilvántartást végző lyukszalagos számítógépek megjelentek. Az első ún. szekvenciális ( soros hozzáférés az adatokhoz a fizikai elhelyezkedés sorrendjében, sok adat felesleges érintésével ) fájlokat az 1940-es évek végén alkalmazták. Az első nem szekvenciális ( direkt hozzáférés bármelyik adatelemhez címzéssel) hozzáférést biztosító fájlrendszert 1959-ben fejlesztették ki az IBM-nél. Az adatbázisok jelenlegi, korszerűbb formái az 1960-as évek közepén kezdtek el kialakulni, amikor számos új programozási nyelv jelent meg (pl. Fortran, Basic). Nem sokkal ezután megjelentek az első adatbázis-kezelő rendszerek is. Az 1961-es évben dolgozták ki a hálós adatmodell alapjait, 2

majd nem sokkal később kialakult a hierarchikus adatmodell is. A hálós adatmodellben bármely egyed, bármely másik egyedhez kapcsolódhat (többféle kapcsolatban is lehetnek egymással). Például személyek közötti kapcsolatrendszer (N:M kapcsolatok). A kapcsolatrendszer láncolt listákkal (pointerekkel) működik. Felbontják 1:N kapcsolatokra. A hierarchikus adatmodell az egyedek alá-fölérendeltségét veszi alapul, amit szülő - gyerek kapcsolatként ábrázol fa-gráfban (1:N, 1:1 kapcsolatok). Az első hálózatos hozzáférést biztosító adatbank 1965-ben jelent meg az IBM-nél, és a SABRE nevet kapta. A hagyományos adatbázis-kezelő rendszerek a számmal és betűvel leírható (alfanumerikus) adatok gyűjtésével és feldolgozásával foglalkoztak viszonylag szűk területen. A később kialakuló korszerű adatbázis-kezelő rendszerek már lehetővé teszik a képi, hang, stb. adatállományok tárolását is. Az adatmodellezés célja, hogy az egyedekről egy számítógéppel könnyen feldolgozható adatszerkezetet készítsünk. Az adatmodellek legelterjedtebb típusai: hierarchikus, hálós, relációs, objektumorientált, multidimenziós. A hálós és a hierarchikus adatmodelleket az első kereskedelmi adatbázisrendszerekben használták az 1960-as évek végén és az 1970-es években. A relációs adatmodellek később ezeket kiszorították. A relációs adatmodell az 1980-as évektől kezdve a legelterjedtebb adatmodell. Az adatokat táblázatok soraiban ábrázolják. Ebben a modellben nincsenek előre definiált kapcsolatok az egyes adatelemek között. A kapcsolatok létrehozásához szükséges adatokat többszörösen tárolják. Manapság az adatbázis-kezelés területén is teret hódítanak az új megközelítések, mint pl. az objektumorientáltság. A hálózatok elterjedésével az osztott adatbázis-kezelők szerepe is jelentősen növekszik. A legelterjedtebb adatbázis-kezelő szoftvereket az 1.1. táblázat foglalja össze. Nyíltforrású adatbázis-kezelők 1.1. táblázat A legelterjedtebb adatbázis-kezelők Ingyenesen letölthető adatbázis-kezelők Korlátozás nélkül használható adatbázis-kezelők Az egyes adatbázis-kezelők esetén a felhasználás korlátozott, de tanulási célra mindegyik megfelelő MySQL (Linux/Windows) PostgreSQL (Linux/Windows) Ingres Community Edition Microsoft SQL Server 2008 Express Edition Microsoft SQL Server 2008 Management Studio Express Oracle Database 11g Express Edition (Linux/Windows) Microsoft Jet Database Engine 3 Trial: Informix Dynamic Server Enterprise Edition V10.0 SQLite (Linux/Windows) Mini SQL 3

A Közlekedésmérnöki és Járműmérnöki Karon a korábbi évtizedekben a dbase, Clipper, Oracle9.i, Access 2.0 majd az újabb verziójú Access adatbázis-kezelőket és a hozzájuk tartozó alkalmazásfejlesztési gyakorlatot ismerték meg a hallgatók. Jelenleg az Access adatbáziskezelő a legalkalmasabb oktatási célra a széleskörű hozzáférhetősége miatt. A képzésnek mindig fontos része volt az önálló adatbázis-tervezési, fejlesztési munka; ezért a hallgatók az adatmodellt és az alkalmazást egy általuk választott közlekedési témában készítik el (konzultációs támogatással). (Féléves házi feladat témáinak kiválasztása). 1.2. Az SQL nyelv jellemzői A különböző típusú adatbázis-kezelő rendszerek kialakulása szükségessé tette a szabványos lekérdező nyelv kifejlesztését. Így jött létre az általános lekérdező nyelv, az SQL (Structured Query Language), ami a köznapi beszédhez és gondolkodáshoz hasonló jelkészletet használ; 1986-ban szabványosították. SQL= (parancs)szavak + nyelvtan (a szavak használatára vonatkozó szabályok). Az SQL a relációs adatbázis létrehozására és lekérdezésére, a relációkban tárolt információk visszanyerésére szolgál. Nem az adatok elérési módját kell megadni, hanem a kívánt információ tulajdonságait. Az SQL nyelvben a következő elemeket különböztetjük meg: objektumok, NULL érték, kifejezések, műveletek, utasítások, szintaktikai elemek, adatbázisok eljárás jellegű elemei. Az SQL parancsok megadásának formai szabályai: egyezményes jelölésrendszert alkalmaznak (1.2. táblázat). Például: nagybetű: parancsszavak, logikai műveleti jelek, függvények nevei, stb. kisbetű: objektumok, oszlopok nevei, stb. Jelölés NAGYBETŰ Dőlt kisbetű Jelentés 1.2. táblázat SQL parancsok fontosabb formai szabályai Kötelező megadás, nem szabad elhagyni és pontosan kell leírni az ilyen jelöléssel megadott szavakat. Felhasználói megadás, a felhasználó által megadott változókat jelenti. [] Nem kötelező elemek felsorolása. Azonos elemek ismétlődését jelöli. <> Feltétlenül megadott elemeket kell felsorolni. {} Ebben az esetben egy vagy több elem közül egyet kötelező felsorolni. Két vagy több lehetőség közüli választást jelöli. 4

Az egyes adatbázis-kezelők eltérő módon könnyítik meg a felhasználói parancsok bevitelét; azaz felismerik a nem formai szabályok szerinti begépelést és a szintaktikai szabályok szerint módosítják azokat. Az adatbázisok létrehozásának célja, hogy minél több információt nyerjünk ki azokból. Ennek megfelelően a legfontosabb parancs a lekérdező SELECT parancs. Nagyméretű, hálózatos adatbázisok esetében különösen fontos a felhasználók/felhasználó csoportok jogosultságainak beállítása (pl. GRANT, REVOKE parancsok) és az általuk végzett műveletek naplózása. Az alapvető SQL parancsokat az 1.3. táblázat foglalja össze. 1.3. táblázat Alapvető SQL parancsok Adatdefiniáló (DDL) Data Definition Language Adatkezelő (DML) Data Manipulation Language Lekérdező (DQL) Data Query Language objektum létrehozás objektum módosítás objektum megszüntetés rekord felvitel rekord módosítás rekord törlés lekérdezés CREATE ALTER DROP INSERT INTO UPDATE DELETE FROM SELECT Az SQL nem eljárás orientált nem azt tartalmazza, hogy hogyan, hanem azt hogy mit akarunk megkapni. Szigorú a szintaktika. SQL-t befogadó nyelvek: pl. Pascal, C, Cobol, dbase, Access PL/SQL=Procedural Language - eljárások készítését is lehetővé teszi. változók deklarálása, értékadás, feltételes szerkezetek, ciklus, függvények, eljárások definiálása. 1.3. A Microsoft Access jellemzői MS ACCESS= relációs adatbázis-kezelő program, amely felhasználóbarát grafikus felülettel rendelkezik. Az Accessben alkalmazott objektum típusokat és azok kapcsolatait (egymásra épülését) az 1.1. ábra szemlélteti. Az objektumok részletes jellemzése az 1.4. táblázatban található. Számos esetben a felhasználói műveleteket beépített segédalkalmazások, ún. varázslók támogatják. Az Access programnak újabb és újabb verziói jelennek meg (kompatibilitási kérdések), azonban a háttérben lévő tudásanyag (relációs adatmodell) változatlan. Mire alkalmas az Access? És mire nem? 5

Táblák Lekérdezések Űrlapok Adatbázis alkalmazás Jelentések Makrók Modulok Táblák Lekérdezések Űrlapok Jelentések Makrók Modulok 1.1. ábra Az Access objektumtípusok kapcsolatai 1.4. táblázat Az Access adatbázisok objektumainak jellemzői megjelenésükben hasonlítanak a táblázatokra ne legyen benne adat ismétlődés/redundancia (normalizálás) meglévő táblá(k)ra és/vagy lekérdezés(ek)re épülnek többféle feladatot láthatnak el két alaptípus: választó (összegyűjti és elérhetővé teszi a kért adatokat) és módosító lekérdezés (valamilyen feladatot/akciót hajt végre az adatokkal) a különböző táblában tárolt adatokat egy táblában meg tudja jeleníteni gyakran szolgálnak rekordforrásként űrlapok és jelentések számára adatbeviteli és adatmegjelenítő képernyő - az adatokkal végzett munkához felületén az műveleteket végrehajtó parancsgombok is lehetnek (menürendszer építhető) adatmegjelenítés nyomtatásban - az adatok bemutatására/összegzésére szolgál futtatásakor az adatbázis aktuális adatait tükrözi e-mail-en küldhető felület képezhető egy egyszerű programozási nyelv eseményvezérlés automatizálását teszik lehetővé; gyakran ismétlődő műveletek egy parancsba foglalása, a műveletek végrehajtása különböző feltételekhez köthető segítségével új funkciók adhatók az adatbázishoz VBA-Visual Basic nyelven írt saját programok, eljárások, függvények, stb. Új adatbázis létrehozásakor a felkínált mintaadatbázisok használata nem szükséges. Az Accessben egyetlen egy file jön létre, ami hordozható. A jellemző képernyőképet az 1.2. ábra szemlélteti. Az ablak bal oldalán választható ki az objektumtípus. Az adatbázis-objektumok létrehozására általában három lehetőség van: Automatikusan: ekkor az Access automatikusan elkészíti az objektum egy előre definiált változatát (ritkán használjuk). 6

Varázsló segítségével: a varázsló-technikával végigvezet a tervezési folyamaton. Tervező nézetben: teljesen manuális a tervezés, itt a rendszer valamennyi lehetősége elérhető. 1.2. ábra Az Access jellemző képernyőképe A lekérdezések hátterében az SQL nyelv található, hiszen minden lekérdezéshez egy SQL utasítás rendelődik, mely a lekérdezés műveleteit definiálja. Az egyszerűbb lekérdezéseket a tervező nézetben rács segítségével hozzuk létre, míg az összetett lekérdezéseket (bonyolultabb feldolgozási műveleteket) általában az SQL utasítások szerkesztésével (1.3. ábra). Lekérdezések Egyszerű QBE rács és grafikus lekérdezés-tervező eszközök (feltétel összeállítása vizuálisan) Összetett SQL utasítások szerkesztése (feltétel összeállítása programozással ) 1.3. ábra A lekérdezések típusainak létrehozása 1.4. Adattípusok Az Access különböző verziói kb. 10 jellegzetes adattípus tárolását teszik lehetővé (1.5. táblázat). A verzióktól függően lehetnek eltérések. A táblák mezőinek (az egyedek tulajdonságainak) adattípusát a táblatervezésnél (Tervező nézetben) kell beállítani. Az adattípusok beállításával egyúttal az adatérvényesítés legegyszerűbb módját is biztosítjuk, hiszen a felhasználók csak a megfelelő típusú adatokat vihetik be a táblamezőkbe. Keresés varázsló: egy másik táblából választhatunk értéket (idegen kulcs), de mi is megadhatjuk a választható adatok körét. Általában idegen kulcsnál alkalmazzuk, amikor az 1 oldalon lévő táblából választunk értéket. 7

1.5. táblázat Az Access adattípusai Adattípus Amit tárol Korlátok, követelmények Szöveg Feljegyzés Szám Dátum/idő Pénznem Számláló Igen/Nem OLE-objektum Hiperhivatkozás Melléklet Alfanumerikus adatok (szöveg és számok) fix hosszúságú Alfanumerikus adatok (szöveg és számok) változó hosszúságú Numerikus adatok (akkor választjuk, ha műveletet akarunk vele végezni; egyébként szöveg típus) Dátumok és idők megadása (numerikusból származtatott) Pénzösszeg adatok (numerikusból származtatott) Egyedi értékek, amelyeket az Access tölt fel minden új rekord létrehozásakor (numerikusból származtatott) Logikai (Igaz vagy Hamis értékű) adat (numerikusból származtatott) Képek, dokumentumok, rajzok, egyéb objektumok Office és Windows-alapú programokból Webcímek Bármely támogatott típusú fájl Az adattárolási egységek két típusa: egyszerű adattárolási egység: változó, összetett adattárolási egység: rekord. max. 255 karakter beviteli maszk adható meg keresés, szűrés, sorba rendezés NEM LEHETSÉGES Feljegyzés adattípus esetében manuálisan adatbevitelnél max. 65535 karakter mezőméret beállítható 1, 2, 4, 8 és 16 bájtra bájt (0 255), egész (0 65535), hosszú egész (csak egész számok) egyszeres, dupla (tizedesek is lehetnek) 8 bájtos dupla pontosságú egész számként tárolódik beviteli maszk adható meg 8 bájtos számokként, négy tizedes jegy pontossággal tárolódik 4 bájtos értékeken tárolódik általában elsődleges kulcs -1 => Igen 0 => Nem max. 2 GB adatot tárol szükség van egy OLE-kiszolgálóra (olyan programra, amely támogatja az adott fájltípust) max. 1 GB adatot tárol internetes, belső és helyi hálózati vagy a saját számítógépen található webhelyekre és fájlokra mutató hivatkozások tárolhatóak képeket, számolótáblákat, dokumentumokat, grafikonokat és más támogatott típusú fájlokat csatolhat az adatbázis rekordjaihoz A rekordban az adatok logikailag kapcsolódnak egymáshoz. A rendezőelv maga az egyed, aminek a tulajdonságait tárolja el a rekord. Az egyed lehet személy, tárgy, fogalom (pl. megállóhelyi kiszolgálás). Azok az egyedek tartoznak egy egyedtípusba, amelyekről azonos tulajdonságokat tárolunk. 8

2. Normalizálás Az adatbázis készítés a nyilvántartandó adatok körének meghatározásával kezdődik. Ezt követi a normalizálás (táblázat szétbontó műveletek): amikor helyes tárolási szerkezetet alakítunk ki. A normalizálás során a nyilvántartandó adatokat egymással kapcsolatban álló táblákba csoportosítjuk úgy, hogy eredményül egy kisebb tárolási igényű és áttekinthetőbb, a normalizálás szabályrendszerének megfelelő adatbázist kapjunk. A normalizálás több lépésből áll, minden lépés eredményeként az adatbázis szerkezete eggyel magasabb szintű normál formula (NF) feltételeit teljesíti. A NF szintek kumulatívak, tehát a magasabb szint eléréséhez az alacsonyabb szintek összes feltételének is teljesülnie kell (szigorodó szabályrendszer). Példákon keresztül mutatjuk be a normalizálás egymásra épülő lépéseit. 2.1 Normalizálás lépései 1. példa A példában a járművekhez rendelhető kiegészítőket tartjuk nyilván. Egy adatbázis szerkezetének kialakításakor első lépés a szükséges adatigény meghatározása, majd táblázatba rendezése (2.1. táblázat): alvázszám, gyártmány, típus, ajtók száma, kiegészítő neve, kiegészítő (típusának) cikkszáma. 2.1. táblázat 0. NF W0B578547 Opel Astra 5 Légzsák 10125 Klíma 98542 GTH4724782 Fabia Skoda öt Légzsák 10125 Klíma 32545 Riasztó, CD-tár CCP4672134 Lada Samara 3 Féklámpa 00001 CCP4672134 Lada Samara 3 Féklámpa 00001 10254, 65020 1. NF Az 1. NF feltételei nem teljesülnek, mert: az oszlopok száma és sorrendje nem azonos minden sorban, az ajtók száma attribútum nem minden sorban szám típusú értéket vesz fel, egyes attribútumok több értéket is felvesznek, van két egyforma sor (redundancia), így nem lehet elsődleges kulcsot képezni. Az 1. NF feltételeinek megfelelő táblaszerkezetet a 2.2. táblázat mutatja be. Egy egyednek (rekordnak) egy járműbe épített konkrét kiegészítő felel meg. A sorismétlések miatt az egyértelmű azonosítás (elsődleges kulcs) összetett kulccsal valósítható meg. Például jelen esetben az alvázszám és a kiegészítő cikkszáma egyértelműen azonosítja a sort. Az összetett 9

elsődleges kulcsban a kiegészítő neve nem lenne megfelelő, ugyanis a kiegészítő neve nem határozza meg egyértelműen a cikkszámot, hanem fordítva, a kiegészítő cikkszáma határozza meg annak nevét. Az 1. NF-ban ugyanis feltétel, hogy a másodlagos attribútumok funkcionálisan függjenek az elsődleges kulcstól. Abban az esetben, ha nem tudunk összetett kulcsot meghatározni vagy már túl sok mezőből állna az összetétel, akkor egyedi azonosítót veszünk fel (pl. ID elnevezéssel - számláló típussal). 2. NF 2.2. táblázat 1. NF Alvázszám Gyártmány Típus Ajtók Kiegészítő Kiegészítő száma neve cikkszáma W0B578547 Opel Astra 5 Légzsák 10125 W0B578547 Opel Astra 5 Klíma 98542 GTH4724782 Skoda Fabia 5 Légzsák 10125 GTH4724782 Skoda Fabia 5 Klíma 32545 GTH4724782 Skoda Fabia 5 Riasztó 10254 GTH4724782 Skoda Fabia 5 CD-tár 65020 CCP4672134 Lada Samara 3 Féklámpa 00001 A 2. NF feltételei nem teljesülnek, mert: van olyan mező, amely az összetett elsődleges kulcsnak csak egy részétől függ (pl.: alvázszám már egyértelműen meghatározza a gyártmányt). A 2. NF megalkotásához meg kell határozni, hogy az egyes nem-kulcs (másodlagos) attribútumok mely összetevőktől függnek (2.1. ábra). Alvázszám Kiegészítő cikkszáma Gyártmány Típus Ajtók száma Kiegészítő neve 2.1. ábra Attribútumok egymás közötti funkcionális függése Az alvázszám attribútum egyértelműen meghatározza a jármű gyártmányát, típusát és az ajtók számát. A 2. NF táblázatszétbontó szabályának megfelelően (minden mező a teljes összetett kulcstól függ, vagy a kulcs egy mezőből áll) külön választott attribútumokat 3 külön táblába rendezzük (2.2. ábra), ahol már az egyedtípusok is azonosíthatók. A táblák közötti kapcsolattípusok alapján meghatározhatók az elsődleges és az idegen kulcsok. Az Autó és Kiegészítő (típus) táblában egy, míg az Egy autó egy kiegészítő típusa táblában két mezőből áll az elsődleges kulcs (ez utóbbi két mező egy-egy idegen kulcs is). A több (N) oldalon lévő táblában (Egy autó egy kiegészítő típusa) a két mező együttesen alkotja az összetett kulcsot; ez a tábla egy ún. kapcsolótábla. 10

1:N Autó Alvázszám Gyártmány Típus Ajtók száma W0B578547 Opel Astra 5 GTH4724782 Skoda Fabia 5 CCP4672134 Lada Samara 3 1:N Egy autó egy kiegészítő típusa Kiegészítő (típus) Cikkszám Alvázszám Cikkszám Név 10125 W0B578547 10125 Légzsák 98542 W0B578547 98542 Klíma 10125 GTH4724782 32545 Klíma 32545 GTH4724782 10254 Riasztó 10254 GTH4724782 65020 CD-tár 65020 GTH4724782 00001 Féklámpa 00001 CCP4672134 jelmagyarázat: elsődleges kulcs idegen kulcs 2.2. ábra 2. NF Megfigyelhető, hogy az adatelemek száma csökkent: 42 helyett 38, azaz mérsékeltük a redundanciát. (Gyenge logikai redundancia a kapcsolatok felépítéséhez szükséges.) 3. NF A 3. NF feltételei nem teljesülnek, mert: funkcionális függés nem csak az elsődleges kulcsból indul ki, azaz a másodlagos attribútumok között is van funkcionális függőség (tranzitív függőség). A 2. NF Autó táblában az Alvázszámtól valamennyi másodlagos attribútum függ. Azonban a Típus mező is egyértelműen meghatározza a Gyártmányt, azaz két másodlagos attribútum között is van tranzitív függőség. Például, ha több Opel Astra típusú autó szerepelne a táblában, akkor minden egyes alkalommal rögzíteni kell a gyártmányt és a típust is (redundancia). Ezért a 3. NF feltételeit újabb táblázatszétbontással lehet teljesíteni, aminek az eredményét a 2.3. ábra táblaszerkezete szemléltet. A szakirodalomban létezik még 4. és 5. NF is, de rendszerint elég, ha az adatbázis teljesíti a 3. NF feltételeit. 11

1:N Autó típus Autó Típus Gyártmány Alvázszám Típus Ajtók száma Astra Opel W0B578547 Astra 5 Fabia Skoda 1:N GTH4724782 Fabia 5 Samara Lada CCP4672134 Samara 3 jelmagyarázat: 1:N Kiegészítő (típus) Egy autó egy kiegészítő típusa Cikkszám Név Cikkszám Alvázszám 10125 Légzsák 10125 W0B578547 98542 Klíma 98542 W0B578547 32545 Klíma 10125 GTH4724782 10254 Riasztó 32545 GTH4724782 65020 CD-tár 10254 GTH4724782 00001 Féklámpa 65020 GTH4724782 00001 CCP4672134 elsődleges kulcs idegen kulcs 2.3. ábra 3. NF 2.2 Normalizálás lépései 2. példa A példában számlák legfontosabb adatait tartjuk nyilván. A következő adatelemeket (tulajdonságokat) kívánjuk tárolni: SZLASZÁM DÁTUM VEVŐNÉV VEVŐCÍM TERMÉKKÓD TERMÉKNÉV MENNYISÉG EGYSÉGÁR ÖSSZEG (más mezőkből számítható értéket nem tárolunk) ÖSSZESEN A normalizálásnak megfelelő helyes táblaszerkezetet egyszerűsített ábrázolási móddal szemlélteti a 2.4. ábra (táblák és attribútumok nevei, kapcsolatok jelölése a kulcsok megadásával). 12

4. tábla Vevő 1. tábla 2. tábla 1:N 1:N N:1 Szla_törzs Eladás 3. tábla Termék VEVŐNÉV VEVŐCÍM SZLASZÁM DÁTUM VEVŐNÉV ÖSSZESEN SZLASZÁM TERMÉKKÓD MENNYISÉG TERMÉKKÓD TERMÉKNÉV EGYSÉGÁR jelmagyarázat: elsődleges kulcs idegen kulcs 2.4. ábra 3. NF-ban lévő táblaszerkezet (számlás példa) 2.3. N:M kapcsolatok felbontása kapcsolótáblával (fogalmi egyedtípussal) Az adatbázis táblaszerkezetének kialakításakor az N:M típusú, vagyis a több-a-többhöz típusú kapcsolatok kerülendők. Az ilyen kapcsolatok egy közbenső harmadik tábla (kapcsolótábla) bevezetésével bonthatók fel. Az új tábla többnyire egy fogalmi egyedtípushoz tartozik. A felbontás műveletét két példán mutatjuk be. Az eredmény: két darab egymásra szimmetrikus 1:N kapcsolat. 1. Példa: kórházi kezelések (orvosok és betegek) nyilvántartása 2.5. ábra Beteg Orvos N:M BetegAz Név Szül_dátum OrvosAz Név Osztály Beteg Orvos N:1 BetegAz Név Szül_dátum OrvosAz Név Osztály 1:N Kezelés KezelésAz BetegAz OrvosAz Betegség Dátum jelmagyarázat: elsődleges kulcs idegen kulcs 2.5. ábra N:M kapcsolatok felbontása (kórházi kezelés példa) 13

2. Példa: online webshop ügyfeleinek és termékeinek nyilvántartása (egy vásárlás során több, egymástól eltérő terméket is megvehet egy ügyfél) 2.6. ábra Ügyfél Termék (típus) ÜgyfélAz Név Szül_dátum Cím TermékAz Név Ár 1:N N:M Vásárlás VásárlásAz ÜgyfélAz TermékAz Darab Dátum Ügyfél Termék (típus) ÜgyfélAz Név Szül_dátum Cím TermékAz Név Ár 1:N N:1 Vásárlás Egy vásárlás egy terméktípusa VásárlásAz ÜgyfélAz Dátum VásárlásAz TermékAz Darab 1:N jelmagyarázat: elsődleges kulcs idegen kulcs 2.6. ábra N:M kapcsolatok felbontása (online webshop példa) 2.4. Kapcsolatok létrehozása táblák ismételt hozzáadásával A példában foci-mérkőzések legfontosabb adatait tartjuk nyilván. A gólok számával nem végzünk műveleteket. A normalizálásnak megfelelő helyes táblaszerkezetet egyszerűsített ábrázolási móddal szemlélteti a 2.7. ábra (táblák és attribútumok nevei, kapcsolatok jelölése a kulcsok megadásával). A szerkezet érdekessége, hogy a csapat táblát kétszeresen kapcsoljuk a mérkőzés táblához; úgymint hazai csapat (csapat1) és mint vendég csapat (csapat2); miközben ugyanazon adatokat tároljuk a hazai és a vendégcsapatról is, azaz ténylegesen csak egyetlen adattábla létezik. (A csapatok szerepköröket is válthatnak, ugyanis egyszer hazai csapatok, máskor vendégek.) Ez a problémakör ún. virtuális tábla hozzáadásával oldható fel, ami az Accessben a tábla ismételt hozzáadásával végezhető el (pl. a lekérdezés tervező rácsa feletti mezőben). 14

pálya 1:N mérkőzés csapat_1 PÁLYAAZ PÁLYA_MEGNEVEZÉS CÍM PÁLYAAZ CSAPAT1AZ CSAPAT2AZ IDŐPONT EREDMÉNY N:1 CSAPATAZ CSAPAT_MEGNEVEZÉS SZÉKHELY csapat_2 jelmagyarázat: elsődleges kulcs idegen kulcs N:1 CSAPATAZ CSAPAT_MEGNEVEZÉS SZÉKHELY 2.7. ábra Kapcsolatok létrehozása táblák ismételt hozzáadásával (foci-mérkőzéses példa) 2.5. Minta adatbázis szerkezete táblán belüli kapcsolat 1 EMP empno ename job mgr sal comm deptno 1 DEPT deptno dname loc Jelmagyarázat: Elsődleges kulcs Idegen kulcs 2.8. ábra Minta adatbázis szerkezete A minta adatbázisban egy szervezeten belük az alkalmazottak és a telephelyek adatait tartjuk nyilván két táblában. Az EMP táblában szerepelnek az alkalmazottak adatai (pl.: azonosító, név, munkakör, stb.), míg a DEPT táblában a telephelyek adatai (azonosító, név és helyszín). A 15

két tábla között a telephelyi azonosító teremti meg a kapcsolatot. Az adatbázis EMP táblájában az empno az elsődleges kulcs, de mint idegen kulcs is megjelenik a táblában az mgr mezőben. A DEPT táblában az elsődleges kulcs a telephely azonosító, ami az EMP táblában jelenik meg idegen kulcsként. Az egyes mezőnevek rövid leírását a 2.3. táblázat tartalmazza. 2.3. táblázat Minta adatbázis mezőnevek magyarázata Mezőnév Magyar megnevezés Leírás empno Alkalmazott azonosító Minden alkalmazotthoz tartozik egy egyedi azonosító ename Alkalmazott neve Alkalmazott vezetéknevét tartalmazza job Munkakör Alkalmazott munkakörét (pl.: CLERK) tartalmazza mgr Menedzser azonosító Alkalmazott közvetlen felettesének azonosítója hiredate Felvétel dátuma éééé/hh/nn formátumban a felvétel időpontja sal Fizetés Havi fizetés (mindenkinél ki van töltve) comm Jutalék Nem mindenkinél van kitöltve NULL érték (akinél ki van töltve, annak is lehet 0, azaz nulla mértékű jutaléka). deptno Telephely azonosító Minden telephelyhez tartozik egy egyedi azonosító dname Telephely neve Telephely nevét tartalmazza (pl.: SALES) loc Helyszín Telephely helyszínét tartalmazza (pl.: CHICAGO) A szerkezet érdekessége a táblán belüli kapcsolat az empno és mgr mezők között; azaz egy beosztott mgr mezőjében a főnökének az empno értékét tároljuk el. Ez a szerkezet kifejezetten alkalmas hierarchikus felépítésű szervezetek esetén az alkalmazottak közötti viszonyrendszer leképezésére. Ez a megoldás az eredeti és egy új virtuális EMP tábla közötti hagyományos kapcsolatnak tekinthető. A virtuális tábla gondolati alkalmazása hasonlatos, mint az előző példában. Egy alkalmazott ugyanis egyidejűleg lehet beosztott is (van főnöke) és főnök is (azaz van beosztottja). Kivételt csak a vezérigazgató (ename: KING, job: PRESIDENT) képez, ugyanis neki nincs főnöke, azaz nála az mgr mező NULL értékű. A többi alkalmazottnál az mgr mező értéke ki van töltve. Ha valakinek nincs beosztottja, azaz a hierarchia legalsó szintjén helyezkedik el, akkor az ő empno-ja nem jelenik meg más alkalmazott mgr mezőjében. Adatbeviteli sorrend: mivel adatbevitelnél mindig az 1 oldalon lévő tábla rekordjait töltjük ki először, ezért ebben a szerkezetben a hierarchia magasabb szintjén álló alkalmazottat (főnököt) vesszük fel először a nyilvántartásba (vagy esetleg az mgr mező, mint idegen kulcs kitöltésére később térünk vissza). 16

3. Minta adatbázis létrehozása A 2.5. fejezetben bemutatott minta adatbázist a Microsoft Access szoftverrel hozzuk létre, ami támogatja az SQL nyelv használatát. Egyetemi hallgatók számára az MS Access a szoftver.eik.bme.hu oldalról tölthető le a teljes Office csomag részeként. A minta adatbázis létrehozásához nyissuk meg az Access alkalmazást, válasszuk az Üres asztali adatbázis opciót, adjuk meg a fájlnevet valamint az elérési útvonalat. Ezután a program létrehoz egy fájlt, aminek kiterjesztése accdb. Míg az adatbázis meg van nyitva egy laccdb kiterjesztésű fájl is megjelenik azonos névvel, amit a program automatikusan hoz létre. Másolat készítése előtt célszerű bezárni az alkalmazást és csak az accdb kiterjesztésűt átmásolni. Megjegyzendő, hogy a szabványosítás ellenére vannak különbségek az eltérő szoftverek által használt SQL nyelvben. Használat előtt célszerű ellenőrizni, hogy az ANSI 92 szabványnak megfelelő szintaxist használja az alkalmazás. (Fájl -> Beállítások -> Objektumtervezők -> SQL Server-kompatibilis szintaxis (ANSI 92) -> Ebben az adatbázisban: ) Továbbá lehetőség van az Access alkalmazás felületének nyelvét módosítani a Fájl -> Beállítások -> Nyelv menüpontban. 3.1. Táblaszerkezet létrehozása Az üres asztali adatbázis létrehozása után a Létrehozás lapon a Táblatervező ikonra kattintva hozható létre új tábla (3.1. ábra). Egy táblát akkor érdemes létrehozni, ha már a táblában szereplő összes idegenkulcs szerepel más meglévő táblákban, mint elsődleges kulcs. Sorrendi szabály: kapcsolt tábláknál mindig az 1 oldalon lévő táblát hozzuk létre először, majd az ottani elsődleges kulcsot vesszük fel a több oldalon lévő táblában idegen kulcsként. Az idegen kulcsok adattípusának felvételekor kényelmes megoldás a Keresés varázsló (Lookup Wizard) használata, amely egyúttal a táblák közötti kapcsolatot is automatikusan beállítja. Ha nem használjuk a Keresés varázslót, akkor manuálisan kell beállítani a kapcsolatokat az Adatbázis eszközök (Database Tools) Kapcsolatok (Relationships) menüpont alatt. A sorrendi szabályt adatbevitelkor is érdemes alkalmazni; azaz először az 1 oldalon lévő táblába, majd a több oldalon lévő táblába viszünk be adatokat. 3.1. ábra Új tábla létrehozása és megnyitása tervező nézetben 17

3.1. táblázat Minta adatbázisban szereplő mezők adattípusai Tábla Mezőnév Adattípus További beállítások empno Rövid szöveg Beviteli maszk: 0000 ename Rövid szöveg Kötelező, maximum 30 karakter job Rövid szöveg Maximum 30 karakter mgr Rövid szöveg Keresés varázslóval hiredate Dátum/Idő Rövid dátum sal Szám >0 comm Szám deptno Rövid szöveg Keresés varázslóval deptno Rövid szöveg Beviteli maszk: 00 dname Rövid szöveg Kötelező, maximum 30 karakter loc Rövid szöveg Alternatív fejléc: Helyszín EMP DEPT jelmagyarázat: elsődleges kulcs idegen kulcs A minta adatbázisban a 3.1. táblázatban felsorolt táblákat és mezőket hozzuk létre az adattípusok beállításával. Elsődleges kulcs beállítása: tervező nézetben ki kell jelölni a megfelelő mezőt vagy mezőket (attól függően, hogy összetett-e a kulcs), és a tervezés lapon az Eszközök csoportban az Elsődleges kulcs gombra kell kattintani. Ugyanígy lehet törölni az elsődleges kulcs megjelölést egy mező sorában. Minden mezőnek a legfontosabb tulajdonsága az adattípus, ugyanis ez határozza meg, hogy milyen adatokat tárolhatnak. A mezők adattípusa további fontos jellemzőket is meghatároz, például: a mezők kifejezésekben való használatát, a mezőérték maximális méretét, a mező indexelhetőségét, a mezőnél használható formátumokat. Az így létrehozott táblaszerkezet kapcsolati ábrája az Adatbáziseszközök lapon a Kapcsolatok ikonra kattintva tekinthető meg (3.2. ábra). 3.2. ábra Minta adatbázis szerkezete Access-ben Az Access-ben nem kell külön elkészíteni az emp_1 táblát a belső kapcsolat létrehozásához. Az emp_1 mint virtuális tábla jelenik meg az Access programban a kapcsolatok szemléltetéséhez. (Táblák ismételt hozzáadása.) 18

3.2. Minta adatok felvétele Új adatok (rekordok) bevitelét a megfelelő tábla adatlap nézetben való megnyitásával lehet elvégezni. A minta adatbázisban szereplő adatokat a 3.2. és a 3.3. táblázatok tartalmazzák. 3.2. táblázat A DEPT tábla rekordjai DEPT deptno dname loc 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 3.3. táblázat Az EMP tábla rekordjai EMP empno ename job mgr hiredate sal comm deptno 7369 SMITH CLERK 7902 1980. 12. 17. 800 20 7499 ALLEN SALESMAN 7698 1981. 02. 20. 1600 300 30 7521 WARD SALESMAN 7698 1981. 02. 22. 1250 500 30 7566 JONES MANAGER 7839 1981. 04. 02. 2975 20 7654 MARTIN SALESMAN 7698 1981. 09. 28. 1250 1400 30 7698 BLAKE MANAGER 7839 1981. 05. 01. 2850 30 7782 CLARK MANAGER 7839 1981. 06. 09. 2450 10 7788 SCOTT ANALYST 7566 1987. 04. 19. 3000 20 7839 KING PRESIDENT 1981. 11. 17. 5000 10 7844 TURNER SALESMAN 7698 1981. 09. 08. 1500 0 30 Táblanézetben az adatbevitelt megkönnyíti a tabulátor gomb használata, ami mindig a következő mezőre vált, vagy a másolás-beillesztés. Nagy mennyiségű digitalizált adat bevitelére az importálás fájlból opció alkalmas, többek között támogatott forrás fájl az xls is. Ha egy új rekordot táblanézetben veszünk fel, akkor az adatbevitel során megjelenik egy ceruza ikon. Az ikon szerkesztés közben végig ott marad, csak azután tűnik el, hogy a rekordot elmentette az alkalmazás. Az ikon gyakorlati haszna, hogy hálózatos üzemben a felhasználó tudja, hogy mikor válik az új rekord a többi felhasználó számára is elérhetővé (miután a ceruza ikon eltűnt). 19

4. SQL parancsok csoportosítása, SELECT parancs Az SQL nyelvben használható parancsok a következő csoportokba sorolhatók: DDL (Data Definition Language): az adatbázis szerkezetének definiálásához szükséges parancsok. DML (Data Manipulation Language): adatok kezeléséhez szükséges parancsok. DCL (Data Control Language): az adatbázis hozzáférhetőségének definiálásához szükséges parancsok. TCL (Transaction Control Language): a DML parancsok által végrehajtott módosítások kezelésére alkalmas. A gyakorlatok során az első két csoportba tartozó DDL és DML parancsokat ismerjük meg. Az Access-ben egy SQL parancsot a következőképpen lehet végrehajtani (4.1. ábra): begépeljük a kifejezést egy lekérdezés SQL nézetébe, majd lefuttatjuk. Nézet választó Parancs futtatása Adatbázis objektumok SQL parancs helye 4.1. ábra SQL parancsok végrehajtása (futtatása) Access-ben 4.1. DDL parancsok Adat definíciós nyelv, amely tartalmazza az adatbázis struktúra (táblaterületek, táblák, indexek, megszorítások, stb.) létrehozásával és karbantartásával kapcsolatos utasításokat. A legfontosabb DDL parancsok: CREATE: adatbázis objektum (pl.: tábla) létrehozására szolgál. Tábla létrehozásakor itt kell definiálni annak szerkezetét figyelembe véve a kapcsolatokat is. 20

ALTER: meglévő objektum szerkezetének módosítására szolgál. Például új oszlop adható hozzá egy táblához. DROP: meglévő objektum teljes törléséra szolgál (szerkezet és tartalom is törlésre kerül). Más adatbázis kezelő alkalmazásokban további DDL parancsok is elérhetőek, mint például a TRUNCATE (minden rekord törlése reset -elés, azaz ha ezt követően új rekordot viszünk be, akkor a számláló 1-ről indul) vagy a RENAME, de az Access-ben a leggyakrabban használt parancsok az előbb felsoroltak. Mivel az Access különösen felhasználóbarát, ezért számos művelet elvégezhető a DDL parancsok alkalmazása nélkül is egyéb módon. 4.2. DML parancsok A DML parancsok az adatbázisban tárolt és tárolandó adatok kezeléséhez szükségesek. A DDL parancsok segítségével létrehozott adatbázis szerkezetet a DML parancsok töltik fel adatokkal, illetve ezek alkalmasak az adattartalom módosítására is. A legfontosabb DML parancsok: INSERT INTO: új adat (rekord) felvétele. UPDATE: meglévő adat (rekord vagy rekordok) módosítása. DELETE FROM: rekord vagy rekordok törlése. SELECT: adatok kilistázása (lekérdezés nyers vagy feldolgozott formában). 4.3. SELECT parancs szerkezete A SELECT parancs segítségével egy vagy több táblában tárolt rekordokat lehet megjeleníteni vagy csoportokat lehet képezni. A SELECT parancs szerkezete: SELECT [DISTINCT] select-lista [FROM <táblanév, lekérdezés név> WHERE <sorfeltétel> GROUP BY <kifejezés> HAVING <csoportfeltétel> ORDER BY <kifejezés>]; A SELECT parancson belül a parancsszavak sorrendje minden esetben kötött, azonban csak a SELECT elengedhetetlen a parancs sikeres végrehajtásához. A parancsszavak alkalmazásának magyarázata: SELECT: kötelező, meghatározza a select-lista tartalmát (oszlopnevek, kifejezések). FROM: utána szerepelnek az adatforrásként szolgáló táblák, lekérdezések nevei. WHERE: a lekérdezés eredményül azokat a rekordokat adja, amelyek megfelelnek a WHERE után szereplő sorfeltételeknek. Több sorfeltételt logikai operátorral összekötve lehet megadni. GROUP BY: a lekérdezés sorfeltételeinek megfelelő rekordokat (vagy ha nincs feltétel, akkor a tábla összes rekordját) csoportokba rendezi a GROUP BY után szereplő csoportszempontok szerint. Azok az egyedek (rekordok) kerülnek egy csoportba, amelyeknél a csoportképző oszlop tartalma megegyezik. 21

HAVING: csak akkor szerepelhet, ha alkalmazunk GROUP BY kifejezést is. Csak azokat a csoportokat adja eredményül a lekérdezés, amelyek megfelelnek a HAVING után következő csoportfeltételeknek. Több csoportfeltételt logikai operátorral összekötve lehet megadni. ORDER BY: a lekérdezés eredményeit (rekordokat, csoportokat) az ORDER BY után szereplő sorrend-szempontok szerint, a rendezési irány szerinti sorrendben jeleníti meg. 4.4. SELECT lista elemei, alternatív oszlopnév A select-listában szerepelhet: *: minden oszlopot megjelenít. oszloplista: oszlop1, oszlop2, számított kifejezés: 3*oszlop1 (feltéve ha oszlop1 adattípusa szám), 47/3, stb. karakteres konstans: például: Ft. Vigyázat: SQL kódban mindkét idézőjelnek felül kell lennie. konkatenáció: például: oszlop1&oszlop2. A művelet két oszlopot egyesít, összeolvaszt. alternatív oszlopnév: oszlop1 as [alternatív oszlopnév]. Az alternatív oszlopnév csak a lekérdezés eredményében fog megjelenni. Példák: SELECT * FROM EMP; SELECT empno, ename FROM EMP; SELECT 6*30; SELECT 6*sal FROM EMP; SELECT TOM SELLECK ; SELECT empno & Azonosító FROM EMP; SELECT empno as [Azonosító] FROM EMP; 22

5. SELECT parancs SELECT parancs szerkezete: SELECT [DISTINCT] <select-lista> [FROM <táblanév, lekérdezés név> WHERE <sorfeltétel> GROUP BY <kifejezés> HAVING <csoportfeltétel> ORDER BY <kifejezés>]; 5.1. Rendezés (ORDER BY) ORDER BY: a listába kigyűjtött rekordok/csoportok (az eredményhalmaz) a megadott mező, vagy kifejezés szerint növekvő/csökkenő sorrendbe rendezése. Alapértelmezés a növekvő sorrend. növekvő vagy abc szerinti sorrend: ORDER BY oszlop1 [asc]; csökkenő vagy fordított abc szerinti sorrend: ORDER BY oszlop1 desc; vegyes: ORDER BY oszlop1 desc, oszlop2; Egyszerre több szempont is szerepelhet az order by után. Ilyenkor a második és az azt követő szempontok akkor kerülnek figyelembe vételre, ha a megelőző szempont(ok) szerint azonos értékek fordulnak elő. A rendezés alapjául szolgáló kifejezésnek nem muszáj szerepelnie a select-listában. 5.2. Hiányzó adatelem (NULL érték) problematika NULL érték problematika: ha egy mező nincs kitöltve, akkor az a mező null értékű. Információtartalma: bizonytalan (nem ismert). A NULL értékű mezőt tartalmazó műveleteknek az eredménye is lehet NULL értékű, ami problémákat okozhat. Például egy összegnek akkor is NULL az eredménye, ha a tagok között legalább egy NULL értékű elem van. Használható eredmények érdekében a NULL értéket helyettesíteni lehet az Iif beépített függvény segítségével. Az Iif függvény szerkezete: Iif(kifejezés; ha igaz; ha hamis) Például a bizonytalan NULL értéket átalakíthatjuk számításoknál használható biztos 0 értékké. Az átalakítás azonban információtorzulást okoz: Iif(comm is NULL; 0; comm) 23

5.3. Adatválaszték megtekintése (DISTINCT) DISTINCT: az ismétlődő sorokat csak egyszer jeleníti meg. Például: SELECT job FROM emp; CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK SELECT DISTINCT job FROM emp; ANALYST CLERK MANAGER PRESIDENT SALESMAN 5.4. Sorfeltétel (WHERE) Sorfeltétel: a forrásul szolgáló tábla vagy lekérdezés megjelenítendő sorainak szűrésére szolgál. WHERE utáni elemek és sorrendjük (egyszerű feltételnél): I. kifejezés (mit hasonlítunk?) II. összehasonlító operátor (milyen jellegű az összehasonlítás?) III. kifejezés, érték, értéklista, intervallum, séma (mihez hasonlítunk?) A WHERE után következő sorfeltételben használható összehasonlító operátorokat az 5.1. táblázat tartalmazza. Az operátorok mindkét oldalán azonos adattípusú értékeknek kell szerepelniük. 24

5.1. táblázat Összehasonlító operátorok Operátor Leírás = Egyenlő, karakter típusú adattal is használható (a bal és jobb oldalon szereplő kifejezéseknek teljesen meg kell egyezniük - kis és nagybetű fontos!) <> Nem egyenlő, karakter típusú adattal is használható < Kisebb, mint > Nagyobb, mint >= Nagyobb vagy egyenlő, mint <= Kisebb vagy egyenlő, mint [NOT] BETWEEN Két érték közt van, egyenlőség megengedett (zárt intervallum) [NOT] IN A listában szereplő egyik értékkel megegyezik [NOT] ALIKE Egy részlete megegyezik vele (illeszkedik a sablonhoz)* =[] Paraméteres lekérdezés *: Az SQL ANSI92 nyelvben csak az ALIKE operátor használható. Alapértelmezésként az Access az SQL ANSI89 nyelvet használja, ami a LIKE és ALIKE operátort is felismeri, azonban a helyettesítő karakterek eltérőek. Az ALIKE operátor esetén használt helyettesítő karaktereket az 5.2. táblázat tartalmazza. 5.2. táblázat Helyettesítő karakterek ANSI89 ANSI92 Egyezés a helyettesítő karakterrel? vagy Egy tetszőleges karakter # [1-9] Egy tetszőleges számjegy * % Tetszőleges számú (akár 0) karakter [] [] Bármely karakter, ami a megadott tartományon belül van. Pl.:[a-m] vagy [1-5] vagy [abcdef] [!] [!] Bármely karakter, ami a megadott tartományon kívül esik. Pl.: [!a-m] A dátum adattípust az Access számként tárolja, ami a bázis dátum (1899. december 30. 0:00) óta eltelt napok számának felel meg. Például 1899. december 31. 12:00 az 1,5-nek felel meg és fordítva. Ennek megfelelően feltételben dátum adattípust két féleképpen is össze lehet hasonlítani konstanssal: vagy a bázis dátum óta eltelt napok számát megadva, vagy a dátumot #ISO dátum jelölés# formátumban kiírva: #nn-hh-éééé# (területi beállításoktól függetlenül ez a dátum formátum mindig működik). Példák: SELECT ename FROM emp WHERE sal=1250; SELECT ename FROM emp WHERE ename= CLARK ; SELECT ename FROM emp WHERE sal>comm; SELECT ename FROM emp WHERE sal NOT BETWEEN 500 and comm; SELECT ename FROM emp WHERE empno IN( 7900, 1234 ); SELECT ename FROM emp WHERE empno ALIKE 7900 OR empno ALIKE 1234 ; SELECT ename FROM emp WHERE empno ALIKE _[1-5]0% ; SELECT ename FROM emp WHERE empno=[azonosító száma?]; SELECT ename, hiredate from emp where hiredate IN(#28-09-1981#,29637); 25

5.5. Aritmetikai, logikai és összefűző operátorok Az aritmetikai operátorokat az 5.3. táblázat tartalmazza. 5.3. táblázat Aritmetikai operátorok Operátor Leírás + Összeadás, 5+2=7 - Kivonás, 5-2=3 * Szorzás, 5*2=10 / Osztás, 5/2=2,5 \ Osztás, ami az eredmény egész értékét adja eredményül, 5\2=2 ^ Hatványozás, 5^2=25 MOD Osztás maradékát adja eredményül: 5 MOD 2 =1 Több feltételt logikai operátorral összekapcsolva lehet megadni (összetett feltételek képzése). A logikai operátorokat az 5.4. táblázat tartalmazza. 5.4. táblázat Logikai operátorok Bemenetek Logikai operátorok kimenetei A B AND OR EQV IMP NOT(A) XOR 0 0 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 NULL 0 NULL NULL NULL 1 1 1 NULL NULL 1 NULL NULL NULL 0 NULL 0 0 NULL NULL NULL NULL NULL NULL 1 NULL 1 NULL NULL 1 NULL NULL NULL NULL NULL NULL NULL NULL NULL Az összefűző operátorokat az 5.5. táblázat tartalmazza. 5.5. táblázat Összefűző operátorok Operátor Leírás + Két szöveg adattípusú karakterlánc egyesítése egy karakterlánccá a NULL érték propagálásával: ha az egyik karakterlánc NULL értékű, a kimenet is az. & Két karakterlánc egyesítése egy karakterlánccá. 26

6. SELECT parancs SELECT parancs szerkezete: SELECT [DISTINCT] <select-lista> [FROM <táblanév, lekérdezés név> WHERE <sorfeltétel> GROUP BY <kifejezés> HAVING <csoportfeltétel> ORDER BY <kifejezés>]; 6.1. Függvények A Microsoft Access beépített függvényei műveletet hajtanak végre, az adatok átalakítására és feldolgozására alkalmasak. A függvényeket a bemeneti rekordok száma szerint két csoportra bonthatjuk (6.1. ábra). Függvény Sorfüggvény (1 rekord) Csoportfüggvény (több rekord) 6.1. ábra Függvények csoportosítása a bemeneti rekordok száma szerint A függvények jellemzői: a bemenet és kimenet adattípusa eltérhet, a függvények egymásba ágyazhatóak. A sorfüggvények fontosabb jellemzői az alábbiak: minden esetben egy argumentum (oszlopnév, konstans, kifejezés) a bemenet, minden rekordhoz egy visszaadott érték tartozik, a select-listában, a WHERE és az ORDER BY részekben alkalmazhatóak. A sorfüggvényeket a bemenet és kimenet adattípusa szerint további alcsoportokra bonthatjuk, melyek közül a fontosabbakat mutatjuk be. A gyakran használt beépített sorfüggvényeket az 6.1. táblázat tartalmazza. (A felhasználó is definiálhat függvényeket.) Bizonyos beépített függvények több csoportba is tartoznak, így például a Day függvény az átalakítás és a dátum/idő függvény csoportban is megtalálható. 27

Csoport Függvény CDate(szám) Dátum/idő Matematikai Szöveg Day(dátum) Weekday(dátum, [hét első napja]) Date() Time() Now() Weekdayname(szám, [rövidítés], [hét első napja]); Abs(szám) Int(szám) vagy Fix(szám) Kerek(szám, [pontosság]) (Round( )) Sqr(szám) LCase(karakterlánc) UCase(karakterlánc) 6.1. táblázat Gyakran használt beépített sorfüggvények az Access-ben Leírás Egy szám típusú értéket dátum értékké konvertál. Egy egész számot ad vissza, ami a hónap valamely napjának felel meg (1..31). Egy egész számot ad vissza, amely a hét valamely napját jelöli (1..7); hét első napja: 1, ha vasárnap; 2, ha hétfő stb. Alapértelmezés szerint 1. A rendszerdátumot adja eredményül. A rendszeridőt adja eredményül. A rendszerdátumot és -időt adja eredményül. A hét napjának nevét adja eredményül. szám: hét napjának száma 1..7 rövidítés: o 0: az eredmény a teljes név o -1: az eredmény a rövidített név hét első napja: lásd weekday fv. A szám abszolút értékét adja eredményül. Egy szám egészrészét adja eredményül Egy számot a megadott számú tizedeshelyre kerekítve ad vissza Egy szám négyzetgyökét adja eredményül. Kisbetűssé alakított szöveget ad eredményül. Nagybetűssé alakított szöveget ad eredményül. StrConv(szöveg, n) Ha n: 1: nagybetűssé alakított szöveget ad eredményül, 2: kisbetűssé alakított szöveget ad eredményül, 3: a szavak első betűjét nagybetűssé, a többit kisbetűssé alakítja Len(karakterlánc) A szöveg karakterszámát adja eredményül. Megjegyzés: az 5.2. fejezetben bemutatott Iif függvény a programfolyamat csoportban található. Példák: SELECT CDate(40235); SELECT Weekday(hiredate, 2) FROM EMP; 28

SELECT Date(); SELECT Round(Sqr(13), 2); A csoportfüggvények (vagy más néven összesítőfüggvények) fontosabb jellemzői az alábbiak: a függvény változója az egy csoportba sorolt rekordok megjelölt oszlopában található értékek, csoportonként egy értéket ad eredményül, a null értéket tartalmazó sorokat figyelmen kívül hagyják, a select-listában, a HAVING és az ORDER BY részekben alkalmazhatóak. A csoportfüggvényeket az 6.2. táblázat tartalmazza. 6.2. táblázat Csoportfüggvények az Access-ben Függvény Sum() Avg() Min() Max() Count() StDev() Var() First() Last() Leírás A csoportban szereplő értékek összegét adja eredményül. A csoportban szereplő értékek átlagát adja eredményül. A csoport legkisebb értékű elemét adja eredményül. A csoport legnagyobb értékű elemét adja eredményül. A csoportban szereplő értékek számát adja eredményül. (A csoportba tartozó rekordok száma is ezzel a függvénnyel képezhető.) A csoportban szereplő értékek szórását adja eredményül. A csoportban szereplő értékek szórásnégyzetét adja eredményül. A csoportban szereplő elemek közül az elsőt adja eredményül. A csoportban szereplő elemek közül az utolsót adja eredményül. Nem kötelező GROUP BY kifejezéssel csoportot képezni, annak érdekében, hogy lehessen használni a csoport függvényeket. GROUP BY nélkül a tábla teljes tartalmára vonatkozik a művelet (az objektum valamennyi rekordja egyetlen csoportot alkot). Példa: SELECT Avg(sal) FROM EMP; 6.2. Csoportképzés (GROUP BY) Lehetőség van az egyes rekordokat csoportokba sorolni. A csoportképzés alapját jelentő oszlopnevet vagy neveket a GROUP BY kifejezés után adjuk meg. Azok a rekordok fognak egy csoportba kerülni, amelyeknél megegyezik a csoportképző oszlop tartalma. Olyan oszlopot érdemes csoportképzőnek választani, amelyekben van ismétlődő érték. A csoportképző oszlopot célszerű felvenni a select-listába. A select-listában csak csoportra jellemző érték szerepelhet (csoportképző oszlopok és/vagy csoportfüggvénnyel képzett kifejezés). Ha a csoportképzés szempontjaként több oszlopnevet is megadunk, akkor a lekérdezés a csoportosításkor balról jobbra haladva veszi figyelembe az oszlopneveket. A csoportképző szempontok eltérő sorrendje esetén a csoportosítás értelme is eltérő. Ha több csoportképző szempontot (oszlopot) egyidejűleg alkalmazunk, akkor azok lehetnek egymásba ágyazódóak, vagy függetlenek. 29

GROUP BY <oszlop1>, <oszlop2>,, <oszlopn> A 6.2. ábra példa az egymásba ágyazódó csoportképzésre. (Pl. alkalmazottak csoportosítása lakóhelyük szerint; az alkalmazottak, mint egyedek feltüntetésétől eltekintettünk). Régió 1 Régió 2 Megye 1 Város2 Város1 Megye 2 Város3 Megye 3 Megye 4 Város4 Megye 5 Város5 Város6 6.2. ábra Régió-megye-város csoportképzés A 6.3. ábra példát mutat a független szempontok (deptno, job) szerinti csoportképzésre. A csoportképző szempontok sorrendje az eredménylistán belüli sorrendet befolyásolja (6.3. táblázat). (A személyeket, mint egyedeket az azonosítószámmal jelölt körök mutatják). 6.3. táblázat Eltérő csoportképzési sorrendek eredménylistái GROUP BY deptno, job GROUP BY job, deptno deptno job Count job deptno Count 10 CLERK 1 ANALYST 20 2 10 MANAGER 1 CLERK 10 1 10 PRESIDENT 1 CLERK 20 2 20 ANALYST 2 CLERK 30 1 20 CLERK 2 MANAGER 10 1 20 MANAGER 1 MANAGER 20 1 30 CLERK 1 MANAGER 30 1 30 MANAGER 1 PRESIDENT 10 1 30 SALESMAN 4 SALESMAN 30 4 Példa: mekkora az egyes vezetők beosztottjainak átlagfizetése? SELECT mgr, Avg(sal) FROM EMP GROUP BY mgr; 30

1. csoportosítás GROUP BY deptno, job 10 20 CLERK 7934 MANAGER 7782 PRESIDENT 7839 MANAGER 7566 CLERK 7369 7876 ANALYST 7788 7902 30 CLERK 7900 SALESMAN 7499 7521 MANAGER 7698 7844 7654 ANALYST 2. csoportosítás GROUP BY job, deptno CLERK 20 10 7788 7902 7934 30 MANAGER 7900 20 7369 7876 10 7782 30 7698 20 7566 PRESIDENT 10 7839 SALESMAN 30 7499 7521 7844 7654 6.3. ábra Csoportképzés telephely és beosztás szerint 31

6.3. Csoportfeltétel (HAVING) A csoportképzés során keletkezett csoportokat egyszerű vagy összetett csoportfeltétel megadásával lehet szűrni. A csoportfeltétel szerkezete megegyezik a sorfeltételével, azzal a különbséggel, hogy a feltétel bal oldalán csak csoportra-jellemző érték szerepelhet. (Alternatív oszlopnév nem használható a feltételben.) A csoportfeltételt a HAVING után lehet megadni. Példa: mekkora a legnagyobb fizetés az egyes vezetők beosztottjainak a csoportjában, ahol a vezető azonosítója nem egyezik meg a 7452 és a 7899 azonosítószámokkal? SELECT Max(sal) FROM EMP GROUP BY mgr HAVING mgr<>7452 AND mgr<>7899; A csoportfeltétel abban különbözik, a sorfeltételtől, hogy az eredménylistából pl. teljes csoportok zárhatóak ki, míg a sorfeltétellel csak egyes rekordok. A sorfeltétel és csoportfeltétel közötti különbséget a 6.4. ábra mutatja be. CLERK 7934 MANAGER 7782 10 20 MANAGER PRESIDENT 7566 7839 CLERK 7369 7876 30 Csoportfeltétel HAVING job!= ANALYST ANALYST 7788 7902 CLERK 7900 SALESMAN 7499 7521 Sorfeltétel WHERE empno!=7521 MANAGER 7698 7844 7654 6.4. ábra Különbség sor- és csoportfeltétel között A sorfeltétel és a csoportfeltétel egyidejűleg is alkalmazható. Ilyenkor a sorfeltétellel kiválogatott rekordokon működik a csoportképzés, aminek az eredménye szűrhető a csoportfeltétellel. 32

7. Összetett lekérdezések Az eddig megismert egyszerű lekérdezések egy táblára épültek. Azonban épülhetnek már létező másik lekérdezésre is, vagy egyszerre több objektumra is (táblákra, lekérdezésekre vegyesen). A lekérdezések egymásra is halmozhatók, azaz több szinten is építhetjük azokat egymásra. 7.1. Listázás egyszerre több (kapcsolódó) táblából Az SQL nyelvben a SELECT parancs select-listájában szereplő oszlopnevek több különböző táblából is származhatnak. Ebben az esetben a FROM után minden érintett tábla nevét fel kell sorolni. Ha több táblából listázunk adatokat, akkor az alábbiakra kell figyelni: Ha a forrás táblákban szereplő oszlopok neve megegyezik, a select-listában jelezni kell, hogy melyik tábla adatait kívánjuk megjeleníteni. Ha a forrás táblák között kapcsolat van, azt a SELECT parancsban meg kell adni sorfeltétel segítségével (WHERE után a kapcsoló mezők egyenlőségét előírva feltételként), különben a rekordok összes permutációját adja eredményül a lekérdezés. Példa: SELECT ename, job, emp.deptno, loc FROM EMP, DEPT WHERE emp.deptno=dept.deptno; 7.2. Egymásra épülő lekérdezések Miután elmentettünk egy lekérdezést, az a további feldolgozásokban úgy használható, mintha tábla lenne. Egymásra épülő lekérdezéseknek hívjuk azokat a lekérdezéseket, amelyek közül egyik lekérdezés select-listájában szereplő oszlopnevek között megtalálható olyan, ami egy másik lekérdezésből származik. Egymásra épülő lekérdezéseket abban az esetben érdemes használni, ha a SELECT parancsban nem egy konstanst, hanem az adattábla rekordjainak tartalmától függő értéket kívánunk megadni. Ez az ún. al-lekérdezéssel meghatározott érték szerepelhet a select-listában, sorfeltétel jobb oldalán, csoportfeltétel jobb oldalán. Az al-lekérdezés visszaadhat egyetlen értéket, több (véges számú) értéket vagy értékpár (értékhármas ) listákat is. Ha az al-lekérdezést feltételben használjuk, akkor a feltételben lévő oszlopok száma és az alkalmazott operátor az al-lekérdezés által visszaadott értékhalmaznak megfelelően módosul. Első lépésben mindig az al-lekérdezést készítjük el; majd erre építjük az ún. külső lekérdezést. Egy külső lekérdezés egyidejűleg több al-lekérdezést is magában foglalhat. 33

Abban az esetben, ha egy lekérdezés alapját több másik lekérdezés alkotja, a számítás időigénye megnőhet. Ha az alapot jelentő lekérdezések értékei állandóak, érdemes azokat egy táblában rögzíteni, így csökkentve a számítási időigényt. Példa: kinek a legnagyobb a fizetése? Ehhez először meghatározzuk, hogy mekkora a legmagasabb fizetés értéke, majd egy másik (külső) lekérdezésben az alkalmazottak fizetés értékeit összehasonlítjuk az al-lekérdezésben meghatározott legnagyobb fizetés értékével. 1. SELECT max(sal) as max_fizetes FROM EMP; 2. A lekérdezést elmentjük Lekérdezés1 néven. 3. SELECT ename, sal FROM EMP, Lekérdezés1 WHERE sal=max_fizetes; 7.3. Beágyazott lekérdezés (subquery) Az egymásra épülő lekérdezések mellett a beágyazott lekérdezés is lehetőséget ad arra, hogy a SELECT parancsban nem konstans, hanem az adattábla értékeitől függő értéket vegyünk figyelembe. Ebben az esetben a számított értéket vagy értékeket egy zárójelek közé tett SELECT paranccsal lehet megadni. Ez a beágyazott lekérdezéssel meghatározott érték (az egymásra épülő lekérdezésekhez hasonlóan) szerepelhet a select-listában: feltéve hogy a beágyazott lekérdezés eredménye egy érték, sorfeltétel jobb oldalán, csoportfeltétel jobb oldalán. A beágyazott lekérdezés előnye az egymásra épülő lekérdezésekhez képest, hogy egy SQL parancson belül definiálható a teljes lekérdezés. Az egyszerre több értéket eredményül adó beágyazott lekérdezésekhez használható operátorok listáját a 7.1. táblázat tartalmazza. 7.1. táblázat Beágyazott lekérdezéssel használható operátorok Operátor ANY vagy SOME ALL [NOT] IN [NOT] EXISTS Leírás Sor- vagy csoportfeltételben. A lekérdezés eredménye azon rekordok, melyek a beágyazott lekérdezés eredménylistájának bármely értékével összehasonlítva eleget tesz az összehasonlító feltételnek. Sor- vagy csoportfeltételben. A lekérdezés eredménye azon rekordok, melyek a beágyazott lekérdezés eredménylistájának összes értékével összehasonlítva eleget tesz az összehasonlító feltételnek. Sor- vagy csoportfeltételben. A lekérdezés eredménye azon rekordok, melyek a beágyazott lekérdezés eredménylistájának bármely értékével azonosságot mutat. A beágyazott lekérdezés eredmény igaz, ha a beágyazott lekérdezés eredménylistája nem üres, különben hamis. 34

Példák: 1. Kinek a legnagyobb a fizetése? SELECT ename FROM EMP WHERE sal=(select max(sal) FROM EMP); 2. Kiknek nagyobb a fizetése, mint a legalacsonyabb fizetésű SALESMAN? SELECT ename FROM EMP WHERE sal> ANY(SELECT sal FROM EMP WHERE job= SALESMAN ); 7.4. Kereszttáblás lekérdezések Az eddig bemutatott lekérdezések egymás alatti sorokban listázták ki az eredményeket. Az Access-ben lehetőség van az eredményeket mátrix formában is megjeleníteni, amikor a mátrix sorainak és oszlopainak száma a forrástábla értékkészletétől függ. Ezeket hívjuk kereszttáblás lekérdezéseknek. Kereszttáblás lekérdezéseket akkor lehet készíteni, ha két (egymástól független) csoportképző szempont (oszlop) szerint jelenítjük meg az eredményeket. Ebből következik, hogy a mátrix elemei csak valamely csoportképző függvény eredményei lehetnek. A kereszttáblás lekérdezés előnye, hogy az összesített adatok könnyebben értelmezhető formában jelennek meg. A különbséget a 7.2. és 7.3. táblázat mutatja be. 7.2. táblázat Hagyományos lekérdezés kettős csoportképzéssel GROUP BY job, deptno job deptno Count ANALYST 20 2 CLERK 10 1 CLERK 20 2 CLERK 30 1 MANAGER 10 1 MANAGER 20 1 MANAGER 30 1 PRESIDENT 10 1 SALESMAN 30 4 7.3. táblázat Kereszttáblás lekérdezés ANALYST CLERK MANAGER PRESIDENT SALESMAN 10 1 1 1 20 2 2 1 30 1 1 4 35

A kereszttáblás lekérdezés SQL parancsának szerkezete: Ahol a: TRANSFORM csoportfüggvény SELECT sorfejléc, [csoportfüggvény] FROM tábla1 [WHERE sorfelétel] GROUP BY sorfejléc PIVOT oszlopfejléc [csoportképzés feltétele/módja]; TRANSFORM parancsszó után lehet megadni azt a csoportfüggvényt, aminek az eredménye a mátrix celláiban fog megjelenni, SELECT parancsszó után szerepel a sorfejlécben szereplő csoportképzési szempont, ezután a csoportfüggvény ismételt megadásával van lehetőség a sorösszegeket tartalmazó oszlopot hozzáadni az eredmény mátrixhoz, FROM parancsszó után a select-lista elemeinek forrását szükséges megadni, WHERE parancsszó után megjelenítendő eredményhalmazra vonatkozó sorfeltételt lehet megadni, GROUP BY parancsszó után a sorfejlécben szereplő csoportképzési szempont szerepel, PIVOT parancsszó után az oszlopfejlécben szereplő csoportképzési szempont szerepel, ami után opcionálisan az oszlopfejlécre vonatkozó csoportképzési feltételt vagy módot lehet megadni. Példa: jelenítse meg kereszttáblás lekérdezésben az ugyanazon főnökkel rendelkező és ugyanazon beosztású alkalmazottak számát, azon beosztottak esetén, akiknek a beosztása ANALYST, CLERK, MANAGER vagy SALESMAN. TRANSFORM Count(empno) SELECT mgr, Count(empno) FROM EMP GROUP BY mgr PIVOT job IN( ANALYST, CLERK, MANAGER, SALESMAN ); Az eredményt a 7.4. táblázat mutatja be. Megjegyzés: megjelent egy új oszlop, ami a sorösszegeket tartalmazza (Expr1003), ami a select listában szereplő Count(empno) kifejezés eredménye. 7.4. táblázat Kereszttáblás lekérdezés a minta adatbázisban mgr Expr1003 ANALYST CLERK MANAGER SALESMAN 7566 2 2 7698 5 1 4 7782 1 1 7788 1 1 7839 3 3 7902 1 1 36

8. DDL parancsok Adat definíciós parancsok, ide tartoznak az adatbázis struktúra (táblák, érvényességi szabályok, stb.) létrehozásával és karbantartásával kapcsolatos utasítások. 8.1. CREATE parancs A CREATE parancs alkalmazásával lehet létrehozni adatbázis objektumokat (pl. tábla, eljárások). Tábla létrehozása: A CREATE parancs általános szerkezete tábla definiálásakor: CREATE TABLE tábla1 ( oszlop1 adattípus [constraint lista DEFAULT érték], oszlop2 adattípus [constraint lista DEFAULT érték], oszlopn adattípus [constraint lista DEFAULT érték], [constraint lista] ); Az adattípusokat a 8.1. táblázat tartalmazza. 8.1. táblázat Access SQL-ben használható adattípusok Adattípus Leírás autoincrement számláló, 1-től kezd identity(x,y) számláló: első értéke x, y-al nő byte egész, 0-255 single lebegőpontos szám, maximum 7 számjegy number lebegőpontos szám, maximum 15 számjegy integer hosszú egész, -2 147 483 648-tól +2 147 483 647-ig currency pénznem char(n) rövid szöveg, n: maximum karakterszám text hosszú szöveg datetime dátum yesno igen/nem longbinary OLE objektum, pl.: excel fájl csatolható egy rekordhoz 8.2. Érvényességi szabályok (CONSTRAINT-ek) Tábla definiálásakor lehetőség van constraint-ek, azaz érvényességi szabályok megadására. Az érvényességi szabályok minden egyes adatbevitelnél/módosításnál ellenőrzésre kerülnek. Azok az adatelemek írhatók be, amelyek teljesítik a szabályt (feltételt). Ha az érvényességi szabálynak nevet adunk, akkor az adatbevitelkor név szerint megadja a feltételi hibát. Az érvényességi szabályoknak két alapvető típusa létezik: mezőérvényességi szabály: a feltételben az adott oszlop neve szerepel. rekord- vagy táblaérvényességi szabály: a feltételben ugyanazon táblából több oszlop szerepel. A gyakran használt érvényességi szabályokat a 8.2. táblázat tartalmazza. 37

Érvényességi szabály Not null Unique Primary key References Check 8.2. táblázat Gyakran használt érvényességi szabályok Access SQL-ben Leírás Nem lehet üresen hagyni (kötelező kitölteni) Nem lehet két egyforma érték (egyedi érték) Elsődleges kulcs (=not null+unique) Idegen kulcs Tetszőleges (felhasználó által definiált) feltétel Példa: Create table szerviz1 ( SzAz autoincrement primary key, Rendszam char(7) not null, Tipus char(25), KmAllas number, GyartasDatum Datetime, Datum Datetime not null, Casco yesno, FelvevoAz integer references dolgozok(dolgaz), constraint [Km allas nem lehet 0 vagy negatív] check(kmallas>0), constraint GyartasDatum check (GyartasDatum<Datum) ); Megjegyzés: a references érvényességi szabállyal együtt jár az adattípusra vonatkozó megkötés. Az idegenkulcs adattípusának a tábla definiáláskor (a kapcsolat létrehozásakor) meg kell egyeznie az elsődleges kulcs adattípusával. Az érvényesítési szöveg a felhasználó által definiált, adott érvényességi szabályhoz tartozó hibaüzenet, amely akkor jelenik meg, ha a beírandó érték nem teljesíti a szabályban megfogalmazott feltételt. 8.3. Alapértelmezett érték Tábla definiálásakor lehetőség van az adott oszlophoz alapértelmezett érték beállítására. Az alapértelmezett érték egy új rekord felvételékor automatikusan megjelenik a mezőben, azonban a módosítására is van lehetőség. Akkor használjuk, ha az egyedek túlnyomó többsége az adott tulajdonság tekintetében azonos jellemzővel bír. Alapértelmezett értéket a tábla definiálásakor, az oszlopra vonatkozó érvényességi szabály után, a DEFAULT parancsszót követően lehet megadni, ügyelve az adattípus által megkívánt szintaktikai szabályokra. Alapértelmezett érték nem csak konstans, hanem függvény által visszaadott érték is lehet. Példák: oszlop1 number default 5, oszlop2 char(25) default BME, oszlop3 datetime default now(), Az első esetben az alapértelmezett szám az 5, második esetben az alapértelmezett szöveg a BME, végül a harmadik esetben az alapértelmezett érték az éppen aktuális időpont. 38

8.4. ALTER parancs Az ALTER parancs már meglévő adatbázis objektumok szerkezetének módosítására alkalmas. A szerkezet módosítása különösen veszélyes lehet az adatokkal feltöltött táblák esetében, ezért körültekintően járjunk el. Az ALTER parancs segítségével egy táblának az alábbi tulajdonságai módosíthatóak: Új oszlop felvitele: ALTER TABLE tábla1 ADD oszlopn típus [constraint DEFAULT érték]; Példa: Alter table szerviz1 ADD gyartmany char(25) not null; Meglévő oszlop módosítása: ALTER TABLE tábla1 ALTER COLUMN oszlopn típus [constraint DEFAULT érték]; Példa: Alter table szerviz1 ALTER COLUMN gyartmany char(25) unique; Oszlop törlése: ALTER TABLE tábla1 DROP COLUMN oszlopn; Példa: Alter table szerviz1 DROP COLUMN Casco; Érvényességi szabály hozzáadása: ALTER TABLE tábla1 ADD CONSTRAINT constraint1 CHECK (logikai feltétel); Példa: Alter table szerviz1 ADD CONSTRAINT [Km allas nem lehet 0 vagy negatív] CHECK (KmAllas>0); Érvényességi szabály törlése: ALTER TABLE tábla1 DROP CONSTRAINT constraint1; Példa: Alter table szerviz1 DROP CONSTRAINT [Km allas nem lehet 0 vagy negatív]; 8.5. DROP parancs A DROP parancs meglévő adatbázis objektumok TELJES törlésére alkalmas (a tábla szerkezete és tartalma is törlésre kerül). Alkalmazásával egy táblának az elemei külön-külön is törölhetőek, amit a 8.4. fejezetben az ALTER parancsnál bemutattunk (oszlop és érvényességi szabály törlése). Teljes tábla törlése parancs szerkezete: DROP TABLE tábla1; Példa: DROP TABLE szerviz1; Megjegyzés: érvényes CHECK megkötéssel rendelkező táblát általában nem enged törölni az Access. 39

9. DML parancsok Az adatbázisban tárolt és tárolandó adatok kezelésére alkalmas parancsok tartoznak ide. Ebben a fejezetben a táblák adatokkal való feltöltésére, illetve az adatok módosítására alkalmas SQL parancsokat mutatjuk be. Az adatok kilistázására alkalmas SELECT parancsot a korábbi fejezetekben már részletesen megismertük; így ebben a fejezetben csak speciális típusokat mutatunk be. 9.1. INSERT INTO parancs Az INSERT INTO parancs a táblák adatokkal való feltöltésére alkalmas. Az adatok bevitelének módjai: Új rekord felvétele: az új rekord értékeit a kezelő adja meg. A parancs általános szerkezete: INSERT INTO tábla1 [(oszlop lista)] VALUES (érték1, érték2, értékn); Ha a tábla minden oszlopához megadunk értéket, akkor az oszlop lista elhagyható. Egyébként az oszloplistában van lehetőség megadni, hogy mely mezőket (és milyen sorrendben) kívánjuk feltölteni adatokkal. Példa: INSERT INTO EMP (empno, ename, job, hiredate, sal) VALUES (1001, FOG, ANALYST, 1989.03.21., 1500); Megjegyzés: alapértelmezett értékkel rendelkező mezőt az Access abban az esetben is kitölti, ha az adatbevitelnél nincs megadva. Rekord(ok) másolása egy másik táblából vagy lekérdezésből: ha az új rekord(ok) értékeit egy másik tábla tárolja, vagy egy lekérdezés eredmény listájában szerepelnek. Ha a forrás és a cél tábla(lekérdezés) szerkezete teljesen megegyezik, és egy rekord valamennyi adatát átmásoljuk, akkor az oszlop lista elhagyható és a select-lista *-ot tartalmaz. Ettől eltérő esetekben az oszlop lista és a select-lista tartalmát egyeztetni szükséges, annak érdekében, hogy a kiolvasott adatelemek a megfelelő mezőkbe kerüljenek. A parancs általános szerkezete: INSERT INTO tábla1 [(oszlop lista)] SELECT select-lista FROM tábla2 vagy lekérdezés1 [WHERE sorfeltétel]; 40

Példa: INSERT INTO DOLG SELECT * FROM EMP WHERE empno=7899; Megjegyzés: számított értékeket nem érdemes táblában tárolni a redundancia miatt. Kivéve, ha azt további lekérdezések felhasználják és így a számítási idő csökkenthető. 9.2. UPDATE parancs Meglévő rekordok adatainak módosítására alkalmas parancs. A parancs általános szerkezete: UPDATE tábla1 SET oszlop1=kifejezés1, oszlop2=kifejezés2, [WHERE sorfeltétel]; Abban az esetben, ha nem adunk meg WHERE feltételt, a tábla összes rekordjában módosulnak az adatok. Példa: növelje a 7902 azonosítószámú alkalmazott fizetését 500-al! UPDATE EMP SET [sal] = [sal]+500 WHERE empno=7902; Megjegyzés: egy rekord adateleme törölhető UPDATE paranccsal, ha az új értéknek a NULL értéket állítjuk be. 9.3. DELETE FROM parancs (rekord, táblatartalom) törlése A táblákban tárolt rekordok törlésére alkalmas parancs. A parancs általános szerkezete: DELETE FROM tábla1 [WHERE sorfeltétel]; Ha a parancsban nincs megadva sorfeltétel, a tábla teljes tartalma törlésre kerül. 41

9.4. Rekordok uniója Összekapcsoló lekérdezéssel két teljesen azonos szerkezetű táblából származó rekordokat lehet összefűzni egy eredményhalmazba. A parancs két SELECT lekérdezést kapcsol össze az UNION parancsszóval. Az eredményhalmazba mindkét lekérdezés által kiválogatott rekordok kerülnek (ismétlődés nélkül). A parancs általános alakja: Példa: SELECT parancs 1 UNION SELECT parancs2; SELECT * FROM EMP UNION SELECT * FROM DOLG; 9.5. Táblakészítő lekérdezés Táblakészítő lekérdezéssel egy lekérdezés eredménylistája táblában menthető el. A táblát (ha már korábban létrehoztunk egyet ugyanazon névvel) minden egyes lekérdezés előtt törli, majd újra létrehozza és feltölti adatokkal. A DML parancsok közé soroljuk, mivel a SELECT parancsszót használja. A parancs általános alakja csak a különbséget kiemelve: SELECT select-lista INTO új_tábla FROM tábla1, lekérdezés1; Megjegyzés: számított értékeket nem érdemes táblában tárolni a redundancia miatt. Kivéve, ha azt további lekérdezések felhasználják és így a számítási idő csökkenthető. 42

10. Gyakorló feladatsorok Ebben a fejezetben a gyakorlati zh-kra való felkészülést segítő minta feladatok találhatók. 10.1. 1. gyakorlati ZH-ra felkészítő feladatok Minta adatbázisra épülő lekérdezések: 1. Milyen munkakörök vannak a cégnél? Egy munkakört egyszer jelenítsen meg. 2. Rendezze az alkalmazottakat a főnökük azonosítója szerinte csökkenő sorrendbe! 3. Jelenítse meg a telephelyek adatait magyar fejléccel. 4. Jelenítse meg az alkalmazott nevét, beosztását és a telephelyi azonosítót. A telephelyi azonosító előtt egy új oszlopban szerepeljen a Telephely: kifejezés. 5. Mekkora az éves jövedelme az alkalmazottaknak? 6. Jelenítse meg azon alkalmazottak nevét abc sorrendben, akiknek nincs jutaléka. 7. Jelenítse meg azon alkalmazottak nevét és beosztását, akik nem a 20-as azonosítószámú telephelyen dolgoznak. 8. Jelenítse meg azon alkalmazottak listáját, akik nevében az A betű a második. 9. Kiknek végződik a munkahelyi azonosítója 9-essel? 10. Kiknek nem a 7788 és 7839 munkahelyi azonosítóval rendelkező alkalmazott a főnöke? 11. Kiknek van a jutaléka 200 és 600 között? 12. Kik léptek be a céghez 1981 decemberében? 13. Jelenítse meg azokat az alkalmazottakat, akiknek a neve nem M-mel vagy A-val kezdődik. Fogalmi modellek: készítse el az adatbázis táblaszerkezetét, figyelembe véve a feladat többi részét is! Vegyen fel rekordokat úgy, hogy a működés jól követhető legyen. 1. Egy elektromos jármű töltőállomáson a töltőpontok és azok havi ellenőrzését tartjuk nyilván. 4 töltőpont van: 1-1 normál és gyorstöltő, valamint 2 villámtöltő. A töltőpontok csatlakozó típusát és a töltési teljesítményt tartjuk nyilván. A havi ellenőrzéskor rögzítésre kerül a töltőpont villanyórájának az állása, valamint, hogy észlelt-e hibát az ellenőr. Rendezze a töltőpontokat a töltési teljesítmény szerinti növekvő sorrendbe. Jelenítse meg a gyorstöltő havi ellenőrzéseit az ellenőrzés ideje szerinti csökkenő sorrendben. 2. Egy légitársaságnak a repülőgépeit és azok bázis reptereit tartjuk nyilván. 5 repülőgép van, melyek közül 3 Boeingnek Budapest a bázis állomása, 2 Airbusnak pedig Róma. Nyilvántartjuk a repülőgépek típusát, gyártási évét, flottába állás időpontját és a férőhelyek számát. Jelenítse meg a Budapesten állomásozó gépek listáját a flottába állás dátuma szerinti csökkenő sorrendben. Mennyi idősek lesznek a repülőgépek 2020 május 17.-én? 43

10.2. 2. gyakorlati ZH-ra felkészítő feladatok 1. Hány nap telt el az 1956-os forradalom kitörése óta? 2. Adja meg 7 értékét 3 tizedesjegy pontossággal! 3. Mekkora az A(-4; 12) és B(7;2) pont távolsága? Minta adatbázisra épülő lekérdezések: 4. Milyen napon lépett be Ford? 5. Ki dolgozik a legrégebb óta a vállalatnál? 6. Mennyi az átlagfizetés a SALESMAN és CLERK beosztásokban? 7. Hány %-kal kell növelni az alkalmazottak fizetését, hogy az átlagfizetés elérje a 2500-at? 8. Kik keresnek többet, mint Blake, és mennyivel? 9. Kinek a jutaléka a legmagasabb és a jövedelmének hány %-a a jutalék? 10. Kik dolgoznak New York-ban? 11. Hányan dolgoznak az egyes városokban? 12. Kereszttáblás lekérdezéssel jelenítse meg, hogy hányan dolgoznak az egyes telephelyeken a különböző beosztásokban. 13. Mennyivel nagyobb a fizetése a legnagyobb fizetésű alkalmazottnak, mint JONES-nak? Fogalmi modellek: készítse el az adatbázis táblaszerkezetét SQL DDL parancsok használatával, figyelembe véve a feladat többi részét is! Vegyen fel rekordokat DML parancsok segítségével úgy, hogy a működés jól követhető legyen. 1. Egy elektromos jármű töltőállomáson a töltőpontok és azok havi ellenőrzését tartjuk nyilván. 4 töltőpont van: 1-1 normál és gyorstöltő, valamint 2 villámtöltő. A töltőpontok csatlakozó típusát és a töltési teljesítményt tartjuk nyilván. A havi ellenőrzéskor rögzítésre kerül a töltőpont villanyórájának az állása, valamint, hogy észlelt-e hibát az ellenőr. Törölje a lassú töltőt és vegyen fel még egy gyorstöltőt az adatbázisba. Mekkora az összes töltési teljesítmény a töltőállomáson? 2. Egy légitársaságnak a repülőgépeit és azok bázis reptereit tartjuk nyilván. 5 repülőgép van, melyek közül 3 Boeingnek Budapest a bázis állomása, 2 Airbusnak pedig Róma. Nyilvántartjuk a repülőgépek típusát, gyártási évét, flottába állás időpontját és a férőhelyek számát. Módosítsa az egyik Boeing repülőgép bázis állomását Rómára. Mekkora a repülőgépek átlagéletkora az egyes bázis állomásokon? 44

IRODALOMJEGYZÉK [1] Csiszár, Cs. Sándor, Zs.: Közlekedési informatika (jegyzet) 2014. [2] Csiszár, Cs. Westsik, Gy.: A közlekedési informatika kutatása és oktatása a BME Közlekedésüzemi és Közlekedésgazdasági Tanszékén. Közlekedéstudományi Szemle LXIV. évf. 2. szám 44-52.o. Budapest, 2014. [3] Munkácsiné Lengyel, E. Tóth, J. Csiszár, Cs. Juhász, J.: Közlekedési informatika (jegyzet) 2004. Adatbázis témájú irodalmak gyűjteménye Szelezsán János: Adatbázisok (példatár is) Bálint Dezső: Adatbázis-kezelés (Talentum kiadó) Jeffrey D. Ullmann Jennifer Widom: Adatbázis-rendszerek Kende Mária - Kotsis Domokos - Nagy István: Adatbázis-kezelés az ORACLE rendszerben Michael Abbey - Michael J. Corey - Ian Abramson: Oracle 8i kezdőknek Bodnár Ibolya - Nagy Zoltán: Adatbázis-kezelés Stolniczki Gyula: SQL kézikönyv 45

MELLÉKLETEK 1. melléklet Adatmodell készítés feladat Készítsen az egyedtípusok megválasztásával 3NF-ra hozott logikai adatmodellt! Adja meg az egyes tulajdonságok tárolásához szükséges adattípusokat és hosszokat is! Téma: Automata parkolóház nyilvántartása Tárolt tulajdonságok: BE_IDOPONT RENDSZAM HELY_AZ KI_IDOPONT MARKA ORADIJ PARKOLAS_AZ MEGFIGYELT_E PARKOLÁS_JELLEMZŐI (jármű behajtásának időpontja) (parkolóhely azonosítója) (jármű kihajtásának időpontja) (jármű márkája) (parkolási óradíj, a behajtás időpontjától függ) (parkolás azonosítója) (van-e kamerás megfigyelés?) (szabálytalan parkolás leírása) SZEGMENS (melyik szegmensben található az adott szinten?) SZIN SZINT TIPUS (melyik szinten található?) 46

2. melléklet Adatmodell készítés feladat Készítsen az egyedtípusok megválasztásával 3NF-ra hozott logikai adatmodellt! Adja meg az egyes tulajdonságok tárolásához szükséges adattípusokat és hosszokat is! Téma: Fuvarozó vállalat lebonyolított fuvarfeladatainak nyilvántartása Tárolt tulajdonságok: ALVAZSZAM JMU_VEZ_NEVE IND_IDOPONT TAVOLSAG RENDSZAM SZEM_SERULES BALESETI_JK_SZ SZUL_DATUM UT_SZERV_DATUM BALESET_IDOPONT ARU_TOMEG FUTOTT_KM ERK_IDOPONT BALESET_KORULM FUV_LEV_SZAM SOFOR_VETKES JMU_TIPUS JMU_VEZ_JELLEMZOI ARU_ERTEK JOG_SZAM UTICEL UZ_HELY_DATUM ANY_KAR_ERTEKE (járművezető neve) (indulás időpontja) (személyi sérülés) (baleseti jegyzőkönyv száma) (utolsó szervízelés dátuma) (baleset időpontja) (szállítot áru tömege) (indulásig futott km) (érkezés időpontja) (baleset körülményei) (fuvarlevél száma) (a sofőr vétkes-e?) (járművezető jellemzői) (szállított áru értéke) (jogosítvány szám) (város neve) (üzembe helyezés dátuma) (anyagi kár értéke) 47