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

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

Hasonló előadás


Az előadások a következő témára: "1 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."— Előadás másolata:

1 1 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

2 2 Külső összekapcsolás  Összekapcsoljuk R és S relációkat: R ⋈ C S. uR azon sorait, melyeknek nincs S-beli párja lógó soroknak nevezzük. wS-nek is lehetnek lógó sorai. uA külső összekapcsolás megőrzi a lógó sorokat NULL értékkel helyettesítve a hiányzó értékeket.

3 3 Példa: külső összekapcsolás R = ( AB )S = ( BC ) (1,2) és (2,3) összekapcsolható, a másik két sor azonban „lóg”. R OUTERJOIN S =ABC NULL NULL67

4 4 Külső összekapcsolás (SQL) uR OUTER JOIN S: a külső összekapcsolásoknál mindig ez szerepel. 1.Opcionális NATURAL az OUTER előtt. 2.Opcionális ON JOIN után. 3.Opcionális LEFT, RIGHT, vagy FULL az OUTER előtt. uLEFT = csak R lógó sorait őrzi meg. uRIGHT = csak S lógó sorait őrzi meg. uFULL = az összes lógó sort megőrzi. Csak az egyik sze- repelhet.

5 5 Összesítések (aggregáció) uSUM, AVG, COUNT, MIN, és MAX összesítő függvényeket a SELECT záradékban alkalmazhatjuk egy-egy oszlopra. uCOUNT(*) az eredmény sorainak számát adja meg.

6 6 Példa: Összesítés uA Felszolgál(kocsma, sör, ár) tábla segítségével adjuk meg a Bud átlagos árát: SELECT AVG(ár) FROM Felszolgál WHERE sör = ’Bud’;

7 7 Ismétlődések kiküszöbölése összesítésben uAz összesítő függvényen belül DISTINCT. uPélda: hány különféle áron árulják a Bud sört? SELECT COUNT(DISTINCT ár) FROM Felszolgál WHERE sör = ’Bud’;

8 8 NULL értékek nem számítanak az összesítésben uNULL soha nem számít a SUM, AVG, COUNT, MIN, MAX függvények kiértékelésekor. uDe ha nincs NULL értéktől különböző érték az oszlopban, akkor az összesítés eredménye NULL. wKivétel: COUNT az üreshalmazon 0-t ad vissza.

9 9 Példa: NULL értékek összesítésben SELECT count(*) FROM Felszolgál WHERE sör = ’Bud’; SELECT count(ár) FROM Felszolgál WHERE sör = ’Bud’; A Bud sört árusító kocsmák száma. Azon kocsmák száma, ahol ismerjük a Bud sör árát.

10 10 Csoportosítás uEgy SELECT-FROM-WHERE kifejezést GROUP BY záradékkal folytathatunk, melyet attribútumok listája követ. uA SELECT-FROM-WHERE eredménye a megadott attribútumok értékei szerint csoportosítódik, az összesítéseket ekkor minden csoportra külön alkalmazzuk.

11 11 Példa: Csoportosítás uA Felszolgál(kocsma, sör, ár) tábla segítségével adjuk meg a sörök átlagos árát. SELECT sör, AVG(ár) FROM Felszolgál GROUP BY sör; beerAVG(price) Bud2.33 Miller2.45

12 12 Példa: Csoportosítás uSELECT alkesz, AVG(ár) FROM Látogat, Felszolgál WHERE sör = ’Bud’ AND Látogat.kocsma = Felszolgál.kocsma GROUP BY alkesz; Alkesz- kocsma-ár hármasok a Bud sörre. Alkeszek szerinti csoportosítás.

13 13 A SELECT lista és az összesítések uHa összesítés is szerepel a lekérdezésben, a SELECT-ben felsorolt attribútumok 1.vagy egy összesítő függvény paramétereként szerepelnek, 2.vagy a GROUP BY attribútumlistájában is megjelennek.

14 14 Helytelen lekérdezés uElsőre sokan gondolják, hogy az alábbi lekérdezés a Bud sört legolcsóbban áruló kocsmát adja vissza:  SELECT kocsma, MIN(ár) FROM Felszolgál WHERE sör= ’Bud’; uValójában ez egy helytelen SQL lekérdezés.

15 15 HAVING záradék uA GROUP BY záradékot egy HAVING záradék követheti. uEbben az esetben a feltétel az egyes csoportokra vonatkozik, ha egy csoport nem teljesíti a feltételt, nem lesz benne az eredményben.

16 16 Példa: HAVING uA Felszolgál(kocsma, sör, ár) és Sörök(név, gyártó) táblák felhasználásával adjuk meg az átlagos árát azon söröknek, melyeket legalább három kocsmában felszolgálnak, vagy Pete a gyártójuk.

17 17 Megoldás SELECT sör, AVG(ár) FROM Sörök GROUP BY sör HAVING COUNT(kocsma) >= 3 OR sör IN (SELECT név FROM Sörök WHERE gyártó = ’Pete’); Sörök, melyeket Pete gyárt. Sör csoportok, melyeket legalább 3 nem-NULL kocsmában árulnak, vagy Pete a gyártójuk.

18 18 A HAVING feltételére vonatkozó megszorítások uAz alkérdésre nincs megszorítás. uAz alkérdésen kívül csak olyan attribútumok szerepelhetnek, amelyek: 1.vagy csoportosító attribútumok, 2.vagy összesített attribútomok. (Azaz ugyanazok a szabályok érvényesek, mint a SELECT záradéknál).

19 19 Adatbázis módosítások uA módosító utasítások nem adnak vissza eredményt, mint a lekérdezések, hanem az adatbázis tartalmát változtatják meg. u3-féle módosító utasítás létezik: 1.Insert (beszúrás). 2.Delete (törlés). 3.Update (létező sorok értékeinek módosítása). uData Manipulation Language (DML).

20 20 Beszúrás uHa egyetlen sort szúrunk be: INSERT INTO VALUES ( ); uPélda: a Szeret(alkesz, sör) táblában rögzítjük, hogy Zsuzska szereti a Bud sört. INSERT INTO Szeret VALUES(’Zsuzska’, ’Bud’);

21 21 Az INSERT-nél megadhatjuk az attribútumokat uA reláció neve után megadhatjuk az attribútumait. uEnnek két oka lehet: 1.elfelejtettük, hogy a reláció definíciójában, milyen sorrendben szerepeltek az attribútumok. 2.Nincs minden attribútumnak értéke, és azt szeretnénk, ha a hiányzó értékeket NULL vagy default értékkel helyettesítenék.

22 22 Példa: Attribútumok megadása INSERT INTO Szeret(sör, alkesz) VALUES(’Bud’, ’Zsuzska’);

23 23 Default értékek megadása uA CREATE TABLE utasításban az oszlopnevet DEFAULT kulcsszó követheti és egy érték. uHa egy beszúrt sorban hiányzik az adott attribútum értéke, akkor a default értéket kapja.

24 24 Példa: Default érték CREATE TABLE Alkeszek ( név CHAR(30) PRIMARY KEY, cím CHAR(50) DEFAULT ’123 Sesame St.’, telefon CHAR(16) );

25 25 Példa: Default értékek INSERT INTO Alkeszek(név) VALUES(’Zsuzska’); Az eredmény sor: Zsuzska123 Sesame StNULL névcím telefon

26 26 Több sor beszúrása uEgy lekérdezés eredményét is beszúrhatjuk a következő módon: INSERT INTO ( );

27 27 Példa: Beszúrás alkérdéssel uA Látogat(alkesz, kocsma) tábla felhasználásával adjuk hozzá a Szesztestvérek(név) táblához Zsuzska szesztestvéreit, vagyis azokat, akikkel legalább egy közös kocsmát látogatnak.

28 28 Megoldás INSERT INTO Szesztestvérek (SELECT l2.alkesz FROM Látogat l1, Látogat l2 WHERE l1.alkesz = ’Zsuzska’ AND l2.alkesz <> ’Zsuzska’ AND l1.kocsma = l2.kocsma ); Alkesz párok: az első Zsuzska, a második nem Zsuzska, de van olyan kocsma, amit mindketten látogatnak. A szesztestvér.

29 29 Törlés uA törlendő sorokat egy feltétel segítségével adjuk meg: DELETE FROM WHERE ;

30 30 Példa: Törlés DELETE FROM Szeret WHERE alkesz = ’Zsuzska’ AND sör = ’Bud’;

31 31 Példa: Az összes sor törlése DELETE FROM Likes;

32 32 Példa: Több sor törlése uA Sörök(név, gyártó) táblából töröljük azokat a söröket, amelyekhez létezik olyan sör, amit ugyanaz a cég gyártott. DELETE FROM Sörök s WHERE EXISTS ( SELECT név FROM Sörök WHERE gyártó = s.gyártó AND név <> s.név); Azok a sörök, amelyeknek ugyanaz a gyártója, mint az s éppen aktuális sorának, a nevük viszont különböző.

33 33 A törlés szemantikája --- (1) uTegyük fel, hogy az Anheuser-Busch csak Bud és Bud Lite söröket gyárt. uTegyük fel még, hogy s sorai közt a Bud fordul elő először. uAz alkérdés nem üres, a későbbi Bud Lite sor miatt, így a Bud törlődik. uKérdés, hogy a Bud Lite sor törlődik-e?

34 34 A törlés szemantikája --- (2) uVálasz: igen, a Bud Lite sora is törlődik. uA törlés ugyanis két lépésben hajtódik végre. 1.Kijelöljük azokat a sorokat, amelyekre a WHERE feltétele teljesül. 2.Majd töröljük a kijelölt sorokat.

35 35 Módosítás uBizonyos sorok bizonyos attribútumainak módosítása. UPDATE SET WHERE ;

36 36 Példa: Módosítás uFecó telefonszámát re változtatjuk (Fecó itt egy alkesz): UPDATE Alkeszek SET telefon = ’ ’ WHERE név = ’Fecó’;

37 37 Példa: Több sor módosítása uLegfeljebb 4 dollárba kerülhessenek a sörök: UPDATE Felszolgál SET ár = 4.00 WHERE ár > 4.00;

38 38 Adatbázis sémák SQL-ben uData Definition Language (DDL), az SQL nyelv része, ennek segítségével hozhatunk létre adatobjektumokat, deklarálhatunk megszorításokat stb.

39 39 Relációk létrehozása uA legegyszerűbb forma: CREATE TABLE ( ); uRelációk törlése: DROP TABLE ;

40 40 Tábla definíciók elemei uA legegyszerűbb elem: az attribútum és annak típusa. uA legfontosabb típusok a következők: wINT vagy INTEGER (szinonimák). wREAL or FLOAT (szinonimák). wCHAR(n ) = rögzített hosszúságú sztring n karakter hosszú. wVARCHAR(n ) = változó hosszúságú sztring legfeljebb n karakter hosszú.

41 41 Példa : Create Table CREATE TABLE Felszolgál ( kocsmaCHAR(20), sörVARCHAR(20), árREAL );

42 42 SQL értékek uAz egészek és lebegőpontos típusú konstansokat csak „szimplán le kell írni”. (Pont jelöli a tizedesvesszőt.) uA sztringek esetében aposztrófok közé kell tennünk a konstansokat.  Két aposztróf = egyetlen aposztróf, például: ’Joe’’s Bar’. uMinden érték lehet NULL is.

43 43 Dátum és idő uA DATE és TIME külön típusok az SQL- ben. uA dátum típus formátuma: DATE ’yyyy-mm-dd’  Példa: DATE ’ ’ (2007. szeptember 30.)

44 44 Idő típus uAz TIME típus formátuma: TIME ’hh:mm:ss’ Opcionálisan tizedespont is következhet a másodpercek után.  Példa: TIME ’15:30:02.5’ = fél négy múlt két és fél másodperccel.

45 45 Kulcsok megadása (deklarálása) uEgy attribútumot vagy attribútum listát kulcsként deklarálhatunk (PRIMARY KEY vagy UNIQUE). uMindkét formája a megszorításnak azt követeli meg, hogy relációnak ne legyen két olyan sora, melyek megegyeznek a kulcs attribútumokon. uA különbségekről később lesz szó.

46 46 Egy attribútumos kulcs deklarálása uPRIMARY KEY vagy UNIQUE kulcsszót írhatjuk közvetlenül az attribútum mögé. uPélda: CREATE TABLE Sörök ( névCHAR(20) UNIQUE, gyártóCHAR(20) );

47 47 Több attribútumú kulcsok megadása uA kulcs deklaráció a CREATE TABLE utasítás egy eleme is lehet az attribútum-típus elemek után. uTöbb attribútumú kulcsokat csak ebben a formában deklarálhatunk. wUgyanakkor az egyetlen attribútumból álló kulcsokat is megadhatjuk ily módon.

48 48 Példa: Több attribútumú kulcs CREATE TABLE Felszolgál ( kocsmaCHAR(20), sörVARCHAR(20), árREAL, PRIMARY KEY (kocsma, sör) );

49 49 PRIMARY KEY vs. UNIQUE 1.Egy relációhoz egyetlen PRIMARY KEY tartozhat és több UNIQUE megszorítás. 2.A PRIMARY KEY egyetlen attribútuma sem kaphat NULL értéket. A UNIQUE megszorításnál szerepelhetnek NULL értékek egy soron belül akár több is.


Letölteni ppt "1 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."

Hasonló előadás


Google Hirdetések