az oracle sql 4

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

Upload: kane

Post on 20-Jan-2016

27 views

Category:

Documents


0 download

DESCRIPTION

Az Oracle SQL 4. Összesítés és csoportosítás lekérdezésekben. Halmazműveletek. A rádiótelefonokat kérem KIKAPCSOLNI!. Összesítés és csoportosítás. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Az  Oracle  SQL 4

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

2006. október 2. Markó Tamás, PTE TTK 2

A rádiótelefonokat kérem

KIKAPCSOLNI!

Page 3: Az  Oracle  SQL 4

2006. október 2. Markó Tamás, PTE TTK 3

Összesítés és csoportosítás

Page 4: Az  Oracle  SQL 4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2006. október 2. Markó Tamás, PTE TTK 22

Halmazműveletek

Page 23: Az  Oracle  SQL 4

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

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

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

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