Adatbázisok I
1
SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás - objektum megszüntetés - objektum módosítás
CREATE DROP ALTER
Módosítás: DML: - rekord felvitel - rekord törlés - rekord módosítás
INSERT DELETE UPDATE
Lekérdezés: DQL: - lekérdezés
SELECT
Vezérlés DCL: - védelem - tranzakció kezelés
GRANT,.. COMMIT,.. 2
SQL nyelv –Táblák összekapcsolása • Descartes szorzat: SELECT * FROM táblanév1, táblanév2 Vagy SELECT * FROM táblanév1 CROSS JOIN táblanév2
Az eredményhalmaz sorainak száma= táblanév1.sorainakSzama*táblanév2.SorainakSzama
• Belső összekapcsolás (Theta összekapcsolás) INNER JOIN művelet SELECT * FROM tabla1 INNER JOIN tabla2 ON tabla1.attribútum1 = tabla2.attribútum2;
3
Táblák összekapcsolása • INNER JOIN – Egy vagy több mező egyezése alapján kapcsolja össze a rekordokat, de csak azokat, amelyben a JOIN operátorban megadott mezők egyeznek.
4
Táblák összekapcsolása Reláció aliasok SELECT alias.attribútum FROM relació [AS] alias; Tábla összekapcsolása önmagával SELECT alias1.attribútum1, alias2.attribútum2, … FROM reláció [AS] alias1, reláció AS alias2;
5
SQL SELECT - a join megadása SELECT mlista FROM tabla1, tabla2,.. WHERE feltétel; AUTÓ rsz tulaj r1 3 r4 1 r6 4 EMBER id név 1 Laci 2 Ágota 3 János 4
Zoltán
összekapcsolás
rsz r1 r4 r6 r1 r4
tulaj id 3 1 1 1 4 1 3 2 1 2
név Laci Laci Laci Ágota Ágota
r6 r1 r4 r6 r1 r4
4 3 1 4 3 1
2 3 3 3 4 4
Ágota János János János Zoltán Zoltán
r6
4
4 Zoltán
Ha a feltétel elmarad Descartes szorzatot kapunk Kettőnél több tábla is összekapcsolható
6
SQL Szelekciós join: SELECT * FROM AUTO, EMBER WHERE TULAJ = ID; Ha több táblában is azonos elnevezésű mező van, akkor a kibővített mezőnevet használjuk: tábla.mező SELECT * FROM AUTO, EMBER WHERE AUTO.TULAJ = EMBER.ID; Ha hosszú a táblanév alias nevet használhatunk:
tábla alias
SELECT * FROM AUTO A, EMBER E WHERE A.TULAJ = E.ID;
7
Alkalmazott tábla (emp)
Fizetési kategóriák (Salgrade tábla)
Részlegek (osztályok; department)
8
Descartes szorzat Listázzuk ki az egyes részlegeken dolgozó alkalmazottakat! SELECT emp.ename as név, dept.dname "Részleg neve" FROM emp, dept Vagy : SELECT emp.ename as név, dept.dname "Részleg neve" FROM EMP Cross JOIN DEPT
... NEM ÍGY GONDOLTUK! Eredmény sorainak száma 14*5=70
9
Egy feltétel megadásával már jó eredményt kapunk! SELECT emp.ename As név, dept.dname As "Részleg neve" FROM emp, dept WHERE emp.deptno=dept.deptno;
10
Azoknak az alkalmazottaknak a neve, részlegük neve, és a részleg telephelye, akiknek a nevében R betű van. SELECT emp.empno As Azonosító, emp.ename As név, dept.dname As "Részleg neve", dept.loc As telephely FROM emp, dept WHERE emp.deptno=dept.deptno AND emp.ename LIKE '%R%';
11
Az egyes alkalmazottak milyen fizetési kategóriába esnek? SELECT emp.ename As név, emp.sal As fizetes, salgrade.grade As "fizetési besorolás" FROM emp, salgrade WHERE emp.sal BETWEEN salgrade.losal AND salgrade.hisal;
12
Tábla összekapcsolása saját magával Adjuk meg a dolgozók és főnökeik nevét! SELECT dolgozo.ename As dolgozó, fonok.ename AS Főnök FROM emp dolgozo, emp fonok WHERE dolgozo.mgr=fonok.empno;
13
Táblák összekapcsolása Külső összekapcsolás SELECT * FROM reláció1 LEFT | RIGHT JOIN reláció2 ON reláció1.attribútum1 = reláció2.attribútum2;
Külső összekapcsolásnál fontos szerepe van annak, hogy a FROM kulcsszó után melyik tábla szerepel. Ezt bal oldali táblának hívjuk. A JOIN operátorban megadott tábla lesz a jobb oldali tábla. A LEFT OUTER JOIN a bal oldali tábla minden sorát, a RIGHT OUTER JOIN a jobb oldali tábla minden sorát tartalmazza, akkor is , ha nem talál illeszkedést a másik táblában.
14
Számoljuk meg részlegenként az alkalmazottak számát! SELECT d.dname As részlegnév, count(e.ename) AS létszám FROM emp e, dept d WHERE e.deptno=d.deptno GROUP BY d.dname; De hol a Operations és a Kereskedes részleg? Ezen segít a külső összekapcsolás
SELECT d.dname As részlegnév, count(e.ename) AS létszám FROM dept d LEFT OUTER JOIN emp e ON e.deptno=d.deptno GROUP BY d.dname;
15
Adjuk meg részlegenként a dolgozók nevét! SELECT e.ename As név, d.deptno As kód, d.dname As részlegnév FROM emp e Right OUTER JOIN dept d ON e.deptno=d.deptno;
16
Táblák összekapcsolása • FULL OUTER JOIN művelet Eredménye a jobb és bal oldali táblák minden sorát fogja tartalmazni, azokat is, amelyekhez nincs illeszkedés a másik oldalon.
17
SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás - objektum megszüntetés - objektum módosítás
CREATE DROP ALTER
Módosítás: DML: - rekord felvitel - rekord törlés - rekord módosítás
INSERT DELETE UPDATE
Lekérdezés: DQL: - lekérdezés
SELECT
Vezérlés DCL: - védelem - tranzakció kezelés
GRANT,.. COMMIT,.. 18
Módosítás Rekord felvitele: INSERT INTO tabla VALUES (mezo=ertek,…); Az érték lehet NULL is. Nem maradhat ki mező. Fontos a mezősorrend INSERT INTO AUTO VALUES (“bju564”,234,”FIAT”); INSERT INTO AUTO VALUES (“bju564”,234,NULL); INSERT INTO AUTO VALUES (RSZ=“bju564”,...);
19
Módosítás Rekord törlése: DELETE FROM tabla WHERE feltétel; A feltételnek eleget tevő rekordok törlődnek Ha elmarad a WHERE tag, minden rekord törlődik DELETE FROM AUTO WHERE AR<1200000; Rekord módosítása: UPDATE tabla SET mezo= érték,... WHERE feltétel; A feltételnek eleget tevő rekordok módosulnak Ha elmarad a WHERE tag, minden rekord módosul UPDATE AUTO SET AR = AR * 1.2
WHERE AR<1200000; 20
SQL mintapéldák BOROK(kod, nev, gyarto, fajta, ar) VEVO(vkod, nev, cim) RENDELES(vevo, bor, mennyiseg,datum) 1. azon vevők, akik rendeltek Bikavért SELECT V.NEV FROM VEVO V, RENDELES R, BOROK B WHERE V.VKOD = R.VEVO AND R.BOR = B.KOD AND B.NEV LIKE ”BIKAVER%”; 2. Melyik gyártó termel 5-nél több vörös bort SELECT GYARTO FROM BOROK WHERE FAJTA = ”VOROS” GROUP BY GYARTO HAVING COUNT(*) > 5; 21