Download - Az Oracle SQL 4
![Page 1: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/1.jpg)
2006. október 2. Markó Tamás, PTE TTK 1
Az Oracle SQL 4.
Összesítés és csoportosítás lekérdezésekben.
Halmazműveletek.
![Page 2: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/2.jpg)
2006. október 2. Markó Tamás, PTE TTK 2
A rádiótelefonokat kérem
KIKAPCSOLNI!
![Page 3: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/3.jpg)
2006. október 2. Markó Tamás, PTE TTK 3
Összesítés és csoportosítás
![Page 4: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/4.jpg)
2006. október 2. Markó Tamás, PTE TTK 4
Gyűjtőfüggvények 1.
• Összesítő vagy aggregáló függvényeknek is nevezik őket
• Rekordok egy csoportjára csak egy értéket adnak vissza
• COUNT(mezőnév)– azon rekordok száma, ahol az adott mező nem üres
– COUNT(*): a rekordok száma a táblában
• SUM(mezőnév)– az adott oszlopban lévő értékek összege
![Page 5: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/5.jpg)
2006. október 2. Markó Tamás, PTE TTK 5
Gyűjtőfüggvények 2.
• MIN(mezőnév)– az adott oszlopban lévő értékek minimuma
• MAX(mezőnév)– az adott oszlopban lévő értékek maximuma
• AVG(mezőnév)– az adott oszlopban lévő értékek átlaga
• STDDEV(mezőnév)– az adott oszlopban lévő értékek szórása
• VARIANCE(mezőnév)– az adott oszlopban lévő értékek szórásnégyzete
average
standard deviation
![Page 6: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/6.jpg)
2006. október 2. Markó Tamás, PTE TTK 6
COUNT - példák
• SELECT COUNT(*) FROM vevok;– a vevok tábla sorainak száma
• SELECT COUNT(cikkszam) FROM rtetel WHERE egysegar > 50;– azon rendelési tételek száma, ahol az egységár
meghaladja az 50 Ft-ot
![Page 7: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/7.jpg)
2006. október 2. Markó Tamás, PTE TTK 7
SUM - példák
• SELECT SUM(mennyiseg * egysegar) FROM rtetel WHERE rszam = 4;– a 4-es számú rendelésen szereplő áruk összértéke
• SELECT SUM(mennyiseg) FROM rtetel;– az összes megrendelt áru mennyisége (fajtától és
mennyiségi egységtől függetlenül)
![Page 8: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/8.jpg)
2006. október 2. Markó Tamás, PTE TTK 8
MIN, MAX, AVG - példa• SELECT MIN(cikknev),
MAX(egysegar), AVG(atlegysegar) FROM cikk WHERE m_egyseg = ‘Kg’;– Azokra a cikkekre, amiknek “Kg” a mennyiségi egysége
- a névsorban legelső cikknév, - az egységár maximuma,- és a cikkek átlagos egységárának átlaga
![Page 9: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/9.jpg)
2006. október 2. Markó Tamás, PTE TTK 9
STDDEV, VARIANCE példa
• SELECT STDDEV (egysegar), VARIANCE(atlegysegar) FROM cikk;– A cikkek egységárának szórása és átlagos
egységárának varianciája
![Page 10: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/10.jpg)
2006. október 2. Markó Tamás, PTE TTK 10
Az adatok csoportosítása
• SELECT … FROM … [WHERE …] GROUP BY oszlop1 [, oszlop2 … ];
• Általában összesítő függvényekkel együtt használatos
• A SELECT utáni oszlopneveknek vagy a GROUP BY-nál is elő kell fordulni, vagy már a SELECT-nél egy összesítő függvényben kell szerepelni
![Page 11: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/11.jpg)
2006. október 2. Markó Tamás, PTE TTK 11
GROUP BY - 1. példa
• SELECT cikkszam, AVG(mennyiseg) FROM rtetel GROUP BY cikkszam;
• A megrendeléseken szereplő cikkek cikkszámát és az átlagos megrendelt mennyiséget kapjuk
• Mellékhatásként a cikkszámok növekvő rendezése is megtörténik
![Page 12: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/12.jpg)
2006. október 2. Markó Tamás, PTE TTK 12
GROUP BY - 2. példa
• SELECT rszam, sum(mennyiseg * egysegar) as
ertek,count(*) as tetelszam
FROM rtetel GROUP BY rszam;
• Megadja rendelésenként az összértéket és a tételszámot
![Page 13: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/13.jpg)
2006. október 2. Markó Tamás, PTE TTK 13
Csoportosítás több mező szerint
• A rendszer először az elsőként megadott mező értékei szerint képez csoportokat …
• … aztán minden csoportban alcsoportokat képez a második mező szerint …
• … aztán minden alcsoportban al-alcsoportokat képez a harmadik mező szerint …
• stb.
![Page 14: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/14.jpg)
2006. október 2. Markó Tamás, PTE TTK 14
Csoportosítás több mező szerint - 1. példa
• SELECT rszam, szall_hi, sum(mennyiseg * egysegar) as ertek
FROM rtetel GROUP BY rszam, szall_hi;
• Megadja a rendelt áruk összértékét megrendelésenként, azon belül szállítási határidő szerint csoportosítva
![Page 15: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/15.jpg)
2006. október 2. Markó Tamás, PTE TTK 15
Csoportosítás több mező szerint - 2. példa• SELECT min(nev1 || ‘ ‘ || nev2) as vevo,
rtetel.rszam,sum(mennyiseg * egysegar) as ertek
FROM vevok, rendel, rtetel WHERE vevok.vevokod = rendel.vevokod AND rendel.rszam = rtetel.rszam GROUP BY rendel.vevokod, rtetel.rszam;
• Megadja a rendelt áruk összértékét vevőnként, azon belül megrendelésenként csoportosítva
• Ha a GROUP BY után felcseréljük a mezőket, ugyanezeket az adatokat kapjuk, csak más sorrendben
![Page 16: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/16.jpg)
16
Csoportosítás több mező szerint - 3. példa• SELECT min(nev1 || ‘ ‘ || nev2) as vevo,
min(cikk.cikknev),sum(mennyiseg) as mennyi,avg(egysegar) as atlagos_egysegar,sum(mennyiseg * egysegar) as ertek
FROM vevok, rendel, rtetel, cikk WHERE vevok.vevokod = rendel.vevokod AND rendel.rszam = rtetel.rszam AND rtetel.cikkszam = cikk.cikkszam GROUP BY rtetel.cikkszam, rendel.vevokod;
• Megadja a rendelt áruk mennyiségét, átlagos egységárát és összértékét vevőnként, azon belül cikkenként csoportosítva
![Page 17: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/17.jpg)
2006. október 2. Markó Tamás, PTE TTK 17
Feltétel megadása a csoportosított adatokra
• Alakja: HAVING feltétel
• A GROUP BY után áll
• A feltétel olyan, mint a WHERE után
![Page 18: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/18.jpg)
2006. október 2. Markó Tamás, PTE TTK 18
HAVING - példa
• SELECT rszam, SUM(mennyiseg * egysegar) as ertek,COUNT(*) as tetelszam
FROM rtetel GROUP BY rszam HAVING COUNT(*) <= 5;
• Megadja rendelésenként az összértéket és a tételszámot, de csak azok a megrendelések jelennek meg, amelyeken legfeljebb 5 tétel szerepel
![Page 19: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/19.jpg)
2006. október 2. Markó Tamás, PTE TTK 19
… és még rendezni is lehet!
• SELECT rszam, SUM(mennyiseg * egysegar) as
ertek,COUNT(*) as tetelszam
FROM rtetel GROUP BY rszam HAVING COUNT(*) <= 5 ORDER BY 2;
• Az előző példa adatai összérték szerint rendezve
![Page 20: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/20.jpg)
2006. október 2. Markó Tamás, PTE TTK 20
A lekérdezések végrehajtási sorrendje
• A rendszer kiválasztja a WHERE feltételnek eleget tevő sorokat
• Csoportosítja őket a GROUP BY szakasz előírásai szerint
• Kiszámítja minden csoportra az összesítő függvények értékét
• Kiválogatja a HAVING feltételnek eleget tevő sorokat
• Rendezi a megmaradt sorokat az ORDER BY előírásai szerint
![Page 21: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/21.jpg)
2006. október 2. Markó Tamás, PTE TTK 21
Gyűjtőfüggvények egymásba ágyazása
• Példa:SELECT AVG(MAX(egysegar)) FROM rtetel GROUP BY rszam;
• Rendelésenként kiszámítja az egységár maximumát - és ennek az átlagát veszi a rendelésekre
![Page 22: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/22.jpg)
2006. október 2. Markó Tamás, PTE TTK 22
Halmazműveletek
![Page 23: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/23.jpg)
2006. október 2. Markó Tamás, PTE TTK 23
Rendeltetésük és használatuk
• Két lekérdezés (SELECT utasítás) eredményhalmazán hajtódnak végre
• A két lekérdezés által szolgáltatott sorok szerkezetének (az oszlopok számának és adattípusának) azonosnak kell lenni
![Page 24: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/24.jpg)
2006. október 2. Markó Tamás, PTE TTK 24
A támogatott halmazműveletek
• UNION: mindkét lekérdezésben szereplő egyedi sorok (únió)
• UNION ALL: mindkét lekérdezésben szereplő sorok (ismétlések is előfordulhatnak)
• INTERSECT: mindkét lekérdezésben szereplő egyedi sorok (metszet)
• MINUS: az első lekérdezésben szereplő, de a másodikban nem szereplő egyedi sorok
![Page 25: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/25.jpg)
2006. október 2. Markó Tamás, PTE TTK 25
UNION - példa
• SELECT vevokod FROM rendelUNIONSELECT vevokod FROM vevok WHERE varos = ‘Budapest’;
• Azon vevők kódja, akiknek van megrendelésük, vagy pedig a címük Budapesten van
![Page 26: Az Oracle SQL 4](https://reader035.vdocuments.pub/reader035/viewer/2022062519/56814fc1550346895dbd7cfb/html5/thumbnails/26.jpg)
2006. október 2. Markó Tamás, PTE TTK 26
MINUS - példa
• SELECT cikkszam FROM rtetel WHERE rszam = 1MINUSSELECT cikkszam FROM rtetel WHERE rszam = 4;
• Az 1-es megrendelésen szereplő, de a 4-es megrendelésen nem szereplő cikkek cikkszámai