I.
Témakör
Lekérdezések kifejezése
relációs
nyelvekben
>> Feladatok:
Relációs algebra, DRC, TRC
(2.gyak./A)
Lekérdezések
kifejezése SQL
SELECT-tel
>> 1.
SQL utasítások
áttekintése (1.gyak./A)
>> 2.
Lekérdezések. Egyszerű SELECT
(1.gyak./B)
>> 3.
Halmazműveletek
(2.gyak./B)
>> 4.
Oracle függvények (3.gyak./A)
>> 5.
Csoportosítás (3.gyak./B)
>> 6.
Allekérdezések (4.gyak./A)
>> 7.
Összekapcsolások (4.gyak./B)
>> 8.
Hierarchikus lekérdezések (4.gyak./C)
folyt.köv. II.Témakör
Relációs tervezés
és SQL DDL, DML
>> 9.
DDL Adatdefiníciós nyelv (5.gyak.)
>> 10.
DCL Adatvezérlő nyelv (6.gyak./A)
>> 11.
Tranzakció
vezérlés (6.gyak./B)
>> 12.
DML Adatkezelő nyelv (6.gyak./C)
_______________________________________________________
1. gyak. (II.13) - SQL SELECT --> alapok
> Bevezetés
> Feladatok
> 1. SQL
utasítások
áttekintése (1.gyak./A)
> 2.
Lekérdezések. Egyszerű SELECT
(1.gyak./B)
Bevezetés
* Adatbázis (DB),
Adatbázis-kezelő rendszer
(DBMS) felépítése
* Adatbázis-kezelő nyelvek, SQL részei: QL, DDL,
DML,
DCL
* SQL nyelv története, szabványok,
utasítások
áttekintése,
lásd wikipedia
* PÉLDÁK
relációsémákra,
relációkra, hiányos adatokra (NULL)
* Oracle kliens-szerver architektúra, kliens programok
használata
Feladatok
az Oracle rendszer
alaptábláival: dept,
emp,
salgrade táblák
- Írjuk át a jelszavunkat mind az oradb mind az
ablinux csatlakozásnál
lásd Adatbázisok
elérése és sqlplus
parancsok sqlPlus.pdf
sqlplus.txt
- Hozzuk létre a dept, emp, salgrade
táblákat a scott.dept (sila.dept), stb.
táblákból: CREATE
TABLE dept AS SELECT * FROM sila.dept; stb.
- Vizsgáljuk meg a táblák
szerkezetét, az adatokat (és hiányos
adatokat)
- Egyszerű lekérdezések: SELECT, FROM, WHERE,
ORDER BY
- Sorok kiválasztása és
rendezése. Vetítés (oszlopok
kiválasztása).
1. SQL
utasítások
áttekintése
(1.gyak./A)
- QL Lekérdező nyelv
>> 1-4.gyak.(2-8.téma)
- DDL Adatdefiníciós nyelv >>
5.gyak. ( 9.téma)
- DCL Adatvezérlő nyelv
>> 6.gyak. (10.téma)
- Tranzakció
vezérlés >> 6.gyak.
(11.téma)
- DML Adatkezelő nyelv
>> 6.gyak. (12.téma)
1.1. Lekérdező nyelv (Query language)
SELECT
1.2. DDL. Adatdefiníciós nyelv (Data
definition language)
CREATE
ALTER
DROP
TRUNCATE
RENAME
COMMENT
1.3. DML. Adatkezelő nyelv (Data manipulation
language)
INSERT
UPDATE
DELETE
MERGE
1.4. DCL. Adatvezérlő nyelv (Data control language)
GRANT
REVOKE
1.5. Tranzakció vezérlés (Transaction
control)
COMMIT
ROLLBACK
SAVEPOINT
2.
Lekérdezések. Egyszerű SELECT (1.gyak./B)
2.1. Vetítés, projekció
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;
2.2.Kiválasztás, szelekció
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];
2.2.1. egyszerű értékvizsgálat
- aritmetikai összehasonlítás =,
>, >=, <, <=, <>
- LIKE '_ %'
- IS NULL | IS NOT NULL
2.2.2. egyszerű értékek listája
- BETWEEN...AND...
- IN (set) | NOT IN (set)
2.2.3. logikai kifejezések
kombinációja AND, OR, NOT
- precedencia szabályok és
zárójelezés
foly.köv. Halmazműveletek, Oracle
függvények, Csoportosítás
Allekérdezések,
Összekapcsolások
2.2.B. Kiválasztott sorok rendezése
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[ORDER BY column(s) [DESC]];
_______________________________________________________
2.
gyak.
(II.20) - SELECT
--> Halmazműveletek
> Példa.
Egyszerűsített egyetemei
tantárgyfelvétel
> Feladatok.
Rel.alg.alapműveletek
átírása SQL SELECT-re
> 3. Halmazműveletek
Példa.
Egyszerűsített egyetemi
tantárgyfelvétel
- lásd Az
órai adatbázissémák
1. Példáját (E/K modell,
rel.sémák)
- Hozzuk létre a tanar, hallg, targy,
felv táblákat:
CREATE
TABLE,INSERT utasítások: 01_sql.txt
(jelszóval)
- Vizsgáljuk meg a táblák
szerkezetét, integritási
megszorításokat!
Feladatok: Rel.
algebrai
alapműveletek kifejezése SQL
SELECT-tel
Rel. algebrai alapműveletek
átírása SQL-be
1. feladat: Milyen tárgyakat vett fel Kiss Pál?
2. feladat: Milyen tárgyakat nem vett Kiss Pál?
3. feladat: Kinek a legnagyobb az ösztöndija?
lásd 02_sql.txt
(jelszóval)
Házi feladat
(Rel.alg.alapműveletek átírása
SQL-be)
HF1. Kik
vettek fel legalább két
tárgyat?
HF2. Kik vettek fel legfeljebb két
tárgyat?
HF3. Kik vettek fel pontosan két
tárgyat?
3. Halmazműveletek
(2.gyak.)
rövidítés: SFW = SELECT ... FROM ...
WHERE ..
3.1. Vetítés,
projekció
>> ismétlés 2.1.
3.2. Kiválasztás, szelekció
>> ismétlés 2.2.
3.2.B. Kiválasztott sorok rendezése
>> 2.2.B.
3.3. Descartes szorzat (rel. alg. alapművelet)
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table [, table, ...]
[WHERE condition(s)]
[ORDER BY column(s) [DESC]];
3.3.B. Természetes összekapcsolás
(származtatott
művelet,
az alapműveletekkel kifejezhető)
- where utasításrészben megadva
>> itt 2.gyak./3.téma
- IN (SFW) allekédezéssel adva
>> 4.gyak./6.téma
- ANSI szintaxissal >> 4.gyak./7.téma
3.4. Unió (csak unió-kompatibilis
táblákra)
- duplikációk nélkül |
illetve minden duplikációval
SFW
union | union all
SFW
3.5. Különbség (csak
unió-kompatibilis táblákra)
SFW
minus
SFW
3.5.B. Metszet (származtatott művelet:
(A metszet
B) = A-(A-B) = stb.)
SFW
intersect
SFW
______________________________________________________
3. gyak. (II.27) - SELECT -->
Oracle függvények
> SQL Developer
> Feladatok. Where felt,
Oracle függvények,
csoportosítás.
> 4. Oracle
függvények (3.gyak./A)
> 5.
Csoportosítás (3.gyak./B)
SQL Developer
Oracle szoftvert
használjuk,
lásd Oracle
adatbázisok
ELTE-s elérése 4.pontját.
Feladatok. Where
felt, Oracle függvények, csoportosítás
Ú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.)
4. feladat: több tábla
összekapcsolásából sorok
kiválasztása minél
érdekesebb keresési feltételeket ill
SQL függvényeket beleírva ...
Kik azok a hallgatók (+függvények)
akiknek
- odija 10000 és 30000 között van (between
and)
- a neve K betűvel kezdődik (like),
- vagy PTM vagy MAT szakosok (in),
5. feladat: Dátumfüggvények: a fentit
folytatva:
- a 200_-es években íratkozott be (konv.fv, like)
- 2005.09.01 - 2006.12.31 között
vizsgázott valamiből
(between and)
6. feladat: Csoportfüggvények a hallgató
táblára készítsük
el
az odijra vonatkozó
statisztikákat:
hány sora van a táblának,
ebből hány sorban van kitöltve
a az odij oszlop,
mennyi a
legnagyobb és legkisebb odij, mennyi az
átlag
és összeg?
7. feladat: Group by, lásd az előző feladatot, csak most
szak
szerinti csoportositásban.
Egészítsük ki having
záradékkal,
csak azokon a szakokon nézzük
meg a
statisztikákat, ahol
kettőnél többen
járnak.
HF: A függvényeknek utána
nézhetünk az Oracle Online Docban.
Függvények, különös
tekintettel a dátum és
csoportfüggvényekre...
HF4. (dátum
függvények)
Hány naposak és hónaposak vagyunk?
HF5. (dátum
függvények)
Listázzuk ki hallgatókként, hogy
hány
napja ill.
hány hónapja íratkoztak be az
egyetemre?
HF6. (konverziós
függvények)
Listázzuk ki hallgatókként, hogy
hány
éve járnak egyetemre?
HF7. (csoport függvények)
Melyek azok a szakok,
amelyre 3-nál
kevesebb
hallgató jár?
HF8. (csoport függvények) Kik
azok a
hallgatók, akik 3-nál több
tárgyat vettek fel?
Megoldásokat lásd 03_sql.txt
(jelszóval)
4. Oracle
függvények (3.gyak./A)
A leggyakrabban használt Oracle
függvényeket, lásd sql_anyag.txt
(elég sok függvény, ezeket nem kell
tudni, csak alkalmazni kell tudni)
5.
Csoportosítás (3.gyak./B)
SELECT column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
_______________________________________________________
4. gyak.
(III.5) - SELECT -->
join, hányados,
alkérdések
>
HF beküldése
> Feladatok. Allekérdezések.
> 6.
Allekérdezések (4.gyak./A)
> 7.
Összekapcsolások (4.gyak./B)
> 8.
Hierarchikus lekérdezések (4.gyak./C)
HF
beküldéséről
(így kell majd a géptermi Zh
megoldásait is küldeni)
ha nincs kész a múlt heti
HF, akkor küldj
üres fájlt, ha kész, akkor
a megoldást küld
el, lásd Zh
feladatok, beadandók beküldése
Feladatok.
SQL SELECT: WHERE-be
beágyazott
alkérdések:
(a) t
in (SFW)
(b) t
theta (SFW)
(c) t
theta ANY/ALL(SFW)
(d) EXISTS
(SFW)
valamint a relációs algebra
származtatott
műveletei, mint
- a metszet
- az
összekapcsolások (join, stb,
külső összekapcsolás)
- a
hányados kifejezése SQL-ben.
1.feladat: Relációs algebra
származtatott műveleteit fejezzük ki
SQL-ben, kezdjük a metszettel
(lásd múlt heti HF3)
Az SQL-ben a metszet: (SFW) intersect (SFW)
Kik vettek fel pontosan két
tárgyat?
2.feladat: Természetes összekapcsolás
kifejezése alkérdésekkel
(eddig where-ben adtuk meg az
összekapcsolási feltételeket)
majd megnézzük az
ANSI SQL kompatibilis JOIN szintaxissal,
de a mai
órán alkérdésekkel
lesz:
Alkérdések (a) t
in (SFW)
Kik vettek fel Adatbázisos tárgyat?
3.feladat: Alkérdések (b) t
theta (SFW),
ahol theta: = <> < <=
> >=
és
a (SFW) pontosan egy sort ad vissza.
Ki(k) a legkorábban beiratkozott
hallgatók?
4.feladat: Alkérdések (c) t
theta ANY/ALL(SFW),
Az előző kérdést oldjuk meg
így is...
Ki(k) a legkorábban beiratkozott
hallgatók?
5.feladat: Alkérdések (d) EXISTS
(SFW)
Relációs algebrai hányados
kifejezése korrelált
alkérdésekkel
Kik azok a hazon (hallgatók), akik MINDEN
tárgyat felvettek?
vagyis Kik azok a hazon (.. felv f1), akikhez nincs
olyan tárgy
(not exists .. f2) amit ne vettek volna fel (not exists f3)
6.feladat: Alkérdések (d) EXISTS
(SFW)
Kik azok a hazon (hallgatók),
akik LEGALÁBB azokat a
tárgyakat vették
fel, mint a HAZON='KOPLAAT' vagyis
átfogalmazva az előzőhöz
hasonlóra:
Kik azok, akik minden olyan tárgyat felvettek,
mint amit
a KOPLAAT felvett?
HF További feladatok beágyazott
alkérdésekkel
önálló
gyakorlásra!
HF: A JOIN szintaxisnak utána
nézhetünk az Oracle Online Docban.
Megoldásokat lásd 04_sql.txt
(jelszóval)
6.
Allekérdezések
(4.gyak./A)
6.1. IN (SFW) többsoros allekérdezések
6.2. THETA (SFW) egysoros allekérdezések
6.3. THETA [ANY|ALL](SFW) többsoros
allekérdezések
6.4. EXISTS (SFW) többsoros
allekérdezések
Korrelált
allekérdezések
Relációs
algebrai hányados (az osztás)
kifejezése
egymásba
ágyazott NOT EXISTS allekérdezésekkel
7.
Összekapcsolások (4.gyak./B)
7.1. JOIN - Természetes összekapcsolás
- where utasításrészben megadva
>> 2.gyak./3.téma (3.3.B)
- IN (SFW) allekédezéssel adva
>> 4.gyak./6.téma (6.1)
- SQL-1999-es szintaxissal >> itt a
4.gyak./7.téma
SELECT table1.column, table2.column
FROM table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]
7.2. Theta összekapcsolás (nem-ekvijoin)
7.3. Külső összekapcsolás
7.3.1. 9i előtti szintaxis (+)
7.3.2. 9i utáni aktuális szintaxis
SELECT table1.column, table2.column
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)]
7.4. Descartes szorzat
SELECT table1.column, table2.column
FROM table1
[CROSS JOIN table2];
8.
Hierarchikus lekérdezések (4.gyak./C)
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