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