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], ...}];
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.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!
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