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.5. FROM záradék, összekapcsolások
   >> 1.6. Halmaz- és multihalmaz-műveletek
   >> 1.7. Alkérdések, korrelált alkérdések
   
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.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!
   
1.7. Alkérdések. Korrelált alkérdések.

1.7.1. FROM listán (SFW) sorváltozó
     
1.7.2. WHERE záradékban:
      (a) t IN (SFW)
      (b) t theta (SFW)   -- ahol theta az aritmetikai összehasonlítás jele
      (c) t theta ANY/ALL(SFW)
      (d) EXISTS (SFW)

 Az alábbi típusú alkérdések közül melyeknél használható (a), (b), (c) ill.(d)?
       1.) skalárértéket adó alkérdések
       2.) skalárértékekből álló halmazt illetve multihalmazt adó alkérdések
       3.) teljes, többdimenziós tábla
       4.) egy sort adó többdimenziós tábla
     
Segédanyag: >> Alkérdések I.  és Alkérdések II.  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ü)