3.gyak. Az SQL adatbázisnyelv. Lekérdezések SQL-ben.
   
Feladatok: SQL gépes gyakorlat: táblák létrehozása, Oracle típusok.
 Lekérdezések Oracle SQL-ben, kifejezések, sorfüggvények használata,
 milyen segítségünk van: Oracle-doksik (lásd SQL Language Reference).
 A nullérték és műveletek nullértékekkel, az ismeretlen igazságérték.
 Több relációra vonatkozó lekérdezések, sorváltozók, az alapértelmezés,
szabvány kiértékelés szemantikája. (4.gyak.folyt.: Alkérdések használata)
     

A gyakorlat áttekintése:
> lásd Oracle adatbázis elérhetősége
> 1. Demo példák
   -- Ehhez előkészítés: HR séma tábláihoz készítsük el a szinonimákat create_synonym
   -- HR séma a dokumentációban: Sample Schemas - Schema Diagram: HR
> 2. Órai gyakorló feladatok  
    -- Feladatok: table_dolgozo.txt és a táblák létrehozása: create_dolg
> 3. A példatár feladatai önálló gyakorlásra
   --  lásd Feladatok.pdf  (1.fejezet feladatai) és a táblák létrehozása: cr_dept_emp 
    

Egy táblára vonatkozó lekérdezések, az SQL függvények használata (kifejezések)
HR séma tábláihoz (lásd Oracle-doksik) készítsük el a szinonimákat create_synonym 
 
1.1. SELECT záradék: Vetítés, projekció
   
SELECT *|{[DISTINCT] oszlopnév|kifejezés [másodnév],...}
FROM táblanév [[sorváltozó], ... ];
   
Segédanyag: >> SELECT lista példáit próbáljuk ki!
 
SELECT és FROM kötelező záradékok, a többi nem kötelező.
SELECT .. FROM .. [WHERE .. ] alapértelmezése:
A FROM záradékban levő relációkhoz egy-egy sorváltozót rendelünk, amelyek
a megfelelő reláció minden sorát bejárják, (ha van WHERE záradék, akkor azt
az aktuális sorokra kiértékeljük és ha helyes, vagyis a feltétel igazat ad, akkor)
képezzük a SELECT záradékban szereplő kifejezéseknek megfelelő eredménysort.
(Figyelem! az SQL-ben az oszlopnév helyett kifejezések is állhatnak!)
A relációs algebra és SQL között alapvető különbség, hogy az SQL-ben egy sor
az eredményben többször is előfordulhat, vagyis az eredménytábla multihalmaz,  
ha halmazt szeretnénk kapni, azt külön kérni kell: DISTINCT
   

1.2. WHERE záradék: Kiválasztás, szelekció
   
SELECT *|{[DISTINCT] oszlopnév|kifejezés [másodnév],...}
FROM táblanév [[sorváltozó], ... ]
[WHERE feltétel];
 
Segédanyag: >> WHERE feltétel példáit próbáljuk ki!
 
1.2.1. Elemi keresési feltételek. Hasonlóan, mint a relációs algebra
kiválasztás (szelekció) feltételében itt is elemi feltételekből építkezünk. 
Elemi feltételen két kifejezés aritmetikai összehasonlítását értjük,
pl. A<B, ahol aritmetikai összehasonlítás: =, >, >=, <, <=, <>. 
 
1.2.2. Összetett keresési feltételek. Logikai műveletekkel: AND, OR, NOT
és zárójelekkel az elemi feltételekből tudjuk felépíteni az összetett feltételeket,
úgy, mint a relációs algebrában. Itt is érvényesek a precedencia szabályok.
 
1.2.3. egyszerű értékvizsgálat: LIKE, IS NULL
(SQL-ben speciális és ez nem írható át relációs algebrára)
 
- kar_sorozat_kifejezés  LIKE '_ %'  (ez csak sztring típusú kifejezésekre)
- kifejezés  IS NULL | IS NOT NULL
 
1.2.4. egyszerű értékek listája: BETWEEN, IN 
(SQL-ben speciális, de mind a kettő átírható relációs algebrába)
 
- kif BETWEEN  kif1 AND kif2
- kif IN (értékhalmaz) | NOT IN (értékhalmaz)
Feladat: átírni relációs algebrai kifejezésekké (összetett kiválasztási feltétel).
 
1.2.5. Alkérdések használata WHERE-ben (Ez a 3.előadáson már volt,
 egyszerű feladatokat erre is nézhetünk, és a 4-5. gyakorlaton folytatjuk).
   
KIEGÉSZÍTÉS: ORDER BY záradék: Kiválasztott sorok rendezése
 
SELECT *|{[DISTINCT] oszlopnév|kifejezés [másodnév],...}
FROM táblanév [[sorváltozó], ... ]
[WHERE feltétel]
[ORDER BY {oszlopnév [DESC], ...}];
   
-- Megj.: Klasszikus relációs algebrában nem fejezhető ki, mert az eredmény
    itt lista lesz (nem halmaz, mint a relációs algebrában, sőt nem is multihalmaz,
    mint a kiterjesztett relációs algebrában, hanem rendezett lista), az eredmény
    ugyanaz, mert a sorok sorrendje nem számít! (Cak nekünk jó, hogy rendezett!)
   

1.3. Kifejezések, Oracle SQL sorfüggvények 
   
Oracle doksi: >> SQL Language Reference >> 5. Functions fejezetében
itt lásd Single-Row (Numeric, Character, Datetime, Conversion) Functions
   
Segédanyag: >> Sorfüggvények példáit próbáljuk ki!
-- Egy specialitás, az SQL-ben a lekérdezéseket táblákra tudjuk felírni,
    Pl. a mai dátum lekérdezése: SELECT SYSDATE FROM DUAL;
-- Oracle dokumentációt is használjunk segítségül, az itt szereplő példákat:
    SQL Language Reference >> 5 Functions >> see Single-Row Functions
    >> Character Functions e.g. SUBSTRRPAD, ...,  INSTR, ...
    >> Datetime Functions e.g. MONTHS_BETWEEN, ...
    >> Conversion Functions e.g. TO_DATE, ...
    >> Null-related Functions e.g. NVL, ...
     

Fejezd ki a lekérdezéseket SQL SELECT-tel és relációs algebrában!
2.) Az órai gyakorlatok feladatai itt: table_dolgozo.txt
Feladatok a 3.gyakorlatra
1.1. SELECT záradék:
- Adjuk meg a dolgozók nevét, az éves fizetését és hány hete állt munkába!
- Adjuk meg a dolgozók között előforduló foglalkozások neveit (az eredmény
   most halmaz legyen, vagyis minden foglalkozást csak egyszer írjuk ki!)
 
1.2. WHERE záradék:
- Kik azok a dolgozók, akiknek a fizetése > 2800?
- Kik azok a dolgozók, akiknek a fizetése 3000 és 4500 között van?
- Kik azok a dolgozók, akik a 10-es vagy a 20-as osztályon dolgoznak?
- Adjuk meg azon dolgozókat, akik nevének második betűje 'A'.
- Kik azok a dolgozók, akiknek a jutaléka ismert? (vagyis nem NULL)
Kiegészítés: Az ORDER BY záradék:
- Adjuk meg osztályok azonosítója sorrendjében a dolgozókat, azonos
  osztályon belül a fizetés szerint csökkenően listázzuk ki a dolgozók neveit.
   
1.3. Oracle SQL sorfüggvények:
- Adjuk meg azon dolgozókat, akik nevében van legalább két 'L' betű.
  (Többféle megoldást is keressünk a lekérdezésre, LIKE, INSTR függvény)
- Adjuk meg a dolgozók fizetéseinek négyzetgyökét és 3-mal vett maradékát.
- Számoljuk ki, hogy a mai nap hány naposak vagyunk, illetve azt is hogy ma
   hány hónaposak vagyunk (DUAL tábla lekérdezésével)
- Adjuk meg, hogy hány hete dolgozik a cégnél ADAMS és milyen hónapban
  és milyen nap (hétfő, kedd, stb) lépett be.
- Adjuk meg a dolgozók éves jövedelmét, ahol a havi jövedelem a fizetés
  és jutalék összege, ahol nincs jutalék megadva,ott a 0 helyettesítő
  értékkel számoljunk (NVL függvény alkalmazása).
     

 3.) A példatár feladatai önálló gyakorlásra:
-- 
Lásd Feladatok.pdf  (1.fejezet feladatai)  és a táblák létrehozása  cr_dept_emp 
    
 Fel a lap tetejére                          Vissza az AB1gyak oldalára (főmenü)