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

1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 10. gyakorlat SQL SELECT, Összekapcsolás, Nézettáblák.

Hasonló előadás


Az előadások a következő témára: "1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 10. gyakorlat SQL SELECT, Összekapcsolás, Nézettáblák."— Előadás másolata:

1 1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 10. gyakorlat SQL SELECT, Összekapcsolás, Nézettáblák

2 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor2Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor2 Kötelező program beadás Dokumentáció beadásának határideje: november :55:00 Tartalmaznia kell –Végleges EK-diagram –Leképezések –Normalizálás –Nemtriviális lekérdezések (3 darab) –Alkalmazás szolgáltatásai –Fejlesztőeszközök

3 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor3Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor3 Kötelező program beadás Bemutatás: 13. és 14. szorgalmi héten (véletlen beosztás) A programnak el kell készülnie a 12. hét végéig NEM kell beadni: –SQL-fájlt –Kész programot

4 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4 SELECT utasítás (ismétlés) SELECT [DISTINCT] megjelenítendő oszlopok FROM táblá(k direkt szorzata) [WHERE feltétel] [GROUP BY csoportosítási szempont] [HAVING csoportok szűrése] [ORDER BY rendezési szempont] ;

5 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5 Természetes összekapcsolás (ism.) Két tábla közötti kapcsolat Megegyező attribútumok mentén Ezek az egyező attribútumok a külső kulcsok Jelölése: T 1 * T 2 (ha T 1 az R 1 (A), T 2 a R 2 (B) séma feletti táblák) A két tábla természetes összekapcsolása: T = π A U B (σ R1.X=R2.X (T1 x T2) )

6 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6 Természetes összekapcsolás SQL-ben IDNévFizetésSzül.dátumOsztályID 2Kiss Imre Kovács Sára IDNév 3Hulladékgazdálkodási 4Pénzügyi 21Marketing SELECT Dolgozó.Név, Fizetés, Osztály.Név FROM Dolgozó, Osztály WHERE Dolgozó.OsztályID = Osztály.ID; SELECT Dolgozó.Név, Fizetés, Osztály.Név FROM Dolgozó INNER JOIN Osztály ON Dolgozó.OsztályID = Osztály.ID;

7 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor7Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor7 Természetes összekapcsolás SQL-ben Figyelni kell a névütközésre (elkerülése: az attribútum elé írjuk a tábla nevét) Az első módszernél WHERE feltételben kell megadni az attribútumok menti kapcsolatot, hogy csak a kulcs mentén egyező sorok legyenek az eredménytáblában Példa: Határozzuk meg az egyes osztályokon dolgozókat. –SELECT Osztály.Név, COUNT(Dolgozó.Név) FROM Dolgozó, Osztály WHERE Dolgozó.OsztályId = Osztály.ID GROUP BY Osztály.Név;

8 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8 Természetes összekapcsolás SQL-ben Eredménye: A pénzügyi osztálynál nem jelenik meg, hogy 0 fő Oka: –Egy dolgozó sincs az osztályon –A táblák direktszorzatában egy sorban sem lesz az Osztály ID-je ‘4’ –Eredménytábla nem tartalmazza a Pénzügyi osztályt –Összesítéskor nem fog szerepelni Orvosolni kell Osztály.NévCount(Dolgozó.Név) Hulladékgazdálkodási1 Marketing1

9 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9 Külső összekapcsolás Az előbbi probléma kiküszöbölésére használhatjuk a külső összekapcsolást: a (valamelyik oldalról) ‘lógó’ sorok is megmaradnak az összekapcsolt táblában –LEFT OUTER JOIN –RIGHT OUTER JOIN –FULL OUTER JOIN Külső összekapcsolásnál az egyik (vagy mindegyik) tábla nem párosított sorai az eredménytáblában megjelennek. Ilyenkor a nem párosított sorok többi attribútuma NULL lesz

10 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor10Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor10 Külső összekapcsolás Kettőnél több táblát is összekapcsolhatunk! Így megoldható az előbbi probléma, az eddig eltűnt sorok is megjelennek Osztály.NévCount(Dolgozó.Név) Hulladékgazdálkodási1 Marketing1 Pénzügyi0 SELECT Osztály.Név, COUNT(Dolgozó.Név) FROM Dolgozó RIGHT OUTER JOIN Osztály ON Dolgozó.OsztályId = Osztály.ID GROUP BY Osztály.Név;

11 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11 Elnevezés (alias) Láttunk példát attribútumok (vagy kifejezések) elnevezésére Ugyanezt megtehetjük táblákkal is (pl.: ha egy táblára többszörösen szeretnénk hivatkozni) Példa: Azonos nevű dolgozók lekérése egy táblából: –SELECT d1.Név FROM Dolgozó AS d1, Dolgozó AS d2 WHERE d1.Név = d2.Név AND d1.id < d2.id;

12 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor12Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor12 Allekérdezések Allekérdezés: amikor egy SQL-utasításban elhelyezünk egy SELECT-et Példa: Allekérdezéssel előállítunk egy halmazt, amelyet egy SELECT-ben használunk. –SELECT Név FROM Dolgozó WHERE Dolgozó.OsztályId IN ( SELECT Osztály.Id FROM Osztály WHERE Osztály.Id > 5 );

13 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor13Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor13 Allekérdezések Létrehozhatunk allekérdezést a FROM utasítás után (vagy akár INSERT után is) Példa. Adott az Employee(id, name, salary, address) reláció. Állítsunk ebből elő egy olyan táblát, amiben magyar oszlopnevek vannak a következő adatokkal: név, azonosító, éves bér. Csak a $4000-nál többet kereső “Smith” családnevű dolgozók jelenjenek meg. SELECT altabla.nev, altabla.id, altabla.eves_ber FROM ( SELECT name AS nev, id, salary*12 AS eves_ber, address FROM Employee WHERE salary > 4000 ) AS altabla WHERE altabla.nev LIKE ‘% Smith’;

14 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor14Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor14 Allekérdezések Halmazműveleteknél jellemzően két alkérdés áll az utasítás oldalán: –(SELECT nev FROM oktatok) UNION (SELECT nev FROM hallgatok); Ilyenkor a többszörösen szereplő értékek csak egyszer jelennek meg. Ha többször szeretnénk megjeleníteni a duplikált sorokat, akkor az UNION ALL-t kell használnunk. A táblák kompatibilitására ügyelni kell minden esetben

15 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor15Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor15 Allekérdezések Nem minden esetben használhatjuk azonban: –A MySQL nem engedi meg, hogy módosítsunk egy táblát úgy, hogy a WHERE feltételben ugyanezen táblára vonatkozó alkérdés van! –Szintén nem jó, ha INSERT után próbálkozunk hasonlóan. UPDATE Dolgozo AS d1 SET d1.fizetes = 1.1 * d1.fizetes WHERE ( SELECT AVG(d2.fizetes) FROM Dolgozo AS d2 ) > d1.fizetes;

16 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor16Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor16 Nézettáblák Nem valódi táblák Feladatuk: adatbázisban lévő adatok bemutatása transzformáció(k) után Megadunk egy „formulát”, ami a már meglévő adatok alapján létrehoz egy nézettáblát Létrehozás: CREATE VIEW táblanév [(oszloplista)] AS SELECT...; Törlés: DROP VIEW táblanév;

17 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor17Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor17 Nézettáblák Nézettáblában is végrehajthatóak pl. a módosítások, ilyenkor azok bekerülnek az eredeti táblába Az eredeti táblán történő módosítás látszik is a nézettáblában (természetesen) Nem minden esetben módosítható Nem módosítható, ha... –nem lehet egyértelmű a végrehajtás (tehát pl. egyik oszlop két másik szorzata, összesítő függvényt használtunk, stb) –DISTINCT opciót használtunk –összekapcsolást használtunk –GROUP BY parancsot használtunk

18 Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal GáborSzegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18 Megjegyzések Feladatgyűjtemény: –pub/Adatbazisok/feladatok_v1.1.pdf Adatbázisok. Előadás jegyzet, –www.inf.u-szeged.hu/~katona, –pub/Adatbázisok/ Cser Lajos diái alapján


Letölteni ppt "1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 10. gyakorlat SQL SELECT, Összekapcsolás, Nézettáblák."

Hasonló előadás


Google Hirdetések