Adatbázis rendszerek 1. 4. Ea: Esqúel Structured Query Language 64/1 B ITv: MAN 2015.09.17
Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítás DCL utasítások Gyakorló feladatok Ellenőrző kérdések 64/2
Az SQL jellemzése Az SQL a relációs adatbázis-kezelők szabványosított adatmanipulációs és lekérdező nyelve A relációs algebrára épül Nem algoritmikus: Parancsnyelv jellegű, megfogalmazhatjuk, mit akarunk csinálni, de a megoldási algoritmust nem kell megadni. Nincsenek benne ciklusok, feltételes elágazások, stb. Mintaillesztéses, halmazorientált: A táblákat mint a sorok (rekordok) halmazát tekintjük. Az adott utasításban megfogalmazott feltételnek eleget tevő összes sor részt vesz a műveletben 64/3
Az SQL jellemzése 2. Szabványos: Illeszkedik az SQL szabványhoz. A szabványban van egy SQL utasításcsoport, amelyet minden SQL alapú szoftver implementációnak meg kell valósítani, de mindegyik implementáció plusz lehetőséget is nyújt a standard SQLhez képest, felülről kompatibilis a szabvánnyal Fontosabb használati módjai: Önállóan, fejlesztő eszközökben: pl.: SQL*Plus, Beágyazva procedurális programozási nyelvekbe. pl.: C/C++, Pacal Az SQL nem DBMS! 64/4
Az SQL jellemzése 3. Az SQL által lefedett területek: DDL: Data Definition Language adatstruktúra definiáló utasítások adatbázisok, táblák létrehozása, módosítása és törlése DML: Data Manipulation Language adatokon műveletet végző utasítások adatok rögzítése, módosítása, törlése DQL: Data Query Language adat lekérdező utasítás DCL: Data Control Language adatvezérlő, felügyelő utasítások tranzakciók kezelése, jogosultságok menedzselése 64/5
Az SQL használata Tipikus műveleti sorrend: Objektumok, táblák létrehozása, adatok felvitele, adatok lekérdezése, adatok módosítása, szerkezetek módosítása, működési környezet beállítása. Rendszám Típus Szín Kor Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 ABC-765 Opel Fehér 6 64/6 AKT-392 Trabant Kék 32
Szintaxis Kisbetű és nagybetű a nyelv alapszavaiban egyenértékű. Utasítások sorfolytonosan írhatók, lezárás pontosvesszővel. Szövegkonstans: 'szöveg' Változó nincs, csak tábla- és oszlopnevekre lehet hivatkozni. Kifejezésben hivatkozás egy tábla adott oszlopára: tábla.oszlop (ha a tábla egyértelmű, akkor elhagyható). Logikai műveletek: AND, OR, NOT Az utasítások szintaxisának leírásánál az elhagyható részleteket szögletes zárójelek között vannak. 64/7
Az SQL utasítások csoportosítása DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER DML: - rekord felvitel INSERT - rekord törlés DELETE - rekord módosítás UPDATE DQL: - lekérdezés SELECT DCL: - védelem GRANT, REVOKE - tranzakció kezelés COMMIT, ROLLBACK 64/8
Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítás DCL utasítások Gyakorló feladatok Ellenőrző kérdések 64/9
DDL Adatstruktúra definiáló utasítások DDL Data Definition Language Adatszerkezetek (elsősorban táblák) létrehozása, módosítása, törlése Egy tábla szerkezete, sémája a táblához tartozó mezőkkel egyértelműen megadható A mezők megadása a mező nevének és a mező adattípusának, valamint az integritási feltételeknek a kijelölésével történik Több tábla is létezhet ugyanazzal a szerkezettel, de a nevük nem lehet egyforma 64/10
Tábla (vagy más objektum) létrehozása CREATE objektumtípus objektumnév paraméterek; CREATE TABLE táblanév ( mezőnév adattípus [integritási feltétel], mezőnév adattípus [integritási feltétel], mezőnév adattípus [integritási feltétel] [,további integritási feltételek] ); CREATE TABLE Autó ( Rendszám char(7) PRIMARY KEY, Típus char(25) NOT NULL, Szín char(15) DEFAULT 'Fehér', Kor number(2) CHECK (Kor > 0) ); 64/11 Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 AKT-392 Trabant Kék 32
Adattípusok Alap adattípusok: Char(n) n hosszúságú karaktersorozat, Number(n,m) n jegyű decimális szám, ebből m tizedes jegy; Number(8,2) 123456,12 Date dátum. További típusok (környezetfüggő!): INTEGER egész szám (röviden INT) REAL valós (lebegőpontos) szám Time időpont 64/12
Integritási feltételek megadása Primary key elsődleges kulcs References idegen kulcs Foreign key (mezőlista) References táblanév(mezőlista) idegen kulcs megadása ha a kulcs több mezőből áll Not null nem maradhat üresen a mező, kötelező kitölteni Unique a mező egyedi, nem kerülhet bele két egyforma érték Default alapérték megadása Check értékellenőrzés 64/13
Tábla módosítása ALTER TABLE táblanév [ADD (újelem,..., újelem)] [MODIFY (módosítás,..., módosítás)] [DROP (oszlop,..., oszlop)]; újelem: egy "oszlopnév adattípus [feltétel] csoport módosítás: "oszlopnév adattípus [feltétel] ALTER TABLE Autó ADD (Tulaj REFERENCES Ember); Fontos: a mezők mérete általában csak növelhető, a DROP funkciót pedig általában nem engedik a DBMS-ek. 64/14
Tábla törlése DROP TABLE táblanév; Azok a táblák amelyekre más tábla hivatkozik, nem törölhetők! DROP TABLE Autó; 64/15
Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítás DCL utasítások Gyakorló feladatok Ellenőrző kérdések 64/16
DML adatokon műveletet végző utasítások DML Data Manipulation Language Rekordok (sorok) beszúrása (felvitele) Mezők értékének módosítása Rekordok törlése 64/17
Rekordok beszúrása INSERT INTO táblanév [(oszloplista)] VALUES (értéklista); INSERT INTO Autó VALUES ('AKT-392', 'Trabant', 'Kék', 32); Az oszloplista elhagyható, de ekkor az összes mező értékét meg kell adni, a megfelelő sorrendben! INSERT INTO Autó (Rendszám, Típus, Kor) VALUES ('ASD-602', 'Mazda', 7); Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 INSERT INTO Autó VALUES ('ALM-332', 'Renault', Null, 8); INSERT INTO Autó VALUES ('IJK-222', 'Lada', Default, 25); 64/18
Mezők értékének módosítása UPDATE táblanév SET mező = kifejezés,..., mező = kifejezés [ WHERE feltétel ]; A feltételnek eleget tevő mezők módosulnak, Where feltétel nélkül minden mezőt módosít! UPDATE Autó SET Kor=10 WHERE Rendszám='JED-123'; UPDATE Autó SET Szín= 'Barna'; UPDATE Autó SET Kor=10, Szín='Kék' WHERE Rendszám='JED-123'; A mezőben lévő aktuális érték is felhasználható: UPDATE Autó SET Ár = Ár * 1.2 WHERE Ár<1000000; 64/19
Rekordok törlése DELETE FROM táblanév [ WHERE feltétel ]; Where feltétel nélkül minden sor törlődik! DELETE FROM Autó WHERE Kor>15; 64/20
Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítás DCL utasítások Gyakorló feladatok Ellenőrző kérdések 64/21
DQL utasítások Projekció Szelekció Feltételek megfogalmazása Rendezés a lekérdezésben Aggregáció a lekérdezésben Csoportképzés a lekérdezésben Join Halmazműveletek Al-select 64/22
DQL Adat lekérdező utasítás Az SQL nyelvben egyetlen parancs, a SELECT parancs szolgál az adatok lekérdezésére Alkalmas a relációs algebra minden műveletének a leképzésére Feladata: Egy vagy több adattáblából egy eredménytábla előállítása, amely a képernyőn listázásra kerül, vagy más módon használható fel. SELECT [DISTINCT] oszloplista FROM táblanévlista [WHERE feltétel]; DISTINCT: Az eredménytáblában az ismétlődő rekordokból csak egy jelenik meg. 64/23
Projekció (vetítés) Projekció: csak a kijelölt mezők jelennek meg az eredmény relációban. Jele: mezőlista (r) Megvalósítása: SELECT mezőnévlista FROM táblanév; Rendszám Típus Szín Kor Ár GBC-765 Opel Fehér 6 1200000 JED-123 Nissan Ezüst 5 1500000 AKT-392 Trabant Kék 32 25000 SELECT Rendszám, Típus FROM autó; SELECT * FROM autó; SELECT Típus, Ár/280 As EuroÁr FROM autó; Típus Opel Nissan Trabant EuroÁr 4285 5357 89 64/24
Szelekció (kiválasztás) Szelekció: a megadott feltételnek eleget tévő rekordok kerülnek át az eredmény relációba. Jele: felt (r) Megvalósítása: SELECT [DISTINCT] * FROM táblanév WHERE feltétel; SELECT * FROM autó WHERE Kor<10; Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 Ár 1200000 1500000 64/25
Feltételek megfogalmazása Használható operátorok: Relációs operátorok (=,!=, <, >,!<,!>, <>, <=, >=) Algebrai operátorok (+,-,*,/) Logikai operátorok (AND, OR, NOT) Speciális logikai kifejezések: x IS NULL: igaz, ha az x mező értéke NULL. x BETWEEN a AND b: igaz, ha a x b. x IN halmaz: igaz, ha x megegyezik a megadott halmaz egy elemével. x LIKE minta: igaz, ha az x karaktersorozat megfelel a megadott mintának. Helyettesítő karakterek: _ - egy karakter, % - tetszőleges számú karakter 64/26
Példák szelekciós feltételekre Ember: Név Cím Szül_Év Kis Géza Eger 1983 Autó: Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 Ár 1200000 SELECT * FROM Ember WHERE Szül_Év BETWEEN 1975 AND 1980; SELECT * FROM Ember WHERE Cím IS NULL; SELECT * FROM Ember WHERE Név LIKE 'B%'; SELECT * FROM Ember WHERE Név LIKE %_Géza%'; SELECT Rendszám FROM Autó WHERE Szín IN ('piros', 'kék', 'fehér'); SELECT Rendszám,Típus FROM Autó WHERE Ár < 1000000 AND Szín NOT LIKE '%lila%'; SELECT Rendszám FROM Autó WHERE Rendszám LIKE '_ER-6%'; SELECT Rendszám FROM Autó WHERE Rendszám LIKE '%0' or Rendszám LIKE '%2' or Rendszám LIKE '%4' or Rendszám LIKE '%6' or Rendszám LIKE '%8'; 64/27
Szelekciós függvények ABS(n): abszolút é'rték Példa: ABS(-15) = 15 LOWER(char): konverzió kisbetűsre. Példa: LOWER('Kovács') = 'kovács' UPPER(char): konverzió nagybetűsre. Példa: UPPER('Kovács') = 'KOVÁCS' INITCAP(char): konverzió nagy kezdőbetűsre. Példa: INITCAP('kovács') = 'Kovács' LTRIM(char): balról szóközök eltávolítása. Példa: LTRIM(' alma ') = 'alma ' RTRIM(char): jobbról szóközök eltávolítása. Példa: RTRIM(' alma ') = ' alma' 64/28
Szelekciós függvények 2. SUBSTR(char, m[, n]): a char string m-edik karakterétől n hosszú részstringet ad vissza. (Ha n nem szerepel, akkor a végéig.) Az első karakter 1-es sorszámú. Példa: SUBSTR('ABCDEFG',2,3) = 'BCD' TO_CHAR(n): konverzió numerikusról vagy dátumról karakteresre. Példa: TO_CHAR(123) = '123' TO_DATE(char): konverzió karakteresről dátumra. Példa: TO_DATE('15-JAN-06') TO_NUMBER(char): konverzió karakteresről numerikusra. Példa: TO_NUMBER('123') = 123 SQRT(kifejezés): Négyzetgyök, numerikus kifejezésre vonatkozik. Példa: SQRT(16) = 4 64/29
Rendezés a lekérdezésben Nem szerepel az eredeti modellben, ugyanis az halmazorientált, ahol nem értelmeztük a rendezettséget. A gyakorlatban adatainkat listákban tároljuk, ahol rendszerint valamilyen rendezettséget valósítunk meg (akár több szempont szerint is). SELECT... FROM... [WHERE...] ORDER BY oszlopnév [DESC], oszlopnév [DESC],...; ASC (ascending) : növekvő sorrend - alapértelmezés DESC (descending) : csökkenő sorrend Alapértelmezésben növekvő, ha fordítva akarjuk akkor DESC! SELECT * FROM autó ORDER BY Típus, Ár DESC; 64/30
Aggregáció a lekérdezésben Aggregáció: a reláció rekordjaira összesítő érték(ek)et tartalmazó rekordot ad vissza Aggregációs függvények: SUM(x) - összeg AVG(x) - átlagérték MAX(x) legnagyobb érték MIN(x) legkisebb érték COUNT(x) elemek száma x: numerikus mező vagy kifejezés értéke *: minden rekordot érint SELECT avg(ár) FROM Autó; SELECT count(*) FROM Autó; SELECT count(kor) FROM Autó Where Kor > 10; SELECT Sum(Ár), Avg(Kor) FROM Autó; 64/31
Csoportképzés a lekérdezésben SELECT... FROM... [WHERE...] GROUP BY oszloplista; Az egyes csoportba azok a rekordok kerülnek, melyeknél oszloplista értéke azonos. Az eredménytáblában egy csoportból egy rekord jelenik meg Az összesítő függvények csoportonként hajtódnak végre. SELECT Típus, avg(ár) FROM Autó GROUP BY Típus; SELECT Típus, count(*) FROM Autó WHERE Szín='Piros' GROUP BY Típus ORDER BY Típus; SELECT Szín, min(ár), max(ár) FROM Autó GROUP BY Szín; 64/32
Csoportok szűrése SELECT... FROM... [WHERE...] GROUP BY oszloplista HAVING feltétel; A csoportképzés után a kapott eredményreláció szűkítése bizonyos rekordokra. A WHERE szelekciós opció nem alkalmazható, mert az az alapreláció rekordjain értelmezett szelekcióra vonatkozik! SELECT Típus, avg(ár) FROM Autó GROUP BY Típus HAVING avg(ár) > 500000; SELECT Típus, count(*) FROM Autó WHERE Szín='Piros' GROUP BY Típus HAVING count(*) > 3 ORDER BY Típus; 64/33
Join (szorzat, illesztés) Ha az eredménytábla két (vagy több) táblából akarjuk az adatokat megjeleníteni, akkor a táblák összekapcsolására a JOIN parancsot kell használni. SQL-ben a következő típusokat alkalmazhatjuk: Alap join (teljes illesztés), Szelekciós join, Outer join, Self join (tábla összekapcsolása önmagával). 64/34
Alap join (teljes illesztés) SELECT mezőlista FROM táblanév1, táblanév2; Autó: Ember: Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér 1200000 114 114 Kis Géza Eger 20-9555666 JED-123 Nissan Ezüst 1500000 178 178 Jó Éva Miskolc 30-8765432 SELECT Név,Típus,Ár FROM Autó,Ember; Név Típus Ár Kis Géza Opel 1200000 Jó Éva Opel 1200000 Kis Géza Nissan 1500000 Jó Éva Nissan 1500000 64/35
Szelekciós join 1. változat SELECT mezőlista FROM tábla1, tábla2 WHERE feltétel; A szelekciós feltétel és a join feltétel nem válik szét! Autó: Ember: Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék 1200000 1500000 25000 114 199 102 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd 20-9555666 30-8765432 70-3355440 155 Bő Jenő Ózd 70-3355440 SELECT Név,Típus,Ár FROM Autó,Ember Where Tulaj=Ekód; Név Típus Ár Kis Géza Opel 1200000 Kék Béla 64/36 Trabant 25000
Szelekciós join 2. változat SELECT mezőlista FROM tábla1 INNER JOIN tábla2 ON join_feltétel WHERE feltétel; A szelekciós feltétel és a join feltétel külön-külön megadható! Autó: Ember: Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék 1200000 1500000 25000 114 199 102 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd 20-9555666 30-8765432 70-3355440 155 Bő Jenő Ózd 70-3355440 SELECT Név,Típus,Ár FROM Autó INNER JOIN Ember ON Tulaj=Ekód Where Ár > 500000; Név Típus Ár Kis Géza 64/37 Opel 1200000
Outer join (külső illesztés) SELECT FROM tábla1 [LEFT RIGHT FULL] OUTER JOIN tábla2 ON join_feltétel [WHERE feltétel] ; Az illeszkedő pár nélküli rekordok is bekerülnek az eredménybe. Autó: Ember: Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék 1200000 1500000 25000 114 199 102 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd 20-9555666 30-8765432 70-3355440 155 Bő Jenő Ózd 70-3355440 SELECT Rendszám,Név FROM Autó RIGHT OUTER JOIN Ember ON Tulaj=Ekód Where Cím='Ózd'; 64/38 Rendszám AKT-392 Név Kék Béla Bő Jenő RIGHT: A jobb oldali táblából jönnek a pár nélküli rekordok is, üres értékkel kiegészítve.
Outer join (külső illesztés) Példa Hány darab autója van az egyes embereknek? Autó: Ember: Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék 1200000 1500000 25000 114 178 102 LOG-416 Volvo Piros 2825000 114 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd 20-9555666 30-8765432 70-3355440 155 Bő Jenő Ózd 70-3355440 SELECT Név, count(tulaj) As Darab FROM Autó RIGHT OUTER JOIN Ember ON Tulaj=Ekód Group By Név; Név Kis Géza Jó Éva Kék Béla Bő Jenő Darab 2 1 1 0 64/39
Self join önillesztés :-) SELECT FROM tábla t1, tábla t2 [WHERE feltétel] ; A tábla kétszer szerepel, különböző álnevekkel. Autó: Rendszám Típus Kor Ár Tulaj GBC-765 Opel 5 JED-123 Nissan 8 HGZ-392 Nissan 7 1200000 1000000 900000 114 178 102 LOG-416 Opel 6 1300000 115 Azon autók rendszáma, melyek idősebbek, mégis drágábbak saját típustársuknál: SELECT a1.rendszám FROM Autó a1, Autó a2 WHERE a1.típus=a2.típus AND a1.kor>a2.kor AND a1.ár>a2.ár); Rendszám JED-123 LOG-416 64/40
Halmazműveletek Unió: SELECT UNION [ALL] SELECT ; Metszet: SELECT INTERSECT SELECT ; Különbség: SELECT MINUS SELECT ; Csak azonos szerkezetű táblák esetén alkalmazhatók! Rendszám Típus Szín GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Ár 1200000 1500000 25000 Tulaj 114 178 102 LOG-416 Volvó Kék 2825000 114 Ekód Név Cím 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Telefon 20-9555666 30-8765432 70-3355440 155 Bő Jenő Ózd 70-3355440 Azok az emberek, akiknek nincs autójuk: SELECT név FROM ember MINUS SELECT név FROM ember WHERE Ekód IN (SELECT Tulaj FROM autó); 64/41 Név Kis Géza Jó Éva Kék Béla Bő Jenő Név Kis Géza Jó Éva Kék Béla Név Bő Jenő
AL-SELECT Az SQL támogatja azt a lehetőséget, hogy a szelekciós feltételben nemcsak létező, letárolt adatelemekre hivatkozzunk, hanem számított kifejezéseket is alkalmazhassunk. A számítást egy másik SELECT utasítással tudjuk megadni. Tehát az egyik lekérdezés szelekciós feltételében hivatkozunk egy másik lekérdezés eredményére. Az al-lekérdezést mindig zárójelben kell megadni, hogy elemei elkülönüljenek. Formailag megegyezik a normál SELECT utasítással (kivétel:al-select-ben nem lehet rendezni) 64/42
Az AL-SELECT operátorai Az al-lekérdezés eredményétől függően különböző operátorokat kapcsolhatunk az AL-SELECT-hez: Ha az eredmény egy rekord: skalár operátorok (relációs operátorok) használhatók. Ha az eredmény több rekord: halmazoperátorok (IN, ANY, ALL, EXISTS) használhatók. SELECT FROM WHERE mező IN (al-select); SELECT FROM WHERE mező θ ANY (al-select); SELECT FROM WHERE mező θ ALL (al-select); SELECT FROM WHERE EXISTS (al-select); θ: tetszőleges relációs operátor 64/43
Az AL-SELECT operátorai 2. ANY: a halmaz minden eleméhez hasonlít, ha egyet talál, akkor igazzal tér vissza ALL: a halmaz minden eleméhez hasonlít, ha akár egyre nem teljesül, akkor hamisat ad vissza EXISTS: az eredményhalmaz üres-e (ha üres, akkor hamissal tér vissza) 64/44
Példák AL-SELECT-re Autó: Ember: Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Piros JED-123 Nissan Ezüst AKT-392 Trabant Kék 1200000 1500000 25000 114 178 102 LOG-416 Volvo Piros 2825000 114 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd 20-9555666 30-8765432 70-3355440 155 Bő Jenő Ózd 70-3355440 Az egri tulajdonosok autóinak árát növeljük meg 20%-al: UPDATE Autó SET Ár=Ár*1.2 WHERE Tulaj IN (SELECT Ekód FROM Ember WHERE Cím='Eger'); Töröljük azokat az embereket, akiknek több mint 2 autójuk van: DELETE FROM Ember WHERE Ekód IN (SELECT Ekód, count(*) FROM Ember, Autó WHERE Ekód=Tulaj GROUP BY Ekód HAVING count(*) > 2); 64/45
Példák AL-SELECT-re Autó: Ember: Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék 1200000 1500000 25000 114 178 102 LOG-416 Volvo Piros 2825000 114 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd 20-9555666 30-8765432 70-3355440 155 Bő Jenő Ózd 70-3355440 Bármely piros autó áránál olcsóbb autók rendszámai: SELECT Rendszám FROM Autó WHERE Ár < ANY (SELECT Ár FROM Autó WHERE Szin='piros'); Minden piros autó áránál olcsóbb autók rendszámai: SELECT rsz FROM autó WHERE ár < ALL (SELECT ár FROM autó WHERE szin= piros ); Rendszám GBC-765 JED-123 AKT-392 Rendszám AKT-392 64/46
Példák AL-SELECT-re Autó: Ember: Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék 1200000 1500000 25000 114 178 102 LOG-416 Volvo Piros 2825000 114 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd 20-9555666 30-8765432 70-3355440 155 Bő Jenő Ózd 70-3355440 Azok az emberek, akiknek nincs autójuk (1. változat): SELECT Név FROM Ember WHERE Ekód NOT IN (SELECT Tulaj FROM Autó); Azok az emberek, akiknek nincs autójuk (2. változat): SELECT E.Név FROM Ember E WHERE NOT EXISTS (SELECT * FROM Autó A WHERE A.Tulaj=E.Ekód); 64/47
Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítás DCL utasítások Gyakorló feladatok Ellenőrző kérdések 64/48
DCL Jogosultságok kezelése Jogosultság adása: GRANT művelet ON objektum TO felhasználó PUBLIC [ WITH GRANT OPTION ]; Jogosultság visszavonása: REVOKE művelet ON objektum FROM felhasználó PUBLIC; Jogok visszavonása: Minden felhasználó A megszerzett jog tovább adható. Csak attól a felhasználótól vonható vissza jog, akinek kiadtuk a jogot. Ha ez a felhasználó időközben továbbadta a jogot, az is automatikusan visszavonásra kerül. 64/49
DCL Jogosultságok kezelése 2. Engedélyezhető műveletek: SELECT: INSERT: DELETE: UPDATE: ALL: táblázat lekérdezése táblázat bővítése táblázat rekordjainak törlése táblázat rekordjainak módosítása minden művelet Jogok engedélyezése: GRANT SELECT ON Autó TO Jenő; GRANT SELECT,UPDATE(Szín) ON Autó TO PUBLIC; GRANT DELETE ON Autó TO Jenő WITH GRANT OPTION; Jogok visszavonása: REVOKE ALL ON Autó FROM Jenő; REVOKE UPDATE ON Autó FROM Public; 64/50
Adatbázis rendszerek 1. Ellenőrző kérdések 64/51
Ellenőrző kérdések 1. 1. Melyik paranccsal lehet létrehozni adatbázis táblát? A: BUILD B: CONSTRUCT C: CREATE D: MAKE E: PREPARE 2. Melyik paranccsal lehet törölni adatbázis táblát? A: CLOSE B: DELETE C: CLEAR D: DROP E: KILL 64/52
Ellenőrző kérdések 2. 3. Helyes az alábbi parancs? Séma: Termék [ Kód, Név, Ár, Leírás ] insert into termek ('A0123', 'Sál',1500,null); A: Igen B: Nem 4. Melyik kulcsszó hiányzik a parancsból? UPDATE termék SET ár=ár*1.1; A: TO B: SET C: WHERE D: FOR E: Nem hiányzik semmi a parancsból! 64/53
Ellenőrző kérdések 3. 5. Melyik kulcsszó hiányzik a parancsból? SELECT név, ár FROM termék ORDER BY név; A: Egy vessző (,) hiányzik. B: SHOT BY C: WHERE D: ORDER BY E: Nem hiányzik semmi a parancsból! 6. Helyes az alábbi parancs? SELECT név, lakcím FROM vásárló WHERE fizmód= 'bankkártya' OR 'utánvét'; A: Igen B: Nem 64/54
Ellenőrző kérdések 4. 7. Melyik paranccsal lehet kiíratni azokat a termékeket, melyeknek üres a leírás mezője? A: select név from termék where leírás =' '; B: select név from termék where leírás = NULL; C: select név from termék where leírás IS NULL; D: select név from termék where leírás EMPTY; E: select név from termék where leírás LIKE ' '; 8. Helyes az alábbi parancs? SELECT terméknév FROM termék WHERE ár > 200 and < 500; A: Igen B: Nem 64/55
Ellenőrző kérdések 5. 9. Melyik kulcsszó hiányzik a parancsból? SELECT név FROM termék WHERE ár > 1000; A: TO B: SET C: WHERE D: FROM E: GROUP BY E: SHORT BY 10. Helyes az alábbi parancs? SELECT count(*) FROM vásárló; A: Igen B: Nem 11. Helyes az alábbi parancs? SELECT count(*) FROM vásárló WHERE az='az'; A: Igen B: Nem 64/56
Ellenőrző kérdések 6. 12. Melyik paranccsal lehet módosítani az adatbázis tábla szerkezetét? A: ALTER B: CHANGE C: MODIFY D: AMEND E: REVISED 13. Melyik a kakukktojás? A: DDL B: DQL C: DML D: DBL E: DCL 64/57
Ellenőrző kérdések 7. 14. Adja meg a feladatokat megvalósító SQL parancsokat! Típus Kor A: Hozza létre a táblát: B: Vigyen fel egy rekordot: C: Írassa ki a kék autók rendszámát: D: Írassa ki az átlagkort: E: Hány darab piros autó van? F: Írassa ki azokat a rendszámokat, melyekben van B betű. G: Írassa ki azokat a rendszámokat, melyekben nincs B betű. H: Törölje ki az Opeleket. I: Írassa a 4 és 8 év közötti korú autók rendszámát. 64/58 Rendszám Autó Szín
Ellenőrző kérdések 8. 15. Alakítson kategóriákat, és sorolja az alábbi parancsokat az egyes kategóriákba! Kategóriák: Parancsok: A: insert B: select C: grant D: create E: update F: modify G: drop H: delete I: revoke 64/59
Ellenőrző kérdések 9. 16. Igaz vagy Hamis az állítás? Az SQL utasításaiban a kisbetű és a nagybetű egyenértékű. 64/60 A DDL parancsok az adatokon műveleteket végeznek. A szöveg konstansokat aposztrófok " " közé kell tenni. Az SQL-ben a * (csillag) csak a count paramétereként használható: count(*). A projekciót a select paranccsal lehet megvalósítani. Az AVG(ár) from termék; parancs kiírja az átlagárat. A delete termék; parancs kitörli az összes terméket. Az inner join-nak létezik left típusa. A having parancs csak a group by paranccsal együtt használható.
Ellenőrző kérdések 10. 17. Az adott séma alapján adja meg az SQL parancsokat! A: Mely termékek leírásában szerepel a női szó? B: Mely raktárhelyeken van 100-nál több termék? C: Mely raktárhelyeken van bikini nevű termék? D: Mennyi a termékek átlagára? E: Összesen hány darab bikini van a raktárban? F: Összesen mennyi értékű bikini van a raktárban? G: Növelje meg a kesztyű nevű, bőr leírású termékek árát 1000 forinttal. H: Törölje ki a nulla darabszámú raktárhelyeket! 64/61 Termék [ Tkód, Név, Ár, Leírás ] Raktár [ RaktHely, Tkód, Darab ]
64/62 Gratulálok! Ön átvette a tananyagot, és letesztelte a tudását!
Felhasznált irodalom Kovács László elektronikus jegyzetei Szelezsán János: Adatbázisok, LSI Oktatóközpont, 1999 Baksáné Varga Erika elektronikus jegyzetei IHM: Adatbázis-kezelés, elektronikus jegyzet Stolniczki Gyula: SQL kézikönyv 64/63
VÉGE VÉGE 64/64