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

Hasonló dokumentumok
B I T M A N B I v: T M A N

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

Adatbázisok I. Az SQL nyelv

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

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

Adatbázisok I A relációs algebra

Adatbázis rendszerek SQL nyomkövetés

Adatbázisok* tulajdonságai

Adatbázis rendszerek Ea: Esqúel. Structured Query Language

Adattípusok. Max. 2GByte

BEVEZETÉS Az objektum fogalma

Adattípusok. Max. 2GByte

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

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

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

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

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

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Adatbázis rendszerek Gy: DQL Lekérdezések

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

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

Adatbázis rendszerek Ea: Eskúel. Structured Query Language

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

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

Adatbázis használat I. 5. gyakorlat

Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály. Adatbázis-kezelés alapjai SQL 2: DQL. v: B IT MAN 169/1

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

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

Keskeny Zoltán 2007/08 SQL. Structured Query Language. (gyakorlat az SQL2 szabvány alapján) Keskeny Zoltán tanév

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

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

SQL parancsok feldolgozása

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

Adatok szűrése, rendezése

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

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

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

Adatbázisok elmélete 9. előadás

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

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

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

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

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

Adatbázisok elmélete 10. előadás

Adatbázisok elmélete 9. előadás

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

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Bevezetés: az SQL-be

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

Adatbázisok I A relációs algebra

Relációs algebrai lekérdezések átírása SQL SELECT-re (példák)

ADATBÁZISKEZELÉS ADATBÁZIS

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

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

3. Előadás. Az SQL adatbázisnyelv (Tartalom) Az SQL története. Az SQL felépítése. Adattípúsok. SQL utasítások

SQL gyakorló feladatok. 6. Adatbázis gyakorlat április 5.


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

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

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

A könyv tartalomjegyzéke

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Adatbázis-kezelés alapjai SQL 1: DDL, DML. v: B IT MAN 92/1B IT MAN

Adatbázis-kezelés. 3. Ea: Viszonyított betűszámtan (2013) Relációs algebra alapok (átgondolt verzió) v: Szűcs Miklós - ME, ÁIT. 1.

GEIAL Kovács László. GEIAL Kovács László

Java és web programozás

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

Adatbázisok biztonsága

Java és web programozás

Elemi alkalmazások fejlesztése IV.

Megszorítások. AB1_06A_Megszorítások - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

1. fejezet Microsoft Excel 2010 Tartománynevek... 3

Adatbázis Rendszerek II. 3. SQL alapok

Adatbázis-kezelés alapok Adatbázisok című tárgyhoz, ismétlés kapcsán

Óravázlat. az ECDL oktatócsomaghoz. 5. modul. Adatbáziskezelés. Krea Kft Budapest, Szőlő u 21. Tel/fax: / krea@krea.

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

A relációs algebra egy speciális algebra, amely néhány egyszerű, de hathatós. operandusok. Egy reláció megadható a nevével vagy közvetlenül, sorainak

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

BEVEZETÉS Az objektum fogalma

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

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

Felvételi vizsga Mesterképzés, gazdaságinformatikus szak BME Villamosmérnöki és Informatikai Kar január 7.

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Adatbázisok I. Jánosi-Rancz Katalin Tünde 327A 1-1

Beszerzési logisztika támogatása az optimális beszállító kiválasztása révén

INFORMATIKAI ALAPISMERETEK

Informatikus informatikus Térinformatikus Informatikus T 1/9

Vektoros grafikát tároló adatbázisok. Katona Endre Térképi adatbázisok diasorozata alapján

Adatbázisok tavaszi félév Vizsgatételsor

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei


INTEGER egész típusú érték megadása, hozzá hasonló, de számábrázolási tartományában eltérő típus még a SMALLINT, szinonimája a DECIMAL

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Adatbázis fejlesztés és üzemeltetés II. Szabó Bálint

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

Átírás:

Adatbázis-kezelés, információs-rendszerek 3. Ea: Eskúel (2011) Structured Query Language v: 2011.09.05 Szűcs Miklós - ME, ÁIT. 1.o

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 2.o

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 3.o

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! 4.o

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 5.o

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 AKT-392 Trabant Kék 32 6.o

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. 7.o

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 8.o

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 9.o

DDL Adatstruktúra definiáló utasítások 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 10.o

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) ); 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 11.o

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 12.o

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 13.o

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] 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. 14.o

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ó; 15.o

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 16.o

DML adatokon műveletet végző utasítások Rekordok (sorok) beszúrása (felvitele) Mezők értékének módosítása Rekordok törlése 17.o

Rekordok beszúrása INSERT INTO táblanév [(oszloplista)] VALUES (értéklista); INSERT INTO Autó VALUES ('AKT-392', 'Trabant', 'Kék', 32); Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 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); INSERT INTO Autó VALUES ('ALM-332', 'Renault', Null, 8); INSERT INTO Autó VALUES ('IJK-222', 'Lada', Default, 25); 18.o

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; 19.o

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; 20.o

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 21.o

DQL utasítás 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 22.o

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. 23.o

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 24.o

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 25.o

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 26.o

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'; 27.o

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' 28.o

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 29.o

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; 30.o

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 Szum(Ár), Avg(Kor) FROM Autó; 31.o

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; 32.o

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; 33.o

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). 34.o

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 Kis Géza Típus Opel Ár 1200000 Jó Éva Opel 1200000 Kis Géza Nissan 1500000 Jó Éva Nissan 1500000 35.o

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 Kis Géza Kék Béla Típus Opel Trabant Ár 1200000 25000 36.o

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 Kis Géza Típus Opel Ár 1200000 37.o

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'; 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. 38.o

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 39.o

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 40.o

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ó); 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ő 41.o

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) 42.o

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 43.o

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) 44.o

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); 45.o

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 46.o

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); 47.o

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 48.o

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. 49.o

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; 50.o

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 51.o

Gyakorló feladatok Termék-Vásárlás-Vásárló Oktató-Tantárgy-Hallgató 52.o

Gyakorló feladat: Termék-Vásárlás-Vásárló Kód Név Vásárlás VID Név Termék Vásárló Ár Leírás Dátum Darab Lakcím FizMód Termék Vásárló Kód C5 Név C25 Ár N6 Leírás C25 Név C25 Lakcím C40 FizMód C15 VID C5 Vásárlás Kód C5 Dátum D Darab N6 Azon C5 53.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 2. Termék Vásárló Kód C5 Név C25 Ár N6 Leírás C25 Név C25 Lakcím C40 FizMód C15 VID C5 Vásárlás Kód C5 Dátum D Darab N6 Azon C5 Séma leírás: Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] 54.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 3. Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] create table termék( kód char(5) NOT NULL PRIMARY KEY, név char(25), ár number(6), leiras char(25)); create table vásárló( VID char(5) NOT NULL PRIMARY KEY, név char(25), lakcím char(40), fizmód char(15)); create table vásárlás( kód char(5) REFERENCES termék NOT NULL, dátum date, darab number(6), azon char(5) REFERENCES vásárló NOT NULL ); 55.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 4. Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] Alter table vásárló modify lakcím char(50); Alter table vásárló add szülidő date; Nem lehet mező szélességét csökkenteni, és mezőt törölni! Megoldás: Új tábla létrehozása a megfelelő mezőszerkezettel, ezután az adatok átmásolása ebbe a táblába, és az eredeti tábla törlése! Drop table vásárlás; Drop table vásárló; Drop table termék; Nem lehet olyan táblát törölni, amelyre más tábla hivatkozik! Fordított sorrend törléskor, mint létrehozáskor! 56.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 5. Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] insert into termék ('A0123','Sál',1500,'Női-férfi termék'); insert into termek (kód,név,ár) Values('A0123','Sál',1500); insert into termek ('A0123','Sál',1500,NULL); insert into termék ('A0123','Sál',NULL,'Női-férfi termék'); UPDATE termék SET ár=ár*1.1; UPDATE termék SET ár=1200 WHERE kód LIKE 'A%'; Delete from termék; Delete from termék where kód LIKE 'A%'; 57.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 6. Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] SELECT név, ár FROM termék; SELECT név, ár FROM termék ORDER BY név; SELECT név, ár FROM termék ORDER BY ár DESC; SELECT név, ár FROM termék WHERE leírás LIKE '%női%'; SELECT név, lakcím FROM vásárló WHERE fizmód= 'bankkártya'; SELECT név, lakcím FROM vásárló WHERE fizmód= 'bankkártya' OR fizmód= 'utánvét' ; SELECT név, lakcím FROM vásárló WHERE fizmód IN ('bankkártya', 'utánvét'); 58.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 7. Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] SELECT név, ár FROM termék WHERE ár BETWEEN 200 AND 500; SELECT név FROM termék WHERE leírás IS NULL; SELECT név, darab FROM termék,vásárlás WHERE termék.kód=vásárlás.kód AND darab>5; SELECT termék.név, vásárló.név FROM termék,vásárlás,vásárló WHERE termék.kód=vásárlás.kód AND vásárló.vid=vásárlás.azon; SELECT termék.név, darab, dátum FROM termék,vásárlás,vásárló WHERE termék.kód=vásárlás.kód AND vásárló.vid=vásárlás.azon AND vásárló.név= 'Kovács Béla'; 59.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 8. Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] SELECT vásárló.név FROM termék,vásárlás,vásárló WHERE termék.kód=vásárlás.kód AND vásárló.vid=vásárlás.azon AND fizmód= 'bankkártya' AND termék.név LIKE '%sál%'; SELECT vásárló.név, dátum FROM vásárlás,vásárló WHERE vásárló.vid=vásárlás.azon AND darab > 3; SELECT vásárló.név, termék.név FROM termék,vásárlás,vásárló WHERE termék.kód=vásárlás.kód AND vásárló.vid=vásárlás.azon AND dátum = '2009.11.11'; 60.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 9. Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] SELECT count(*) FROM termék; SELECT max(ár) FROM termék; SELECT avg(ár) FROM termék; SELECT szum(ár*darab) FROM termék,vásárlás WHERE termék.kód=vásárlás.kód; 61.o

Gyakorló feladat: Termék-Vásárlás-Vásárló 10. Termék [ Kód, Név, Ár, Leírás ] Vásárló [ Név, Lakcím, FizMód, VID ] Vásárlás [ Kód (Termék), Dátum, Darab, Azon (Vásárló) ] SELECT szum(ár*darab) FROM termék,vásárlás,vásárló WHERE termék.kód=vásárlás.kód AND vásárló.vid=vásárlás.azon AND vásárló.név= 'Kovács Béla'; SELECT vásárló.név, szum(ár*darab) FROM vásárlás,vásárló WHERE vásárló.vid=vásárlás.azon AND fizmód= 'utánvét' GROUP BY vásárló.név; 62.o

Gyakorló feladatok Termék-Vásárlás-Vásárló Oktató-Tantárgy-Hallgató 63.o

64.o Gyakorló feladat: Oktató-Tantárgy-Hallgató Cím C20 Tkód C4 Kredit N1 Tantárgy Oktató C6 Név C30 Okód C6 Tanszék C20 Oktató Fizetés N7 Hkód C6 Tkód C4 Tanév/félév C20 Kapcsoló Dátum D Vizsga Jegy N1 Hkód C6 Tkód C4 Név C30 Hkód C6 Város C20 Hallgató Utca C20 Hsz C5 SzülD D

Gyakorló feladat: Oktató-Tantárgy-Hallgató 2. Hozzuk létre a táblákat: A táblák létrehozásának sorrendje lényeges: először azokat kell létrehozni amikre később hivatkozunk, azután a hivatkozó táblákat. Oktató Okód C6 Név C20 Tanszék C25 Fizetés N7 CREATE TABLE oktató( okód char(6) PRIMARY KEY, név char(20) NOT NULL, tanszék char(25), fizetés number(7) CHECK (fizetes>=100000)); 65.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 3. Tantárgy Tkód Cím C4 C20 Kredit N1 Oktató C6 Hallgató Hkód Név C6 C30 Város C20 Utca C20 Hsz C5 SzülD D CREATE TABLE tantárgy ( tkód char(4) PRIMARY KEY, cím char(20) NOT NULL, kredit number(1) CHECK(kredit IN(2,3,4,5,6)), oktató REFERENCES oktató NOT NULL); CREATE TABLE hallgató( hkód char(6) PRIMARY KEY, név char(30) NOT NULL, város char(20), utca char(20), hsz char(5), szüld date); 66.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 4. Kapcsoló Tkód Hkód C4 C6 Tanév/félév C20 Vizsga Tkód Hkód C4 C6 Dátum D Jegy N1 CREATE TABLE kapcsoló( tkód char(4) REFERENCES tantárgy, hkód char(6) REFERENCES hallgató, tanév/félév char(20), PRIMARY KEY (tkód, hkód)); Ha a Vizsga táblát nem implementáljuk, akkor a Kapcsoló táblában nem szükséges az elsődleges kulcs kijelölése. CREATE TABLE vizsga ( tkód char(4), hkód char(6), dátum date, jegy number(1), FOREIGN KEY (tkód, hkód) REFERENCES kapcsoló); 67.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 5. Bővítsük az Oktató táblát egy Beosztás mezővel: ALTER TABLE oktató ADD (beosztás char(20)); Töröljük a táblákat: A táblák törlésének sorrendje lényeges: először a hivatkozó táblákat kell törölni, és csak azután lehet azokat, amelyekre van hivatkozás. DROP TABLE vizsga; DROP TABLE kapcsoló; DROP TABLE hallgató; DROP TABLE tantárgy; DROP TABLE oktató; 68.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 6. Oktató Okód C6 Név C20 Tanszék C25 Fizetés N7 Beosztás C20 Not Null >100000 Vigyünk fel két új Oktató rekordot a megadott integritási feltételek betartásával (ügyeljünk a mezők sorrendjére, számára és típusára): INSERT INTO oktató VALUES ('I4IUF2', 'Kiss Tamás', 'Matematika', 152000,'tanársegéd'); INSERT INTO oktató VALUES ('AB2312', 'Nagy Ferenc', 'Informatika', 220000,NULL); 69.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 7. Oktató Okód C6 Primary Név C20 Not Null Tanszék C25 Fizetés N7 >100000 Beosztás C20 I4IUF2 Kiss Tamás Matematika 152000 tanársegéd AB2312 Nagy Ferenc Informatika 220000 Vigyünk fel Oktató rekordokat, szándékosan figyelmen kívül hagyva az integritási feltételeket: INSERT INTO oktató VALUES ('AB2312', 'Kovács Zoltán', 'Fizika', 220000,NULL); Hiba: az elsődleges kulcs már létezik, egyediség sérül INSERT INTO oktató VALUES ('GFO123', NULL, 'Informatika', 220000,NULL); Hiba: a név mező nem maradhat üres (Az idegen kulcs mező sem!) 70.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 8. Oktató Okód C6 Primary Név C20 Not Null Tanszék C25 Fizetés N7 >100000 Beosztás C20 I4IUF2 Kiss Tamás Matematika 152000 tanársegéd AB2312 Nagy Ferenc Informatika 220000 Vigyünk fel Oktató és Tantárgy rekordokat, szándékosan figyelmen kívül hagyva az integritási feltételeket: INSERT INTO oktató VALUES ('EXE234', 'Tóth László', 'Informatika', 80000,NULL); Hiba: a fizetés mezőértéke nem megfelelő INSERT INTO tantárgy VALUES ('GEIAL222','Adatbázis_1',5,'111111'); Hiba: a hivatkozott oktató nem létezik 71.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 9. Oktató[ Okód, Név, Tanszék, Fizetés, Beosztás ] Tantárgy [ Tkód, Cím, Kredit, Oktató(Oktató) ] Hallgató [ Hkód, Név, Város, Utca, Hsz, SzülD ] Kapcsoló [ Tkód(Tantárgy), Hkód, Tanév/félév ] Vizsga [ Tkód(Kapcsoló), Hkód(Kapcsoló), Dátum, Jegy ] Növeljük a tanársegédek fizetését 10%-kal: UPDATE Oktató SET Fizetés=Fizetés*1.1 WHERE Beosztás='tanársegéd'; Növeljük eggyel minden tárgy kreditjét: UPDATE Tantárgy SET Kredit=Kredit+1; Töröljük az Informatika tanszéken dolgozókat: DELETE FROM Oktató WHERE Tanszék='Informatika'; 72.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 10. Adjunk olvasási jogot az Oktató táblára mindenkinek: GRANT SELECT ON oktató TO PUBLIC; Adjunk beszúrási jogot az Oktató táblára Péter felhasználónak úgy, hogy továbbadhassa azt: GRANT INSERT ON oktató TO Péter WITH GRANT OPTION; Vonjunk vissza minden jogot az Oktató táblára vonatkozóan Pétertől: REVOKE ALL ON oktató FROM Péter; Adjunk törlési és módosítási jogot az Oktató táblára Tamásnak: GRANT DELETE,UPDATE ON oktató TO Tamás; 73.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 11. Oktató[ Okód, Név, Tanszék, Fizetés, Beosztás ] Tantárgy [ Tkód, Cím, Kredit, Oktató(Oktató) ] Hallgató [ Hkód, Név, Város, Utca, Hsz, SzülD ] Kapcsoló [ Tkód(Tantárgy), Hkód, Tanév/félév ] Vizsga [ Tkód(Kapcsoló), Hkód(Kapcsoló), Dátum, Jegy ] Oktatók neve névsorrendben: SELECT név FROM oktató ORDER BY név; Az Informatika tanszéken oktatók neve: SELECT név FROM oktató WHERE tanszék='informatika'; Az 5 kreditnél többet érő tárgyak kódja és címe: SELECT tkód, cím FROM tantárgy WHERE kredit>5; Oktatók minden adata, fizetésük csökkenő sorrendjében: SELECT * FROM oktató ORDER BY fizetés DESC; 74.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 12. Oktató[ Okód, Név, Tanszék, Fizetés, Beosztás ] Tantárgy [ Tkód, Cím, Kredit, Oktató(Oktató) ] Hallgató [ Hkód, Név, Város, Utca, Hsz, SzülD ] Kapcsoló [ Tkód(Tantárgy), Hkód, Tanév/félév ] Vizsga [ Tkód(Kapcsoló), Hkód(Kapcsoló), Dátum, Jegy ] Oktatók neve és tárgyaik címe, név és cím szerint sorrendben: SELECT név, cím FROM oktató, tantárgy WHERE okód=oktató ORDER BY név, cím; Az Informatika tanszéken oktatók neve és tárgyaik címe: SELECT név, cím FROM oktató, tantárgy WHERE okód=oktató AND tanszék='informatika'; Az Informatika tanszéken oktatott, 5 kreditnél többet érő tárgyak kódja: SELECT tkód FROM tantárgy INNER JOIN oktató ON oktató=okód WHERE kredit>5 AND tanszék LIKE 'Inf%'; 75.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 13. Oktató[ Okód, Név, Tanszék, Fizetés, Beosztás ] Tantárgy [ Tkód, Cím, Kredit, Oktató(Oktató) ] Hallgató [ Hkód, Név, Város, Utca, Hsz, SzülD ] Kapcsoló [ Tkód(Tantárgy), Hkód, Tanév/félév ] Vizsga [ Tkód(Kapcsoló), Hkód(Kapcsoló), Dátum, Jegy ] Tanszékek listája ismétlődés nélkül: SELECT DISTINCT tanszék FROM oktató; Minden oktató neve és tárgyaik címe: SELECT név, cím FROM oktató LEFT OUTER JOIN tantárgy ON okód=oktató; Azok az oktatók, akiknek nincs 5 kreditnél többet érőtárgya: SELECT Név FROM oktató WHERE okód NOT IN (SELECT oktató FROM tantárgy WHERE kredit>5); 76.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 14. Oktató[ Okód, Név, Tanszék, Fizetés, Beosztás ] Tantárgy [ Tkód, Cím, Kredit, Oktató(Oktató) ] Hallgató [ Hkód, Név, Város, Utca, Hsz, SzülD ] Kapcsoló [ Tkód(Tantárgy), Hkód, Tanév/félév ] Vizsga [ Tkód(Kapcsoló), Hkód(Kapcsoló), Dátum, Jegy ] A 150 és 220 ezer Ft között kereső oktatók neve, fizetése: SELECT Név, Fizetés FROM oktató WHERE fizetés BETWEEN 150000 AND 220000; SELECT Név, Fizetés FROM oktató WHERE fizetés >= 150000 AND fizetés <= 220000; Az átlagos kreditpontszám: SELECT avg(kredit) FROM tantárgy; Az Informatika tanszéken oktatók létszáma: SELECT count(*) FROM oktató WHERE tanszék LIKE 'Inf%'; 77.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 15. Oktató[ Okód, Név, Tanszék, Fizetés, Beosztás ] Tantárgy [ Tkód, Cím, Kredit, Oktató(Oktató) ] Hallgató [ Hkód, Név, Város, Utca, Hsz, SzülD ] Kapcsoló [ Tkód(Tantárgy), Hkód, Tanév/félév ] Vizsga [ Tkód(Kapcsoló), Hkód(Kapcsoló), Dátum, Jegy ] A legnagyobb kreditpontszámú tárgyak címe: SELECT cím FROM tantárgy WHERE kredit = (SELECT max(kredit) FROM tantárgy); Az átlagnál alacsonyabb kreditpontú tárgyak címe és oktatóik neve: SELECT cím,név FROM tantárgy, oktató WHERE oktató=okód AND kredit < (SELECT avg(kredit) FROM tantárgy); Tanszékenként az oktatók létszáma, létszám szerint csökkenő sorrendbe rendezve: SELECT tanszék, count(*) FROM oktató GROUP BY tanszék ORDER BY count(*) DESC; 78.o

Gyakorló feladat: Oktató-Tantárgy-Hallgató 16. Oktató[ Okód, Név, Tanszék, Fizetés, Beosztás ] Tantárgy [ Tkód, Cím, Kredit, Oktató(Oktató) ] Hallgató [ Hkód, Név, Város, Utca, Hsz, SzülD ] Kapcsoló [ Tkód(Tantárgy), Hkód, Tanév/félév ] Vizsga [ Tkód(Kapcsoló), Hkód(Kapcsoló), Dátum, Jegy ] Azon oktatók, akiknek 2-nél több tárgyuk van: SELECT * FROM oktató WHERE okód IN (SELECT okód, count(*) FROM oktató, tantárgy WHERE okód=oktató GROUP BY okód HAVING count(*)>2); Saját tanszékükre jellemző átlagnál kevesebbet kereső oktatók neve: SELECT o1.név FROM oktató o1 WHERE o1.fizetés < (SELECT avg(o2.fizetés) FROM oktató o2 WHERE o1.tanszék=o2.tanszék); 79.o

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 80.o

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 40 mp 2. Melyik paranccsal lehet törölni adatbázis táblát? A: CLOSE B: DELETE C: CLEAR D: DROP E: KILL 81.o

Ellenőrző kérdések 2. 3. Helyes az alábbi parancs? Séma: Termék [ Kód, Név, Ár, Leírás ] 40 mp 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! 82.o

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; 40 mp 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 83.o

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 40 mp 84.o

Ellenőrző kérdések 5. 9. Melyik kulcsszó hiányzik a parancsból? SELECT név FROM termék WHERE ár > 1000; 40 mp 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 85.o

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 40 mp 13. Melyik a kakukktojás? A: DDL B: DQL C: DML D: DBL E: DCL 86.o

Ellenőrző kérdések 7. 40 mp 14. Adja meg a feladatokat megvalósító SQL parancsokat! Típus Kor Rendszám Autó Szín 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. 87.o

Ellenőrző kérdések 8. 120 mp 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 88.o

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ű. 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ó. 90 mp 89.o

Ellenőrző kérdések 10. 17. Az adott séma alapján adja meg az SQL parancsokat! Termék [ Tkód, Név, Ár, Leírás ] Raktár [ RaktHely, Tkód, Darab ] 300 mp 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! 90.o

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 91.o

KÉRDÉSEK és VÁLASZOK 92.o