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
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
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