artalomjegyzék t · artalomjegyzék t artalomjegyzék t 3 1. el®szó 5 2. a ezet y örn...

78

Upload: others

Post on 12-Jan-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

Adatbázisrendszerek gyakorlati jegyzet

© Ková s György, Debre eni Egyetem

Page 2: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

© Ková s György, Debre eni Egyetem

Page 3: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

Tartalomjegyzék

Tartalomjegyzék 3

1. El®szó 5

2. A fejleszt®környezet 7

2.1. Ora le Express Edition 11g . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.1.1. Telepítés - Ubuntu 13.04 . . . . . . . . . . . . . . . . . . . . . . . . 7

2.1.2. Eltávolítás - Ubuntu 13.04 . . . . . . . . . . . . . . . . . . . . . . . 10

2.2. Ora le SQL Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3. Az adatbázisrendszer elérése . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.1. Ora le SQL Developer . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.2. sqlplus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.3. Webes interfész . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3. 1. gyakorlat - Egyszer¶ lekérdezések 17

3.1. Elméleti alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.1. Típusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.2. Operátorok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.1.3. SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.1.4. DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.1.5. Rendezés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.1.6. AS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4. 2. gyakorlat - Függvények 27

4.1. Elméleti alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.1.1. Numerikus függvények . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.1.2. Sztring függvények . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.1.3. Oszlop függvények . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.2. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5. 3. gyakorlat - Kereszt és bels® összekap solások 35

5.1. Elméleti alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

5.1.1. Kereszt összekap solás (CROSS JOIN) . . . . . . . . . . . . . . . . . 35

© Ková s György, Debre eni Egyetem

Page 4: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

4 Adatbázisrendszerek gyakorlati jegyzet

5.1.2. Bels® összekap solás (INNER JOIN) . . . . . . . . . . . . . . . . . . 39

5.2. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

6. 4. gyakorlat - Spe iális értékek és táblák 45

6.1. Elméleti alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

6.1.1. NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

6.1.2. A DUAL tábla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

6.2. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

7. 5. gyakorlat - Dátum, konverzió, természetes és küls® összekap solás 53

7.1. Elméleti alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

7.1.1. Dátumtípus és dátumfüggvények . . . . . . . . . . . . . . . . . . . 53

7.2. Konverziós függvények . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

7.3. Természetes és küls® összekap solások . . . . . . . . . . . . . . . . . . . . . 57

7.3.1. Természetes összekap solás . . . . . . . . . . . . . . . . . . . . . . . 57

7.3.2. Bels® összekap solás USING kul sszóval . . . . . . . . . . . . . . . . 58

7.3.3. Küls® összekap solás . . . . . . . . . . . . . . . . . . . . . . . . . . 59

7.4. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

8. 6. gyakorlat - GROUP BY, beágyazott lekérdezések 65

8.1. Elméleti alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

8.1.1. GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

8.1.2. Beágyazott lekérdezés . . . . . . . . . . . . . . . . . . . . . . . . . . 67

8.2. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

9. 7. gyakorlat - beágyazott lekérdezések 2, Top-N lekérdezések, halmazm¶veletek 73

9.1. Elméleti alapok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

9.1.1. Beágyazott lekérdezések 2 . . . . . . . . . . . . . . . . . . . . . . . 73

9.1.2. Top-N lekérdezések . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

9.1.3. Halmazm¶veletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

9.2. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 5: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

1. fejezet

El®szó

Az Adatbázisrendszerek tárgy gyakorlatán leadott anyagok kézirata, NEM LEKTORÁLT,

HIBÁKAT TARTALMAZ(HAT)!

© Ková s György, Debre eni Egyetem

Page 6: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

6 Adatbázisrendszerek gyakorlati jegyzet

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 7: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

2. fejezet

A fejleszt®környezet

SQL fejlesztésekhez az Ora le Express Edition 11g és Ora le SQL Developer használatát

javasoljuk. A fejezet hátralév® részében az Ora le Express Edition 11g és Ora le SQL

Developer telepítésének, kon�gurálásának és használatának lépéseit mutatjuk be.

2.1. Ora le Express Edition 11g

Adatbáziskezeléshez sz¶kségünk van egy adatbázisszerver szoftverre. Esetünkben ezt az

Ora le Express Edition 11g testesíti meg.

2.1.1. Telepítés - Ubuntu 13.04

Az Ubuntu alapú operá iós rendszereket az Ora le 11g Express Edition nem támogatja,

ezért a telepítést több lépésben, kerül®úton hajthatjuk végre.

1. Töltsük le az Ora le Express Edition 11g R2 RPM somagot az Ora le hivatalos

weboldaláról

1

. (A somag regisztrá ió után ingyenesen letölthet®.)

2. Tömörítsük ki a letöltött állományt.

gykovacs@gykovacs-home:~> unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip

3. Telepítsük a szükséges somagokat.

gykovacs@gykovacs-home:~> sudo apt-get install alien libaiol unixodbc vim

4. Konvertáljuk az alien program segítségével a Red Hat Linux alapú rpm somagot

Debian somaggá.

gykovacs@gykovacs-home:~> sudo alien --scripts -d oracle-xe-11.2.0-1.0.x86_64.rpm

1http://www.oracle.com/technetwork/products/express-edition/downloads/

index.html

© Ková s György, Debre eni Egyetem

Page 8: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

8 Adatbázisrendszerek gyakorlati jegyzet

5. Hozzuk létre a /sbin/chkconfig állományt az alábbi tartalommal, illetve módon!

gykovacs@gykovacs-home:~> sudo cat > /sbin/chkconfig

#!/bin/bash

# Oracle 11gR2 XE installer chkconfig hack for Ubuntu

file=/etc/init.d/oracle-xe

if [[ ! ‘tail -n1 $file | grep INIT‘ ]]; then

echo >> $file

echo ’### BEGIN INIT INFO’ >> $file

echo ’# Provides: OracleXE’ >> $file

echo ’# Required-Start: $remote_fs $syslog’ >> $file

echo ’# Required-Stop: $remote_fs $syslog’ >> $file

echo ’# Default-Start: 2 3 4 5’ >> $file

echo ’# Default-Stop: 0 1 6’ >> $file

echo ’# Short-Description: Oracle 11g Express Edition’ >> $file

echo ’### END INIT INFO’ >> $file

fi

update-rc.d oracle-xe defaults 80 01

6. Állítsuk be az állományhoz tartozó jogosultságokat:

chmod 755 /sbin/chkconfig

7. Hozzuk létre a /etc/sysctl.d/60-oracle.conf kon�gurá iós fájlt az alábbi tar-

talommal és módon.

gykovacs@gykovacs-home:~> cat > /etc/sysctl.d/60-oracle.conf

# Oracle 11g XE kernel parameters

fs.file-max=6815744

net.ipv4.ip_local_port_range=9000 65000

kernel.sem=250 32000 100 128

kernel.shmmax=536870912

8. Töltsük be a kernel paramétereket.

gykovacs@gykovacs-home:~> sudo service procps start

9. Ellen®rizzük a swap terület méretét. Ha kisebb, mint 2 Gb, akkor növeljük meg

legalább 2 Gb-ra.

gykovacs@gykovacs-home:~> free -m

10. Hozzunk létre azokat a könyvtárakat és fájlokat, amelyek a Red Hat és Ubuntu

rendszerek közötti különbségek miatt szükségesek.

gykovacs@gykovacs-home:~> sudo ln -s /usr/bin/awk /bin/awk

gykovacs@gykovacs-home:~> sudo mkdir /var/lock/subsys

gykovacs@gykovacs-home:~> sudo touch /var/lock/subsys/listener

gykovacs@gykovacs-home:~> sudo rm -rf /dev/shm

gykovacs@gykovacs-home:~> sudo mkdir /dev/shm

gykovacs@gykovacs-home:~> sudo mount -t tmpfs shmfs -o size=2048m /dev/shm

11. Hozzuk létre a S01shm_load szkriptet az alábbi módon és tartalommal:

gykovacs@gykovacs-home:~> sudo cat > /etc/rc2.d/S01shm_load

#!/bin/sh

case "$1" in

start) mkdir /var/lock/subsys 2>/dev/null

touch /var/lock/subsys/listener

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 9: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

2. fejezet: A fejleszt®környezet 9

rm /dev/shm 2>/dev/null

mkdir /dev/shm 2>/dev/null

mount -t tmpfs shmfs -o size=2048m /dev/shm ;;

*) echo error

exit 1 ;;

esac

12. Lássuk el az el®z® szkriptet a megfelel® jogosultságokkal.

gykovacs@gykovacs-home:~> sudo chmod 755 /etc/rc2.d/S01shm_load

13. Telepítsük az Ora le Express Edition 11g somagot az alábbi utasítással:

gykovacs@gykovacs-home:~> sudo dpkg --install oracle-xe_11.2.0-2_amd64.deb

14. Kon�guráljuk a feltelepített Ora le szervert. A kon�gurá ió során válasszuk az alap-

értelmezett értékeket:

(a) A webes interfész portszáma 8080.

(b) Az Ora le database listener portszáma 1521.

( ) Válasszunk jelszót a SYS és SYSTEM felhasználóknak.

(d) Határozzuk meg, hogy a szerver elinduljon-e a rendszer indulásakor.

gykovacs@gykovacs-home:~> sudo /etc/init.d/oracle-xe configure

15. Adjuk hozzá az alábbi környezeti változókat a .bashrc állományhoz!

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe

export ORACLE_SID=XE

export NLS_LANG=‘$ORACLE_HOME/bin/nls_lang.sh‘

export ORACLE_BASE=/u01/app/oracle

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

export PATH=$ORACLE_HOME/bin:$PATH

Ügyeljünk rá, hogy az NLS_LANG változót követ®en az AltGr+7 billenty¶kombiná-

ióval el®rhet® aposztróf szerepel, azaz beágyazott szkript hívás.

16. Frissítsük a shell beállításait a .profile szkript futtatásával!

gykovacs@gykovacs-home:~> ./.profile

Amennyiben nem található a felhasználói könyvtárban .profile szkript, másolja

oda a /etc/skel könyvtárból az alapértelmezett .profile szkriptet.

17. Indítsuk el az Ora le szervert:

gykovacs@gykovacs-home:~> sudo service oracle-xe start

Starting Oracle Net Listener.

Starting Oracle Database 11g Express Edition instance.

gykovacs@gykovacs-home:~>

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 10: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

10 Adatbázisrendszerek gyakorlati jegyzet

18. Indítsuk el az sqlplus paran sértelmez®t és kap solódjuk az Ora le szerverhez. Az

alábbi paran sban a password sztringet helyettesítsük az Ora le szerver kon�gurá-

lásánál megadott jelszóval.

gykovacs@gykovacs-home:~> sqlplus sys/password@xe as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Sat Oct 12 22:19:26 2013

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL>

19. Próbáljuk ki a szerver m¶ködését egy egyszer¶ lekérdezéssel.

SQL> SELECT 1+2 FROM DUAL;

1+2

----------

3

20. Hozzunk létre felhasználót az alábbi utasítással. Az utasításban a gykovacs sztring

a felhasználói név, a password a jelszó.

SQL> CREATE USER gykovacs IDENTIFIED BY password;

User created.

21. Adjunk jogokat a felhasználónak.

SQL> GRANT SYSDBA, CONNECT, RESOURCE TO gykovacs;

Grant succeeded.

22. Lépjünk ki az sqlplus paran sértelmez®b®l. A kés®bbiekben bármikor beléphetünk

a létrehozott felhasználónévvel és jelszóval:

gykovacs@gykovacs-home:~> sqlplus gykovacs/cocacola@xe

SQL*Plus: Release 11.2.0.2.0 Production on Sat Oct 12 23:35:23 2013

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL>

2.1.2. Eltávolítás - Ubuntu 13.04

Hajtsuk végre az alábbi utasításokat:

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 11: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

2. fejezet: A fejleszt®környezet 11

gykovacs@gykovacs-home:~> sudo /etc/init.d/oracle-xe stop

gykovacs@gykovacs-home:~> sudo ps -ef | grep oracle | grep -v grep | awk ’{print $2}’ |

xargs kill

dpkg --purge oracle-xe

gykovacs@gykovacs-home:~> sudo rm -r /u01

gykovacs@gykovacs-home:~> sudo rm /etc/default/oracle-xe

gykovacs@gykovacs-home:~> sudo update-rc.d -f oracle-xe remove

2.2. Ora le SQL Developer

Az Ora le SQL Developer telepítéséhez töltsük le a megfelel® telepít® állományt az Ora le

SQL Developer hivatalos weboldaláról

2

. A letöltött állomány kitömörítése után Windows

rendszeren az sqldeveloper.exe állomány indításával, Linux rendszereken az sqldeveloper.sh

szkript futtatásával indíthatjuk az alkalmazást.

2.3. Az adatbázisrendszer elérése

Jelen szakaszban az adatbázisszerver elérésére kínálkozó három lehet®séget tekintjük át.

2.3.1. Ora le SQL Developer

Az Ora le SQL Developer használatához, az adatbázisrendszerhez történ® satlakozáshoz

az alábbi lépéseket hajtsuk végre.

1. Az Ora le SQL Developer indítása után hozzunk létre új kap solatot (2.1(a). ábra)!

2. Állítsuk be a kap solat tulajdonságait (2.1(b). ábra)! A kap solat neve tetsz®leges

lehet. Az alapértelmezett tulajdonságokkal (név, portszámok) kon�gurált adatbázis-

szerver esetén az ábrán látható, illetve alapértelmezett módon felajánlott értékeket

hagyjuk meg.

3. A kap solat létrehozása és kap solódás után egy egyszer¶ lekérdezéssel próbálhatjuk

ki a kap solat m¶ködését, illetve az SQL Developer használatát (2.1( ). ábra)!

2.3.2. sqlplus

Az sqlplus paran sértelmez® használata talán a legegyszer¶bb a három lehet®ség közül.

1. Indítsuk el az sqlplus alkalmazást, és közben kap solódjunk is az adatbázisrendszer-

hez!

2http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/

index.html

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 12: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

12 Adatbázisrendszerek gyakorlati jegyzet

(a)

(b)

( )

2.1. ábra. Új adatbázis kap solat létrehozása

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 13: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

2. fejezet: A fejleszt®környezet 13

gykovacs@gykovacs-home:~> sqlplus gykovacs/password@xe

SQL*Plus: Release 11.2.0.2.0 Production on Sun Oct 13 01:08:31 2013

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL>

A paran sban természetesen seréljük ki a gykovacs sztringet a felhasználói névre,

a password sztringet pedig a megfelel® jelszóra.

2. Próbáljuk ki a m¶ködését az alábbi egyszer¶ lekérdezéssel!

SQL> SELECT 1 + 2 FROM DUAL;

1+2

----------

3

SQL>

2.3.3. Webes interfész

A webes interfész els® használatakor el kell végeznünk néhány kon�gurá iós lépést.

1. Nyissuk meg tetsz®leges böngész®ben a http://127.0.0.1:8080/apex oldalt! Ek-

kor a 2.2(a). ábrán látható képerny®vel találkozunk!

2. Kattintsunk a bal alsó sarokban található Administration linkre! A 2.2(b). ábrán

látható felülethez jutunk, ahol az admin felhasználó névvel, illetve az Ora le szerver

kon�gurálásánál megadott jelszóval léphetünk be.

3. A belépést követ®en az adminisztrá iós felülethez jutunk (2.2( ). ábra).

4. Kattintsunk a Manage Workspaces linkre, mellyel a workspa e-ek menedzselésére

kialakított felülethez jutunk (2.2(d). ábra)!

5. Hozzunk létre új workspa e-t "adatbazis" néven, majd a sémát is nevezzük adatbá-

zisnak és minden más paramétert haggyunk alapértelmezett értéken (2.2(e). ábra)!

6. Hozzunk létre az új workspa e-hez felhasználót tetsz®leges néven (a példában "gy-

kova s")! A lépés eredménye a 2.2(f). ábrán látható.

7. Léjünk ki az adminisztrá iós felületb®l és lépjünk be a 2.2(a). ábrán látható felületen

úgy, hogy workspa e-ként a létrehozott workspa e nevét adjuk meg, felhasználói

névként és jelszóként pedig a létrehozott felhasználó adatait. Ekkor a 2.3(a). ábrán

látható felülethez jutunk.

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 14: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

14 Adatbázisrendszerek gyakorlati jegyzet

8. Válasszuk az SQL Workshop op iót, majd az SQL Commands linkre kattintva pró-

báljuk ki a megjelen® paran sértelmez® m¶ködését (2.3(b). ábra)!

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 15: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

2. fejezet: A fejleszt®környezet 15

(a) (b)

( ) (d)

(e) (f)

2.2. ábra. A webes interfész kon�gurá iója

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 16: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

16 Adatbázisrendszerek gyakorlati jegyzet

(a) (b)

2.3. ábra. A webes interfész kon�gurá iója

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 17: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

3. fejezet

1. gyakorlat - Egyszer¶ lekérdezések

Ezen gyakorlat témája az adatbáziskezel® rendszerek m¶ködésének, használatának, a leg-

egyszer¶bb lekérdezések struktúrájának megismerése.

3.1. Elméleti alapok

Az adatbáziskezelés központi fogalma a tábla, mely adatok tárolására szolgáló egysze-

r¶ táblázatnak tekinthet®. Általánosságban egy adatbázis egy vagy több táblából áll, s

az adatbáziskezelés feladata ezen táblák szerkezetének, tartalmának, hozzáférhet®ségének

mendzselése. Az említett feladatok ellátására az SQL (Stru tured Query Language) prog-

ramozási nyelv szolgál, mely segítségével SQL nyelv¶ szkripteket írhatunk, amelyeket az

adatbáziskezel® rendszer értelmez. Az SQL nyelv azonban nem olyan kötött, mint a C

vagy C++ nyelvek. Az SQL-nek számos, kisebb-nagyobb eltérésekkel rendelkez® nyelvjá-

rása létezik. Ezek közül a továbbiakban az Ora le SQL nyelvjárással foglalkozunk.

A táblák oszlopaira attribútumként vagy tulajdonságként hivatkozunk, a tábla sorai az

attribútumok konkrét értékeinek kombiná ióit, rekordokat tartalmaznak.

3.1.1. Típusok

Ahogy azt az informatikában már megszokhattuk, az adatok tárolásához meg kell hatá-

roznunk azok típusát. Az Ora le SQL adattípusai közül az alábbiakkal foglalkozunk a

kés®bbiekben:

1. VARCHAR2(n) � legfeljebb n karakter hosszúságú sztringet tárolására szolgáló adat-

típus. Például a VARCHAR2(10) típusú legfeljebb 10 karakter hosszúságú sztringek

tárolására alkalmas.

2. VARCHAR(n) � a VARCHAR2 szinonímája.

3. CHAR(n) � rögzített, n karakterb®l álló sztringet tárolására alkalmas típus.

© Ková s György, Debre eni Egyetem

Page 18: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

18 Adatbázisrendszerek gyakorlati jegyzet

4. NUMBER � legfeljebb 38 értékes számjeggyel rendelkez® egész és lebeg®spontos szá-

mokat ábrázolhatunk vele: pozitív számokat 1 · 10−130-tól 9.99...9 · 10125-ig, negatív

számokat −1 · 10−130-tól −9.99...9 · 10125-ig, nullát, mínusz és plusz végtelent.

5. NUMBER(p) � A szám típusú adatok tárolását optimalizálhatjuk, hogy megadjuk a

számok pontosságát, azaz a számjegyek számát. Ekkor sak egész számokat tárol-

hatunk. Például a NUMBER(9) típussal ábrázolhatjuk a 7456124 számot.

6. NUMBER(p, s) � A pontosságon túl megadhatjuk, hogy hány számjegy jelenjen

meg a p számjegyb®l a tizedesjegy jobb oldalán. Például a NUMBER(9,2) típussal

ábrázolhatjuk a 7456124.29 számot.

7. NUMBER(*, s) � Ha sak a tizedesjegyek számát szeretnénk el®írni, akkor a p pa-

raméter helyén használjuk a * szimbólumot. Például a NUMBER(*,1) tetsz®legesen

sok számjegyb®l álló, de sak egy tizedesjeggyel rendelkez® számokat tárolhatunk.

8. INTEGER � A NUMBER(38) szinonímája.

9. FLOAT � A NUMBER-hez hasonló, azonban végtelen értékeket nem tárolhatunk vele.

10. DATE � dátumok tárolására alkalmas típus.

Ha szám típus esetén olyan lebeg®pontos számot viszünk be az adatbázisba, mely tize-

desjegyeinek száma meghaladja az ábrázolásra használt típusban spe i�kált tizedesjegyek

számát, akkor a matematikai kerekítés szabályai szerint lesz kerekítve a megfelel® számú

tizedesjegyre. Ha a tizedesjegyek számként negatív értéket írunk el®, például -n-t, akkor a

típussal ábrázolt számok kerekítve lesznek 10n-re. Például NUMBER(*,-2) típussal min-

den szám 100-asokra lesz kerekítve: ha az adatbázisba felvisszük a 7896 értéket, akkor

7900 kerül ábrázolásra.

3.1.2. Operátorok

Az el®z® szakaszban bevezettük az SQL néhány típusát. A típusokkal reprezentált érté-

kekkel különböz® m¶veleteket végezhetünk a kap solódó operátorok segítségével.

A numerikus értékeken végezhet® m¶veletekhez kap solódó aritmetikai operátorok:

• egyoperandusú operátorok: +, -;

• kétoperandusú operátorok: +, -, *, /.

Sztring operátorok:

• konkatená ió: ||.

Hasonlító operátorok:

• egyenl®ség tesztelése: =,

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 19: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

3. fejezet: 1. gyakorlat - Egyszer¶ lekérdezések 19

• nem-egyenl®ség tesztelése: <>,

• nagyság szerinti hasonlítás: <, >, <=, >=,

• sztringek hasonlítása: x LIKE y.

A LIKE operátor m¶ködése a következ®: az y kifejezés egy sztring literál, amelyben a

% karakter tetsz®leges sztringet jelent, a _ karakter pedig tetsz®leges karaktert reprezen-

tál. A hasonlító operátor eredménye logikailag igaz, ha az x sztring értéke illeszkedik az

y sztring által megadott reguláris kifejezésre. Például "alma" LIKE "al%" esetén a kife-

jezés értéke igaz, "alma" LIKE "a_m_" esetén szintén igaz, "alma" LIKE "%b" esetén

azonban hasis, hiszen az "alma" sztring nem 'b' bet¶re végz®dik.

Logikai operátorok:

• negá ió: NOT,

• és: AND,

• vagy: OR.

3.1.3. SELECT

Az SQL utasítások közül els®ként a SELECT utasítás egy egyszer¶ formájával ismerkedünk

meg. A SELECT utasítás teljes szintaktikája formálisan körülbelül 30 oldal terjedelm¶ a

hivatalos Ora le referen ia szerint. A számos op ió közül mi egyel®re sak a legalapvet®b-

bekkel ismerkedünk meg. A SELECT egyszer¶ szintaktikája:

SELECT {attr1[, attr2]... | * } FROM tabla [WHERE logikai_feltetel]

Szemantikáját tekintve a SELECT utasítás a következ® módon m¶ködik: sorra veszi a

tabla táblában tárolt rekordokat, azaz sorokat, és megvizsgálja, hogy az adott sorban

tárolt attribútum értékekre teljesül-e a megadott logikai feltétel; ha teljesül, akkor kiírja

a sorban tárolt attribútum értékek közül a SELECT kul sszót követ® attribútumokat.

Ha nem adunk meg WHERE logikai_feltetel részt, akkor minden sorból kiírásra

kerülnek a megadott attribútumok. Ha az attribútum lista helyett a * szimbólumot hasz-

náljuk, akkor a feltételnek megfelel® sorban található összes attribútum értékét kiírja a

rendszer.

A SELECT utasítás tehát egy táblából egy újabb táblát állít el®. A bemenetként meg-

adott tábla a háttérben, adatszerkezetként van jelen, a kimenetként kapott tábla pedig

megjelenik a használt paran sértelmez®ben.

3.1.4. DISTINCT

El®fordulhat, hogy olyan attribútumot vagy attribútum kombiná iót kérdezünk le, amely

több sorban teljesen megegyez® érték kombiná iókat vesz fel. Ebben az esetben az ered-

ményként el®álló táblában megegyez® sorokat kapunk. Ha ezen megegyez® sorokat re-

dukálni szeretnénk, akkor használhatjuk a DISTINCT kul sszót a SELECT utasításban az

alábbi szintaktika szerint:

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 20: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

20 Adatbázisrendszerek gyakorlati jegyzet

3.1. ábra. A forma1 tábla sémája

SELECT [DISTINCT] {attr1[, attr2]... | * } FROM tabla [WHERE logikai_feltetel]

3.1.5. Rendezés

Az eredményként kapott tábla tartalmát, azaz a kiírást rendezhetjük, ha a SELECT utasí-

tást kiterjesztjük az ORDER BY taggal. A szintaktika az alábbi módon alakul:

SELECT {attr1[, attr2]... | * } FROM tabla [WHERE logikai_feltetel] [ORDER BY attr1 [{ASC |

DESC}][, attr2 [{ASC | DESC}]]...

Szemantikáját tekintve megtörténik a lekérdezés, el®áll az eredmény tábla, majd annak

megjelenítése el®tt a rendszer növekv® vagy sökken® sorrendbe rendezi a tábla sorait

az ORDER BY után felsorolt attribútumok szerint, az attribútumok felírásának megfelel®

sorrendben. Az ASC kul sszó használata esetén az azt megel®z® attribútum szerint növekv®

rendezést, a DESC használata esetén sökken® rendezést kapunk. Ha nem adjuk meg sem

az ASC, sem a DESC szó skát, akkor alapértelmezetten növekv® rendezés történik.

3.1.6. AS

El®fordulhat, hogy egy attribútumot nem a saját nevén szeretnénk megjeleníteni az ered-

mény táblában. Ebben az esetben használhatjuk az attribútum listán az AS kul sszót. Az

attribútum neve után az AS szót követ®en adhatjuk meg a megjeleníteni kívánt sztringet.

Az attribútum lista szintaktikája az alábbi módon alakul:

attr1 [AS sztring1] [, attr2 [AS sztring2]]...

3.2. Feladatok

A feladatok során egy Forma-1-es adatokat tartalmazó táblával dolgozunk. A tábla sémája

a 3.1. ábrán látható.

A tábla az alábbi szkript futtatásával hozható létre és tölthet® fel. Ezen szkript uta-

sításaival a kés®bbiekben fogunk foglalkozni, egyel®re sak azért adtuk meg, hogy ha az

olvasó számítógépen szeretne gyakorolni, illetve dolgozni a táblával, akkor ezzel egyszer¶en

legenerálhassa azt.

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 21: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

3. fejezet: 1. gyakorlat - Egyszer¶ lekérdezések 21

Kódrészlet 3.2.1: forma1-table.sql

CREATE TABLE forma1(

vnev VARCHAR2(12),

knev VARCHAR2(12),

csapat VARCHAR2(10),

kor NUMBER(2),

pontszam INTEGER,

rajtszam INTEGER

);

INSERT INTO forma1 VALUES(’Alonso’, ’Fernando’, ’Ferrari’, 32, 128, 3);

INSERT INTO forma1 VALUES(’Raikonnen’, ’Kimi’, ’Lotus’, 33, 120, 5);

INSERT INTO forma1 VALUES(’Massa’, ’Felipe’, ’Ferrari’, 30, 100, 4);

INSERT INTO forma1 VALUES(’Hamilton’, ’Lewis’, ’Mercedes’, 28, 92, 6);

INSERT INTO forma1 VALUES(’Button’, ’Jensen’, ’McLaren’, 35, 105, 8);

A szkript futtatásakor létrejöv® tábla tartalma az alábbi.

VNEV KNEV CSAPAT KOR PONTSZAM RAJTSZAM

------------ ------------ ---------- ---------- ---------- ----------

Alonso Fernando Ferrari 32 128 3

Raikonnen Kimi Lotus 33 120 5

Massa Felipe Ferrari 30 100 4

Hamilton Lewis Mercedes 28 92 6

Button Jensen McLaren 35 105 8

3.2.1. Feladat: Kérdezze le a forma1 tábla tartalmát!

3.2.1. Megoldás: A legegyszer¶bb megoldás a * szimbólum használata a SELECT

utasítás attribútum listáján.

SELECT * FROM forma1;

VNEV KNEV CSAPAT KOR PONTSZAM RAJTSZAM

------------ ------------ ---------- ---------- ---------- ----------

Alonso Fernando Ferrari 32 128 3

Raikonnen Kimi Lotus 33 120 5

Massa Felipe Ferrari 30 100 4

Hamilton Lewis Mercedes 28 92 6

Button Jensen McLaren 35 105 8

Alternatív megoldásként természetesen az is helyes megoldás, ha felsoroljuk az összes

attribútumot az attribútum listán.

SELECT vnev, knev, csapat, kor, pontszam, rajtszam FROM forma1;

3.2.2. Feladat: Kérdezze le a pilóták keresztnevét!

3.2.2. Megoldás:

SELECT knev FROM forma1;

KNEV

------------

Fernando

Kimi

Felipe

Lewis

Jensen

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 22: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

22 Adatbázisrendszerek gyakorlati jegyzet

3.2.3. Feladat: Kérdezze le a 30 évnél id®sebb pilóták vezetéknevét!

3.2.3. Megoldás:

SELECT vnev FROM forma1 WHERE kor > 30;

VNEV

------------

Alonso

Raikonnen

Button

3.2.4. Feladat: Kérdezze le a 30 évnél id®sebb pilóták vezetéknevét úgy, hogy az

eredmény oszlop fejlé e "Vezeteknev" legyen!

3.2.4. Megoldás:

SELECT vnev AS "Vezeteknev" FROM forma1 WHERE kor > 30;

Vezeteknev

------------

Alonso

Raikonnen

Button

3.2.5. Feladat: Kérdezze le a sapatokat úgy, hogy minden sapat sak egyszer jelenjen

meg!

3.2.5. Megoldás:

SELECT DISTINCT csapat FROM forma1;

CSAPAT

----------

Ferrari

Mercedes

Lotus

McLaren

3.2.6. Feladat: Kérdezze le a sapatokat úgy, hogy minden sapat sak egyszer jelenjen

meg, s a sapatok nevei ABC szerinti sökken® sorrendben legyenek!

3.2.6. Megoldás:

SELECT DISTINCT csapat FROM forma1 ORDER BY csapat DESC;

CSAPAT

----------

Mercedes

McLaren

Lotus

Ferrari

3.2.7. Feladat: Kérdezze le a sapatok neveit és a pilóták vezetékneveit úgy, hogy az

eredmény tábla elemei els®dlegesen sapatnév szerint, másodlagosan a pilóták vezetékneve

szerint legyenek rendezve ABC szerinti növekv® sorrendben!

3.2.7. Megoldás:

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 23: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

3. fejezet: 1. gyakorlat - Egyszer¶ lekérdezések 23

SELECT csapat, vnev FROM forma1 ORDER BY csapat, vnev;

CSAPAT VNEV

---------- ------------

Ferrari Alonso

Ferrari Massa

Lotus Raikonnen

McLaren Button

Mercedes Hamilton

Megjegyezzük, hogy az olvashatóság növelés érdekében kiírhattuk volna az utasításba az

ASC kul sszót:

SELECT csapat, vnev FROM forma1 ORDER BY csapat ASC, vnev ASC;

3.2.8. Feladat: Módosítsa az el®z® lekérdezést úgy, hogy a " sapat" attribútum "Istal-

lo", a "vnev" attribútum "Vezeteknev" néven jelenjen meg!

3.2.8. Megoldás:

SELECT csapat AS "Istallo", vnev AS "Vezeteknev" FROM forma1 ORDER BY csapat, vnev;

Istallo Vezeteknev

---------- ------------

Ferrari Alonso

Ferrari Massa

Lotus Raikonnen

McLaren Button

Mercedes Hamilton

3.2.9. Feladat: Kérdezze le azon pilóták vezetéknevét és sapatát, akik pontszáma

megegyezik az életkorukkal!

3.2.9. Megoldás:

SELECT vnev, csapat FROM forma1 WHERE kor = pontszam;

no rows selected

Ahogy az az eredményb®l látható, nin sen a feltételnek eleget tev¶ rekord a táblában.

Természetesen ez nem baj, a megoldás ett®l még helyes.

3.2.10. Feladat: Kérdezze le az 'F' bet¶ve kezd®d® keresztnev¶ pilóták vezetéknevét!

3.2.10. Megoldás:

SELECT vnev FROM forma1 WHERE knev LIKE ’F%’;

VNEV

------------

Alonso

Massa

3.2.11. Feladat: Kérdezze le a 6 bet¶b®l álló vezetéknev¶ pilóták vezeték- és kereszt-

nevét!

3.2.11. Megoldás:

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 24: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

24 Adatbázisrendszerek gyakorlati jegyzet

SELECT vnev, knev FROM forma1 WHERE knev LIKE ’______’;

VNEV KNEV

------------ ------------

Massa Felipe

Button Jensen

A megoldásban hat darab '_' karaktert adtunk meg reguláris kifejezésként, ami azt jelenti,

hogy minden olyan sztringet, esetünkben keresztnevet elfogadunk, ami 6 karakterb®l áll.

3.2.12. Feladat: Kérdezze le Felipe Massa pontszámát! Az eredményként el®álló oszlop

fejlé ében a "Massa pontszama" sztring szerepeljen!

3.2.12. Megoldás:

SELECT pontszam AS "Massa pontszama" FROM forma1 WHERE vnev = ’Massa’ AND knev = ’Felipe’;

Massa pontszama

---------------

100

Hasonlóan jó megoldást kapunk természetesen, ha a sztringek hasonlítására használt egyen-

l®ség operátort a LIKE operátorra seréljük.

SELECT pontszam AS "Massa pontszama" FROM forma1 WHERE vnev LIKE ’Massa’ AND knev LIKE ’

Felipe’;

3.2.13. Feladat: Kérdezze le az 'F' vagy 'M' bet¶vel kezd®d® sapatok neveit! Ügyeljen

rá, hogy az eredményként el®álló táblában minden sapatnév sak egyszer jelenjen meg és

a sapatnevek ABC szerinti sökken® sorrendben jelenjenek meg!

3.2.13. Megoldás:

SELECT DISTINCT csapat FROM forma1 WHERE csapat LIKE ’F%’ OR csapat LIKE ’M%’ ORDER BY

csapat DESC;

CSAPAT

----------

Mercedes

McLaren

Ferrari

3.2.14. Feladat: Kérdezze le ABC szerinti növekv® sorrendben a pilóták vezetékneveit

és pontszámait! A vezetéknév oszlop "Pilota" néven, a pontszám oszlop "Pont" néven

jelenjen meg!

3.2.14. Megoldás:

SELECT vnev AS "Pilota", pontszam AS "Pont" FROM forma1 ORDER BY vnev;

Pilota Pont

------------ ----------

Alonso 128

Button 105

Hamilton 92

Massa 100

Raikonnen 120

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 25: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

3. fejezet: 1. gyakorlat - Egyszer¶ lekérdezések 25

3.2.15. Feladat: Kérdezze le azon sapatok nevét, amelyhez tartozik nulla ponttal

rendelkez® pilóta!

3.2.15. Megoldás:

SELECT csapat FROM forma1 WHERE pontszam = 0;

no rows selected

3.2.16. Feladat: Kérdezze le "Alonso", "Button" és "Raikonnen" pontszámát! Az

eredményként el®álló táblának két oszlopa legyen: "Vezetéknév" és "Pont"!

3.2.16. Megoldás:

SELECT vnev AS "Vezeteknev", pontszam AS "Pont" FROM forma1 WHERE vnev LIKE ’Alonso’ OR

vnev LIKE ’Button’ OR vnev LIKE ’Raikonnen’;

Vezeteknev Pont

------------ ----------

Alonso 128

Raikonnen 120

Button 105

3.2.17. Feladat: Kérdezze le az 'A' bet¶vel kezd®d® és 6 bet¶s vezetéknev¶ vagy 'J'

bet¶vel kezd®d® és 'n' bet¶re végz®d® keresztnev¶ pilóták vezeték- és keresztnevét!

3.2.17. Megoldás:

SELECT vnev, knev FROM forma1 WHERE vnev LIKE ’A_____’ OR knev LIKE ’J%n’;

VNEV KNEV

------------ ------------

Alonso Fernando

Button Jensen

3.2.18. Feladat: Kérdezze le azon pilóták vezetéknevét és életkorát életkor szerinti

növekv® sorrendben, akik vezeték vagy keresztnevében szerepel az 'il' vagy 'li' részsztring!

3.2.18. Megoldás:

SELECT vnev, kor FROM forma1 WHERE vnev LIKE ’%il%’ OR vnev LIKE ’%li%’ OR knev LIKE ’%il%’

OR knev LIKE ’%li%’;

VNEV KOR

------------ ----------

Massa 30

Hamilton 28

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 26: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

26 Adatbázisrendszerek gyakorlati jegyzet

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 27: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

4. fejezet

2. gyakorlat - Függvények

Ezen gyakorlat témája az adatbáziskezel® rendszerek m¶ködésének, használatának, a leg-

egyszer¶bb lekérdezések struktúrájának megismerése.

4.1. Elméleti alapok

Az el®z® gyakorlaton egyszer¶ lekérdezéseket hajtottunk végre, ahol sak olyan adatokat

kaptunk az eredményként el®álló táblában, amelyek valóban el®fordulnak a háttérben lév®

tábla adatszerkezetekben. Ett®l azonban jóval több lehet®ségünk van SQL használatával:

egyrészt használhatunk tetsz®leges operátorokat a SELECT kul sszót követ® attribútum lis-

tán, melyek segítségével új értékeket számíthatunk ki; másrészt használhatunk különböz®

numerikus, illetve sztringekhez kap solódó függvényeket, mind az attribútum listán, mind

az el®forduló WHERE feltételben. Amikor az attribútum listán végzünk számításokat és

átalakításokat úgy, hogy az eredmény táblában megjelen® értékek nem pontosan abban a

formában jelennek meg, ahogy a háttérben lév® adatszerkezetben szerepelnek, származta-

tott oszlop létrehozásáról beszélünk. Lehet®ségünk van továbbá néhány spe iális függvény

használatára, amelyek nem egy-egy numerikus értéken vagy sztringen operálnak, hanem

egy-egy oszlopon. Ezen függvényeket oszlop-függvényeknek nevezzük. Az alábbiakban az

említett oszlop, illetve nem-oszlop függvények közül tekintjük át a legfontosabbakat.

4.1.1. Numerikus függvények

• ABS(attributum) � Abszolút érték függvény.

• CEIL(attributum) � Visszaadja a legkisebb egész számt, amely nagyobb, vagy

egyenl® az attribútum értékével.

• FLOOR(attributum) � Visszaadja a legnagyobb egész számot, amely kisebb, vagy

egyenl® az attribútum értékével.

• MOD(attr1, attr2) � Maradékosan osztja az attr1 értéket az attr2 számmal és

eredményként visszaadja a maradékot.

© Ková s György, Debre eni Egyetem

Page 28: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

28 Adatbázisrendszerek gyakorlati jegyzet

• ROUND(attr1, attr2) � Az attr2 egész szám kell, hogy legyen. A függvény

10attr2-re kerekíti attr1 értékét.

• SIGN(attributum) � Visszaadja az attribútum értékének el®jelét (1-et vagy -1-et).

• SQRT(attributum) � Négyzetgyököt von az attributum értékéb®l.

• POWER(attr1, attr2) � Az attr1 értéket az attr2 hatványra emeli.

4.1.2. Sztring függvények

• LENGTH(attributum) � Visszaadja az attribútum értékének hosszát (a karakterek

számát).

• CONCAT(attr1, attr2) � Összef¶zi a paraméterként kapott két sztringet.

• SUBSTR(attr1, attr2, attr3) � A attr1 sztringb®l kivágja az attr2 pozí ió-

tól kezd®d® attr3 hosszúságú részsztringet. Spe iálisan, a SUBSTR(attr, 1, 3)

függvényhívás az attribútum baloldali három karakterét adja vissza, míg negatív po-

zí iót használva a SUBSTR(attr, -4) a jobboldali négy karakterb®l álló sztringet

adja vissza.

• LOWER(attributum) � Az attribútum értékét kisbet¶sre alakítja.

• UPPER(attributum) � Az attribútum értékét nagybet¶sre alakítja.

4.1.3. Oszlop függvények

Oszlop függvényeket egyel®re sak az attribútum listán használjunk. Az oszlop függvé-

nyek egy attribútumhoz egy értéket határoznak meg, attól függetlenül, hogy hány rekord

van a táblában. Ennek megfelel®en ügyelnünk kell arra, hogy ha oszlopfüggvényt haszná-

lunk az attribútum listán, akkor sak és kizárólag oszlopfüggvények szerepelhetnek rajta.

Nem végezhetünk olyan lekérdezést, melyben az attribútum listán némely attribútumok-

ra oszlopfüggvényt alkalmazunk, más attribútumokra nem, ekkor ugyanis az eredményt

tábla némely oszlopának egyetlen sora, más oszlopának pedig sok sora lenne, ami nem

rendezhet® táblázat formába. A lehetséges oszlop függvények:

• MIN(attributum) � Meghatározza az oszlop legkisebb értékét.

• MAX(attributum) � Meghatározza a legnagyobb értéket az oszlopban.

• SUM(attributum) � Kiszámítja az oszlop elemeinek összegét.

• AVG(attributum) � Kiszámítja az oszlop elemeinek átlagát.

• COUNT(attributum) � Kiszámítja az oszlop elemeinek számát.

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 29: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

4. fejezet: 2. gyakorlat - Függvények 29

4.1. ábra. A forma1 és hallgato táblák sémája

Spe iálisan, az oszlop függvények paraméterlistáján megjelenhet a DISTINCT kul sszó,

például a COUNT(DISTINCT attributum) függvény esetén a különböz® attribútum érté-

kek számát kapjuk vissza. A COUNT függvény paraméterlistáján használhatjuk továbbá a

* szimbólumot. Ebben az esetben az eredmény tábla különböz® sorainak számát kapjuk

eredményül.

4.2. Feladatok

A feladatok megoldása során egyrészt a Forma-1-es adatokat tartalmazó táblával dolgo-

zunk, másrészt bevezetünk egy új táblát, amely hallgatók adatait és féléves eredményeit

tartalmazza. A táblák sémája a 4.1. ábrán látható.

A táblák az alábbi szkript futtatásával hozhatók létre és tölthet®k fel néhány értékkel.

Ezen szkript utasításaival a kés®bbiekben fogunk foglalkozni, egyel®re sak azért adtuk

meg, hogy ha az olvasó számítógépen szeretne gyakorolni, illetve dolgozni a táblával, akkor

ezzel egyszer¶en legenerálhassa azt.

Kódrészlet 4.2.1: forma1-table.sql

CREATE TABLE forma1(

vnev VARCHAR2(12),

knev VARCHAR2(12),

csapat VARCHAR2(10),

kor NUMBER(2),

pontszam INTEGER,

rajtszam INTEGER

);

CREATE TABLE hallgato(

nkod CHAR(6),

vnev VARCHAR2(12),

knev VARCHAR2(12),

targykod CHAR(3),

targynev VARCHAR2(20),

jegy INTEGER

);

INSERT INTO forma1 VALUES(’Alonso’, ’Fernando’, ’Ferrari’, 32, 128, 3);

INSERT INTO forma1 VALUES(’Raikonnen’, ’Kimi’, ’Lotus’, 33, 120, 5);

INSERT INTO forma1 VALUES(’Massa’, ’Felipe’, ’Ferrari’, 30, 100, 4);

INSERT INTO forma1 VALUES(’Hamilton’, ’Lewis’, ’Mercedes’, 28, 92, 6);

INSERT INTO forma1 VALUES(’Button’, ’Jensen’, ’McLaren’, 35, 105, 8);

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 30: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

30 Adatbázisrendszerek gyakorlati jegyzet

INSERT INTO hallgato VALUES(’AAABBB’, ’Kis’, ’Ede’, ’ABC’, ’Adatbazisrendszerek’, 4);

INSERT INTO hallgato VALUES(’AAABBB’, ’Kis’, ’Ede’, ’ABB’, ’Operaciosrendszer’, 5);

INSERT INTO hallgato VALUES(’AAABBB’, ’Kis’, ’Ede’, ’AAA’, ’Programozas 1’, 5);

INSERT INTO hallgato VALUES(’BABABA’, ’Nagy’, ’Eva’, ’ABB’, ’Operaciosrendszer’, 3);

INSERT INTO hallgato VALUES(’BABABA’, ’Nagy’, ’Eva’, ’ABC’, ’Adatbazisrendszerek’, 5);

A szkript futtatásakor létrejöv® táblák tartalma az alábbi.

VNEV KNEV CSAPAT KOR PONTSZAM RAJTSZAM

------------ ------------ ---------- ---------- ---------- ----------

Alonso Fernando Ferrari 32 128 3

Raikonnen Kimi Lotus 33 120 5

Massa Felipe Ferrari 30 100 4

Hamilton Lewis Mercedes 28 92 6

Button Jensen McLaren 35 105 8

NKOD VNEV KNEV TARGYKOD TARGYNEV JEGY

------ ------------ ------------ -------- -------------------- ----------

AAABBB Kis Ede ABC Adatbazisrendszerek 4

AAABBB Kis Ede ABB Operaciosrendszer 5

AAABBB Kis Ede AAA Programozas 1 5

BABABA Nagy Eva ABB Operaciosrendszer 3

BABABA Nagy Eva ABC Adatbazisrendszerek 5

4.2.1. Feladat: Kérdezze le a pilóták teljes nevét! A megjelen® oszlop neve legyen

"Teljes nev" és a vezeték valamint keresztnév szóközzel elválasztva jelenjen meg!

4.2.1. Megoldás:

SELECT CONCAT(vnev, CONCAT(’ ’, knev)) AS "Teljes nev" FROM forma1;

Teljes nev

-------------------------

Alonso Fernando

Raikonnen Kimi

Massa Felipe

Hamilton Lewis

Button Jensen

Alternatív megoldásként természetesen az is helyes megoldás, ha a || konkatená iós ope-

rátort használjuk.

SELECT vnev || ’ ’ || knev AS "Teljes nev" FROM forma1;

4.2.2. Feladat: Kérdezze le a pilóták monogramját! A megjelen® oszlop neve legyen

"Monogram" és a vezeték valamint keresztnév szóközzel elválasztva jelenjen meg!

4.2.2. Megoldás:

SELECT SUBSTR(vnev, 1, 1) || SUBSTR(knev, 1, 1) AS "Monogram" FROM forma1;

Monogram

--------

AF

RK

MF

HL

BJ

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 31: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

4. fejezet: 2. gyakorlat - Függvények 31

4.2.3. Feladat: Módosítsa az el®z® lekérdezést úgy, hogy a pilóták monogramjai ABC

szerinti növekv® sorrendben jelenjenek meg!

4.2.3. Megoldás:

SELECT SUBSTR(vnev, 1, 1) || SUBSTR(knev, 1, 1) AS "Monogram" FROM forma1 ORDER BY "

Monogram";

Monogram

--------

AF

BJ

HL

MF

RK

4.2.4. Feladat: Kérdezze le a páratlan rajtszámú pilóták vezetéknevét és pontszámát!

4.2.4. Megoldás:

SELECT vnev, pontszam FROM forma1 WHERE MOD(rajtszam, 2) = 1;

VNEV PONTSZAM

------------ ----------

Alonso 128

Raikonnen 120

4.2.5. Feladat: Kérdezze le az Adatbázisrendszerek tárgyból elért eredmények átlagát!

4.2.5. Megoldás:

SELECT AVG(jegy) FROM hallgato WHERE targynev LIKE ’Adatbazisrendszerek’;

AVG(JEGY)

----------

4.5

4.2.6. Feladat: Kérdezze le az 'AAABBB' neptun-kódú hallgató legjobb jegyét!

4.2.6. Megoldás:

SELECT MAX(jegy) FROM hallgato WHERE nkod LIKE ’AAABBB’;

MAX(JEGY)

----------

5

4.2.7. Feladat: Kérdezze le a legjobb és legrosszabb jegyet 'Programozas 1' tárgyból!

A megjelen® oszlopok neve legyen rendre "Legjobb" és "Legrosszabb"!

4.2.7. Megoldás:

SELECT MAX(jegy) AS "Legjobb", MIN(jegy) AS "Legrosszabb" FROM hallgato WHERE targynev LIKE

’Programozas 1’;

Legjobb Legrosszabb

---------- -----------

5 5

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 32: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

32 Adatbázisrendszerek gyakorlati jegyzet

4.2.8. Feladat: Kérdezze le "Nagy Eva" tanulmányi átlagát a AVG függvény használata

nélkül! A megjelen® oszlop fejlé e legyen "Nagy Eva atlaga"!

4.2.8. Megoldás:

SELECT SUM(jegy)/COUNT(jegy) AS "Nagy Eva atlaga" FROM hallgato WHERE vnev LIKE ’Nagy’ AND

knev LIKE ’Eva’;

Nagy Eva atlaga

---------------

4

4.2.9. Feladat: Kérdezze le a Forma-1-ben induló sapatok számát!

4.2.9. Megoldás: Ne felejtsük el használni a DISTINCT kul sszót a COUNT paraméter-

listáján, hiszen használata nélkül a rekordok számát kapjuk vissza, nekünk viszont sak a

különböz® értékek száma kell.

SELECT COUNT(DISTINCT csapat) FROM forma1;

COUNT(DISTINCTCSAPAT)

---------------------

4

4.2.10. Feladat: Kérdezze le a Ferrari pilóták átlagos pontszámát!

4.2.10. Megoldás:

SELECT AVG(pontszam) FROM forma1 WHERE csapat LIKE ’Ferrari’;

AVG(PONTSZAM)

-------------

114

4.2.11. Feladat: Kérdezze le a Ferrari pilóták átlagos pontszámát!

4.2.11. Megoldás:

SELECT AVG(pontszam) FROM forma1 WHERE csapat LIKE ’Ferrari’;

AVG(PONTSZAM)

-------------

114

4.2.12. Feladat: Kérdezze le a hallgatók táblában szerepl® összes jegy átlagát egészekre

kerekítve! A megjelen® oszlop neve legyen "Evfolyam atlag"!

4.2.12. Megoldás:

SELECT ROUND(AVG(jegy)) AS "Evfolyam atlag" FROM hallgato;

Evfolyam atlag

--------------

4

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 33: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

4. fejezet: 2. gyakorlat - Függvények 33

4.2.13. Feladat: Kérdezze le, hány különböz® 'A' vagy 'a' bet¶vel kezd®d® tantárgy

szerepel a hallgato táblában!

4.2.13. Megoldás:

SELECT COUNT(DISTINCT targykod) FROM hallgato WHERE targynev LIKE ’A%’ OR targynev LIKE ’a%

’;

COUNT(DISTINCTTARGYKOD)

-----------------------

1

4.2.14. Feladat: Kérdezze le, hány különböz® 'A' vagy 'a' bet¶vel kezd®d® tantárgy

szerepel a hallgato táblában! A megoldáshoz használja a LOWER függvényt!

4.2.14. Megoldás:

SELECT COUNT(DISTINCT targykod) FROM hallgato WHERE LOWER(targynev) LIKE ’a%’;

COUNT(DISTINCTTARGYKOD)

-----------------------

1

A COUNT függvény paraméterlistáján a targykod attribútum helyett használhatjuk a *

szimbólumot is.

4.2.15. Feladat: Kérdezze le a 'Nagy' vezetéknev¶ hallgatók 'Adatbazisrendszerek'

tárgyból szerzett jegyeinek átlagát!

4.2.15. Megoldás:

SELECT AVG(jegy) FROM hallgato WHERE vnev LIKE ’Nagy’ AND targynev LIKE ’

Adatbazisrendszerek’;

AVG(JEGY)

----------

5

4.2.16. Feladat: Kérdezze le 'Kis Ede' legjobb és legrosszabb jegyét, úgy, hogy az

eredményként el®álló oszlop neve "Eredmeny" legyen, míg értéke a következ®höz hasonló

sztring: "Kis Ede legjobb jegye 5, legrosszabb jegye 4"!

4.2.16. Megoldás:

SELECT ’Kis Ede legjobb jegye ’ || MAX(jegy) || ’, legrosszabb jegye ’ || MIN(jegy) AS "

Eredmeny" FROM hallgato WHERE vnev LIKE ’Kis’ and knev LIKE ’Ede’;

Eredmeny

-------------------------------------------------

Kis Ede legjobb jegye 5, legrosszabb jegye 4

4.2.17. Feladat: Kérdezze le a 6 bet¶s vezetéknev¶ pilóták pontszámának átlagát!

4.2.17. Megoldás:

SELECT AVG(pontszam) FROM forma1 WHERE LENGTH(vnev) = 6;

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 34: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

34 Adatbázisrendszerek gyakorlati jegyzet

AVG(PONTSZAM)

-------------

116.5

4.2.18. Feladat: Kérdezze le a pilóták vezetéknevét, keresztnevét és a következ® m¶velet

eredményét a kapott érték szerinti sökken® sorrendben: eletkor/pontszam*rajtszam! (A

megvalósítás során az számokat tartalmazó oszlopot átnevezheti.)

4.2.18. Megoldás:

SELECT vnev, knev, kor/pontszam*rajtszam AS "szam" FROM forma1 ORDER BY "szam" DESC;

VNEV KNEV szam

------------ ------------ ----------

Button Jensen 2.666666667

Hamilton Lewis 1.826086957

Raikonnen Kimi 1.375

Massa Felipe 1.2

Alonso Fernando 0.75

4.2.19. Feladat: Kérdezze le az el®z® feladatban kiszámított különböz® számok legna-

gyobb, legkisebb, átlagos értékét, valamint a különböz® számok számát! Adjon az oszlo-

poknak beszédes neveket!

4.2.19. Megoldás:

SELECT MIN(DISTINCT kor/pontszam*rajtszam) AS "Legkisebb ertek",

MAX(DISTINCT kor/pontszam*rajtszam) AS "Legnagyobb ertek",

AVG(DISTINCT kor/pontszam*rajtszam) AS "Atlag ertek",

COUNT(DISTINCT kor/pontszam*rajtszam) AS "Kulonbozo ertekek szama" FROM forma1;

Legkisebb ertek Legnagyobb ertek Atlag ertek Kulonbozo ertekek szama

--------------- ---------------- ----------- -----------------------

0.75 2.666666667 1.563550725 5

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 35: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

5. fejezet

3. gyakorlat - Kereszt és bels®

összekap solások

Jelen gyakorlat keretein belül a kereszt és bels® összekap solás m¶ködésével és tulajdon-

ságaival ismerkedünk meg.

5.1. Elméleti alapok

A gyakorlati adatbáziskezelés területén nagyon gyakran el®fordul, hogy a számunkra szük-

séges, lekérdezend® adatok nem egy, hanem több táblában vannak jelen. Ekkor a táblák

tartalmát valamilyen módon fúzionálni kell. Erre szolgálnak az összekap solás (join) m¶-

veletek.

5.1.1. Kereszt összekap solás (CROSS JOIN)

Egy tábla tartalma rekordok rendezetlen halmaza. Egy táblát tekinthetünk tehát egy

halmaznak. Két vagy több tábla tartalma között a halmazelméleti Des artes-szorzat kép-

zést nevezzük kereszt összekap solásnak. Szintaktikailag egyszer¶en az összekap solandó

táblákat kell felsorolnunk a SELECT utasításban a FROM kul sszó után:

SELECT {attr1[, attr2]... | * } FROM tabla1[, tabla2]... [WHERE logikai_feltetel]

A lekérdezend® attribútumok természetesen a felsorolt táblák bármelyikéb®l kikerül-

hetnek. Szemantikailag az összekap solás az els® m¶velet, amelyet a SELECT utasítás

elvégez, az azt követ® projek ió és szelek ió már az összekap solt táblán operál. Szemlél-

tetésként tekintsük az 5.1. ábrán látható sémát, melyben 4 táblát de�niáltunk. A táblák

az alábbi szkript segítségével állíthatók el®:

CREATE TABLE dolgozo(

dazon VARCHAR2(3),

vnev VARCHAR2(10),

knev VARCHAR2(10),

fizetes NUMBER(7)

);

© Ková s György, Debre eni Egyetem

Page 36: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

36 Adatbázisrendszerek gyakorlati jegyzet

5.1. ábra. A dolgozo, osztaly, munka és hobbi táblák sémái

CREATE TABLE osztaly(

oazon VARCHAR2(3),

nev VARCHAR2(10)

);

CREATE TABLE munka(

dazon VARCHAR2(3),

oazon VARCHAR2(3)

);

CREATE TABLE hobbi(

dazon VARCHAR2(3),

hnev VARCHAR2(10)

);

INSERT INTO dolgozo VALUES(’AA’, ’Kis’, ’Janos’, 100000);

INSERT INTO dolgozo VALUES(’AB’, ’Nagy’, ’Eva’, 200000);

INSERT INTO dolgozo VALUES(’BB’, ’Szabo’, ’Sandor’, 160000);

INSERT INTO osztaly VALUES(’O1’, ’Marketing’);

INSERT INTO osztaly VALUES(’O2’, ’Vezetes’);

INSERT INTO munka VALUES(’AA’, ’O1’);

INSERT INTO munka VALUES(’AB’, ’O2’);

INSERT INTO munka VALUES(’BB’, ’O1’);

INSERT INTO hobbi VALUES(’AA’, ’futas’);

INSERT INTO hobbi VALUES(’AA’, ’uszas’);

INSERT INTO hobbi VALUES(’AB’, ’futas’);

INSERT INTO hobbi VALUES(’BB’, ’uszas’);

A táblák tartalma a következ®:

SELECT * FROM dolgozo

DAZON VNEV KNEV FIZETES

----- ---------- ---------- ----------

AA Kis Janos 100000

AB Nagy Eva 200000

BB Szabo Sandor 160000

SELECT * FROM osztaly

OAZON NEV

----- ----------

O1 Marketing

O2 Vezetes

SELECT * FROM munka

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 37: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

5. fejezet: 3. gyakorlat - Kereszt és bels® összekap solások 37

DAZON OAZON

----- -----

AA O1

AB O2

BB O1

SELECT * FROM hobbi

DAZON HNEV

----- ----------

AA futas

AA uszas

AB futas

BB uszas

Lássuk, milyen eredményt kapunk, ha összekap soljuk a dolgozo táblát a munka táb-

lával!

SELECT * FROM dolgozo, munka

DAZON VNEV KNEV FIZETES DAZON OAZON

----- ---------- ---------- ---------- ----- -----

AA Kis Janos 100000 AA O1

AA Kis Janos 100000 AB O2

AA Kis Janos 100000 BB O1

AB Nagy Eva 200000 AA O1

AB Nagy Eva 200000 AB O2

AB Nagy Eva 200000 BB O1

BB Szabo Sandor 160000 AA O1

BB Szabo Sandor 160000 AB O2

BB Szabo Sandor 160000 BB O1

Jól látható, hogy valóban összekap solás történt: a dolgozo tábla minden rekordja

össze lett kombinálva a munka tábla minden rekordjával. Hasonlóan összekap solhatunk

három táblát is:

SELECT * FROM dolgozo, munka, osztaly;

DAZON VNEV KNEV FIZETES DAZON OAZON OAZON NEV

----- ---------- ---------- ---------- ----- ----- ----- ----------

AA Kis Janos 100000 AA O1 O1 Marketing

AA Kis Janos 100000 AB O2 O1 Marketing

AA Kis Janos 100000 BB O1 O1 Marketing

AB Nagy Eva 200000 AA O1 O1 Marketing

AB Nagy Eva 200000 AB O2 O1 Marketing

AB Nagy Eva 200000 BB O1 O1 Marketing

BB Szabo Sandor 160000 AA O1 O1 Marketing

BB Szabo Sandor 160000 AB O2 O1 Marketing

BB Szabo Sandor 160000 BB O1 O1 Marketing

AA Kis Janos 100000 AA O1 O2 Vezetes

AA Kis Janos 100000 AB O2 O2 Vezetes

AA Kis Janos 100000 BB O1 O2 Vezetes

AB Nagy Eva 200000 AA O1 O2 Vezetes

AB Nagy Eva 200000 AB O2 O2 Vezetes

AB Nagy Eva 200000 BB O1 O2 Vezetes

BB Szabo Sandor 160000 AA O1 O2 Vezetes

BB Szabo Sandor 160000 AB O2 O2 Vezetes

BB Szabo Sandor 160000 BB O1 O2 Vezetes

Két kérdés merülhet fel az olvasóban:

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 38: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

38 Adatbázisrendszerek gyakorlati jegyzet

1. Ha az összekap solt tábla ugyanolyan nev¶ attribútumokat tartalmaz, akkor hogyan

hivatkozhatunk az attribútum listán vagy a WHERE feltételben az egyes attribútu-

mokra? A válasz az, hogy min®sítéssel, azaz tabla.attributum módon. Például

ha az összekap solást követ®en szeretnénk lekérdezni a dolgozo tabla dazon attri-

bútumát, a következ® módon járhatunk el:

SELECT dolgozo.dazon FROM dolgozo, munka;

DAZON

-----

AA

AA

AA

AB

AB

AB

BB

BB

BB

A hosszú táblanevek kiírásának elkerülésére rövidíthetjük a táblaneveket, úgy, hogy

a FROM kul sszó után a táblák felsorolásánál a tábla nevét követ®en megadunk egy

egyszer¶bb, rövidebb azonosítót, például egy bet¶t:

SELECT d.dazon FROM dolgozo d, munka;

DAZON

-----

AA

AA

AA

AB

AB

AB

BB

BB

BB

2. Észrevehetjük, hogy a Des artes-szorzat képzés eredményeként el®álló táblában olyan

sorok illetve rekord kombiná iók is szerepelnek, amelyek nem összetartozó adatokat

tartalmaznak. Hogyan szabadulhatunk meg ezen, számunkra értelmetlen, használ-

hatatlan soroktól? A válasz az, hogy egy egyszer¶ WHERE feltétellel, amellyel meg-

határozzuk, hogy mely sorok tartalmaznak összetartozó informá iót. Jellemz®en

egyfajta azonosítók egyezését kell el®írnunk:

SELECT * FROM dolgozo d, munka m, osztaly o WHERE d.dazon = m.dazon AND o.oazon = m.

oazon;

DAZON VNEV KNEV FIZETES DAZON OAZON OAZON NEV

----- ---------- ---------- ---------- ----- ----- ----- ----------

AA Kis Janos 100000 AA O1 O1 Marketing

AB Nagy Eva 200000 AB O2 O2 Vezetes

BB Szabo Sandor 160000 BB O1 O1 Marketing

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 39: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

5. fejezet: 3. gyakorlat - Kereszt és bels® összekap solások 39

Szemmel láthatóan sak a számunkra érdekes, hasznos, konzisztens sorok maradtak meg,

amelyekb®l rögtön lesz¶rhet®, hogy Kis János a Marketing osztályon dolgozik és 100000

forint a �zetése, holott ezen informá iók a korábbiakban külön táblákban voltak tárol-

va. Természetesen egy projek iós kiegészítéssel, azaz az attribútum listán az azonosítók

elhagyásával még hasznosabb lekérdezéshez jutunk:

SELECT vnev, knev, fizetes, nev FROM dolgozo d, munka m, osztaly o WHERE d.dazon = m.dazon

AND o.oazon = m.oazon;

VNEV KNEV FIZETES NEV

---------- ---------- ---------- ----------

Kis Janos 100000 Marketing

Nagy Eva 200000 Vezetes

Szabo Sandor 160000 Marketing

5.1.2. Bels® összekap solás (INNER JOIN)

A bels® összekap solás a kereszt-összekap soláshoz, azaz a Des artes-szorzat képzéshez

nagyon hasonló összekap solás típus. Szintaktikailag az összekap solandó táblák között

a vessz®vel történ® felsorolás helyett a INNER JOIN kul sszavakat kell használnunk, az

összekap solás feltételét pedig az ON kul sszót követ®en adhatjuk meg.

SELECT {attr1[, attr2]... | * } FROM tabla1 [INNER JOIN tabla2 ON logikai_feltetel]... [

WHERE logikai_feltetel]

Szemantikáját tekintve elvégzi a kereszt-összekap solást a megadott táblákon, majd

az ON kul sszót követ® logikai feltételnek megfelel®en leválogatja a számunkra hasznos

sorokat. Természetesen ezen sorok még tovább sz¶rhet®k a szokásos WHERE utáni logikai

feltétellel. Az el®z® szakasz utolsó lekérdezése INNER JOIN-nal az alábbi módon alakul:

SELECT vnev, knev, fizetes, nev

FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon INNER JOIN osztaly o ON o.oazon =

m.oazon;

VNEV KNEV FIZETES NEV

---------- ---------- ---------- ----------

Kis Janos 100000 Marketing

Nagy Eva 200000 Vezetes

Szabo Sandor 160000 Marketing

A megközelítés el®nye, hogy a táblákat összekap soló feltétel elegánsan, a táblák megha-

tározása után jelenik meg, nem pedig a WHERE feltétel részeként. Összességében azonban

ugyanazon eredményt kaphatjuk egy megfelel® kereszt-összekap solás és bels® összekap-

solás esetén.

5.2. Feladatok

A feladatok során a korábban bemutatott, dolgozók adatait tartalmazó táblákra hivatko-

zunk.

5.2.1. Feladat: Kérdezze le az egyes dolgozók vezetéknevét, keresztnevét és az osztályt,

ahol dolgoznak!

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 40: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

40 Adatbázisrendszerek gyakorlati jegyzet

5.2.1. Megoldás: Kereszt összekap solással:

SELECT vnev, knev, nev FROM dolgozo d, munka m, osztaly o WHERE d.dazon = m.dazon AND o.

oazon = m.oazon;

VNEV KNEV NEV

---------- ---------- ----------

Kis Janos Marketing

Nagy Eva Vezetes

Szabo Sandor Marketing

Bels® összekap solással:

SELECT vnev, knev, nev FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon INNER JOIN

osztaly o ON o.oazon = m.oazon;

5.2.2. Feladat: Kérdezze le az egyes dolgozók vezetéknevét, keresztnevét, osztályát és

hobbijait!

5.2.2. Megoldás: Kereszt összekap solással:

SELECT vnev, knev, nev, hnev FROM dolgozo d, munka m, osztaly o, hobbi h WHERE d.dazon = m.

dazon AND o.oazon = m.oazon AND d.dazon = h.dazon;

VNEV KNEV NEV HNEV

---------- ---------- ---------- ----------

Kis Janos Marketing futas

Kis Janos Marketing uszas

Nagy Eva Vezetes futas

Szabo Sandor Marketing uszas

Bels® összekap solással:

SELECT vnev, knev, nev, hnev FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon INNER

JOIN osztaly o ON o.oazon = m.oazon INNER JOIN hobbi h ON d.dazon = h.dazon;

5.2.3. Feladat: Kérdezze le, hány dolgozó hobbija a futás!

5.2.3. Megoldás:

SELECT COUNT(*) FROM hobbi WHERE hnev LIKE ’futas’;

COUNT(*)

----------

2

5.2.4. Feladat: Kérdezze le, hány hobbija van 'Kis Janos'-nak!

5.2.4. Megoldás: Kereszt összekap solással:

SELECT COUNT(*) FROM dolgozo d, hobbi h WHERE d.dazon = h.dazon AND d.vnev LIKE ’Kis’ AND d

.knev LIKE ’Janos’;

COUNT(*)

----------

2

Bels® összekap solással:

SELECT COUNT(*) FROM dolgozo d INNER JOIN hobbi h ON d.dazon = h.dazon WHERE d.vnev LIKE ’

Kis’ AND d.knev LIKE ’Janos’;

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 41: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

5. fejezet: 3. gyakorlat - Kereszt és bels® összekap solások 41

Jól látható a bels® összekap solás szintaktikájának el®nye a keresztösszekap solással szem-

ben: WHERE feltétel jelenléte esetén is szépen elválnak egymástól a tábla-összekap soló

feltételek és a sz¶r® feltételek.

5.2.5. Feladat: Kérdezze le, hányan dolgoznak a 'Marketing' osztályon!

5.2.5. Megoldás: Kereszt összekap solással:

SELECT COUNT(*) FROM osztaly o, munka m WHERE o.oazon = m.oazon AND m.nev LIKE ’Marketing’;

COUNT(*)

----------

2

Bels® összekap solással:

SELECT COUNT(*) FROM osztaly o INNER JOIN munka m ON o.oazon = m.oazon WHERE o.nev LIKE ’

Marketing’;

5.2.6. Feladat: Kérdezze le a 'Marketing' osztályon dolgozók hobbijait! Az eredmény

táblában minden hobbi sak egyszer szerepeljen!

5.2.6. Megoldás: Kereszt összekap solással:

SELECT DISTINCT hnev FROM osztaly o, munka m, dolgozo d, hobbi h WHERE o.oazon = m.oazon

AND m.dazon = d.dazon AND d.dazon = h.dazon AND o.nev LIKE ’Marketing’;

HNEV

----------

futas

uszas

Bels® összekap solással:

SELECT DISTINCT hnev FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon INNER JOIN

osztaly o ON o.oazon = m.oazon INNER JOIN hobbi h ON d.dazon = h.dazon;

5.2.7. Feladat: Kérdezze le hány különböz® hobbija van a 'Marketing' osztályon

dolgozóknak!

5.2.7. Megoldás: Kereszt összekap solással:

SELECT COUNT(DISTINCT hnev) FROM osztaly o, munka m, dolgozo d, hobbi h WHERE o.oazon = m.

oazon AND m.dazon = d.dazon AND d.dazon = h.dazon AND o.nev LIKE ’Marketing’;

COUNT(DISTINCTHNEV)

-------------------

2

Bels® összekap solással:

SELECT COUNT(DISTINCT hnev) FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon INNER

JOIN osztaly o ON o.oazon = m.oazon INNER JOIN hobbi h ON d.dazon = h.dazon;

5.2.8. Feladat: Kérdezze le a 'Marketing' osztályon dolgozók átlag�zetését!

5.2.8. Megoldás: Kereszt összekap solással:

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 42: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

42 Adatbázisrendszerek gyakorlati jegyzet

SELECT AVG(fizetes) FROM dolgozo d, munka m, osztaly o WHERE d.dazon = m.dazon AND o.oazon

= m.oazon AND nev LIKE ’Marketing’;

AVG(FIZETES)

------------

130000

Bels® összekap solással:

SELECT AVG(fizetes) FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon INNER JOIN

osztaly o ON m.oazon = o.oazon WHERE nev LIKE ’Marketing’;

5.2.9. Feladat: Kérdezze le a legnagyobb �zetésbeli különbséget!

5.2.9. Megoldás:

SELECT MAX(fizetes) - MIN(fizetes) FROM dolgozo;

MAX(FIZETES)-MIN(FIZETES)

-------------------------

100000

5.2.10. Feladat: Kérdezze le a dolgozók �zetéseinek viszonyát úgy, hogy a lekérdezett

táblázat minden sorában két név jelenjen meg és az els® két oszlop által megadott név¶

dolgozó nagyobb �zetéssel rendelkezzen, mint a második két oszlop által megadott nev¶

dolgozó!

5.2.10. Megoldás: Az összekap soláshoz szükséges informá iók most egyetlen táblában

vannak, azonban a táblát össze kell kap solnunk önmagával ahhoz, hogy az eredmény tábla

egy sorában két nevet jeleníthessünk meg.

SELECT a.vnev, a.knev, b.vnev, b.knev FROM dolgozo a, dolgozo b WHERE a.fizetes > b.fizetes

;

VNEV KNEV VNEV KNEV

---------- ---------- ---------- ----------

Nagy Eva Kis Janos

Nagy Eva Szabo Sandor

Szabo Sandor Kis Janos

Bels® összekap solással:

SELECT a.vnev, a.knev, b.vnev, b.knev FROM dolgozo a INNER JOIN dolgozo b ON a.fizetes > b.

fizetes;

5.2.11. Feladat: Kérdezze le azon dolgozók nevét, akinek a futás vagy az úszás a

hobbija!

5.2.11. Megoldás: Kereszt összekap solással:

SELECT DISTINCT vnev, knev FROM dolgozo, hobbi WHERE dolgozo.dazon = hobbi.dazon AND (hnev

LIKE ’futas’ OR hnev LIKE ’uszas’);

VNEV KNEV

---------- ----------

Nagy Eva

Szabo Sandor

Kis Janos

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 43: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

5. fejezet: 3. gyakorlat - Kereszt és bels® összekap solások 43

Bels® összekap solással:

SELECT DISTINCT vnev, knev FROM dolgozo INNER JOIN hobbi ON dolgozo.dazon = hobbi.dazon

WHERE (hnev LIKE ’futas’ OR hnev LIKE ’uszas’);

5.2.12. Feladat: Módosítsa az el®z® lekérdezést úgy, hogy az egyes dolgozók els®dle-

gesen vezetéknév szerint növekv®, másodlagosan keresztnév szerint sökken® sorrendben

jelenjenek meg!

5.2.12. Megoldás: Kereszt összekap solással:

SELECT DISTINCT vnev, knev FROM dolgozo, hobbi WHERE dolgozo.dazon = hobbi.dazon AND (hnev

LIKE ’futas’ OR hnev LIKE ’uszas’) ORDER BY vnev, knev DESC;

VNEV KNEV

---------- ----------

Nagy Eva

Szabo Sandor

Kis Janos

Bels® összekap solással:

SELECT DISTINCT vnev, knev FROM dolgozo INNER JOIN hobbi ON dolgozo.dazon = hobbi.dazon

WHERE (hnev LIKE ’futas’ OR hnev LIKE ’uszas’) ORDER BY vnev, knev DESC;

5.2.13. Feladat: Kérdezze le azon dolgozók nevét, akinek a futás és az úszás is a

hobbijai közé tartozik!

5.2.13. Megoldás: Kereszt összekap solással: Esetünkben össze kell kap solnunk a

dolgozo táblát a hobbi táblával, de ehhez mégegyszer hozzá kell kap solni a hobbi

táblát, hogy egyszerre ellen®rizhessük a két hobbi jelenlétét!

SELECT vnev, knev FROM dolgozo, hobbi h1, hobbi h2 WHERE dolgozo.dazon = h1.dazon AND

dolgozo.dazon = h2.dazon AND h1.hnev LIKE ’futas’ AND h2.hnev LIKE ’uszas’;

VNEV KNEV

---------- ----------

Kis Janos

Bels® összekap solással:

SELECT vnev, knev FROM dolgozo INNER JOIN hobbi h1 ON dolgozo.dazon = h1.dazon INNER JOIN

hobbi h2 ON dolgozo.dazon = h2.dazon WHERE h1.hnev LIKE ’futas’ AND h2.hnev LIKE ’uszas

’;

5.2.14. Feladat: Kérdezze le azon dolgozók számát, akinek a futás és az úszás is a

hobbijai közé tartozik!

5.2.14. Megoldás: Kereszt összekap solással:

SELECT COUNT(*) FROM dolgozo, hobbi h1, hobbi h2 WHERE dolgozo.dazon = h1.dazon AND dolgozo

.dazon = h2.dazon AND h1.hnev LIKE ’futas’ AND h2.hnev LIKE ’uszas’;

COUNT(*)

----------

1

Bels® összekap solással:

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 44: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

44 Adatbázisrendszerek gyakorlati jegyzet

SELECT COUNT(*) FROM dolgozo INNER JOIN hobbi h1 ON dolgozo.dazon = h1.dazon INNER JOIN

hobbi h2 ON dolgozo.dazon = h2.dazon WHERE h1.hnev LIKE ’futas’ AND h2.hnev LIKE ’uszas

’;

5.2.15. Feladat: Hány rekord szerepel abban a táblában, amelyet a dolgozo, osztaly,

munka és hobbi táblák kereszt összekap solásával kapunk?

5.2.15. Megoldás: 3 · 2 · 3 · 4 = 72

5.2.16. Feladat: Kérdezze le a futás hobbival rendelkez®k átlag�zetését!

5.2.16. Megoldás: Kereszt összekap solással:

SELECT AVG(fizetes) FROM dolgozo d, munka m, osztaly o, hobbi h WHERE d.dazon = m.dazon AND

o.oazon = m.oazon AND d.dazon = h.dazon AND h.hnev LIKE ’futas’;

AVG(FIZETES)

------------

150000

Bels® összekap solással:

SELECT AVG(fizetes) FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon INNER JOIN

osztaly o ON o.oazon = m.oazon INNER JOIN hobbi h ON d.dazon = h.dazon WHERE h.hnev

LIKE ’futas’;

5.2.17. Feladat: Kérdezze le azon dolgozók számát, akik legalább két osztályon dol-

goznak!

5.2.17. Megoldás: Kereszt összekap solással:

SELECT COUNT(*)/2 FROM munka a, munka b WHERE a.dazon = b.dazon AND a.oazon <> b.oazon;

COUNT(*)

----------

0

Bels® összekap solással:

SELECT COUNT(*)/2 FROM munka a INNER JOIN munka b ON a.dazon = b.dazon WHERE a.oazon <> b.

oazon;

5.2.18. Feladat: Kérdezze le azon osztályok számát, amelyeken legalább két ember

dolgozik!

5.2.18. Megoldás: Kereszt összekap solással:

SELECT COUNT(*)/2 FROM munka a, munka b WHERE a.oazon = b.oazon AND a.dazon <> b.dazon;

COUNT(*)

----------

0

Bels® összekap solással:

SELECT COUNT(*)/2 FROM munka a INNER JOIN munka b ON a.oazon = b.oazon WHERE a.dazon <> b.

dazon;

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 45: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

6. fejezet

4. gyakorlat - Spe iális értékek és

táblák

Jelen gyakorlat keretein belül az adatbázisokban, azaz táblákban megjelen® spe iális érték,

a NULL érték kezelésével, illetve a DUAL tábla használatával foglalkozunk.

6.1. Elméleti alapok

6.1.1. NULL

A gyakorlatban el®fordulnak szituá iók, amikor egy táblát nem tudunk hibátlanul kitöl-

teni, nem ismerünk minden informá iót. A hiányzó értékek jelölésére a NULL értéket

használhatjuk. A NULL érték megjelenhet numerikus vagy sztring típusú attribútumok

értékeként is.

Egy attribútum NULL mivoltát a attr IS NULL kifejezéssel vizsgálhatjuk logikai ki-

fejezésekben. Egy attribútum nem-nulla mivoltát pedig ennek negáltjával, az attri IS

NOT NULL kifejezéssel. Jogosan merülhet fel a kérdés az olvasóban, hogy ha egy oszlop

szint¶ összegzést vagy átlagolást végzünk, akkor ahhoz hagyon járulnak hozzá a NULL ér-

tékek. A válasz az, hogy a NULL értékeket az oszlopfüggvények nem veszik �gyelembe. A

NVL függvény segítségével azonban elérhetjük, hogy a NULL értékeket egy spe iális, álta-

lunk meghatározott értékkel számítsák be az oszlopfüggvények. A NVL(attr, value)

függvény két paramétert kap: az els® az attribútum neve, amely felvehet NULL értéket,

a második pedig a NULL érték helyettesítési értéke. Például a NVL(fizetes, 100000)

függvény használata esetén ha a fizetes mez® értéke NULL, azaz határozatlan, akkor a

függvény visszatérési értéke 1000000.

6.1.2. A DUAL tábla

A DUAL tábla egy spe iális, egy oszloppal és egy sorral rendelkez® tábla. Egyetlen oszlo-

pának neve "Dummy", s az oszlopban az egyetlen érték "X". A táblát akkor használjuk,

© Ková s György, Debre eni Egyetem

Page 46: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

46 Adatbázisrendszerek gyakorlati jegyzet

6.1. ábra. A konyv, szerzo, mu és raktar táblák sémái

ha tábláktól független lekérdezést szeretnénk sinálni. Például valamilyen matematikai

m¶veletet:

SELECT 1 + 2 FROM DUAL

1+2

----------

3

SELECT COS(0.3) FROM DUAL

COS(0.3)

----------

0.9553364891

6.2. Feladatok

A feladatok során a 6.1. ábrán látható sémájú adatbázissal dolgozunk.

A táblák az alábbi szkripttel hozhatók létre és tölthet®k fel:

CREATE TABLE konyv(

kazon VARCHAR2(4),

cim VARCHAR2(20),

ar NUMBER

);

CREATE TABLE szerzo(

szazon VARCHAR2(4),

nev VARCHAR2(20),

szuletes NUMBER(4)

);

CREATE TABLE mu(

szazon VARCHAR2(4),

kazon VARCHAR2(4)

);

CREATE TABLE raktar(

kazon VARCHAR2(4),

darab INTEGER

);

INSERT INTO konyv VALUES(’A0’, ’Toldi’, NULL);

INSERT INTO konyv VALUES(’A1’, ’Toldi esteje’, 1000);

INSERT INTO konyv VALUES(’A2’, ’Egri csillagok’, 1500);

INSERT INTO konyv VALUES(’A3’, ’Elmeleti fizika 1’, 6000);

INSERT INTO szerzo VALUES(’B0’, ’Arany Janos’, 1817);

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 47: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

6. fejezet: 4. gyakorlat - Spe iális értékek és táblák 47

INSERT INTO szerzo VALUES(’B1’, ’Gardonyi Geza’, NULL);

INSERT INTO szerzo VALUES(’B2’, ’Landau’, NULL);

INSERT INTO szerzo VALUES(’B3’, ’Lifsic’, NULL);

INSERT INTO mu VALUES(’B0’, ’A0’);

INSERT INTO mu VALUES(’B0’, ’A1’);

INSERT INTO mu VALUES(’B1’, ’A2’);

INSERT INTO mu VALUES(’B2’, ’A3’);

INSERT INTO mu VALUES(’B3’, ’A3’);

INSERT INTO raktar VALUES(’A0’, NULL);

INSERT INTO raktar VALUES(’A1’, 4);

INSERT INTO raktar VALUES(’A2’, 3);

INSERT INTO raktar VALUES(’A3’, 2);

A táblák tartalma:

SELECT * FROM konyv;

KAZON CIM AR

----- -------------------- ----------

A0 Toldi

A1 Toldi esteje 1000

A2 Egri csillagok 1500

A3 Elmeleti fizika 1 6000

SELECT * FROM szerzo;

SZAZON NEV SZULETES

------ -------------------- ---------

B0 Arany Janos 1817

B1 Gardonyi Geza

B2 Landau

B3 Lifsic

SELECT * FROM mu;

SZAZON KAZON

------ -----

B0 A0

B0 A1

B1 A2

B2 A3

B3 A3

SELECT * FROM raktar;

KAZON DARAB

----- ----------

A0

A1 4

A2 3

A3 2

Figyelje meg, hogy a táblákból valóban hiányzanak bizonyos mez®k értékei.

6.2.1. Feladat: Kérdezze le azon szerz®k neveit, akiknek nem ismerjük a születési

dátumát!

6.2.1. Megoldás:

SELECT nev FROM szerzo WHERE szuletes IS NULL;

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 48: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

48 Adatbázisrendszerek gyakorlati jegyzet

NEV

--------------------

Gardonyi Geza

Landau

Lifsic

6.2.2. Feladat: Kérdezze le a könyvek ímeit és egységárukat!

6.2.2. Megoldás:

SELECT cim, ar FROM konyv;

CIM AR

-------------------- ----------

Toldi

Toldi esteje 1000

Egri csillagok 1500

Elmeleti fizika 1 6000

6.2.3. Feladat: Kérdezze le a könyvek ímeit és egységárukat! Amely könyvnek nem

ismerjük az árát, ott alapértelmezetten 2000 jelenjen meg!

6.2.3. Megoldás:

SELECT cim, NVL(ar, 2000) FROM konyv;

CIM NVL(AR,2000)

-------------------- ------------

Toldi 2000

Toldi esteje 1000

Egri csillagok 1500

Elmeleti fizika 1 6000

6.2.4. Feladat: Kérdezze le azon m¶vek ímét, amelyek valamely szerz®je 1800 után

született. Ha nem ismerjük a szerz® születési dátumát, tekintsük azt alapértelmezetten

1900-nak! Ügyeljen rá, hogy az eredmény táblában egy m¶ sak egyszer szerepeljen!

6.2.4. Megoldás:

SELECT DISTINCT cim

FROM konyv, szerzo, mu

WHERE konyv.kazon = mu.kazon AND szerzo.szazon = mu.szazon AND NVL(szuletes, 1900) >

1800;

CIM

--------------------

Elmeleti fizika 1

Toldi esteje

Toldi

Egri csillagok

6.2.5. Feladat: Kérdezze le Arany János könyveinek átlagos egységárát!

6.2.5. Megoldás:

SELECT AVG(NVL(ar, 2000))

FROM konyv k, szerzo sz, mu m

WHERE k.kazon = m.kazon AND sz.szazon = m.szazon AND nev=’Arany Janos’;

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 49: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

6. fejezet: 4. gyakorlat - Spe iális értékek és táblák 49

AVG(AR)

----------

1000

6.2.6. Feladat: Kérdezze le Arany János könyveinek átlagos egységárát! Ha valamely

könyv egységárát nem ismerjük, 2000 forinttal számoljon!

6.2.6. Megoldás:

SELECT AVG(NVL(ar, 2000))

FROM konyv k, szerzo sz, mu m

WHERE k.kazon = m.kazon AND sz.szazon = m.szazon AND nev=’Arany Janos’;

AVG(NVL(AR,2000))

-----------------

1500

6.2.7. Feladat: Kérdezze le Arany János könyveinek raktári értékét! Ha nem ismer-

jük egy könyv árát, tekintsük azt 2000 forintnak, ha nem ismerjük egy könyv raktári

példányainak a számát, tekintsük azt 1-nek!

6.2.7. Megoldás:

SELECT SUM(NVL(ar, 2000)*NVL(darab, 1))

FROM konyv k, szerzo sz, mu m, raktar r

WHERE k.kazon = m.kazon AND sz.szazon = m.szazon AND r.kazon = k.kazon AND nev=’Arany

Janos’;

SUM(NVL(AR,2000)*NVL(DARAB,1))

------------------------------

6000

6.2.8. Feladat: Határozza meg a

sin π/3 + cosπ/3 kifejezés értékét! π értékét tekintse

3.1415-nek!

6.2.8. Megoldás:

SELECT SQRT(SIN(3.14/3) + COS(3.14/3)) FROM DUAL;

SQRT(SIN(3.14/3)+COS(3.14/3))

-----------------------------

1.168853938

6.2.9. Feladat: Határozza meg a z = 3+4i komplex szám normáját és argumentumát!

Az eredmény tábla két oszlopának fejlé e "Norma" és "Argumentum" legyen!

6.2.9. Megoldás:

SELECT SQRT(3*3 + 4*4) AS "Norma", ATAN(4/3) AS "Argumentum" FROM DUAL;

Norma Argumentum

---------- ----------

5 0.927295218

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 50: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

50 Adatbázisrendszerek gyakorlati jegyzet

6.2.10. Feladat: Határozza meg a z = 3 + 4i komplex szám trigonometrikus alakját!

Az eredmény tábla egyetlen oszlopának fejlé e "Trigonometrikus alak" legyen és benne

z = |z|(cos(arg(z))+ isin(arg(z))) formában szerepeljen az eredmény, ahol a |z| és arg(z)értékét a szám normájával és argumentumával helyettesíti!

6.2.10. Megoldás:

SELECT ’z= ’ || SQRT(3*3 + 4*4) || ’(cos(’ || ATAN(4/3) || ’) + isin(’ || ATAN(4/3) || ’))’

AS "Trigonometrikus alak" FROM DUAL;

Trigonometrikus alak

----------------------------------------------------------------------------------------------------

z= 5(cos(.927295218001612232428512462922428761038) + isin

(.927295218001612232428512462922428761038))

6.2.11. Feladat: Kérdezze le a szerz®k nevét és születési évét. Ha nem ismerjük a

születési évet, akkor -1 jelenjen meg a megfelel® mez®ben!

6.2.11. Megoldás:

SELECT nev, NVL(szuletes, -1) FROM szerzo;

NEV NVL(SZULETES,-1)

-------------------- ----------------

Arany Janos 1817

Gardonyi Geza -1

Landau -1

Lifsic -1

6.2.12. Feladat: Kérdezze le azon m¶vek ímét és szerz®jét, amelyekhez minden adatot

ismerünk (egységár, szerz® születési éve)!

6.2.12. Megoldás:

6.2.13. Feladat: Kérdezze le, hány különöbz® könyve szerepel a legtöbb könyvvel

rendelkez® szerz®nek az adatbázisban!

6.2.14. Feladat: Kérdezze le azon szerz®k könyvienek átlagos egységárát, akik születési

dátuma nem szerepel az adatbázisban!

6.2.15. Feladat: Kérdezze le azon könyvek ímét, amelyekr®l nem tudjuk, hogy hány

szerepel raktáron!

6.2.16. Feladat: Kérdezze le azon könyvek ímét, amelyeknek legalább két szerz®je

van! Az eredmény táblában minden ím sak egyszer szerepeljen!

6.2.17. Feladat: Kérdezze le azon szerz®k nevét, akik társszerz®vel rendelkeznek az

adatbázis szerint! Az eredmény táblában minden szerz® sak egyszer szerepeljen!

6.2.18. Feladat: Kérdezze le Landau és Lifsi közös m¶veib®l a raktáron lév® könyveinek

számát, átlagos számát, átlagos egységárát, átlagos raktári értékét! Ha nem ismerjük az

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 51: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

6. fejezet: 4. gyakorlat - Spe iális értékek és táblák 51

egységárat, 1000 forinttal számoljunk. Ha nem ismerjük a raktáron lév® könyvek számát,

akkor 1-el számoljunk.

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 52: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

52 Adatbázisrendszerek gyakorlati jegyzet

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 53: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

7. fejezet

5. gyakorlat - Dátum, konverzió,

természetes és küls® összekap solás

A gyakorlat keretein belül megismerkedünk a dátumtípussal s az ahhoz kap solódó függ-

vényekkel, a konverziós függvényekkel, valamint az összekap solások további két típusával:

a természetes és küls® összekap solással.

7.1. Elméleti alapok

7.1.1. Dátumtípus és dátumfüggvények

A való világban megjelen® és adatbázisokban tárolt adatok jellemz® sajátossága az id®-

beliség, azaz legtöbb esetben dátum vagy id®értéket is tárolnunk kell az adatbázisokban.

Dátum és id® értékek ábrázolására Ora le SQL-ben a DATE típust használhatjuk. A DATE

típus egyszerre tárol dátumot és id®t, továbbá nin senek paraméterei, mint például a

NUMBER(n,p) típusnak. A DATE típusra értelmezettek a =, !=, >, <, >=, <= operátorok,

azaz dátum és id® értékeket természetes módon tudunk összehasonlítani operátorok segít-

ségével. Dátum típusokra értelemszer¶en használhatjuk a + és - aritmetikai operátorokat,

végrehajtásuk eredménye szintén dátumtípus lesz.

Az alább bemutatásra kerül® dátumfüggvények tetsz®leges dátum típusú attribútumra

alkalmazhatók, használatukat mi most az aktuális rendszerid®n mutatjuk be. A rendszer-

id®t a SYSDATE attribútum lekérdezésével kaphatjuk meg a korábban bemutatott, spe iális

DUAL táblából.

A lekérdezés és eredménye tehát:

SELECT SYSDATE FROM DUAL

SYSDATE

---------

24-OCT-13

Láthatjuk, hogy id® nem jelenik meg, s a dátum maga is a szokásos, angolszász írási

rendnek megfelel®en kerül a kimenetre. El®fordulhat, hogy a rendszerdátum nem egyezik

© Ková s György, Debre eni Egyetem

Page 54: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

54 Adatbázisrendszerek gyakorlati jegyzet

meg az aktuális dátummal. Ebben az esetben a CURRENT_DATE attribútummal kérdez-

hetjük le az aktuális, valós dátumot.

A dátumfüggvények zöme dátumok manipulálására, a dátumok formázására, illetve

sztringet dátummá alakítására szolgálnak.

Az érintett függvények közül a legfontosabbakat az alábbi felsorolásban tekintjük át,

mindegyik használatára példát adva a rendszerid® segítségével:

1. TO_CHAR(DATE, ’FORMAT’) � a függvény dátumok megjelenésének formázására

használható. Els® paramétere egy DATE típusú attribútum, második paramétere pe-

dig egy formátumsztring, amely segítségével leírhatjuk, hogy milyen formában sze-

retnénk látni a dátum és id® megfelel® részét a kimenetben. A formátumsztringben

a következ® helytartó szimbólumok jelenhetnek meg:

Szimbólum Leírás

YEAR Az év kiírva.

YYYY, YYY, YY, Y Az év négy, három, kett® vagy egy számjeggyel. Ha

kevesebb, mint négy számjegyet kérünk, akkor érte-

lemszer¶en az utolsó számjegyek jelennek meg.

Q A negyedév sorszáma (januártól már iusig kapunk 1-

et, majd 2, 3, 4).

MM A hónap sorszáma két számjeggyel kiírva.

MON A hónap rövidítése.

MONTH A hónap kiírva.

WW Az év hetének sorszáma.

W A hónap hetének sorszáma.

D A hét napjának sorszáma.

DAY A hét napjának neve.

DD A hónap napjának sorszáma.

DDD Az év napjának sorszáma.

DY A nap rövidítése.

J Juliánusz naptár szerinti napok száma i. e. 4712 Ja-

nuár 1 óta.

HH Az óra (1-12).

HH24 Az óra (0-23).

MI A per (0-59).

SS A másodper (0-59).

SSSSSS Az éjfél óta eltelt másodper ek száma.

FF Századmásodper ek.

A helytartó szimbólumokat írhatjuk kis és nagybet¶vel egyaránt. Ennek akkor van

jelent®sége, ha a szimbólum bet¶ket ír a kimenetre, ekkor ugyanis a bet¶k ugyan-

olyan módon jelennek majd meg. A formátum sztringet kezdhetjük az FM karakter-

sorozattal, ekkor a kimenetben a kezdeti nullák nem jelennek meg.

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 55: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

7. fejezet: 5. gyakorlat - Dátum, konverzió, természetes és küls® összekap solás 55

A függvény használatának szemléltetésére tekintsük az alábbi példákat, amelyek a

rendszerid®t, illetve dátumot írják a kimenetre.

SELECT TO_CHAR(SYSDATE, ’YYYY. MM. DD.’) FROM DUAL;

SELECT TO_CHAR(SYSDATE, ’YYYY. MM. DD. HH24:MI:SS’) FROM DUAL;

SELECT TO_CHAR(SYSDATE, ’MON YEAR’) FROM DUAL;

SELECT TO_CHAR(SYSDATE, ’MON’) || ’ of ’ || TO_CHAR(SYSDATE, ’YEAR’) FROM DUAL;

SELECT TO_CHAR(SYSDATE, ’Q’) || ’. negyedev’ FROM DUAL;

TO_CHAR(SYSDATE,’YYYY.MM.DD.’)

------------------------------

2013. 10. 24.

TO_CHAR(SYSDATE,’YYYY.MM.DD.HH24:MI:SS’)

----------------------------------------

2013. 10. 24. 19:43:34

TO_CHAR(SYSDATE,’MONYEAR’)

-------------------------------------------------------

OCT TWENTY THIRTEEN

TO_CHAR(SYSDATE,’MON’)||’OF’||TO_CHAR(SYSDATE,’YEAR’)

----------------------------------------------------------

OCT of TWENTY THIRTEEN

TO_CHAR(SYSDATE,’Q’)||’.NEGYEDEV’

---------------------------------

4. negyedev

2. TO_DATE(SZTRING, FORMATUM) � Dátumtípusú attribútumok értékadásánál hasz-

nálhatjuk a TO_DATE függvényt, melynek els® paramétereként sztring formátumban

adhatjuk meg a dátumot, majd megadhatjuk a dátum formátumát, amely szerint az

adatbáziskezel®rendszer értelmezni fogja a sztring tartalmát. A formátumsztring az

el®z® pontban bemutatott helytartó szimbólumokból állhat. Példaként lássunk egy

sztring => dátum konverziót.

SELECT TO_DATE(’1984-MAY-09’, ’YYYY-MON-DD’) FROM DUAL;

TO_DATE(’1984-MAY-09’,’YYYY-MON-DD’)

------------------------------------

09-MAY-84

3. INTERVAL � Az INTERVAL kul sszó segítségével növelhetünk vagy sökkenthetünk

dátumtípus értéket. Szintaktikailag a következ® módon: DATE + INTERVAL ’INTEGER’

UNIT, ahol a DATE egy dátum típusú attribútum, az INTEGER helyére egy egész szá-

mot kell írni és a UNIT helyére pedig az egységet (YEAR, MONTH, DAY, HOUR, MINUTE,

SECOND).

Az INTERVAL használatára példaként tekintsük az alábbi lekérdezést:

SELECT SYSDATE + INTERVAL ’1’ YEAR FROM DUAL;

SYSDATE+INTERVAL’1’YEAR

-----------------------

24-OCT-14

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 56: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

56 Adatbázisrendszerek gyakorlati jegyzet

4. EXTRACT � Az EXTRACT konstruk ióval a dátum egy, számunkra érdekes részét nyer-

hetjük ki, szintaktikailag a következ® módon: EXTRACT(UNIT FROM DATE), ahol a

UNIT helyére az INTERVAL-nál is használt egységeket, a DATE helyére pedig dátum

típusú attribútumot kell írnunk.

5. GREATEST(DATE1, DATE2, ...) � Visszaadja a dátum attribútumok közül a leg-

nagyobbat.

SELECT GREATEST((SYSDATE + INTERVAL ’1’ YEAR), SYSDATE) FROM DUAL;

GREATEST((SYSDATE+INTERVAL’1’YEAR),SYSDATE)

-------------------------------------------

24-OCT-14

6. LEAST(DATE1, DATE2, ...) � Visszaadja a dátum attribútumok közül a legki-

sebbet.

SELECT LEAST((SYSDATE + INTERVAL ’1’ YEAR), SYSDATE) FROM DUAL;

LEAST((SYSDATE+INTERVAL’1’YEAR),SYSDATE)

----------------------------------------

24-OCT-13

7. MIN(DATE) � Oszlopfüggvényként visszaadja a legkisebb, azaz legrégebbi dátumot

az oszlopban.

8. MAX(DATE) � Oszlopfüggvényként visszaadja a legnagyobb, azaz legújabb dátumot

az oszlopban.

7.2. Konverziós függvények

A konverziós függvényeket nevükb®l kifolyólag a különböz® típusú attribútumok közötti

konvertálásra használhatjuk. Az alábbi felsorolásban áttekintjük ezen függvényeket és

példát adunk használatukra.

1. TO_DATE(SZTRING, FORMATUM) � Ezen függvénnyel már megismerkedtünk, sztring

típust konvertálhatunk dátum típusra egy formátum sztring alapján. Az így kapott

dátumtípusú értéket felhasználhatjuk dátum típusú attribútumok értékének beállí-

tására, összehasonlításra, stb.

2. TO_CHAR(DATE, FORMATUM) � Ezen függvénnyel DATE típust konvertálhatunk a

formátumsztring alapján sztring típusra.

3. TO_CHAR(NUMBER) � Számtípust konvertálhatunk vele sztring típusra.

4. TO_NUMBER(SZTRING) � A sztring tartalmát számtípussá konvertálja.

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 57: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

7. fejezet: 5. gyakorlat - Dátum, konverzió, természetes és küls® összekap solás 57

5. TO_NUMBER(SZTRING, FORMAT) � Egy egyszer¶ formátumsztring segítségével ad-

hatjuk meg, hogy hogyan értelmezze az adatbáziskezel® rendszer a sztringet. A

formátum sztringben '9'-es karakter jelöli a számjegyek helyét, '.' karakter a tize-

despontot és a ',' az ezreseket elválasztó szimbólum.

A függvények használatára példaként tekintsük az alábbi lekérdezéseket:

SELECT TO_CHAR(23.4) FROM DUAL;

SELECT TO_NUMBER(’23.4’) FROM DUAL;

SELECT TO_NUMBER(’23.4’, ’99.9’) FROM DUAL;

TO_CHAR(23.4)

-------------

23.4

TO_NUMBER(’23.4’)

-----------------

23.4

TO_NUMBER(’23.4’,’99.9’)

------------------------

23.4

7.3. Természetes és küls® összekap solások

7.3.1. Természetes összekap solás

A természetes összekap solás nevéb®l kifolyólag a legtermészetesebb módon kap sol össze

táblákat: a megegyez® nev¶ attribútumok megegyez® értékei alapján. A természetes össze-

kap solás kul sszava a NATURAL, amelyet a JOIN kul sszó el®tt kell megadnunk. Alap-

értelmezetten bels® összekap solást valósít meg a táblák között. Az eredmény táblában

megjelen® oszlopok közül a közös oszlopok sak egyszer jelennek meg, azaz az összekap so-

lást követ®en az oszlopok száma nem az összekap solt táblák oszlopai számának összege,

lesz, hanem ezt sökkenteni kell annyival, ahány attribútumot felhasználunk a természetes

összekap solásban, azaz ahány attribútumot megadtunk a USING kul sszó után.

Szintaktikája:

SELECT attr1 [, attr2]...

FROM tabla1 NATURAL [INNER] JOIN tabla2

USING (attr3[,attr4]..)

Példaként vegyük el® ismét a kereszt és bels® összekap solásra használt sémát: lásd

7.1. ábra.

Ismétlésként, keresztösszekap solással az alábbi eredményt kaptuk:

SELECT * FROM dolgozo d, munka m WHERE d.dazon = m.dazon

DAZON VNEV KNEV FIZETES DAZON OAZON

----- ---------- ---------- ---------- ----- -----

AA Kis Janos 100000 AA O1

AB Nagy Eva 200000 AB O2

BB Szabo Sandor 160000 BB O1

Bels® összekap solással:

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 58: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

58 Adatbázisrendszerek gyakorlati jegyzet

7.1. ábra. A dolgozo, osztaly, munka és hobbi táblák sémái

SELECT * FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon;

DAZON VNEV KNEV FIZETES DAZON OAZON

----- ---------- ---------- ---------- ----- -----

AA Kis Janos 100000 AA O1

AB Nagy Eva 200000 AB O2

BB Szabo Sandor 160000 BB O1

Az eredmény minkét esetben azonos. Az oszlopok száma bels® összekap solásnál sem

sökkent, hiába vannak megegyez® dolgozó azonosítók. Ennek természetesen az az oka,

hogy az egyenl®ség vizsgálat helyett használhatnánk tetsz®leges hasonlító operátort (pél-

dául >, <), s ebben az esetben nem feltétlenül egyeznek meg az azonos nev¶ oszlopok

értékei.

Ezzel szemben természetes összekap solásnál:

SELECT * FROM dolgozo NATURAL JOIN munka;

DAZON VNEV KNEV FIZETES OAZON

----- ---------- ---------- ---------- -----

AA Kis Janos 100000 O1

AB Nagy Eva 200000 O2

BB Szabo Sandor 160000 O1

Ahogy az az eredményb®l látható, ismét az összetartozó, értelmes, konzisztens adatokat

tartalmazó sorok jelentek meg, azonban az oszlopok száma sökkent, hiszen az DAZON sak

egyszer jelenik meg.

7.3.2. Bels® összekap solás USING kul sszóval

A bels® összekap solás során az INNER JOIN-t követ®en az ON helyett a USING kul sszót is

használhatjuk. Ebben az esetben a USING után zárójelben felsorolva kell megadnunk azon

attribútumokat, amelyek egyenl®sége alapján az összekap solást végre szeretnénk hajtani.

Ebben az esetben tehát ismét expli it módon el®írjuk, hogy az attribútumok egyez®sége

alapján szeretnénk összekap solni, így az eredmény táblában ismét az összekap solásra

használt attribútumok számával oszloppal kevesebb jelenik meg. Kézenfekv® módon ez

ugyanoda vezet tehát, ahová a NATURAL JOIN, ha minden azonos nev¶ attribútumot

felsorolunk a USING után. Például:

SELECT * FROM dolgozo INNER JOIN munka USING(dazon);

DAZON VNEV KNEV FIZETES OAZON

----- ---------- ---------- ---------- -----

AA Kis Janos 100000 O1

AB Nagy Eva 200000 O2

BB Szabo Sandor 160000 O1

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 59: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

7. fejezet: 5. gyakorlat - Dátum, konverzió, természetes és küls® összekap solás 59

7.3.3. Küls® összekap solás

Küls® összekap solások akkor kerülnek szóba, illetve képbe, ha az összekap solás során

kíván siak vagyunk azokra a rekordokra is, amelyeket nem sikerül összekap solni. Te-

kintsünk erre egy példát. Az el®z® táblákat úgy módosítjuk, hogy tartalmazzanak olyan

sorokat, amelyeknek nin s párja a munka táblában:

SELECT * FROM dolgozo;

DAZON VNEV KNEV FIZETES

----- ---------- ---------- ----------

AA Kis Janos 100000

AB Nagy Eva 200000

BB Szabo Sandor 160000

CC Toth Janos 160000

Lássuk, milyen eredményt kapunk bels®, illetve természetes összekap solásokkal, ha

szeretnénk lekérdezni a dolgozók nevét és osztályazonosítóját:

SELECT vnev, knev, oazon FROM dolgozo d INNER JOIN munka m ON d.dazon = m.dazon;

SELECT vnev, knev, oazon FROM dolgozo NATURAL JOIN munka;

VNEV KNEV OAZON

---------- ---------- -----

Kis Janos O1

Nagy Eva O2

Szabo Sandor O1

VNEV KNEV OAZON

---------- ---------- -----

Kis Janos O1

Nagy Eva O2

Szabo Sandor O1

Látható, hogy sem Tóth János nem jelent meg az eredményben, hiszen Tóth Jánoshoz

nin s osztály rendelve a munka táblában.

Az összekap solás alapjában véve bináris m¶velet. Így beszélhetünk bal és jobb ol-

dali táblákról, attól függ®en, hogy a JOIN kul sszót megel®z® vagy a kul sszót követ®

tábláról beszélünk. A összekap solási feltételnek meg nem felel® rekordok kezelése a bal

és jobb oldali táblákban különböz® módon történhet, így beszélhetünk bal oldali küls®

összekap solásról és jobb oldali küls® összekap solásról.

Bal oldali küls® összekap solást a LEFT OUTER JOIN kul sszavakkal írhatunk el®. Ek-

kor a bal oldali táblában található, az összekap solási feltételnek nem megfelel® sorok is

megjelennek az eredmény táblában, természetesen a sor NULL értékekkel lesz kiegészítve.

Például az el®z® lekérdezésben ha az els® összekap solásnál bal oldali küls® összekap-

solást használunk, akkor meg fog jelenni Tóth János.

SELECT vnev, knev, oazon FROM dolgozo d LEFT OUTER JOIN munka m ON d.dazon = m.dazon;

VNEV KNEV OAZON

---------- ---------- -----

Kis Janos O1

Nagy Eva O2

Szabo Sandor O1

Toth Janos

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 60: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

60 Adatbázisrendszerek gyakorlati jegyzet

Hasonlóan alkalmazhatunk jobb oldali küls® összekap solást, ha a jobb oldali táblában

vannak olyan rekordok, amelyek feltételezhet®en nem felelnek meg az összekap solási fel-

tételnek, s mi mégis látni szeretnénk ®ket. A jobb oldali küls® összekap solás kul sszavai

a RIGHT OUTER JOIN. Az el®z® példa fordított sorrendben megadott táblákkal:

SELECT vnev, knev, oazon FROM munka m RIGHT OUTER JOIN dolgozo d ON d.dazon = m.dazon;

VNEV KNEV OAZON

---------- ---------- -----

Kis Janos O1

Nagy Eva O2

Szabo Sandor O1

Toth Janos

El®fordulhat, hogy mind a bal, mind a jobb oldali táblában vannak olyan rekordok,

amelyek nem felelnek meg az összekap solási feltételnek, s mi mindkét táblából látni szeret-

nénk az érintett sorokat. Ekkor használhatunk teljes összekap solást, melynek kul sszavai

a FULL OUTER JOIN.

Az összekap solási feltételt nem sak az ON szó skával, hanem használhatjuk a USING

kul sszót, vagy használhatjuk a NATURAL kul sszót, s ekkor természetes küls® összekap-

solást kapunk. Például:

SELECT vnev, knev, oazon FROM munka m RIGHT OUTER JOIN dolgozo d ON d.dazon = m.dazon;

SELECT vnev, knev, oazon FROM munka m RIGHT OUTER JOIN dolgozo d USING(dazon);

SELECT vnev, knev, oazon FROM munka m NATURAL RIGHT OUTER JOIN dolgozo d;

VNEV KNEV OAZON

---------- ---------- -----

Kis Janos O1

Nagy Eva O2

Szabo Sandor O1

Toth Janos

VNEV KNEV OAZON

---------- ---------- -----

Kis Janos O1

Nagy Eva O2

Szabo Sandor O1

Toth Janos

VNEV KNEV OAZON

---------- ---------- -----

Kis Janos O1

Nagy Eva O2

Szabo Sandor O1

Toth Janos

7.4. Feladatok

A feladatok megoldása során a 7.2. ábrán látható sémájú adatbázist használjuk. Az

adatbázist létrehozó és néhány példa rekorddal feltölt® szkript az alábbi.

CREATE TABLE tortenelmi_esemeny( varos VARCHAR2(20),

esemeny DATE,

leiras VARCHAR2(40),

unnep CHAR(1));

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 61: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

7. fejezet: 5. gyakorlat - Dátum, konverzió, természetes és küls® összekap solás 61

7.2. ábra. A "tortenelem" adatbázis táblái

CREATE TABLE hires_ember( nev VARCHAR2(20),

szuletett DATE,

szul_hely VARCHAR2(20),

meghalt DATE,

meghalt_hely VARCHAR2(20));

CREATE TABLE fennhatosag( varos VARCHAR2(20),

nemzet VARCHAR2(10),

mettol NUMBER(4),

meddig NUMBER(4));

INSERT INTO tortenelmi_esemeny VALUES ( ’Budapest’, TO_DATE(’1848/03/15’, ’YYYY/MM/DD’), ’

48-as forradalom’, ’I’);

INSERT INTO tortenelmi_esemeny VALUES ( ’Budapest’, TO_DATE(’1956/10/23’, ’YYYY/MM/DD’), ’

56-os forradalom’, ’I’);

INSERT INTO tortenelmi_esemeny VALUES ( ’Budapest’, TO_DATE(’1918/10/31’, ’YYYY/MM/DD’), ’

oszirozsas forradalom’, ’N’);

INSERT INTO tortenelmi_esemeny VALUES ( ’Parizs’, TO_DATE(’1789/07/14’, ’YYYY/MM/DD’), ’

francia forradalom’, ’I’);

INSERT INTO tortenelmi_esemeny VALUES ( ’Debrecen’, TO_DATE(’1849/04/14’, ’YYYY/MM/DD’), ’a

Habsburg-haz tronfosztasa’, ’N’);

INSERT INTO hires_ember VALUES (’Petofi Sandor’, TO_DATE(’1823/01/01’, ’YYYY/MM/DD’), ’

Kiskoros’, NULL, NULL);

INSERT INTO hires_ember VALUES (’Kossuth Lajos’, TO_DATE(’1913/06/22’, ’YYYY/MM/DD’), ’

Monok’, TO_DATE(’1984/03/20’, ’YYYY/MM/DD’), ’Turin’);

INSERT INTO hires_ember VALUES (’Wass Albert’, TO_DATE(’1908/01/08’, ’YYYY/MM/DD’), ’

Bonchida’, TO_DATE(’1998/02/17’, ’YYYY/MM/DD’), ’Astor’);

INSERT INTO fennhatosag VALUES (’Kiskoros’, ’magyar’, 1001, NULL);

INSERT INTO fennhatosag VALUES (’Budapest’, ’magyar’, 1001, 1541);

INSERT INTO fennhatosag VALUES (’Budapest’, ’magyar’, 1686, NULL);

INSERT INTO fennhatosag VALUES (’Debrecen’, ’magyar’, 1001, NULL);

INSERT INTO fennhatosag VALUES (’Bonchida’, ’magyar’, 1001, 1918);

INSERT INTO fennhatosag VALUES (’Bonchida’, ’roman’, 1918, NULL);

A táblák tartalma:

SELECT * FROM tortenelmi_esemeny;

SELECT * FROM hires_ember;

SELECT * FROM fennhatosag;

VAROS ESEMENY LEIRAS UNNEP

-------------------- --------- ---------------------------------------- -----

Budapest 15-MAR-48 48-as forradalom I

Budapest 23-OCT-56 56-os forradalom I

Budapest 31-OCT-18 oszirozsas forradalom N

Parizs 14-JUL-89 francia forradalom I

Debrecen 14-APR-49 a Habsburg-haz tronfosztasa N

NEV SZULETETT SZUL_HELY MEGHALT MEGHALT_HELY

-------------------- --------- -------------------- --------- --------------------

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 62: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

62 Adatbázisrendszerek gyakorlati jegyzet

Petofi Sandor 01-JAN-23 Kiskoros

Kossuth Lajos 22-JUN-13 Monok 20-MAR-84 Turin

Wass Albert 08-JAN-08 Bonchida 17-FEB-98 Astor

VAROS FENNHATOSAG METTOL MEDDIG

-------------------- ----------- ---------- ----------

Kiskoros magyar 1001

Budapest magyar 1001 1541

Budapest magyar 1686

Debrecen magyar 1001

Bonchida magyar 1001 1918

Bonchida roman 1918

7.4.1. Feladat: Kérdezze le az adatbázisban tárolt legkorábbi esemény dátumát!

7.4.2. Feladat: Kérdezze le az adatbázisban szerepl® híres emberek születési évének

átlagát!

7.4.3. Feladat: Kérdezze le, történt-e történelmi esemény Kossuth Lajos életében!

7.4.4. Feladat: Kérdezze le milyen fennhatóságú területen született Wass Albert!

7.4.5. Feladat: Kérdezze le azon városokat, amelyek az adatbázis szerint több fennha-

tóság alatt is álltak!

7.4.6. Feladat: Kérdezze le a magyar fennhatóságú területekhez tartozó történelmi

eseményeket! Használjon természetes összekap solást!

7.4.7. Feladat: Kérdezze le az egyes történelmi események nevét és a kap solódó város

fennhatóságát! Ha egy eseményhez nem azonosítható a fennhatóság, akkor jelenjen meg a

lekérdezésben NULL fennhatóság értékkel!

7.4.8. Feladat: Kérdezze le a Kossuth Lajos életében történt események entenáriuma-

inak dátumait!

7.4.9. Feladat: Kérdezze le, hány napot éltek az adatbázisban szerepl® híres emberek!

7.4.10. Feladat: Kérdezze le az egyes történelmi eseményeket, a kap solódó városok

nevét és a kap solódó városok aktuális fennhatóságát! A lekérdezésben minden esemény

jelenjen meg!

7.4.11. Feladat: Kérdezze le az egyes történelmi eseményeket, a kap solódó városok

nevét és a kap solódó városok aktuális fennhatóságát! A lekérdezésben minden esemény

és minden város és fennhatóság jelenjen meg, ami az adatbázisban szerepel!

7.4.12. Feladat: Kérdezze le a 20-adik században elhunyt híres emberek nevét és utolsó

lakhelyüket! Ha utóbbi nem ismert, akkor is jelenjen meg a híres ember neve az eredmény

táblában.

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 63: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

7. fejezet: 5. gyakorlat - Dátum, konverzió, természetes és küls® összekap solás 63

7.4.13. Feladat: Kérdezze le, történt-e történelmi esemény Kossuth Lajos bármely

születésnapján bármely évben!

7.4.14. Feladat: Kérdezze le az egyes periódusokban hány napig voltak a városok

magyar fennhatóság alatt! (Az egyszer¶ség kedvéért tegyük fel, hogy a fennhatóság kezdete

és vége mindig a megadott év els® napjához kap solódik!)

7.4.15. Feladat: Kérdezze le azon híres emberek neveit, akik élete során megváltozott

születési helyük fennhatósága!

7.4.16. Feladat: Kérdezze le, hogy a mai napig a magyar fennhatóságú területen történt

és nemzeti ünnepként nyilván tartott események közül hányat ünnepeltünk meg!

7.4.17. Feladat: Kérdezze le, hogy 2014-ben mely nemzeti ünnep a hét milyen napjára

esik!

7.4.18. Feladat: Kérdezze le, hogy 2014-ben nemzeti ünnepek miatt hány hosszú

hétvége várható! (Akkor számíthatunk hosszú hétvégére, ha a nemzeti ünnep kedd vagy

sütörtök napra esik.)

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 64: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

64 Adatbázisrendszerek gyakorlati jegyzet

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 65: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

8. fejezet

6. gyakorlat - GROUP BY, beágyazott

lekérdezések

Az eddig megismert eszközökkel számos lekérdezést megvalósíthatunk, lehet®ségünk nyílik

táblák összekap solására abban az esetben, ha a szükséges adatok több táblában vannak

jelen, tudunk a rekordok között sz¶rni és a rekordok bizonyos attribútumait projektál-

ni. Nin s eszközünk azonban arra, hogy egyes lekérdezéseket valamely attribútum(ok)

megegyez® értékei szerinti bontásban végezzünk, illetve arra sem, hogy dinamikus lekér-

dezéseket végezzünk, azaz olyan lekérdezéseket, melyekben a sz¶r® feltétel a tábla tartal-

mától függ. Ezen problémákra ad megoldást a GROUP BY klóz, illetve az alszelektek vagy

beágyazott lekérdezések használata.

8.1. Elméleti alapok

8.1.1. GROUP BY

A GROUP BY lehet®vé teszi, hogy bizonyos attribútum(ok) megegyez® értékei szerint so-

portosítsuk egy tábla rekordjait. A soportosítással egybekötött lekérdezések eredménye-

ként el®álló táblában minden soporthoz egy bejegyzés jelenik meg. Mivel a soportosí-

tásra kijelölt attribútum értékei megegyeznek az egy soportban található rekordokban,

ezért a soportosításra használt attribútum értékeit minden gond nélkül lekérdezhetjük.

Ugyanakkor, ha az egyes soportokból más attribútumokat is szeretnénk lekérdezni, akkor

az sak úgy lehetséges, ha azokra oszlopfüggvényt ( soportfüggvényt) alkalmazunk. En-

nek oka, hogy az egyes soportokban sak a soportosításra kijelölt attribútumok értékei

egyeznek meg, a többi attribútum különböz® értékekkel rendelkezhet. Az eredményként

el®álló táblában azonban egy soportot egy bejegyzés jellemez, így el kell érnünk, hogy

minden lekérdezett attribútum egy értékkel jellemezze a soportot.

A GROUP BY használatának szintaktikája:

SELECT {csop_attr1 | csop_fgv(attr1)}[,{csop_attr2 | csop_fgv(attr2)}]...

FROM tabla1[, tabla2]...

WHERE szuro feltetel

GROUP BY csop_attr1[, csop_attr2]...

© Ková s György, Debre eni Egyetem

Page 66: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

66 Adatbázisrendszerek gyakorlati jegyzet

Szemantikáját tekintve a lekérdezés els®ként végrehajtja a kért összekap solásokat,

majd végrehajtja a rekordok sz¶rését a WHERE klózt követ® feltétel alapján. Ezt követi

a soportok létrehozása a csop_attr1 és az esetleges további soportosító attribútumok

értékei alapján, majd végül az egyes soportokhoz kiszámításra/projektálásra kerülnek a

SELECT után felsorolt attribútumok, illetve függvényértékek.

Példaként tekintsük az alábbi varos táblát, melyben városok adatait gy¶jtöttük össze.

OAZON VAZON NEV TERULET NEPESSEG FOVAROS

----- ----- ------------------------------ ---------- ---------- -------

HUN BUD Budapest 525 1740041 I

HUN DEB Debrecen 461 211320 N

GER MUN Munchen 310 1388308 N

GER BER Berlin 891 3375222 I

GER KOL Koln 405 1017155 N

AUS VIE Becs 414 1905080 I

SER BUK Bukarest 228 1883425 I

SWI BEN Bern 51 127 I

BOS SAR Szarajevo 141 378 I

Feladatunk lekérdezni országazonosítónkénti bontásban, hogy hány város szerepel a

táblában. A megoldás kézenfekv® módon adódik GROUP BY segítségével:

SELECT oazon, COUNT(*) FROM varos GROUP BY oazon;

OAZON COUNT(*)

----- ----------

AUS 1

SWI 1

GER 3

BOS 1

HUN 2

SER 1

Amennyiben a soportosításon további sz¶rést szeretnénk végrehajtani, arra a WHERE

klózt követ® logikai feltétel nem alkalmas, hiszen az a soportosítás el®tt hajtódik végre.

A soportosítás eredményét a HAVING klózt követ® logikai feltétellel sz¶rhetjük, azaz a

következ® szintaktikájú lekérdezéssel:

SELECT {csop_attr1 | csop_fgv(attr1)}[,{csop_attr2 | csop_fgv(attr2)}]...

FROM tabla1[, tabla2]...

WHERE szuro feltetel

GROUP BY csop_attr1[, csop_attr2]...

HAVING logikai_feltetel

Az el®z® példa kap sán például ha sak azon országok azonosítóit szeretnénk látni,

amelyekhez legalább 2 város szerepel a táblában, akkor az alábbi lekérdezést alkalmazhat-

juk:

SELECT oazon, COUNT(*) FROM varos GROUP BY oazon HAVING COUNT(*) > 1;

A lekérdezés kimenete:

OAZON COUNT(*)

----- ----------

GER 3

HUN 2

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 67: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

8. fejezet: 6. gyakorlat - GROUP BY, beágyazott lekérdezések 67

8.1.2. Beágyazott lekérdezés

Dinamikus lekérdezésként hivatkozunk azokra a lekérdezésekre, melyekben olyan logikai

feltétel szerepel, amely a tábla tartalmától függ. Hogyan kell ezt értelmezni? Eddig

a sz¶r®feltételeink zöme úgy nézett ki, hogy valamily attribútumra valamilyen hason-

lító operátort alkalmaztunk, s a hasonlítás másik operandusa egy literál volt. Például

könnyen lekérdezhetjük azokat a városokat, melyek lakossága nagyobb, mint 1000000, az-

az a nepesseg > 1000000 feltétel teljesül. Az ilyen jelleg¶ lekérdezések azonban nem

alkalmasak arra, hogy lekérdezzük a legnépesebb város nevét. A legnépesebb város né-

pességét ugyan lekérdezhetjük a MAX oszlopfüggvény alkalmazásával, azonban ahogy arról

korábban beszéltünk, oszlopfüggvényekkel együtt nem kérdezhetünk le más attribútumo-

kat. Erre nyúlt megoldást a beágyazott lekérdezések alkalmazása, amikoris a WHERE vagy

HAVING klózokat követ® logikai sz¶r® feltétel bármely pontján beágyazhatunk egy lekérde-

zést, és felhasználhatjuk eredményét hasonlításra. A szintaktikailag egy egyszer¶ SELECT

esetén szemléltetjük, azonban tetsz®leges bonyolultságú lekérdezésben alkalmazhatunk be-

ágyazott lekérdezéseket:

SELECT attr1[, attr2]...

FROM tabla1[, tabla2]...

WHERE attr3 operator (SELECT {attr4 | csop_fgv(attr4)}

FROM tabla3[, tabla4]...

WHERE logikai_feltetel])

Megjegyezzük, hogy egy lekérdezésben tetsz®leges sok beágyazott lekérdezés szerepelhet,

és a beágyazott lekérdezések tetsz®leges bonyolultságúak lehetnek. Az egyetlen megkötés

a beágyazott lekérdezéssel szemben, hogy annak egyetlen oszlopból álló táblát kell vissza-

adnia. Ha ez nem teljesül, akkor az SQL utasítás végrehajtása hibával végz®dik. Ennek

nyilvánvaló oka az, hogy egy attribútum értékét nem tudjuk egy táblához hasonlítani. Ha

a beágyazott lekérdezés egy ellát ad vissza, akkor azt kezelhetjük úgy, hogy egy skalár

érték, így tetsz®leges hasonlító operátort használhatunk. Ha a beágyazott lekérdezés egy

oszlopot ad vissza, akkor azt egy halmaznak kell tekintenünk és a halmazokhoz kap solódó

IN vagy NOT IN operátorokat használhatjuk sak.

Példaként az el®z® szakaszban bemutatott táblából lekérdezzük a legkisebb lakosság-

gal rendelkez® város nevét. A legkisebb lakosságot könny¶szerrel lekérdezhetjük a már

megismert eszközeinkkel:

SELECT MIN(nepesseg) FROM varos;

MIN(NEPESSEG)

-------------

127

Az eredmény tábla a soportfüggvény használata miatt egyetlen ellát tartalmaz, így ezt

felhasználhatjuk hasonlításra:

SELECT nev FROM varos

WHERE nepesseg = (SELECT MIN(nepesseg) FROM varos);

NEV

------------------------------

Bern

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 68: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

68 Adatbázisrendszerek gyakorlati jegyzet

8.1. ábra. A "foldrajz" adatbázis táblái

8.2. Feladatok

A feladatok megoldása során a 8.1. ábrán látható sémájú adatbázist használjuk. Az

adatbázist létrehozó és néhány példa rekorddal feltölt® szkript az alábbi.

DROP TABLE orszag;

DROP TABLE varos;

DROP TABLE szomszed;

DROP TABLE nyelv;

CREATE TABLE orszag(

oazon CHAR(3),

nev VARCHAR2(30),

terulet NUMBER,

nepesseg NUMBER);

CREATE TABLE varos(

oazon CHAR(3),

vazon CHAR(3),

nev VARCHAR2(30),

terulet NUMBER,

nepesseg NUMBER,

fovaros CHAR(1));

CREATE TABLE szomszed(

oazon1 CHAR(3),

oazon2 CHAR(3));

CREATE TABLE nyelv(

oazon CHAR(3),

nyelv VARCHAR2(20));

INSERT INTO orszag VALUES (’HUN’, ’Magyarorszag’, 93036, 10012000);

INSERT INTO orszag VALUES (’GER’, ’Nemetorszag’, 357023, 80219700);

INSERT INTO orszag VALUES (’AUS’, ’Ausztria’, 83870, 8402549);

INSERT INTO orszag VALUES (’SER’, ’Szerbia’, 77474, 7186862);

INSERT INTO orszag VALUES (’BOS’, ’Bosznia-Hercegovina’, 51129, 3839737);

INSERT INTO orszag VALUES (’SWI’, ’Svajc’, 41284, 7725500);

INSERT INTO orszag VALUES (’ROM’, ’Romania’, 238391, 20121641);

INSERT INTO varos VALUES (’HUN’, ’BUD’, ’Budapest’, 525, 1740041, ’I’);

INSERT INTO varos VALUES (’HUN’, ’DEB’, ’Debrecen’, 461, 211320, ’N’);

INSERT INTO varos VALUES (’GER’, ’MUN’, ’Munchen’, 310, 1388308, ’N’);

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 69: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

8. fejezet: 6. gyakorlat - GROUP BY, beágyazott lekérdezések 69

INSERT INTO varos VALUES (’GER’, ’BER’, ’Berlin’, 891, 3375222, ’I’);

INSERT INTO varos VALUES (’GER’, ’KOL’, ’Koln’, 405, 1017155, ’N’);

INSERT INTO varos VALUES (’AUS’, ’VIE’, ’Becs’, 414, 1905080, ’I’);

INSERT INTO varos VALUES (’SER’, ’BUK’, ’Bukarest’, 228, 1883425, ’I’);

INSERT INTO varos VALUES (’SWI’, ’BEN’, ’Bern’, 51, 127, ’I’);

INSERT INTO varos VALUES (’BOS’, ’SAR’, ’Szarajevo’, 141, 378, ’I’);

INSERT INTO szomszed VALUES (’HUN’, ’AUS’);

INSERT INTO szomszed VALUES (’HUN’, ’SER’);

INSERT INTO szomszed VALUES (’HUN’, ’ROM’);

INSERT INTO szomszed VALUES (’SER’, ’ROM’);

INSERT INTO szomszed VALUES (’AUS’, ’GER’);

INSERT INTO szomszed VALUES (’SER’, ’BOS’);

INSERT INTO szomszed VALUES (’GER’, ’SWI’);

INSERT INTO szomszed VALUES (’AUS’, ’SWI’);

INSERT INTO nyelv VALUES (’HUN’, ’magyar’);

INSERT INTO nyelv VALUES (’GER’, ’nemet’);

INSERT INTO nyelv VALUES (’AUS’, ’nemet’);

INSERT INTO nyelv VALUES (’SWI’, ’nemet’);

INSERT INTO nyelv VALUES (’ROM’, ’roman’);

INSERT INTO nyelv VALUES (’SER’, ’szerb’);

INSERT INTO nyelv VALUES (’BOS’, ’szerb’);

A táblák tartalma:

SELECT * FROM orszag;

SELECT * FROM varos;

SELECT * FROM szomszed;

SELECT * FROM nyelv;

OAZON NEV TERULET NEPESSEG

----- ------------------------------ ---------- ----------

HUN Magyarorszag 93036 10012000

GER Nemetorszag 357023 80219700

AUS Ausztria 83870 8402549

SER Szerbia 77474 7186862

BOS Bosznia-Hercegovina 51129 3839737

SWI Svajc 41284 7725500

ROM Romania 238391 20121641

7 rows selected

OAZON VAZON NEV TERULET NEPESSEG FOVAROS

----- ----- ------------------------------ ---------- ---------- -------

HUN BUD Budapest 525 1740041 I

HUN DEB Debrecen 461 211320 N

GER MUN Munchen 310 1388308 N

GER BER Berlin 891 3375222 I

GER KOL Koln 405 1017155 N

AUS VIE Becs 414 1905080 I

SER BUK Bukarest 228 1883425 I

SWI BEN Bern 51 127 I

BOS SAR Szarajevo 141 378 I

9 rows selected

OAZON1 OAZON2

------ ------

HUN AUS

HUN SER

HUN ROM

SER ROM

AUS GER

SER BOS

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 70: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

70 Adatbázisrendszerek gyakorlati jegyzet

GER SWI

AUS SWI

8 rows selected

OAZON NYELV

----- --------------------

HUN magyar

GER nemet

AUS nemet

SWI nemet

ROM roman

SER szerb

BOS szerb

8.2.1. Feladat: Kérdezze le az adatbázisban szerepl® országok azonosítóját, s azt, hogy

hány városuk szerepel a varos táblában!

8.2.2. Feladat: Kérdezze le az adatbázisban szerepl® országok nevét, s azt, hogy hány

városuk szerepel a varos táblában!

8.2.3. Feladat: Kérdezze le az adatbázisban szerepl® országok nevét, s azt, hogy hány

városuk szerepel a varos táblában! Csak azok az országok jelenjenek meg, amelyeknek

egynél több városa szerepel a varos táblában!

8.2.4. Feladat: Kérdezze le az egyes nyelveket s azt, hogy hány országban beszélik azt!

8.2.5. Feladat: Kérdezze le az egyes országok nevét, s azt, hogy hány szomszéddal

rendelkeznek az adatbázis szerint! Csak azok az országok jelenjenek meg, amelyeknek

legalább két szomszédja szerepel az adatbázisban!

8.2.6. Feladat: Állítsa sorrendbe az országok nevét néps¶r¶ségük szerint!

8.2.7. Feladat: Kérdezze le az egyes országok nevét, valamint azt, hogy az adatbázisban

szerepl® városaikban összesen hányan laknak!

8.2.8. Feladat: Kérdezze le az egyes országok nevét, valamint azt, hogy az adatbázisban

szerepl® városaikban összesen hányan laknak! Az eredmény tábla a városok összenépessége

szerint legyen sökken® sorrendbe rendezve!

8.2.9. Feladat: Kérdezze le az egyes országok nevét, valamint azt, hogy az adatbá-

zisban szerepl® nagyvárosaikban összesen hányan laknak! Azokat a vásoroskat tekintjük

nagyvárosnak, amelyben legalább egy millió ember lakik.

8.2.10. Feladat: Kérdezze le országonkénti bontásban, hogy a német nyelv¶ országok-

nak az adatbázisban szerepl® városaiban összesen hányan laknak, s mekkora ezen városok

összterülete!

8.2.11. Feladat: Kérdezze le a legnépesebb város nevét!

8.2.12. Feladat: Kérdezze le a legnépesebb város népességét, területét és néps¶r¶ségét!

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 71: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

8. fejezet: 6. gyakorlat - GROUP BY, beágyazott lekérdezések 71

8.2.13. Feladat: Kérdezze le a legnépesebb országnak az adatbázisban szerepl® váro-

sait!

8.2.14. Feladat: Kérdezze le hány olyan város van az adatbázisban, amelyben többen

laknak, mint Debre enben!

8.2.15. Feladat: Kérdezze le országonkénti bontásban, hogy hány olyan város szerepel

az adatbázisban, amelyben többen laknak, mint Debre enben!

8.2.16. Feladat: Kérdezze le országonkénti bontásban, hogy hány város szerepel az

adatbázisban! Csak azok a sorok jelenjenek meg az eredménytáblában, amelyekben a

városok száma meghaladja a magyar városok számát!

8.2.17. Feladat: Kérdezze le azon országok területét, amelyekb®l legalább két város

szerepel az adatbázisban!

8.2.18. Feladat: Kérdezze le azon országok területének átlagát, amelyekb®l legalább

két város szerepel az adatbázisban!

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 72: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

72 Adatbázisrendszerek gyakorlati jegyzet

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 73: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

9. fejezet

7. gyakorlat - beágyazott lekérdezések

2, Top-N lekérdezések,

halmazm¶veletek

Jelen gyakorlat élja, hogy demonstrálja a beágyazott lekérdezések egy másik alkalmazását,

amikor a lekérdezett tábla a FROM klóz után, a küls® lekérdezéshez felhasznált táblák

listáján jelenik meg. Ez lehet®vé teszi a top-n lekérdezéseket, azaz amikor egy táblából

annak sak bizonyos, pozí ió alapján meghatározott elemeit szeretnénk lekérdezni. A

gyakorlaton ugyanakkor példákat nézünk halmazm¶veletekre, melyekkel nagyon bonyolult

lekérdezéseket egyszerüsíthetünk, illetve sok esetben megoldhatunk olyan lekérdezéseket,

melyeket az eddig megismert eszközök nem tesznek lehet®vé.

9.1. Elméleti alapok

9.1.1. Beágyazott lekérdezések 2

Az el®z® gyakorlaton megismerkedtünk azzal, hogy hogyan használhatunk beágyazott le-

kérdezéseket arra, hogy a tábla tartalmától függ® összehasonlításokat végezzünk. A be-

ágyazott lekérdezések használatának másik módja az, amikor a lekérdezés eredményeként

kapott tábla a FROM klóz után szerepel, azaz a küls® lekérdezést egy másik lekérdezés ered-

ményeként kapott táblából hajtjuk végre. Ekkor a beágyazott lekérdezés eredményének

szerkezetére semmilyen megszorítás nin s, tetsz®leges sok oszlopot és sort tartalmazhat.

Els®sorban akkor alkalmazzuk, ha többszörös, különböz® soportosításokkal és sz¶r®fel-

tételekkel ellátott lekérdezést szeretnénk megvalósítani, illetve alkalmazása szorosan kap-

solódik a következ® szakaszban bemutatásra kerül® Top-N lekérdezésekhez. Szintaktika-

ilag:

SELECT attr_lista FROM {(beagyazott_szelekt) | tabla}[,{(beagyazott szelekt) | tabla]...

© Ková s György, Debre eni Egyetem

Page 74: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

74 Adatbázisrendszerek gyakorlati jegyzet

9.1.2. Top-N lekérdezések

Top-N lekérdezésnek nevezzük azokat a lekérdezéseket, amikor egy lekérdezés eredménye-

ként el®álló táblában sak az els® N rekordot szeretnénk megjeleníteni. Ez ki sit ellentmon-

dásosnak t¶nhet, hiszen korábban beszéltünk róla, hogy egy táblában nem értelmezhetünk

rendezettséget, sorrendet, ugyanis egy táblát a benne szerepl® rekordok halmazának te-

kintünk, halmazokban pedig nin sen sorrend. Sorrend akkor jelenik meg, ha használjuk

az ORDER BY klózt, azaz expli it módon rendezettséget viszünk a táblába. Top-N le-

kérdezések megvalósításához beágyazott lekérdezéseket használhatunk, ahol a beágyazott

lekérdezésenek rendezettnek kell lennie. Azt, hogy a rendezettség szerinti els® hány darab

rekordot szeretnénk megjeleníteni, a ROWNUM változóval történ® hasonlítással vezérelhetjük

a küls® lekérdezésben. Szintaktikailag tehát

SELECT attr_lista FROM (beagyazott_rendezett_lekerdezes)

WHERE ROWNUM {<= | <} N

Természetesen az N szimbólum helyére kell behelyettesítenünk a lekérdezni kívánt sorok

számát.

Tekintsük az el®z® gyakorlaton is használt varos táblát és kérdezzük el az ABC szerinti

sökken® sorrendben utolsó két város nevét!

OAZON VAZON NEV TERULET NEPESSEG FOVAROS

----- ----- ------------------------------ ---------- ---------- -------

HUN BUD Budapest 525 1740041 I

HUN DEB Debrecen 461 211320 N

GER MUN Munchen 310 1388308 N

GER BER Berlin 891 3375222 I

GER KOL Koln 405 1017155 N

AUS VIE Becs 414 1905080 I

SER BUK Bukarest 228 1883425 I

SWI BEN Bern 51 127 I

BOS SAR Szarajevo 141 378 I

SELECT nev FROM (SELECT * FROM varos

ORDER BY nev DESC)

WHERE ROWNUM <= 2;

NEV

------------------------------

Szarajevo

Munchen

9.1.3. Halmazm¶veletek

Adatbázisrendszerek területén az egyes táblákat halmazként képzeljük és kezeljük. Egyet-

len kivétel talán az, amikor az ORDER BY klóz használatával rendezettséget viszünk egy

lekérdezésbe. A lekérdezések eredményeként el®álló táblák, mint halmazok között halmaz-

m¶veleteket végezhetünk, ha

• a táblák oszlopainak száma megegyezik,

• a táblák oszlopainak típusa rendre megegyezik.

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 75: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

9. fejezet: 7. gyakorlat - beágyazott lekérdezések 2, Top-N lekérdezések, halmazm¶veletek 75

Szintaktikailag:

lekerdezes1 halmaz_operator lekerdezes2

A halmaz_operator helyén négy különböz® operátort írhatunk:

• UNION ALL � A két lekérdezés eredményének halmazelméleti unióját eredményezi

úgy, hogy ha egy rekord mindkét lekérdezésben el®fordul egyszer, akkor az ered-

ménytáblában kétszer fog el®fordulni.

• UNION � Halmazelméleti unió képzés.

• MINUS � Halmazelméleti különbség képzés.

• INTERSECT � Halmazelméleti metszet képzés.

Példaként kérdezzük le a legnépesebb és a legkisebb népességgel rendelkez® városok

neveit. Az egyes lekérdezések könnyen kivitelezhet®k:

SELECT nev FROM varos WHERE nepesseg = (SELECT MAX(nepesseg) FROM varos);

SELECT nev FROM varos WHERE nepesseg = (SELECT MIN(nepesseg) FROM varos);

NEV

------------------------------

Berlin

NEV

------------------------------

Bern

Mivel az eredmény táblák azonos típusúak, ezért képezhetjük ezek halmazelméleti uni-

óját:

SELECT nev FROM varos WHERE nepesseg = (SELECT MAX(nepesseg) FROM varos)

UNION

SELECT nev FROM varos WHERE nepesseg = (SELECT MIN(nepesseg) FROM varos);

NEV

------------------------------

Berlin

Bern

9.2. Feladatok

A feladatok az el®z® gyakorlaton is használt, foldrajz.sql szkriptben de�niált adatbá-

zisra vonatkoznak.

9.2.1. Feladat: Kérdezze le a három legnépesebb város nevét nevük alapján ab -szerinti

növekv® sorrendben!

9.2.2. Feladat: Kérdezze le a három legnagyobb terület¶ országból a két legkisebb

népességgel rendelkez® nevét!

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 76: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

76 Adatbázisrendszerek gyakorlati jegyzet

9.2.3. Feladat: Kérdezze le a három legnépesebb ország közül azokat, melyek nin senek

a három legkisebb területtel rendelkez® ország között!

9.2.4. Feladat: Kérdezze le, hogy az egyes országokból hány város szerepel az adat-

bázisban! A lekérdezés eredményeként el®álló táblában sak a legnagyobb két értékhez

tartozó ország nevét szeretnénk látni!

9.2.5. Feladat: Kérdezze le az adatbázis szerint legtöbb országban beszélt nyelvet!

9.2.6. Feladat: Kérdezze le egy két oszloppal rendelkez® táblába az országok és városok

neveit és népességeit!

9.2.7. Feladat: Kérdezze le a táblákban el®forduló összes város- és országazonosítót! A

lekérdezés eredményeként el®álló táblában minden azonosító sak egyszer szerepeljen!

9.2.8. Feladat: Kérdezze le egy táblába azon nyelveket, melyeket a legtöbb, illetve

legkevesebb országban beszélnek!

9.2.9. Feladat: Kérdezze le egy táblába azon országokat, melyek a legtöbb, illetve

legkevesebb szomszéddal rendelkeznek!

9.2.10. Feladat: Kérdezze le azon országok neveit, amelyek népesség szerint és terület

szerint is benne vannak a legnépesebb, illetve legnagyobb három országban!

9.2.11. Feladat: Kérdezze le a legnépesebb két f®városhoz tartozó országok szomszédos

országainak nevét!

9.2.12. Feladat: Kérdezze le azon országok nevét, melyekhez tartozó városok a legna-

gyobb átlagos területtel rendelkeznek!

9.2.13. Feladat: Kérdezze le azon két város nevét, melyek népessége legjobban közelíti

alulról, illetve felülr®l az 1 milliót!

9.2.14. Feladat: Kérdezze le országonkénti bontásban, hogy a nem-f®város városoknak

mennyi az átlagos népessége!

9.2.15. Feladat: Kérdezze le, hogy az ab melyik bet¶jével kezd®dik a legtöbb város

az adatbázisban!

9.2.16. Feladat: Kérdezze le, hogy a legnagyobb néps¶r¶séggel rendelkez® ország hány

szomszédjában beszélik a legtöbb országban beszélt nyelvet!

9.2.17. Feladat: Kérdezze le egy táblába azokat a nyelveket, melyeket a legnépesebb

f®városban, illetve a legkisebb lakossággal rendelkez® f®városban beszélnek!

9.2.18. Feladat: Kérdezze le, hogy a legnépesebb, illetve legkisebb lakossággal rendel-

kez® városban ugyanazon nyelvet beszélik-e! Az eredmény tábla egyetlen logikai értéket

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem

Page 77: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

9. fejezet: 7. gyakorlat - beágyazott lekérdezések 2, Top-N lekérdezések, halmazm¶veletek 77

tartalmazzon!

© Ková s György, Debre eni Egyetem www.tankonyvtar.hu

Page 78: artalomjegyzék T · artalomjegyzék T artalomjegyzék T 3 1. El®szó 5 2. A ezet y örn fejleszt®k 7 2.1. Oracle Express Edition 11g. 7 2.1.1. elepítés T-tu Ubun 13.04. 7 2.1.2

78 Adatbázisrendszerek gyakorlati jegyzet

www.tankonyvtar.hu

© Ková s György, Debre eni Egyetem