4.gyak. Lekérdezések kifejezése SQL-ben:
Összekapcsolások, külső összekapcsolások. Halmazműveletek.
Alkérdések, korrelált alkérdések.

   
Feladatok: Több relációra vonatkozó lekérdezések, összekapcsolások, alkérdések. 
       

A gyakorlat áttekintése:
Csatlakozás az Oracle adatbázishoz:  >> Oracle adatbázis elérhetősége
A lekérdezési feladatok megoldásához előbb az alaptáblákat kell létrehoznunk
(aki volt az előző gyakorlatokon, azoknak megvan, aki nem volt, most hozza létre)
1.) Oracle segédanyag példáinak kipróbálása:
- Ehhez előkészítés: HR séma tábláihoz készítsük el a szinonimákat create_synonym
   >> 1.4. Függvények, egyrelációs lekérdezések
   >> 1.5. FROM záradék, összekapcsolások
   >> 1.6. Halmaz- és multihalmaz-műveletek
   
2.) Az órai gyakorlatok feladatai: órai_feladatok
- Szeret tábla és feladatok:  table_szeret.txt  és a tábla létrehozása: create_szeret.txt
- Dolgozo és Osztaly +feladatok: table_dolgozo.txt és a táblák létrehozása create_dolg
- Termékek, +feladatok, lásd table_termekek.txt és a táblák létrehozása:  create_termekek
- Csatahajók, +feladatok, lásd table_csatahajok.txt és a táblák létrehozása create_csatahajok
- Filmek adatbázisból (még nincs befejezve, csak) pár tábla létrehozása create_filmek
           
3.) A példatár feladatai önálló gyakorlásra:
--  Lásd Feladatok.pdf (3.fejezet feladatai) és a táblák létrehozása  cr_dept_emp 
    

1.4. (folyt) Egyrelációs lekérdezések, függvények
Oracle doksi: >> SQL Language Reference >> 5. Functions fejezete
   
Segédanyag-1: >> Sorfüggvények példáit próbáljuk ki!
Segédanyag-2: >> OracleSQL_csoportosítás példáit próbáljuk ki!
Csoportosítás és összesítések az SQL-ben
   
SELECT column,] group_function(column), ...
FROM   table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];


1.5. FROM záradék: Összekapcsolások az SQL-ben
   
1.5.1. Descartes szorzat 
   
SELECT *|{[DISTINCT] oszlopnév|kifejezés [másodnév],...}
FROM táblanév [[sorváltozó], táblanév [sorváltozó], ... ]
[WHERE feltétel]
[ORDER BY {oszlopnév [DESC], ...}];
   
1.5.2. Táblák összekapcsolása (SQL: 1999 szintaxis)
   
SELECT tábla1.oszlop, tábla2.oszlop
FROM    tábla1
[NATURAL JOIN tábla2] |
[JOIN tábla2 USING (oszlopnév)] |
[JOIN tábla2
  ON (tábla1.oszlopnév = tábla2.oszlopnév)]
[CROSS JOIN tábla2]
   
1.5.3. Theta összekapcsolás (nem-ekvijoin)

1.5.4. Külső összekapcsolások az SQL-ben
 
Külső összekapcsolás
-- a 9i előtti szintaxis (+)
-- 9i utáni aktuális szintaxis: 
 
SELECT tábla1.oszlop, tábla2.oszlop
[{LEFT | RIGHT | FULL} OUTER JOIN tábla2
  ON (tábla1.oszlopnév = tábla2.oszlopnév)]
 
Segédanyag: >> FROM_lista és Külső join  művelet példáit próbáljuk ki!
Feladat: Próbáljuk ki az összekapcsolások különböző szintaxisait,
               -- ellenőrzésként, megoldás lásd: itt
   

1.6. Halmazműveletek: egyesítés, különbség, metszet
 
rövidítés: SFW = SELECT ... FROM ... WHERE ..
Fontos! Az SQL-ben a halmazműveleteket nem így "R UNION S" (mint
a relációs algebrában volt az R, S táblákra), hanem SFW lekérdezésekre 
így kell: "SELECT * FROM R UNION SELECT * FROM S"  használni!
- Alapértelmezésben halmazként értelmezve: duplikációk nélkül
- "ALL" kiegészítőszóval pedig a duplikációval, multihalmazként értelmezve
 
SFW
  {UNION | MINUS | INTERSECT [ALL] }
SFW
     
Segédanyag: >> Halmazműveletek példáit próbáljuk ki!


2.) Az órai gyakorlatok példái:
Fejezd ki a lekérdezéseket SQL SELECT-tel!
   
A gyakorlatok feladatai itt: table_dolgozo.txt  -- táblák létrehozása: create_dolg
Feladatok a 6.gyakorlatra  

1.5-1.7. FROM záradék, öszekapcsolások az SQL-ben, halmazműveletek, alkérdések:
Keressünk több megoldást is, különböző összekapcsolásokkal, esetleg a tábla önmagával
való szorzatával oldjuk meg illetve ugyanezeket a feladatokat alkérdésekkel is nézzük meg
és összehasonlítjuk a megoldásokat, a szemantikát és eredményez-e valamilyen különbséget?

- Kik azok a dolgozók, akiknek a főnöke KING?
- Kik azok a dolgozók, akik osztályának telephelye BOSTON vagy CHICAGO?
- Kik azok a dolgozók, akik osztályának telephelye nem (BOSTON vagy CHICAGO)?
- Kik azok a dolgozók, akiknek ugyanaz a főnökük és ugyanazon az osztályon dolgoznak, 
  mint 'MARTIN'?
- Melyek azok az osztályok, ahol nem dolgozik senki?
   
1.7. További feladatok alkérdésekre:
- 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? (köv.héten lesz a min csoportfüggvénnyel, ma theta ALL alkérdéssel)
- Kik azok a dolgozók, és milyen munkakörben dolgoznak, akiknek a legnagyobb
  a fizetésük?  (köv.héten lesz a max csoportfüggvénnyel, ma theta ALL alkérdéssel)
- 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 legyen kisebb)
 
Relációs algebra hányados kifejezése relációs algebrában és SQL-ben
Táblák és feladatok: szeret_tabla.txt    -- táblák létrehozása: create_szeret.txt
A szeret táblára vonatkozó relációs algebrai feladatait nézzük meg  SQL SELECT-tel!
Feladat: Kik azok, akik legalább azokat a gyümölcsöket szeretik, mint Micimackó?
1.mo. 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)
2.mo. Fejezzük ki először természetes nyelven:
          Kik azok, akik legalább azokat a gyümölcsöket szeretik, mint Micimackó =
          vagyis azok, akik minden olyan gyümölcsöt szeretnek, amit Micimackó =
          vagyis azok, akikhez nincs olyan gyümölcs, amit Micimackó szeret, de Ő nem,
          majd ezt is írjuk át SQL SELECT-re (két NOT EXISTS korrelált alkérdéssel)
3.mo. A fentiek kombinációja (például egy NOT EXISTS-en belül egy MINUS), stb.
-- Megoldások/ellenőrzésként: lásd itt
       

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