Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

SQL 1 SEQUEL, Structured English Query Language: SQL ANSI, ISO: SQL86, SQL89, SQL92. Alap (entry), közbenső (intermediate), teljes (full) szint. A DDL.

Hasonló előadás


Az előadások a következő témára: "SQL 1 SEQUEL, Structured English Query Language: SQL ANSI, ISO: SQL86, SQL89, SQL92. Alap (entry), közbenső (intermediate), teljes (full) szint. A DDL."— Előadás másolata:

1 SQL 1 SEQUEL, Structured English Query Language: SQL ANSI, ISO: SQL86, SQL89, SQL92. Alap (entry), közbenső (intermediate), teljes (full) szint. A DDL nyelvi komponenssel létrehozhatók és módosíthatók a különböző relációk, domainek és integritási feltételek. DML csoport utasításaival elvégezhető a táblázatokban tárolt adatok módosítása, törlése és az új adatok felvitele. Lekérdező utasítások: Query. Az SQL: - relációs RDBMS kezelő nyelv szabvány, nem RDBMS, - relációs algebrán alapszik, - szöveges, nem algoritmikus, előíró jellegű utasításokat tartalmaz, - halmazorientált, - négy utasításcsoportot tartalmaz: - adatdefiníciós, DDL, - adatlekérdező, Query, - adatkezelő, DML, - adatvezérlő, DCL, - kiadható interaktívan és algoritmikus környezetbe építve.

2 SQL DDL 2 A példáknál használt táblák: AUTO TULRSZTIPSZINEVJAR ----------------------------------------- 1bkx720Opelbordo19911000000 1cmt111Golfpiros1981350000 2aaa156Trabifeher1985100000 3lui999Opelkek1991450000 1kjs234Ladakek1989275000 EMBER IDNEVSZULEVCIM ----------------------------------- 1Bela1975Budapest 2Geza1979Miskolc 3Feri1974Pecs

3 SQL DDL 3 Táblák létrehozása: CREATE TABLE táblanév (m1 t1 [i1][,..., mi ti [ii]],[ig]); ii integritási feltétel: UNIQUE, NOT NULL UNIQUE (m1 [,m2..,mi]) Adattípusok: CHAR (n) : n hosszúságú szöveg NUMBER (n [,m]) : n hosszú számjegy, melyből m a tizedesjegyek hossza DATE : dátum CREATE TABLE AUTO (TUL NUMBER(3) NOT NULL, RSZ CHAR(7) NOT NULL UNIQUE, TIP CHAR(10), SZIN CHAR(10), EVJ NUMBER(4), AR NUMBER(8)); CREATE TABLE EMBER (ID NUMBER(3) NOT NULL UNIQUE, NEV CHAR(20), SZULEV NUMBER(4), CIM CHAR(20));

4 SQL DDL 4 Tábla törlése: DROP TABLE táblanév; Pl. DROP TABLE auto; View létrehozása: CREATE VIEW viewnév [(m1 [,m2...,mi])] AS műveletsor; Pl. CREATE VIEW auto2 AS SELECT rsz FROM auto WHERE tip LIKE 'Fiat%'; View törlése: DROP VIEW viewnév;

5 SQL DML 5 Rekordok felvitele: INSERT INTO táblanév VALUES (e1 [,e2...,ei]); Pl. INSERT INTO auto VALUES (3,'bhk546','Fiat','kek',1989,NULL); INSERT INTO táblanév műveletsor; A művelet egy SELECT lekérdezési utasítás lehet.

6 SQL DML 6 Rekordok törlése: DELETE FROM táblanév [ WHERE feltétel]; A feltételben logikai műveletek: AND, OR, NOT és relációs operátorok: =, >, =,, BETWEEN, IN, LIKE, IS NULL o1 BETWEEN o2 AND o3 o1 IN (o2 [,o3...,oi]) o1 LIKE 'sssss' [ESCAPE 'x'] Az 'sssss' mintában: % : egy tetszőleges karaktersorozatot helyettesít _ : egyetlen egy karaktert helyettesít o1 LIKE 'DOS^_%' ESCAPE '^'

7 SQL DML 7 o1 IS NULL o1 NOT BETWEEN o2 AND o3 o1 NOT IN (o2 [,o3...,oi]) o1 NOT LIKE 'sssss' [ESCAPE 'x'] o1 IS NOT NULL Az relációs operátorok operandusai, az o1,o2,..., oi értékei jelenthetnek konstansokat, és jelenthetnek mezőket is. Az operátorok nagy része különböző rendszerspecifikus függvényben valósul meg. Pl. DELETE FROM auto WHERE tip LIKE 'Trabant%' OR ar < 155555; DELETE FROM auto; (Minden rekordot töröl!)

8 SQL DML 8 Rekordok módosítása: UPDATE táblanév SET m1=e1 [,m2=e2...,mi=ei] [WHERE feltétel]; Pl. UPDATE auto SET ar = 1.25*ar WHERE tip LIKE 'Fiat%';

9 SQL SELECT 9 Projekció: SELECT m1 [,m2...,mi] FROM táblanév; Pl. SELECT rsz FROM auto; RSZ ------- bkx-720 cmt-111 aaa-156 lui-999 kjs-234 SELECT nev,cim FROM ember; NEV CIM -------------------- Bela Budapest Geza Miskolc Feri Pecs

10 SQL SELECT 10 SELECT * FROM auto; ID NEV SZULEV CIM ----------------------------------- 1 Bela 1975 Budapest 2 Geza 1979 Miskolc 3 Feri 1974 Pecs SELECT DISTINCT tip FROM auto; TIP ---------- Golf Lada Opel Trabi Kiterjesztés: SELECT rsz, tip, ar/135.54 FROM auto;

11 SQL SELECT 11 Szelekció: SELECT.... FROM... WHERE feltétel; Pl. SELECT rsz FROM auto WHERE szin = 'piros'; RSZ ------- cmt-111 SELECT nev FROM ember WHERE szulev<1977; NEV ----------- Bela Feri

12 SQL SELECT 12 SELECT * FROM auto WHERE szin<>'piros'; TUL RSZ TIP SZIN EVJ AR ------------------------------------------------- 1 bkx-720 Opel bordo 1991 1000000 2 aaa-156 Trabi feher 1985 100000 3 lui-999 Opel kek 1991 450000 1 kjs-234 Lada kek 1989 275000 SELECT * FROM ember WHERE szulev BETWEEN 1975 AND 1980; ID NEV SZULEV CIM --------------------------------------- 1 Bela 1975 Budapest 2 Geza 1979 Miskolc

13 SQL SELECT 13 SELECT rsz FROM auto WHERE szin IN ('piros','kek','zold'); RSZ ------- cmt-111 lui-999 kjs-234 SELECT * FROM ember WHERE cim IS NULL; ID NEV SZULEV CIM ----------------------------------- SELECT * FROM ember WHERE nev LIKE 'G%'; ID NEV SZULEV CIM ------------------------------------ 2 Geza 1979Miskolc

14 SQL SELECT 14 SELECT * FROM ember WHERE nev LIKE '_eza%'; ID NEV SZULEV CIM ----------------------------------------- 2 Geza 1979 Miskolc SELECT * FROM ember WHERE nev LIKE '%ez%'; ID NEV SZULEV CIM ------------------------------------------ 2 Geza 1979 Miskolc SELECT nev,2004-szulev FROM ember; NEV 2004-SZULEV ------------------------- Bela 29 Geza 25 Feri 30

15 SQL SELECT 15 SELECT tip, ar/150 FROM auto; TIP AR/150 ------------------------ Opel 6666.66667 Golf 2333.33333 Trabi 666.666667 Opel 3000 Lada 1833.33333 SELECT... FROM... [WHERE...] ORDER BY k1 [ASC|DESC][,k2 [ASC|DESC]...,ki[ASC|DESC]]; Pl. SELECT * FROM auto WHERE szin<>'piros' ORDER BY szin DESC, tip; TUL RSZ TIP SZIN EVJ AR --------------------------------------------------- 1 kjs-234 Lada kek 1989 275000 3 lui-999 Opel kek 1991 450000 2 aaa-156 Trabi feher 1985 100000 1 bkx-720 Opel bordo 1991 1000000

16 SQL SELECT 16 Csoportképzés: MIN(k) : minimumérték MAX(k) : maximumérték AVG(k) : átlagérték SUM(k) : összeg COUNT(k): darabszám SELECT... FROM... [WHERE...] GROUP BY k [ORDER BY..]; Pl. SELECT tip, AVG(ar) FROM auto GROUP BY tip; SELECT... FROM... [WHERE...] GROUP BY... HAVING feltétel [ORDER BY..]; Pl. SELECT tip, AVG(ar) FROM auto GROUP BY tip HAVING AVG(ar) < 555555;

17 SQL SELECT 17 SELECT AVG(evj) FROM auto; AVG(EVJ) ---------- 1987.4 SELECT MIN(evj) FROM auto; MIN(EVJ) ---------- 1981 SELECT SUM(ar) FROM auto; SUM(AR) ---------- 2175000

18 SQL SELECT 18 SELECT tip, COUNT(tip) FROM auto GROUP BY tip; TIP COUNT(TIP) ------------------------ Golf 1 Lada 1 Opel 2 Trabi 1 SELECT tip, AVG(ar) FROM auto GROUP BY tip; TIP AVG(AR) ---------------------- Golf 350000 Lada 275000 Opel 725000 Trabi 100000

19 SQL SELECT 19 SELECT tip,AVG(evj) FROM auto GROUP BY tip HAVING AVG(evj)>1986; TIP AVG(EVJ) ---------------------- Lada 1989 Opel 1991 SELECT tip FROM auto WHERE szin='kek' GROUP BY tip HAVING AVG(evj)>1990; TIP ---------- Opel

20 SQL SELECT 20 SELECT tip FROM auto GROUP BY tip ORDER BY COUNT(*); TIP ---------- Golf Lada Trabi Opel

21 SQL SELECT 21 Join: SELECT * FROM táblanév1, táblanév2; CREATE TABLE ember (kod NUMBER(4), nev CHAR(30), cim CHAR(30)); (az ember tábla kissé módosítva) SELECT rsz, nev, cim FROM auto, ember WHERE tulaj = kod; SELECT auto.rsz, ember.nev, ember.cim FROM auto, ember WHERE auto.tulaj = ember.kod; SELECT a.rsz, e.nev, e.cim FROM auto a, ember e WHERE a.tulaj = e.kod;

22 SQL SELECT 22 Példák: SELECT a.rsz, e.nev FROM auto a,ember e WHERE a.tul = e.id; RSZ NEV --------------------- bkx-720 Bela cmt-111 Bela kjs-234 Bela aaa-156 Geza lui-999 Feri SELECT a.rsz,e.nev FROM auto a,ember e WHERE a.evj < 1991 AND a.tul = e.id; RSZ NEV -------------------- cmt-111 Bela kjs-234 Bela aaa-156 Geza

23 SQL SELECT 23 SELECT e.nev,COUNT(*) FROM ember e, auto a WHERE a.tul = e.id GROUP BY e.nev; NEV COUNT(*) ----------------------- Bela 3 Feri 1 Geza 1 SELECT e.nev FROM ember e, auto a WHERE a.tul = e.id GROUP BY e.nev HAVING COUNT(*)>1; NEV ------- Bela

24 SQL SELECT 24 Allekérdezés (subquery): Egy lekérdezés szelekciós feltételében hivatkozhatunk egy másik lekérdezés eredményére, amit allekérdezésnek (subquery) neveznek. Az allekérdezést mindig zárójelben kell megadni. Az allekérdezés formailag megegyezik a normál SELECT utasítás alakjával, de az allekérdezésben nem használható a rendezett kiírást előíró ORDER BY opció. Az allekérdezés eredménye több rekordot is tartalmazhat, ezért csak a halmazokat kezelő operátorokat és logikai kvantorokat használhatunk a feltételekben: IN, EXISTS, NOT EXISTS, ANY, ALL. EXISTS (allekérdezés) Ha az allekérdezés eredménytáblája nem üres, akkor a fenti kifejezés igaz értéket ad vissza. Tagadása: NOT EXISTS (allekérdezés) Pl. SELECT e.nev FROM ember e WHERE NOT EXISTS (SELECT * FROM auto a WHERE a.tulaj=e.kod); SELECT e.nev FROM ember e WHERE e.kod NOT IN (SELECT a.tulaj FROM auto a); {optimalizálható!}

25 SQL SELECT 25 kif reláció_operátor ANY (halmaz) akkor igaz értékű, ha a halmaznak legalább egy elemére igaz értékű a kif reláció_operátor halmezelem kifejezés. kif reláció_operátor ALL (halmaz) akkor ad igaz értéket, ha a halmaznak minden elemére teljesül a kif reláció_operátor halmezelem kifejezés. Pl. SELECT nev, cim FROM ember WHERE id IN (SELECT tul FROM auto WHERE szin = 'kek'); NEV CIM -------------------- Bela Budapest Feri Pecs

26 SQL SELECT 26 SELECT nev,cim FROM ember WHERE id NOT IN (SELECT tul FROM auto); NEV CIM ------------------------- SELECT * FROM auto WHERE ar < (SELECT AVG(ar) FROM auto); TUL RSZ TIP SZIN EVJ AR ------------------------------------------- 1 cmt-111 Golf piros 1981 350000 2 aaa-156 Trabi feher 1985 100000 1 kjs-234 Lada kek 1989 275000 SELECT * FROM auto a WHERE a.ar > ANY (SELECT b.ar FROM auto b); TUL RSZ TIP SZIN EVJ AR --------------------------------------------- 1 bkx-720 Opel bordo 1991 1000000 1 cmt-111 Golf piros 1981 350000 3 lui-999 Opel kek 1991 450000 1 kjs-234 Lada kek 1989 275000

27 SQL SELECT 27 Két azonos felépítésű tábla egymáshoz fűzhető: SELECT... UNION SELECT...; A bemutatott opciók, lehetőségek bizonyítják, hogy milyen rugalmasan használható az SQL SELECT utasítása, és kellő kreativitással szinte minden lehetséges lekérdezési igény kielégíthető. Az SQL prescriptív jellege miatt ismernünk kell az elvégzendő műveleteket, mielőtt kiadnánk a megfelelő SQL utasítást. Összetettebb esetekben különböző utakon is el lehet jutni az eredménytáblákhoz, de ezek a végrehajtás hatékonyságában esetleg különbözhetnek egymástól.

28 SQL DCL 28 Az adatbázis több felhasználó információit együttesen tárolja, ezért az RDBMS-nek kell gondoskodnia arról, hogy mindenki csak a jogosult műveleteket végezhesse el, csak a jogosult adatokhoz férhessen hozzá. A SQL rendszerekben minden objektumnak van egy tulajdonosa, mégpedig az a felhasználó, aki azt létrehozta. A táblákon elvégezhető műveleteket jogosultság ellenőrzése szempontjából az alábbi csoportokba bontjuk: SELECT : tábla lekérdezése INSERT : tábla bővítése DELETE : tábla rekordjainak törlése UPDATE(m1 [,m2...,mi]) : tábla rekordjainak módosítása ALL { az előző négyet jelenti } Az jogosultságok megadása a GRANT utasítással történik, melyben meg kell adni, hogy mely táblára, mely műveleteket és kinek engedélyezünk: GRANT művelet ON táblanév TO felhasználó [WITH GRANT OPTION];

29 SQL DCL 29 A kiadott jogosultságok megszüntetése a REVOKE utasítással végezhető, melyben meg kell adni a felhasználót, a visszavont műveleteket és a vonatkozó táblát is. Az utasítás alakja: REVOKE művelet ON táblanév FROM felhasználó; Az a felhasználó vonhatja vissza a jogosultságokat, akinek joga van azt adományozni, azaz a tulajdonos. Pl. GRANT SELECT ON auto TO gi476; REVOKE ALL FROM gi476;

30 SQL DCL 30 A vezérlő utasításokhoz tartoznak a műveletvégrehajtást szabályozó, úgynevezett tranzakció kezelő utasítások is. A tranzakció sikeres befejezésének utasítása: COMMIT; Hatására a korábban végrehajtott tevékenységek véglegesítődnek, megőrződnek az adatbázisban. A ROLLBACK; utasítás hatására a korábbi tevékenységek érvénytelenítődnek, mintha ki sem adtuk volna őket. Ezzel hibával félbeszakadt vagy hibás műveletsort lehet töröltetni.

31 SQL VIEW példák 31 CREATE VIEW embaut AS SELECT a.rsz, a.tip, e.nev FROM auto a, ember e WHERE a.tul = e.id; SELECT * FROM embaut; RSZ TIP NEV ---------------------------- bkx-720 Opel Bela cmt-111 Golf Bela aaa-156 Trabi Geza lui-999 Opel Feri kjs-234 Lada Bela SELECT nev FROM embout WHERE tip LIKE ‘O%’; NEV ------ Bela Feri DROP VIEW embaut;


Letölteni ppt "SQL 1 SEQUEL, Structured English Query Language: SQL ANSI, ISO: SQL86, SQL89, SQL92. Alap (entry), közbenső (intermediate), teljes (full) szint. A DDL."

Hasonló előadás


Google Hirdetések