1 bájt -128 217 0 255 (előjel nélkül) SMALLINT. 2 bájt -32 768 32 767 0 65 535 (előjel nélkül) MEDIUMINT



Hasonló dokumentumok
Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Adatbázis, adatbázis-kezelő

Adatbázisok I. Az SQL nyelv

Adatbázis használat I. 2. gyakorlat

Tájékoztató. Használható segédeszköz: -

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

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

Adatbázisok* tulajdonságai

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Adatbázis Rendszerek II. 3. SQL alapok

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

ALAPOK. 0 és 255 közé eső számértékek tárolására. Számértékek, például távolságok, pontszámok, darabszámok.

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Adatbázisok I A relációs algebra

Access alapok. Megnevezés Művelet Minta. Új adatbázis létrehozása. Új / Üres adatbázis.. Tábla létrehozása tervező nézetben.

MySQL. Elektronikus jegyzet Széchenyi István Egyetem Távközlési tanszék

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

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

Tájékoztató. Használható segédeszköz: -

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

Adatbázis kezelés Delphiben. SQL lekérdezések

Lekérdezések I. Egyszerű választó lekérdezések

Tájékoztató. Használható segédeszköz: -

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

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Adatbázis használat I. 2. gyakorlat

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

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Készítette: Szabóné Nacsa Rozália

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Adatbáziskezelés. SQL parancsok. Függvények

INFORMATIKAI ALAPISMERETEK

PHP-MySQL. Adatbázisok gyakorlat

Lekérdezések az SQL-ben 1.rész

Access gyakorlati feladatok lépésről lépésre

Az SQL nyelv. SQL (Structured Query Language = Strukturált Lekérdező Nyelv).

KENDE MÁRIA NAGY ISTVÁN: Oracle Példatár(SQL-PL/SQL) Házi feladatok a 3.gyakorlathoz: 1. fejezet: Egyszerű lekérdezések

Adatok szűrése, rendezése

Lekérdezések az SQL-ben 1.rész

Az SQL*Plus használata

A legfontosabb DOS parancsok

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Java és web programozás

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

7. Gyakorlat A relációs adatmodell műveleti része

Lekérdezések az SQL SELECT utasítással

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP /1/A

Adatbáziskezelés alapjai. jegyzet

Adatbázis-kezelés az Excel 2013-ban

Fogalmak: Adatbázis Tábla Adatbázis sorai: Adatbázis oszlopai azonosító mező, egyedi kulcs Lekérdezések Jelentés Adattípusok: Szöveg Feljegyzés Szám

Választó lekérdezés létrehozása

Tájékoztató. Használható segédeszköz: -

Adatbázisok II. rész

Java és web programozás

Informatikai alapismeretek Földtudományi BSC számára

SQL parancsok feldolgozása

Elemi alkalmazások fejlesztése IV.

ABR ( Adatbázisrendszerek) 2. Előadás : Műveletek a relációs modellben

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

N Y I L A T K O Z A T

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

EDInet Connector telepítési segédlet

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Informatikus informatikus Térinformatikus Informatikus É 1/6

A SELECT működése. Ttanar tábla: Tdiak tábla:

Tudás Reflektor. Copyright 2011; Kodácsy Tamás;

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: március 20.

Alkalmazói rendszerek ACCESS ZH - javítókulcs Informatika tanár MSC, levelező tagozat, január 06.

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

Ezek után már csak a Mentés és a Lekérdezés Futtatása (az ellenőrzés miatt) van hátra. Ügyeljünk, hogy a mentésnél a megadott (Kezd) nevet adjuk meg.

Tankönyv példák kidolgozása

LBRA6i integrált rendszer

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

w w w. h a n s a g i i s k. h u 1

EGYSZERŰ SZÁMÍTÁSOK TÁBLÁZATKEZELÉS ELINDULÁS SZE INFORMATIKAI KÉPZÉS 1

Adatbázis rendszerek 7. Matematikai rendszer amely foglal magában:

Területi elemzések. Budapest, április

5.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

Adatbázis Rendszerek II. 8. Gyakorló környezet

Bódy Bence Az SQL egy újabb példán keresztül

Csoportosított adatok megjelenítése összesítı függvények használatával. Copyright 2004, Oracle. All rights reserved.

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

ADATBÁZISKEZELÉS ADATBÁZIS

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

A sorozat. A feladatlapon szereplő kérdések megválaszolásával és feladatok megoldásával maximum 100 pont érhető el.

Adatbázis-kezelés, információs-rendszerek

Táblázatos adatok használata

Lekérdezések az SQL SELECT utasítással

Az adatbáziskezelés alapjai

Átírás:

A feladat célja Távoli adatbázis használata SQL nyelv Hogy gyakorolja távoli számítógép elérését; relációs adatbázis szerkezetének elemzését; relációs adatbázis tartalmának elérését szabványos lekérdező nyelv segítségével. Relációs algebra, relációs adatmodell A relációs adatbázis-kezelő nyelvek a relációs adatbázisokat kezelik, dolgozzák fel. A relációs adatbázis-kezelő nyelvek mind ugyanazon közös matematikai alapra, a relációs algebrára épülnek. A relációs algebra a reláción végezhető műveleteket definiálja, és ezt magát a relációs algebrát használja fel minden relációs adatbázis-kezelő nyelv. A relációs algebra születését 1970-re datálják, ekkor jelent meg TED CODD mára már híres cikke, mely azt javasolja dióhéjban, hogy az akkori bonyolult struktúrák helyett az adatokat tábla-szerűen kellene megjeleníteni, és minden tábla önálló relációként szerepelne az adatbázisban. Ez akkor merőben új elgondolás, ugyanis addig ismerni kellett a programozónak az adatok tárolási struktúráját is. Itt csak a relációs algebrára épülő relációs adatbázis-kezelő nyelvet kell ismerni, és nincs szükség az adatbázis-kezelő rendszer háttérfolyamatainak ismeretére. Az adatbázis-kezelő rendszer természetesen abszolút sajátos módon tárolhatja el a relációkat a későbbi gyors műveletvégzés elérése végett. A relációs algebra megalkotása persze még csak az alapját jelentette a relációs adatbázis-kezelő nyelveknek. Az első relációs adatmodellen alapuló nyelvet úgyszintén CODD definiálta, és az ALPHA nevet adták neki. Ezután számos nyelv alakult ki és tűnt el, míg eljutottak az első számunkra fontos szabványosított nyelvhez az SQL-hez. Az SQL születése, verziói 1. ábra: TED CODD Az adatbázis-kezelő rendszerek szabványosított nyelvévvé az SQL vált. 1986-ban jelent meg az első szabványosítás: ANSI SQL 86 (ANSI X3.1986) néven. Később, 1987- ben az ISO is szabványosította. A szabványosítás természetesen nem jelentette, hogy minden gyártó be is tartaná a szabványt, így számos módosítás fejlesztés történt a későbbiekben. A következő szabványosítási folyamat 1989-ben zárult le, ezt nevezték el ANSI SQL 89-nek (ANSI X3-1989), amit úgyszintén az ISO is elfogadott és ISO89 néven (ISO9075:1989). Az SQL nyelv mai általános formáját 1992-ben nyerte és az ISO szabványosította SQL92, vagy SQL2 néven (ISO:9075:1992). Természetesen még ma is fellelhetők minimális különbséges más gyártók által szállított adatbázis-kezelő rendszerek SQL értelmezőiben. A különbségek minimálisak, így nem érdemes foglalkozni velük, ez mondhatnánk gyártó specifikus. A feladat megoldása során használt egy több-felhasználós, többszálú, SQL-alapú relációs adatbázis-kezelő szerver. A szoftver eredeti fejlesztője a svéd MySQL AB cég, amely kettős licenceléssel tette elérhetővé a MySQL-t; választható módon vagy a GPL, vagy egy kereskedelmi licenc érvényes a felhasz- CODD, EDGAR FRANK: A Relational Model of Data for Large Shared Data Banks. Communications of the ACM. Volume 13. Number 16. June, 1970. 377-387 pp. SQL = Structured Query Language = Strukturált Lekérdező Nyelv ANSI = American National Standard Institute = Amerikai Nemzeti Szabvány Intézet ANSI = American National Standard Institute = Amerikai Nemzeti Szabvány Intézet GPL = GNU General Public License = GNU Általános Nyilvános Licenc: egy általános célú nyílt forráskódú licenc.

nálásra. 2008 januárjában a Sun felvásárolta 800 millió dollárért a céget. 2010. január 27-én a Sun-t felvásárolta az Oracle Corporation, így a MySQL is Oracle tulajdonba került. A MySQL az egyik legelterjedtebb adatbázis-kezelő, aminek egyik oka lehet, hogy a teljesen nyílt forráskódú LAMP (Linux Apache MySQL PHP) összeállítás részeként költséghatékony és egyszerűen beállítható megoldást ad dinamikus webhelyek szolgáltatására. Adattípusok a MySQL-ben Típus Tulajdonságok Tárigény TINYINT INT nagyon kis egész 1 bájt -128 217 0 255 (előjel nélkül) SMALLINT kis egész 2 bájt -32 768 32 767 0 65 535 (előjel nélkül) MEDIUMINT közepes méretű egész 3 bájt -8 388 608 8 388 607 0 16 777 215 (előjel nélkül) INT normál méretű egész 4 bájt INTEGER -2 147 483 648 2 147 483 647 0 4 294 967 295 (előjel nélkül) BIGINT Nagyon nagy méretű egész 8 bájt -128 217 0 255 (előjel nélkül) FLOAT(hossz,tizedes) előjeles valós szám 4 bájt alapértelmezett a 10,2 hossz pontosság: 24 tizedes DOUBLE( LE(hossz,tizedes) előjeles valós szám 8 bájt alapértelmezett a 16,4 hossz REAL(hossz,tizedes) pontosság: 53 tizedes DECIMAL(hossz,tizedes) előjeles valós szám pontosság + 2 bájt nincs alapértelmezett hossza NUMERIC(hossz,tizedes) pontossága a felhasználótól függ DATE dátum ÉÉÉÉ-HH-NN formátumban 3 bájt 1001-01-01 9999-12-31 DATETIME Dátum és idő ÉÉÉÉ-HH-NN ÓÓ:PP:MM formátumban 8 bájt 1001-01-01 00:00:00 9999-12-31 23:59:59 TIMESTAMP időbélyegző ÉÉÉÉHHNNÓÓPPMM formátumban 4 bájt 19700101000000 20371231235959 TIME idő ÓÓ:PP:MM formátumban 3 bájt CHAR[(hossz)] karakterlánc maximálisan 255 hosszban hossz bájt hosszt nem kötelező megadni, ekkor az értéke: 1 VARCHAR(hossz) karakterlánc maximálisan 255 hosszban hossz + 1 bájt TEXT karakterlánc maximálisan 65 535 hosszban hossza + 1 bájt nincs különbség a kis- és nagybetűk között BLOB karakterlánc maximálisan 65 535 hosszban hossza + 1 bájt különbség van a kis- és nagybetűk között ENUM felsorolás, lista előre meghatározott halmaz elemeit vehet föl 2 bájt SQL nyelvi parancsok Az SQL nyelvben minden parancs egy kulcsszóval kezdődik és pontosvesszővel (;) fejeződik be. Parancsnak parancs is lehet része. A parancsok lehetnek összetettek, az-az több részből, alparancsból is állhatnak. A kulcsszavakon kívül a parancs még operandusokat (argumentumokat) is tartalmaz, ezeken végez a parancs műveleteket. A parancsokat a könnyebb értelmezés végett több sorban, tördelve írjuk le. Természetesen nem szükséges hasonlóan tördelve használni programozás esetén. 2

Lekérdezés az adatbázisból Az adatbázis-kezelés majd legfontosabb művelete az adatbázisból történő lekérdezés. Persze a többi művelet sem haszontalan, de valójában csak a lekérdezéshez, az adat visszanyeréshez segédkeznek. A SELECT parancs feladatának megfelelően talán a legbonyolultabb parancs, számos részből áll. Szintakszis: SELECT [{DISTINCT DISTINCT ALL ALL}] {oszlopnév, *} [FROM tábla lista, [WHERE feltétel] [GROUP BY oszlopnév, [HAVING feltétel]] [ORDER BY {oszlopnév oszlop-sorszám}, [{ASC DESC DESC}] ] [LIMIT [kezdet,] sorok]; Bontsuk részekre a SELECT parancsot, hogy áttekinthessük az alparancsokat! Némely SQL változatban a FROM tábla-referencia használata nélkül, magában is használhatjuk. SELECT kifejezés; SELECT 1+1; => 2 A FROM után felsorolt táblákból a megadott oszlopokat, vagy * esetén az összeset kilistázza, illetve más körülmények között: feldolgozásra átadja. Fontos megjegyezni, hogy az oszlopnév listánál nem csak az oszlopnevet, hanem oszlopokból képzett kifejezéseket, illetve aggregáló függvényeket is megadhatunk, ezeket közösen származtatott oszlopoknak nevezzük. SELECT [{DISTINCT DISTINCT ALL ALL}] {oszlopnév, *} [FROM tábla lista, ; Példák: A vezeték és keresztnév egy oszlopban listázódik ki: SELECT eladoid, vnev + knev, fizetes FROM elado; A fizetés mezo nettó értékét tekintsük (kb. szorozzuk be 0.55): SELECT eladoid, vnev, knev, 0.55*fizetes FROM elado; Számítsuk ki jelenleg hány eladó dolgozik a cégnél (aggregáló függvény): SELECT COUNT(*) FROM elado; Jelenítsük meg a cégnél dolgozó eladók összes fizetését: SELECT SUM(fizetes) FROM elado; Jelenítsük meg az eladó fizetését, az eladók átlag fizetését: SELECT vnev, knev, fizetes, AVG(fizetes) FROM elado; Használható továbbá a MIN(), és a MAX()függvények. Az aggregált függvényeknél a NULL értékek nem kerülnek beszámításra. Ha a relációban több azonos sor is van, akkor a DISTINCT funkcióval az azonosakat kiszűrhetjük: SELECT DISTINCT vnev FROM elado; Ennek hatására az elado táblából az összes név kilistázódik, csupán a többször szereplők közül az első fog szerepelni, avagy csak az összes különböző név listázódik ki. Itt fontos, hogy csak a teljesen megegyező sorok szűrődnek ki, nyilván nem elég adott mezőnek megegyeznie. Az ALL funkció pedig a DISTINCT ellentéte, avagy az alapeset, amikor minden sor kilistázódik a lekérdezés során. WHERE alparancs, sorok kiválasztása A WHERE alparancsnál feltételként egy logikai kifejezést kell megadnunk, azon sor(ok) mely(ekre) igaz az értéke, a rendszer kiválasztja őket, szintakszis: A szintaktika pontos értelmezéséhez a következő jelzéseket kell ismerni: az OCR karakterekkel leírt karakterek változatlanul leírandók; a [ ] jelek közé tett részek nem kötelezően alkalmazandó részei a parancsnak, csak használhatóak, ha szükség van rájuk, a parancs enélkül a rész nélkül is helyes lesz; a { } jelek közé tett halmaz elemei közül egyet kötelező választani a halmaz elemeit a jel választja el egymástól; a dőlt karakterekkel leírt rész helyére a megnevezett objektum helyettesítendő; a jel előtti rész (tetszőlegesen sokszor) ismételhető. 3

A feltételben természetesen használhatóak az összehasonlító operátorok (<, <=, >, >=, =,!=, <>), és a logikai műveletek (AND AND, OR, NOT) is. Amint fent elmondtuk, hogy az aggregált függvényeknél a NULL értékek (a vizsgált sor adott oszlopánál) nem számítanak bele a műveletbe, úgy itt is elmondható, hogy az összehasonlítás során nem történik hajtódik végre a művelet az adott oszlopban található NULL értéket tartalmazó sor esetén, így az nem szerepel az eredménylistában. Ez a feltétel a lehető legegyszerűbb feltétel, a 45 000-nél többet keresők adatait listázza ki: SELECT eladoid, vnev, knev, fizetes FROM elado WHERE fizetes > 45000; Az alábbi feltétel egy összetett feltétel, mely a B illetve nagyobb fizetés kategóriájú, és 45 000-nél többet keresőket listázza ki: SELECT eladoid, vnev, knev, fizetes, kategoria FROM elado WHERE fizetes > 45000 AND kategoria > 'A'; A dátum vizsgálatára mindig ügyelni kell, érdemes az adott SQL rendszer dokumentációját, illetve az adott operációs rendszer lehetőségeit áttekinteni, hogy milyen formában várja az SQL feldolgozó a feltételt: SELECT eladoid, vnev, knev, fizetes, szuldat FROM elado WHERE fizetes > 45000 AND szuldat > "1975.01.01"; Van ahol nem "" jelek közé kell tenni a dátumot, hanem {} közé. Nem szabad megfeledkezni arról, hogy többtáblás lekérdezésnél a táblák FROM u- táni felsorolásával, azok descartes-i szorzata áll elő, mely rengeteg értelmetlen sort tartalmaz. A helytelen sorok kiszórása (helyes sorok kiválasztása) vagy ha úgy tetszik a táblák közötti kapcsolat megteremtése a WHERE alparanccsal lehetséges. Annyi logikai ÉS-sel (AND AND) összekapcsolt WHERE-re van szükség, ahány táblát felsoroltunk a FROM mögött. Predikátumok használata IN (érték, ( ) Igaz, ha a keresett mező megtalálható az értéklistában. SELECT eladoid, vnev, knev FROM elado WHERE vnev IN ("Kovács", "Tóth"); Eredményül a Kovács és Tóth nevű eladókat adja ki. (Ekvivalens a feltétel a: WHERE vnev = "Kovács" OR vnev = "Tóth";) NOT IN (érték, ) Igaz, ha a keresett mező nem található meg az értéklistában. BETWEEN alsó határ AND felső határ Igaz, ha a keresett mezo értéke a megadott minimum és maximum között van. SELECT eladoid, vnev, knev, fizetes FROM elado WHERE fizetes BETWEEN 20000 AND 30000; Eredményül a 20 és 30 ezer közötti fizetéssel rendelkezoket listázza ki. (Ekvivalens a feltétel a: WHERE fizetes >= 20000 AND fizetes <=30000;) kifejezés LIKE kifejezés Általában szövegek összehasonlítására használt predikátum. Az alábbi helyettesítő-karakterek (joker-karakterek) használhatóak: % bármely karakter helyettesítése (még üres karakteré is), _ pontosan egy karaktert helyettesít. Az összehasonlítás azokat az oszlopokat tartalmazó sorokat adja vissza, mely(ek)- re a feltétel igaz. Az alábbi egyszerű példában pedig 1-et ad, ha igaz a feltétel értéke, ellenben ha hamis, akkor 0-t. Példák: SELECT "Próba" LIKE "P%" => 1 mert bármely a P utáni karaktert helyettesít SELECT "Próba" LIKE "Pr_b%" => 1 mert a 3. karakter szabadon választott és a 4. karaktertől pedig bármi elhelyezkedhet 4

SELECT "Próba" LIKE "Próba%" => 1 mert igaz, hogy nincs a Próba szó után újabb karakter, de a % helyén bármilyen karakter, vagy akár üres karakter is állhat SELECT "Próba" LIKE "Próba_" => 0 mert a _ jel pontosan egy karaktert helyettesít SELECT "Próba" LIKE "%r%" => 1 mert van benne r betű kifejezés NOT LIKE kifejezés Funkciója hasonló a LIKE-hoz, csupán azon előfordulásokat keresi, ahol nem található meg a megadott kifejezés. A GROUP BY alparancs, sorok csoportosítása Gyakran van szükség arra, hogy a sorokat valamely oszlop (vagy oszlopok) azonos értékei szerint csoportosítsuk. A csoportosítás során kialakult csoportokban más oszlop (vagy oszlopok) csoportbeli értékét összegezhetjük, átlagolhatjuk stb. Az alparancs szintakszisa: GROUP BY oszlopnév, Az operandusként megadott oszlopnévre bizonyos megkötések vannak: minden SELECT-beli oszlopnévnek vagy a GROUP BY-ban, vagy a SELECT-ben felírt aggregáló függvény argumentumában kell szerepelnie, nem lehet származtatott oszlop neve (kivéve, ha SELECT-ben aggregáló függvény argumentumában szerepel). SELECT kategoria, AVG(fizetes) FROM eladok GROUP BY kategoria; Eredmény: Az egyes kategóriáknak megfelelő átlag fizetést adja meg. Mert: A GROUP BY-nál megadott oszlop (vagy, ha több van, akkor ezen belül a második oszlop ezen belül a harmadik, ) azonos értékei szerint csoportosítja a sorokat. Az így kapott azonos sorokra a SELECT-nél megadott aggregáló függvényt most az átlag: AVG()-t alkalmazzuk, így az egy-egy kategóriához tartozó sorok között hajtódik végre a művelet, és megkapjuk a kategóriánkénti átlagfizetést. Amennyiben a SELECT-ben egy újabb oszlopot reprezentálunk, például vnev, akkor annak első előfordulása jelenik meg az eredményben. HAVING alparancs, sorok csoportosítása feltétellel A fent leírt GROUP BY oszlopnév, alparancs esetén minden csoport eredménye megtalálható a végeredményben. Amennyiben csak adott csoportokra vagyunk kíváncsiak, akkor a HAVING feltétel alparanccsal a GROUP BY-t megtoldva elérhetjük a feltételnek nem megfelelő sorok kiszűrését. SELECT kategoria, AVG(fizetes) FROM eladok GROUP BY kategoria HAVING AVG(fizetes) < 22500; Azon kategóriákat listázza ki, ahol az átlagfizetés kisebb, mint 22 500 forint. ORDER BY alparancs, a lekérdezés eredményének rendezése A bármely alparancsokkal kialakított eredményt valamely oszlop vagy oszlopai szerint rendezhetjük. Szintakszisa: ORDER BY oszlopnév oszlop-index [{ASC ASC DESC}] [,oszlopnév oszlop-index [{ASC ASC DESC}], ] Az alparancs az argumentumban megadott oszlop(ok) szerint rendez. A rendezés történhet növekvőleg: AVG-kulcs és csökkenőleg: DESC-kulcs. Amennyiben több oszlopnevet adunk meg, például vnev, knev, akkor az utóbb megadott oszlop szerint lesz rendezve az előbbi oszlop szerint megegyező sorok értéke (és ez természetesen igaz az alábbi oszlopokra is). Avagy, ha például több Kovács van, akkor a knev (keresztnév) oszlop által rendeződik az összes Kovács neve. A rendezést tekintve bármilyen típusú oszlop használható. Viszont fontos, hogy az ORDER BY után szereplő oszlop(ok)nak szerepelnie kell a 5

SELECT utáni oszlop-listában továbbá, ha számmal (index-szel) adjuk meg az oszlopokat, akkor a SELECT utáni oszlop-listában található sorszámot kell megadni. SELECT vnev, knev, eladoid, fizetes FROM elado ORDER BY vnev, knev, eladoid; Abszolút abc-sorrendbe teszi az eladók nevét, ha esetleg így is lenne egyezőség, akkor az eladó-azonosító (eladoid eladoid) alapján történik a további rendezés, SELECT eladoid, vnev, knev, fizetes FROM elado ORDER BY eladoid; Az eladó-azonosító által történik a rendezés, itt nincs szükség további rendezési kulcsokra, ugyanis mindegyik különböző. LIMIT alparancs, a lekérdezés eredményének korlátozása Csak megadott számú sort ad vissza a lekérdezésből. Szintakszisa: LIMIT [kezdet,] sorok A lekérdezés ilyetén korlátozásával megakadályozható a felesleges eredmények kezelése miatt kialakuló túlzott terhelés a hálózaton. Ha a kezdet értéket megadjuk, akkor ennyi sor kimarad a visszaküldésből. Az első sor száma 0. SELECT vnev, knev FROM elado ORDER BY vnev DESC LIMIT 10; A táblában tárolt utolsó 10 személy megjelenítése, hiszen csökkenő sorrendben listáztunk. SELECT vnev, knev FROM elado ORDER BY vnev LIMIT 19, 30; A táblában tárolt 20-49. rekordot jeleníti meg. A LIMIT záradékban megadott 19 argumentum hatására a lekérdezés a 19-es számú (vagyis a huszadik) rekordtól kezdve jeleníti meg a sorokat. A 30 paraméter azt jelenti, hogy a lekérdezésnek harminc sort kell megjelenítenie. A feladat A 3. feladatnál grafikus felületen dolgozott: létrehozott egy adatbázist, feltöltötte adatokkal, és csinált néhány egyszerű lekérdezést. Az egyik lekérdezésnél azt is meg kellett vizsgálnia, hogy a grafikus felületen megfogalmazott kérdés hogyan továbbítódik az adatbázis-szerver fele (lásd a 2. ábrát!). A nál az adatbázis lekérdezését csak a szabványos SQL nyelven teheti meg. A 4. feladat lekérdezéseit a relációs adatbáziskezelők szabványos nyelvén kell feltennie. Az adatbázist, amit használni fogunk a salix.emk.nyme.hu szerveren találjuk. Az adatbázis eléréséhez a putty kliens áll rendelkezésünkre. A kliens-programot nem kell 2. ábra: Részlet a 3. feladatból telepíteni, egyetlen exe-állomány. Szabadon letölthető és használható. Egy példányát a tárgy honlapján is megtalálják. Az első használat előtt érdemes elolvasni a használatát ismertető kétoldalas irományt. A salix.emk.nyme.hu gépen Linux operációs rendszer fut. A putty elindítása után a 22-es porton észlelt felcsatlakozási igény aktivizálja a bejelentkezési folyamatot. A szerver elküldi a login-promptot. A login as: felszólítás után kell megadni a felhasználói nevet; esetünkben ez a hallgato. A Password: jelsorozat a jelszó megadására való felszólítás. (A jelszót a gyakorlatvetője közli önnel a foglalkozáson.) A begépelt jelszó természetesen nem látható, sőt ellentétben a windows-környezettel még a fedőkarakterek sem láthatók (3. ábra első négy sora). A sikeres bejelentkezést az operációs rendszer promptja (esetünkben: hallgato@salix:~>) mutatja. Ez a karakteres felület úgynevezett parancssora. Ide kell begépelni a parancsainkat, utasításainkat. Egy parancs több képernyősoron keresztül is folytatódhat, a Linuxnak végrehajtásra átadni az 6

lenyomásával lehet. A hibátlanul kiadott parancsot az operációs rendszer végre hajtja; a hibásan kiadottra hibaüzenettel reagál. A sikeres bejelentkezés után az ablak fejlécének programikonjára ( ) kattintva a helyi menüben a Change Settings pontot kiválasztva állítsa be az ablak fejlécének feliratát oly módon, hogy az önt azonosítsa. A nem beazonosítható screen-shotokat nem fogadom el. Az azonosítót a fájlnév képzésénél megadott módon képezze: VezeteknevKeresztnev_neptunkod_4, az így képzett azonosítót a PuTTY Behaviour menüágában a Window Title mezőbe kell beírnia. A salix.emk.nyme.hu-n futó MySQL adatbázis-kezelőhöz a mysql paranccsal lehet. A MySQL ugyancsak azonosítást követel meg, tehát a mysql parancsot paraméterezni kell, ahogy az a 3. ábra ötödik sorában látható. Az Enter password: után begépelt jelszó fedőkarakterei itt sem láthatóak. A use SZABADSAG; utasítás már SQL parancs. Kiadásával csatlakozunk a feladat megoldásához felhasználandó adatbázishoz. 3. ábra: Bejelentkezés a salix.emk.nyme.hu hostra; a gépen futó MySQL adatbázis-szerverre; a SZABADSAG adatbázis használatba vétele Ne feledje, hogy az SQL parancsok végét nem az jelzi, hanem a pontosveszsző. Mindaddig, amíg az sql-kliens nem találja a ;-t, nem veszi át a parancsot végrehajtásra. Hiányérzetét a -> prompt kiírásával jelzi. A MySQL szerveren a SZABADSAG adatbázis megfelel a 3. feladatban leírt adatmodellnek. Emlékeztetőül a halmazelméleti modell: SZEMELY{PID, VezNev, KerNev, Szul- Hely, Fizetes}, SZABADSAG{Szamlalo, PID, Ev, Napok, SzabKod}, ASZAB{Kor, SzabNap}, PSZAB{ SzabKod, SzabNap, Megnev}, SZABTAR{Szamlalo, PID, SzabKezd, SzabVeg, Jegyzet}. A grafikus forma és az adatszótár megtalálható a 3. feladat feladatlapján. A feladat megoldásában nagy segítségére lehet a segédletek között található SQL puska. Feladat leadása A gyakorlatról egy, a feladat megoldását dokumentáló, és a kérdésekre adott válaszokat tartalmazó word dokumentumot kell leadni. A kérdések megoldásaként megfogalmazott SQL-parancsokat és a választ/eredményt screen-shotokon mutassa be. Ne feledje, hogy a screen-shotoknak beazonosíthatóaknak kell lenniük (lásd a 3. és a 4. ábrán az ablak fejlécét!). A PuTTY ilyetén beállításáról az oldal felső részén olvashat. A word fájlba helyezett screenshotokat sorszámozza meg a feladatnak megfelelően! A terminál-emulátor háttérszíne (Windows Colours Default Background) világos (például: fehér, világos szürke stb.), a betűszín (Windows Colours Default Foreground) pedig sötét (például: fekete, sötétkék stb.) legyen! 7

A betűtípus és méret, valamint a sorok hosszát oly módon állítsa be, hogy a jelentésként kapott táblázat sora ne töredezzen több képernyősorra. Amennyiben a jelentésként kapott táblázat kifut a képernyő tetején, akkor csak annyi sort írasson ki a jelentésből, hogy a táblázat fejléce is még látható legyen! Származtatott adatok estén a táblázat fejlécében NE a számítást leíró képlet, hanem egy megnevezés legyen látható! A fájl nevét a tárgy honlapján leírtak szerint képezze. A szöveges fájl valódi word dokumentum legyen, és a megírása során ragaszkodjon a magyar helyesírás szabályaihoz. Az elkészített dokumentumot a megadott címre és időpontig juttassa el! A levél tárgya tartalmazza feladat sorszámát. Az elektronikus levelet olyan címről küldje, amely tartalmazza az ön teljes, és a magyar nyelv szabályainak megfelelő formátumú nevét. A levél tartalmazza az önálló munkavégzésre utaló nyilatkozatot. A salix.emk.nyme.hu gépen éjjel karbantartó rutinok futnak, az adatbázisok hajnali 3 és fél 4 között nem elérhetőek. Leadandó feladat részei (ellenőrzőlista) 1. Kezdjük tiszta lappal! Nyissa meg a putty-klienst és jelentkezzen be hallgato azonosítóval a salix.emk.nyme.hu-ra (3. ábra). Adja ki a date linux-parancsot! Az e- redményt egy screen-shoton mutassa be! Csatlakozzon a MySQL szerverhez a 4. ábrán látható módon! Kérje a következő lekérdezés végrehajtását: select now(), sysdate(), current_timestamp();! Az eredményt egy screen-shoton mutassa be! Van különbség az időbélyegzők között? Milyen következtetést tud levonni? Vajon külön időszervert használ az adatbázis-kezelő és az operációs rendszer? 10 pont 2. Vegye használatba a SZABADSAG adatbázist! A describe SZEMELY; paranccsal í- rassa ki SZEMELY tábla szerkezetét! Írja le, hogy az egyes tulajdonságokat milyen típusú adatként tároljuk! Számítsa ki, hogy egy adatrekord hány bájt hosszúságú! 10 pont 3. Végezze el a következő lekérdezéseket a SZEMELY adattáblán (a lekérdezések e- redményeként létrejövő táblázat fejléce minden esetben értelmes legyen; a c. feladattól kezdődően a név ne külön vezeték és keresztnév legyen, hanem egyetlen rovatként szerepeljen és feleljen meg a magyar helyesírás szabályainak). feladatonként 5-5 pont; összesen 50 pont a. Készítsen listát VezNev, KerNev tulajdonságokról. A lista a VezNev szerint legyen rendezett! b. Állapítsa meg, hogy hány Elek keresztnevű dolgozója van a cégnek! c. Készítsen listát a vállalatnál dolgozó személyek éves fizetéséről! Az éves fizetés az adatbázisban szereplő járandóság 12-szerese. A lista a fizetési összeg szerint csökkenő sorrendbe legyen rendezett. d. Állapítsa meg, hogy mennyi a. a legkisebb fizetés, b. a legnagyobb fizetés, c. az átlagfizetés! e. Jelenítse meg az egyes dolgozók születési dátumát! A PID első 8 karaktere a dolgozó születési adatait (ÉÉÉÉHHNN) tartalmazza. f. Listázza ki a dolgozók nevét és korát! A kor kiszámításának egyszerűsített algoritmusa: a mostani évszámból (amit az időbélyegző tartalmaz, annak ÉV része) ki kell vonni a születési dátum évszámát. g. Listázza ki a dolgozók nevét és korát, a kor, azon belül a vezetéknév szerint rendezve! h. Listázza ki a herédi és a mogyoródi születésű dolgozókat! i. Listázza ki a 30 évnél idősebb herédi és mogyoródi születésű dolgozókat! j. Listázza ki, hogy mennyi az átlagfizetése a 20, 30, 40 és 50 éves korú dolgozóknak! Az átlagfizetés értékét forintra kerekítve közölje! 8

4. A következő lekérdezésekhez már több táblát kell használnia! A lekérdezések eredményeként létrejövő táblázat fejléce minden esetben értelmes legyen; a név ne külön vezeték és keresztnév legyen, hanem egyetlen rovatként szerepeljen. feladatonként 5-5 pont; összesen 25 pont a. Listázza ki, hogy az aktuális évben (a kora alapján) kinek hány nap alapszabadság jár! b. Listázza ki, hogy az aktuális évben kinek hány nap pótszabadság jár! c. Listázza ki, hogy a legutóbbi március hónapban kik voltak szabadságon! d. Listázza ki, hogy legutóbb, decemberben ki hány nap szabadságot vett igénybe! e. Listázza ki, hogy kiknek jár tanulmányi szabadság! 5. Fejezze be a MySQL használatát a bye paranccsal! Adja ki újra a date parancsot, és a PuTTY-kliens képernyőjéről készítsen egy screen-shotot, amit illesszen be a worddokumentumba! Csatlakozzon le a salix.emk.nyme.hu hostról az exit parancs begépelésével. Ha helyesen dolgozott, akkor a PuTTY ablaka bezárul. 5 pont Ha egy feladatnak több megoldása is van, és Ön mindegyiket megadja, akkor feladatonként 2 plusz pontot kap. Ha a screen-shotok megfelelnek a 4. ábrán látható mintának, vagyis az ablakban csak az aktuális lekérdezés és annak eredménye látszik, akkor 15 plusz pontot kap a feladatra. 4. ábra: Jól beállított screen-shot Jognyilatkozat hiánya: -100 pont Le nem adottnak számít a feladat, ha a mellékletek óriásfájlként lett csatolva. Formázás a word dokumentumban a szóköz és az enter billentyűk többszöri használatával: -100 pont Nem beazonosítható screen-shotok: -100 pont Másolás mástól: aláírás megtagadása mindkét személynek Késés esetén naponta csökken a feladat értéke: -20 pont / nap Nem szabványosan képzett fájlnevek: -50 pont Nem tiszta word-dokumentum: -20 pont Helyesírási szabályok súlyos megsértése: -10 pont Nem beazonosítható feladó: -30 pont Nem helyes tárgy: - 30 pont Facskó Ferenc intézeti munkatárs 9