1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL
2 Sramó András Adatbázis-technológia V. előadás Az előadás célja ismertetni az SQL jelentőségét; bemutatni az SQL kialakulásának történetét; bemutatni az adatdefiniálás módját az SQL-ben; bemutatni a különböző adatkezelési módokat, úgymint adatfelvitel, adatmódosítás és -lekérdezés; bemutatni az adatelérési jogok korlátozásának lehetőségeit az SQL-ben; megmutatni, hogy az SQL hogyan használható egy harmadik generációs programnyelven belül.
3 Sramó András Adatbázis-technológia V. előadás Az előadás vázlata Az SQL története. Előnyök és hátrányok. Adatdefiniálás. Adatkezelés. Adatlekérdezés. Adatvezérlés: az adatelérés korlátozása.
4 Sramó András Adatbázis-technológia V. előadás Történet SEQUEL (Structured English QUEry Language): az IBM kísérleti relációs adatbázis-kezelő rendszerének (System R) relációs nyelve. SQL (Structured Query Language): az IBM kereskedelmi adatbázis-kezelő rendszereinek (DB2, SQL/DS) relációs nyelve SQL1: ANSI 1986 SQL2: ISO 1992 SQL3: tervezés alatt
5 Sramó András Adatbázis-technológia V. előadás Az SQL felépítése SQL Adatdefiní- ciós nyelv Adatke- zelő nyelv Adatve- zérlő nyelv CREATE ALTER DROP SELECT UPDATE INSERT DELETE GRANT REVOKE
6 Sramó András Adatbázis-technológia V. előadás Az SQL 1992-es szabványa már egységes lekérdező nyelv SQL Adatdefiní- ciós nyelv Adatke- zelő nyelv Adatve- zérlő nyelv CREATE ALTER DROP SELECT UPDATE INSERT DELETE GRANT REVOKE
7 Sramó András Adatbázis-technológia V. előadás Adatbázis létrehozása CREATE SCHEMA kölcsönző; létrehozza a “kölcsönző” nevű adatbázist. CREATE SCHEMA kölcsönző AUTHORIZATION Fruzsina; létrehozza a “kölcsönző” nevű adatbázist, és ezt az adatbázist a “Fruzsina” azonosítójú felhasználó használhatja. (SQL1: CREATE DATABASE kölcsönző; )
8 Sramó András Adatbázis-technológia V. előadás Adattípusok FLOAT(p) REAL DOUBLE PRECISION INTEGER SMALLINT DECIMAL(p,s) BIT(n) CHARACTER(n) DATE TIME TIMESTAMP
9 Sramó András Adatbázis-technológia V. előadás Táblázat definiálása CREATE TABLE ügyfél ( ügyfélkódCHAR(8)NOT NULL, ügyfélnévCHAR(30)NOT NULL, ügyfélcímCHAR(40), telefonCHAR(10), szdátumDATE, belépésDATE, PRIMARY KEY (ügyfélkód)); CREATE TABLE kölcsönző.ügyfél (...
10 Sramó András Adatbázis-technológia V. előadás Táblázat definiálása idegen kulccsal CREATE TABLE kölcsönzés ( szszámCHAR(6)NOT NULL, ügyfélCHAR(8)NOT NULL, dátumDATENOT NULL, időpontTIMENOT NULL, kidőINT(2), kdíjDEC(10,2), CONSTRAINT f1 PRIMARY KEY (szszám), CONSTRAINT f2 FOREIGN KEY (ügyfél) REFERENCES ügyfél(ügyfélkód)) ON DELETE CASCADE ON UPDATE CASCADE;
11 Sramó András Adatbázis-technológia V. előadás További táblázatok I. CREATE TABLE kazetta ( kazettakódCHAR(10)NOT NULL, kategóriaCHAR(2)NOT NULL, kazettacímCHAR(30)NOT NULL, évINT(4), rendező CHAR(6), PRIMARY KEY (kazettakód), FOREIGN KEY (rendező) REFERENCES személy(személykód));
12 Sramó András Adatbázis-technológia V. előadás További táblázatok II. CREATE TABLE szereplő ( kazettakódCHAR(10)NOT NULL, személykód CHAR(6) NOT NULL, PRIMARY KEY (kazettakód,személykód), FOREIGN KEY (személykód) REFERENCES személy(személykód)); Összetett kulcs
13 Sramó András Adatbázis-technológia V. előadás Adatbázis törlése DROP SCHEMA kölcsönző CASCADE; a “kölcsönző” nevű adatbázis törlése minden tartozékával együtt. DROP SCHEMA kölcsönző RESTRICT; a “kölcsönző” nevű adatbázis törlése csak akkor történik meg, ha az adatbázis üres.
14 Sramó András Adatbázis-technológia V. előadás Táblázat törlése DROP TABLE kölcsönzés CASCADE; a “kölcsönzés” nevű táblázat törlése minden hivatkozásával együtt. DROP TABLE kölcsönzés RESTRICT; a “kölcsönzés” nevű táblázat törlésére csak akkor kerül sor, ha semmilyen hivatkozás nem vonatkozik rá.
15 Sramó András Adatbázis-technológia V. előadás Táblázat módosítása ALTER TABLE kölcsönző.ügyfél ADD t INT(1) DEFAULT 0; a “kölcsönző” nevű adatbázis “ügyfél” nevű táblázatát kiegészítjük egy “t” nevű oszloppal a törzstagság jelzésére. Ennek az oszlopnak az alapértéke 0. ALTER TABLE kölcsönző.ügyfél DROP belépés CASCADE; a “kölcsönző” nevű adatbázis “ügyfél” nevű táblázatából töröljük a “belépés” nevű oszlopot.
16 Sramó András Adatbázis-technológia V. előadás Adatok táblázatba írása INSERT INTO ügyfél VALUES (‘ ’,’Kiss Pál’, ’József u. 23.’,’454454’); INSERT INTO ügyfél(ügyfélkód, ügyfélnév) VALUES (‘ ’,’Kiss Katalin’); INSERT INTO ügyfél(ügyfélnév, ügyfélcím) VALUES (’Szabó Sándor’,’Mária u. 16.’);
17 Sramó András Adatbázis-technológia V. előadás Adatok táblázatba írása INSERT INTO ügyfél VALUES (‘ ’,’Kiss Pál’, ’József u. 23.’,’454454’); INSERT INTO ügyfél(ügyfélkód, ügyfélnév) VALUES (‘ ’,’Kiss Katalin’); INSERT INTO ügyfél(ügyfélnév, ügyfélcím) VALUES (’Szabó Sándor’,’Mária u. 16.’); Ez az utasítás nem lesz végrehajtva, mert a “szám” nevű mező nem kapott értéket, holott “nemnulla” kulcsként definiáltuk.
18 Sramó András Adatbázis-technológia V. előadás Táblázatsor(ok) törlése DELETE FROM ügyfél WHERE ügyfélnév=‘Szabó János’; DELETE FROM kölcsönzés WHERE dátum<‘ ’; DELETE FROM kölcsönzés;
19 Sramó András Adatbázis-technológia V. előadás Táblázatsor(ok) módosítása UPDATE kölcsönzés SET ügyfélcím=‘Mária u. 20’ WHERE ügyfélkód=‘ ’; UPDATE ügyfél SET t=1 WHERE ügyfélkód<‘ ’;
20 Sramó András Adatbázis-technológia V. előadás A SELECT utasítás általános szerkezete SELECT FROM [ WHERE ] [ GROUP BY ] [ HAVING ] [ ORDER BY ];
21 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P0) SELECT * FROM ügyfél; A teljes “ügyfél” táblázat megjelenítése.
22 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P1) SELECT * FROM ügyfél WHERE t = 1; Az “ügyfél” táblázatból megjeleníti a törzstagokat. (Relációs algebra: SELECT )
23 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P2) SELECT * FROM ügyfél WHERE ügyfélkód>‘ ’ AND ügyfélkód<‘ ’; Az “ügyfél” táblázatból az 1995-ben belépett ügyfelek minden adatát megjeleníti. (Relációs algebra: SELECT )
24 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P3) SELECT ügyfélnév, ügyfélkód FROM ügyfél; Az “ügyfél” táblázatból az ügyfelek nevét és azonosító kódját jeleníti meg. (Relációs algebra: PROJECT )
25 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P4) SELECT ügyfélnév, ügyfélkód FROM ügyfél WHERE t = 1; Az “ügyfél” táblázatból a törzstagok nevét és azonosító kódját jeleníti meg. (Relációs algebra: PROJECT+SELECT )
26 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P5) SELECT szszám, kdíj FROM kölcsönzés WHERE ügyfél=‘ ’ AND dátum<‘ ’; A “kölcsönzés” táblázatból a azonosítójú ügyfél 1996 március 31. előtti kölcsönzéseinek számlaszámát és a kölcsönzési díjat jeleníti meg. (Relációs algebra: PROJECT+SELECT )
27 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P6) SELECT ügyfél FROM kölcsönzés; A “kölcsönzés” táblázatból megjeleníti az ügyfél azonosító kódját. (Minden ügyfél annyiszor szerepel, ahányszor kazettát kölcsönzött!)
28 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P7) SELECT DISTINCT ügyfél FROM kölcsönzés; A “kölcsönzés” táblázatból megjeleníti az ügyfél azonosító kódját. (Minden ügyfél csak egyszer szerepel!)
29 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P8) SELECT * FROM kölcsönzés, ügyfél WHERE ügyfél=ügyfélkód; A “kölcsönzés” táblázatot kiegészíti az “ügyfél” táblázatból az ügyfél minden adatával. (Relációs algebra: NATURAL JOIN ).
30 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P9) SELECT szszám, ügyfélnév FROM kölcsönzés, ügyfél WHERE ügyfél=ügyfélkód AND kidő=4; A “kölcsönzés” és “ügyfél” táblázat összekapcsolá- sával azokat a számlaszámokat és ügyfélneveket jeleníti meg, ahol a kölcsönzés 4 órára szólt. (Relációs algebra: NATURAL JOIN+SELECT+PROJECT ).
31 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P10) SELECT kölcsönzés.szszám, ügyfél.ügyfélnév FROM kölcsönzés, ügyfél WHERE kölcsönzés.ügyfél=ügyfél.ügyfélkód AND kölcsönzés.kdíj=4; Ugyanazt az eredményt adja, mint az előző példa, csak jobban kihangsúlyoztuk, hogy egy tulajdonság melyik táblázatban található.
32 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P11) SELECT DISTINCT dátum FROM kölcsönzés WHERE ügyfél IN (SELECT ügyfélkód FROM ügyfél WHERE szdátum<‘ ’); Milyen napokon voltak kölcsönözni az 1937 előtt született ügyfelek.
33 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P12) SELECT SUM(kdíj), MAX(kdíj), MIN(kdíj), AVG(kdíj) FROM kölcsönzés; A “kölcsönzés” táblázat alapján kiszámolja és megjeleníti a kölcsönzési díjak összegét, a kölcsönzési díjak maximális, minimális és átlagos értékét.
34 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P13) SELECT SUM(kdíj), MAX(kdíj), MIN(kdíj), AVG(kdíj) FROM ügyfél, kölcsönzés WHERE ügyfél=ügyfélkód AND t=1; A “kölcsönzés” táblázat alapján kiszámolja és megjeleníti a törzstagok által fizetett kölcsönzési díjak összegét, maximális, minimális és átlagos értékét.
35 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P14) SELECT COUNT(*) FROM ügyfél; Az “ügyfél” táblázat sorainak számát, azaz az ügyfelek számát adja.
36 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P15) SELECT COUNT(DISTINCT ügyfél) FROM kölcsönzés WHERE dátum=>‘ ’ AND dátum=<‘ ’ ; 1997 februárjában hány ügyfél kölcsönzött kazettát.
37 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P16) SELECT * FROM kazetta GROUP BY rendező; A “kazetta” táblázat megjelenítése úgy, hogy az filmek a rendezők szerint vannak csoportosítva.
38 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P17) SELECT rendező, COUNT(*) FROM kazetta GROUP BY rendező; A “kazetta” táblázat alapján az jelenik meg, hogy egy rendezőnek hány filmje található a kölcsönző-ben.
39 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P18) SELECT * FROM kazetta ORDER BY rendező, kazettacím; A “kazetta” táblázat megjelenítése úgy, hogy az azonos rendezőjű filmek egymás után, betűrend-ben jelennek meg, és a rendezők is betűrendben szerepelnek.
40 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P19) SELECT ügyfélnév FROM ügyfél WHERE (SELECT COUNT(*) FROM kölcsönzés WHERE ügyfél=ügyfélkód)>=20; A legalább 20 kölcsönzést teljesítő ügyfelek nevét jeleníti meg.
41 Sramó András Adatbázis-technológia V. előadás Példa a SELECT utasításra (P20) SELECT ügyfélnév, COUNT(*) FROM ügyfél, kölcsönzés WHERE ügyfél=ügyfélkód GROUP BY ügyfélkód HAVING COUNT(*)>20; A húsznál több kölcsönzést lebonyolító ügyfelek nevét és kölcsönzéseinek számát jeleníti meg.
42 Sramó András Adatbázis-technológia V. előadás Virtuális táblázatok (látványok, nézetek) definiálása CREATE VIEW teljes kölcsönzés AS SELECT * FROM kölcsönzés, ügyfél WHERE ügyfél=ügyfélkód; A (P8) eredményét virtuális táblázatként definiáljuk. Az így létrehozott nézetek táblázatként viselked-nek, és ugyanúgy használhatók SQL utasítások-ban, kivéve az adatmódosításokat.
43 Sramó András Adatbázis-technológia V. előadás Példa virtuális táblázatra (P21) CREATE VIEW ügyfél95 AS SELECT ügyfélkód, ügyfélnév FROM kölcsönzés, ügyfél WHERE ügyfél=ügyfélkód AND dátum>= AND dátum<= ; Az 1995-ben kölcsönzést teljesítő ügyfelek kódját és nevét tartalmazó nézet létrehozása.
44 Sramó András Adatbázis-technológia V. előadás Példa virtuális táblázatra (P22) CREATE VIEW ügyfél96 AS SELECT ügyfélkód, ügyfélnév FROM kölcsönzés, ügyfél WHERE ügyfél=ügyfélkód AND dátum>= AND dátum<= ; Az 1996-ben kölcsönzést teljesítő ügyfelek kódját és nevét tartalmazó nézet létrehozása.
45 Sramó András Adatbázis-technológia V. előadás Táblázatok egyesítése (P23) SELECT * FROM ügyfél95 UNION SELECT * FROM ügyfél96 ORDER BY ügyfélnév; Az os kétéves időszakban kölcsönzést teljesítő ügyfelek kódját és nevét tartalmazó lekérdezés. (Relációs algebra: UNION )
46 Sramó András Adatbázis-technológia V. előadás Táblázatok különbsége (P24) SELECT * FROM ügyfél95 EXCEPT SELECT * FROM ügyfél96 ORDER BY ügyfélnév; Azoknak az ügyfeleknek kódját és nevét adja meg az ügyfélnév szerint rendezve, akik 1995-ben kölcsönöztek kazettát, de 1996-ban már nem. (Relációs algebra: DIFFERENCE )
47 Sramó András Adatbázis-technológia V. előadás Táblázatok metszete (P25) SELECT * FROM ügyfél95 INTERSECT SELECT * FROM ügyfél96 ORDER BY ügyfélnév; Azoknak az ügyfeleknek kódját és nevét adja meg az ügyfélnév szerint rendezve, akik 1995-ben is és 1996-ban is kölcsönöztek kazettát. (Relációs algebra: INTERSECTION )
48 Sramó András Adatbázis-technológia V. előadás Adatelérés korlátozása I. Az SQL lehetővé teszi, hogy megfelelő felhasználó- azonosítás mellett az egyes felhasználóknak kü- lönböző jogokat adjunk az adatbázisban tárolt adatok elérését illetően. Az adatelérési privilégiumok a következőek: –SELECT –INSERT –UPDATE –DELETE –REFERENCES
49 Sramó András Adatbázis-technológia V. előadás Adatelérés korlátozása II. A REFERENCES privilégium megengedi a fel- használónak, hogy olyan táblázatot hozzon létre, amely a megnevezett oszlopra hivatkozik. Az INSERT, UPDATE és REFERENCES privilégiumok megadása vonatkozhat egy egész táblázatra, vagy egy táblázat néhány oszlopára. Jogosultság megadása: GRANT utasítás. Jogosultság visszavonása: REVOKE utasítás.
50 Sramó András Adatbázis-technológia V. előadás Példák jogosultság megadására GRANT ALL PRIVILEGES ON ügyfél TO Fruzsina, Viktor; Az ügyfél táblázaton minden jogosultság megadása a Fruzsina és Viktor azonosítójú felhasználóknak. GRANT SELECT ON kazetta TO PUBLIC; A kazetta táblázatban mindenki szabadon kereshet. GRANT UPDATE (év, rendező) ON kazetta TO Fruzsina; A kazetta táblázatban Fruzsina módosíthatja az év és rendező oszlopokat.
51 Sramó András Adatbázis-technológia V. előadás Példák jogosultság visszavonására REVOKE ALL PRIVILEGES ON szereplő FROM Viktor; A szereplő táblázaton minden jogosultság vissza- vonása a Viktor azonosítójú felhasználótól. REVOKE INSERT ON kazetta FROM Viktor; A kazetta táblázatba Viktor nem írhat be új sort. REVOKE UPDATE (kdíj) ON kölcsönzés FROM PUBLIC; A kölcsönzés táblázatban senkisem módosíthatja a kölcsönzési díj értékét.