Feladatok a kiválasztásra: - Kik azok a dolgozók, akiknek a
fizetése
> 2800?
- Kik azok a dolgozók, akik a 10-es vagy a 20-as
osztályon dolgoznak?
- Kik azok a dolgozók, akik 1982.01.01 után
léptek be a céghez?
(Aktuális
dátumformátumot
lásd -> SYSDATE függvény)
- Kik azok a dolgozók, akiknek a jutaléka ismert?
(vagyis nem NULL) _______________________________________________________
4.
gyak.
(III.5) - SELECT
--> Rel.algebrai alapműveletek kifejezése
1.3. Összekapcsolások
1.3.a. Descartes szorzat
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table [, table, ...]
[WHERE condition(s)]
[ORDER BY column(s) [DESC]];
SELECT table1.column, table2.column
FROM table1
[CROSS JOIN table2];
1.3.b. JOIN - Természetes összekapcsolás
SELECT table1.column, table2.column
FROM table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]
1.3.c. Theta összekapcsolás (nem-ekvijoin)
1.3.d. Külső összekapcsolás
-- a 9i előtti
szintaxis (+)
-- 9i utáni
aktuális szintaxis
Feladatok halmazműveletekre
Különbség (MINUS)
- Kik azok a dolgozók, akik
osztályának telephelye nem BOSTON vagy CHICAGO?
Unió (UNION)
- Adjuk meg azoknak a nevét, akiknek a fizetése
> 2000 vagy a 30-as osztályon dolgoznak
P3. Relációs
algebra további műveletei (Papíron)
Relációs
algebra további műveletei:
Metszet,
Descartes szorzat,
theta-összekapcsolás, külső
összekapcsolások, hányados.
Relációs algebrai kifejezések
kiértékelése.
Kifejezésfa.
Feladatok relációs
algebrában
Hányados kifejezése SQL-ben
- A 2.gyakorlat szeret táblára
vonatkozó
relációs algebrai feladatait
nézzük meg
SQL SELECT-tel. Hányados kifejezése
a relációs algebrai alapműveletekkel,
majd ezt átírva SQL SELECT-re
(két MINUS halmazművelet
segítségével).
(Megj. később majd
mégnézzük
alkérdésekkel is az SQL SELECT-ben)
Új anyag: az SQL SELECT lekérdezési
lehetősége bővebb, mint
amit a relációs algebrában
láttunk. Erre végezzünk feladatokat:
SELECT WHERE feltétele, GROUP BY
csoportosítás,
és FÜGGVÉNYEK. (Az
alkérdések a köv.héten
lesznek.)
1.5.
Oracle
függvények
A leggyakrabban használt Oracle
függvényeket, lásd sql_anyag.txt [5.]
(elég sok függvény,
ezeket nem kell
tudni, csak segédlettel alkalmazni kell tudni a
gépes
feladatok megoldásánál).
Segédanyag: >> Sorfüggvények
példáit próbáljuk ki!
-- Ehhez előkészítésként
a
HR
séma tábláihoz
készítsük el a
szinonimákat create_synonym
Feladatok az Oracle függvényekhez
Beépített függvények
- Adjuk meg azon dolgozókat, akik nevének
második betűje 'A'.
- Adjuk meg azon dolgozókat, akik nevében van
legalább két 'L' betű. (INSTR)
- Adjuk meg a dolgozók fizetéseinek
négyzetgyökét és 3-mal vett
maradékát.
- Adjuk meg, hogy hány napja dolgozik a
cégnél ADAMS és milyen
hónapban lépett be.
Összesítő (aggregátor)
függvények
- Mekkora a minimális/maximális
fizetés a dolgozók között?
- Kinek a legkisebb/legnagyobb a fizetése?
(alkérdés)
- Mennyi a dolgozók összfizetése?
- Mennyi a 20-as osztályon az
átlagfizetés?
- Adjuk meg, hogy hány különböző
foglalkozás fordul elő a dolgozók
között.
1.6.
Csoportosítás
SELECT column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Segédanyag: >> Csoportosítás
példáit próbáljuk ki!
-- Ehhez előkészítésként
a
HR
séma tábláihoz
készítsük el a
szinonimákat create_synonym
Feladatok a csoportosításhoz
Csoportképzés (GROUP BY)
- Adjuk meg osztályonként az
átlagfizetést (OAZON, ATL_FIZ).
- Adjuk meg osztályonként a telephelyet
és az átlagfizetést (OAZON, TELEPHELY,
ATL_FIZ).
- Adjuk meg, hogy az egyes osztályokon hány ember
dolgozik (azt is, ahol 0=senki) (OAZON, DB).
Csoportok szűrése (HAVING)
- Adjuk meg azokra az osztályokra az
átlagfizetést, ahol ez nagyobb mint 2000. P4.
Kiterjesztett műveletek a relációs
algebrában (Papíron)
Relációs műveletek multihalmazokon. Kiterjesztett
műveletek a relációs
algebrában.
Feladatok az alkérdésekhez
Skalár alkérdések WHERE-ben
- Kik azok a dolgozók, akiknek a fizetése
nagyobb, mint
'ALLEN'
fizetése?
- Kik azok a dolgozók, és milyen
munkakörben dolgoznak, akiknek a legkisebb
a fizetésük? (ugyanez a
kérdés a legnagyobb fizetésre is).
Skalár alkérdések HAVING-ben
- Osztályonként írjuk ki a
minimális
fizetést, de csak azokat az
osztályokét, ahol
a minimális fizetés nagyobb,
mint a 30-as
osztályon dolgozók minimális
fizetése.
Többsoros alkérdések az ANY
és ALL használata
- Kik azok a dolgozók, akiknek a fizetése kisebb,
mint valamelyik hivatalnok ('CLERK')
fizetése. (ugyanez a
kérdés, csak
most minden hivatalnok fizetésénél
kisebb)
Alkérdések IN-el beágyazva
-Kik azok a dolgozók, akiknek ugyanaz a
főnökük és ugyanazon az
osztályon dolgoznak,
mint 'MARTIN'?
EXISTS és NOT EXISTS alkérdések
Korrelált alkérdések
- Melyek azok az osztályok, ahol nem dolgozik senki (most
NOT EXISTS-el)
Hányados kifejezése SQL-ben
- A 2.gyakorlat szeret táblára
vonatkozó
relációs algebrai feladatait
nézzük meg
SQL SELECT-tel. Hányados kifejezése
a relációs algebrát
átírva (két MINUS)
illetve két
egymásba
ágyazott korrelált NOT EXITST
alkérdéssel
is írjuk fel!
1.8.
Alkérdések FROM-ban és
a WITH utasítás az Oracle-ben
Ez csak később lesz, II.Témakörben majd
a
táblák,
nézettábláknál
létrehozásánál.
1.9.
Hierarchikus lekérdezések az Oracle-ben (CONNECT
BY PRIOR)
Családfák. SFW start with
... connect by ...
SELECT [LEVEL], column, expr...
FROM table
[WHERE condition(s)]
[START WITH condition(s)]
[CONNECT BY PRIOR condition(s)] ;
ahol WHERE condition:
expr
comparison_operator expr
Fa bejárása
Kiindulás: START WITH column1 = value
CONNECT BY PRIOR column1 = column2
Felülről-lefelé: Column1 = Parent Key
Column2 = Child Key
Alulról-felfelé: Column1 = Child Key
Column2 = Parent Key
Segédanyag: >> Hierarchikus.pdf példáit
próbáljuk ki!
-- Ehhez előkészítésként
a
HR
séma tábláihoz
készítsük el a
szinonimákat create_synonym
Feladatok a hierarchikus lekérdezésekhez
- Listázzuk ki az dolgozo tábla
alapján a
főnökökhöz tartozó beosztottak
nevét
és osztályukat.
a.) A dolgozo tábla
önamagára való
hivatkozásával
(többtáblás
lekérdezés sorváltozókkal).
b.) A CONNECT BY
utasításrész
használatával, a hierarchikus
szerkezetet 'KING'-től
felülről
lefelé bejárva.
c.) Alulról
felfelé járjuk be a
hierarchikus szerkezet egy
ágát 'SMITH'-től kezdve.
P5.
Rekurzió az
SQL99-ben (Papíros feladat)
Segédanyag:
>> Tk1./10.2.fejezet: Tk1_102_Rekurzio.pdf
77rek_02
-- Tegyük fel, hogy az alábbi
reláció
Járatok(légitársaság,
honnan, hova, indulás, érkezés)
azt tartalmazza, hogy melyik
légitársaság melyik
városból melyik városba mikor
indít járatokat.
-- Mely (x, y) várospárokra lehetséges
egy vagy több átszállással
eljutni x városból y városba?
Tegyük fel, hogy nemcsak az
érdekel minket, hogy el tudunk-e jutni az egyik
városból a másikba,
hanem az is, hogy utazásunk
során az átszállások is
ésszerűek legyenek, vagyis ha több
járattal
utazunk és
átszállásra van
szükségünk, akkor az érkező
járatnak legalább egy
órával a rá következő
indulás előtt meg kell
érkeznie. Feltehetjük, hogy nincs egy
napnál hosszabb utazás!
a.) Írjuk fel erre a
rekurzív Datalog szabályokat!
b.) Írjuk át ezt a
rekurziót az SQL-99 szabvány szerint! (Ezt is
papíron!) _______________________________________________________
KÖVETKEZŐ HÉTEN ZH! lásd Előzetes
információ az I.Zh-ról