1 / 31

SQL

SQL. SEQUEL , Structured English Query Language : SQL ANSI, ISO: SQL86, SQL89, SQL92. Alap (entry), közbenső (intermediate), teljes (full) szint. A DDL nyelvi komponens sel létrehozhatók és módosíthatók a különböző relációk, domainek és integritási feltételek.

hidi
Download Presentation

SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SQL • 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. 1

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

  3. SQL DDL 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)); 3

  4. SQL DDL 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; 4

  5. SQL DML 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. 5

  6. SQL DML • 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 '^' 6

  7. SQL DML 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!) 7

  8. SQL DML 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%'; 8

  9. SQL SELECT • 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 9

  10. SQL SELECT • 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; 10

  11. SQL SELECT • 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 11

  12. SQL SELECT • SELECT * FROM auto WHERE szin<>'piros'; • TUL RSZ TIP SZIN EVJ AR • ------------------------------------------------- • 1 bkx-720 Opel bordo 1991 1000000 • 2 aaa-156 Trabifeher 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 12

  13. SQL SELECT • 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 13

  14. SQL SELECT • 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 14

  15. SQL SELECT • SELECT tip, ar/150 FROM auto; • TIP AR/150 • ------------------------ • Opel 6666.66667 • Golf 2333.33333 • Trabi666.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 Trabifeher 1985 100000 • 1 bkx-720 Opel bordo 1991 1000000 15

  16. SQL SELECT • 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; 16

  17. SQL SELECT • 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 17

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

  19. SQL SELECT • 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 19

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

  21. SQL SELECT 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; 21

  22. SQL SELECT • 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 22

  23. SQL SELECT • 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 23

  24. SQL SELECT • 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ó!} 24

  25. SQL SELECT • 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 halmezelemkifejezé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 halmezelemkifejezés. • Pl. • SELECT nev, cim FROM ember WHERE id IN (SELECT tul FROM auto WHERE szin = 'kek'); • NEV CIM • -------------------- • Bela Budapest • Feri Pecs 25

  26. SQL SELECT • 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 26

  27. SQL SELECT 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 esetlegkülönbözhetnek egymástól. 27

  28. SQL DCL • 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 objektumnakvan 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]; 28

  29. SQL DCL • 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; 29

  30. SQL DCL 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. 30

  31. SQL VIEW példák • 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 TrabiGeza • lui-999 Opel Feri • kjs-234 Lada Bela • SELECT nev FROM embout WHERE tip LIKE ‘O%’; • NEV • ------ • Bela • Feri • DROP VIEW embaut; 31

More Related