3.gyak.Lekérdezések kifejezése relációs algebrában és SQL-ben
           valamint ekvivalens átírások egymásba

   
Feladatok: A 3. gyakorlaton az 1-2. gyakorlatok feladatait oldjuk meg SQL-ben,
célszerű ezeket az SQL megoldásokat táblánál is felírni és megbeszélni,  majd gépnél
is kipróbálni az Oracle adatbázis környezetben, lásd Oracle adatbázis elérhetősége
   

A gyakorlat áttekintése:
Csatlakozás az Oracle adatbázishoz:  >> Oracle adatbázis elérhetősége
A lekérdezési feldatatok megoldásához előbb az alaptáblákat kell létrehoznunk:
1.) Oracle segédanyag példáinak kipróbálása:
> SQL lekérdezésekhez szinonimák létrehozása: create_hr_synonym
> SQL DML utasításokhoz, PL/SQL-hez a táblák létrehozása: create_hr tables
   >> 1.1. SELECT záradék                     -- Egy táblát használó lekérdezések
   >> 1.2. WHERE záradék
   >> 1.3. ORDER BY záradék
   >> 1.4. Kifejezések, Oracle SQL sorfüggvények
   >> 1.5. FROM záradék                              -- Több táblát használó lekérdezések
   Eddig, most csak a vetítés-kiválasztás-összekapcsolások jellegű lekérdezéseket
   nézzük meg és a köv.órán folytatjuk a relációs algebra átírását SQL SELECT-re, 
   az összekapcsolások SQL: 1999-es szintaxisával, a halmazműveletekkel, valamint
   az alkérdésekkel (folyt.köv.a 4.gyak.)
   
2.) Az órai gyakorlatok feladatai: órai_feladatok
- Dolgozo és Osztaly táblák és kérdések: table_dolgozo.txt
   és a táblák létrehozása (scriptként futtatva le) create_dolgozo
- Termékek, lásd table_termekek.txt és a táblák létrehozása:  create_termekek
       Termék(gyártó, modell, típus)
       PC(modell, sebesség, memória, merevlemez, ár)
       Laptop(modell, sebesség, memória, merevlemez, képernyő, ár)
       Nyomtató(modell, színes, típus, ár)
- Csatahajók, lásd table_csatahajok.txt és a táblák létrehozása create_csatahajok
       Hajóosztályok(osztály, típus, ország, ágyúkSzáma, kaliber, vízkiszorítás)
       Hajók(név, osztály, felavatva)
       Csaták(név, dátum)
       Kimenetelek(hajó, csata, eredmény)
   
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)

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. Így 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. aritmetikai összehasonlítás: =, >, >=, <, <=, <>
Hasonlóan, mint a relációs algebra kiválasztás (szelekció)
feltételében elemi feltételekből építkezünk. Elemi feltételen
két kifejezés aritmetikai összehasonlítását értjük, pl. A<B
 
1.2.2. 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 ugyanúgy érvényesek 
a precedencia szabályok és zárójelezés.
 
1.2.3. egyszerű értékvizsgálat: LIKE, IS NULL
(SQL-ben speciális és ez nem írható át relációs algebrára)
 
- LIKE '_ %'  (ez csak sztring típusú kifejezésekre)
- 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)
 
- BETWEEN...AND...
- IN (értékhalmaz) | NOT IN (értékhalmaz)
- Feladat: átírni relációs algebrai kifejezésekké
   (aritmetikai összehasonlítással és logikai kifejezésekkel)
 
1.2.5. Alkérdések használata WHERE-ben (jön köv.héten)
   

1.3. 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], ...}];
   
Segédanyag: >>  WHERE feltétel 21.oldal példáit próbáljuk ki!
   
-- Megj.: Klasszikus relációs algebrában nem fejezhető ki,
    mert az eredmény lista (nem halmaz, nem is multihalmaz),
    később erre a kiterjesztett relációs algebránál visszatérünk.
       

1.4. 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,
ehhez >> A DUAL tábla
   

Többrelációs lekérdezések: Összekapcsolások és halmazműveletek
   
1.5. FROM záradék

   
A lekérdezések alapértelmezése a mai gyakorlat, a FROM záradékban
a szorzás, összekapcsolások SQL: 1999-es szintaxisa a köv.órán lesz.
   

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 között előforduló foglalkozások neveit
  (mindet 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)
   
1.3. 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.4. 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).

1.5. FROM záradék:
- Kik azok a dolgozók, akiknek a főnöke KING?
- Kik azok a dolgozók, akik osztályának telephelye BOSTON vagy CHICAGO?
   
Végül nézzük meg az 1-2. gyakorlatok Termékek és Csatahajós példáit is,
a relációs algebrában kifejezett lekérdezéseket írjuk át SQL SELECT-re!
   

 Fel a lap tetejére                          Vissza az AB1gyak oldalára (főmenü)