~i 6.2. Több relációra vonatkozó lekérdezések

Hasonló dokumentumok
Lekérdezések az SQL-ben 2.rész

Nézetek és indexek. 8. fejezet Nézettáblák

Adatbázisok tavaszi félév Vizsgatételsor

3.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

. A SELECTzáradék megadja a feltételeknek megfelelo sorok azon attribútumait,

ABR ( Adatbázisrendszerek) 1. Előadás : Műveletek a relációs medellben

Relációs algebra 1.rész alapok

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések

Lekérdezések az SQL-ben 1.rész

Mveletek a relációs modellben. A felhasználónak szinte állandó jelleggel szüksége van az adatbázisban eltárolt adatok egy részére.

Lekérdezések az SQL-ben 1.rész

ABR ( Adatbázisrendszerek) 2. Előadás : Műveletek a relációs modellben

2.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

2.4. Egy algebrai lekérdezo nyelv

Adatbázisok elmélete 9. előadás

Relációs algebra lekérdezések optimalizációja. Adatbázisok használata

2.4. Egy algebrai lekérdező nyelv

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

5.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

5.3. Logika a relációkhoz

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Algebrai és logikai lekérdezo nyelvek

ADATBÁZIS-KEZELÉS. Relációalgebra, 5NF

Az SQL adatbázisnyelv: DML

Adatbázis rendszerek 7. Matematikai rendszer amely foglal magában:

Tankönyv példák kidolgozása

Adatbázis Rendszerek

Adatbázisrendszerek megvalósítása 2

Több táblára vonatkozó lekérdezések Relációs algebra és SQL SELECT

ADATBÁZISOK ELMÉLETE 5. ELŐADÁS 3/22. Az F formula: ahol A, B attribútumok, c érték (konstans), θ {<, >, =,,, } Példa:

Adatbázisok elmélete 9. előadás

7. Előadás tartalma A relációs adatmodell

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Adatbázis tartalmának módosítása

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

RELÁCIÓS ADATBÁZISSÉMÁK. Egyed-kapcsolat modellről átírás

Adatbázisok 1. Kósa Balázs gyakorlata alapján Készítette: Nagy Krisztián. 1. gyakorlat

4. Előadás Az SQL adatbázisnyelv

7. fejezet Kulcsok és idegen kulcsok

Adatbázisok elmélete 9. előadás

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Adatbázis rendszerek 2. előadás. Relációs algebra

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

Több tábla összekapcsolásán alapuló lekérdezések

WHERE záradék (további lehetıségek) SQL specialitások, nem írhatók át relációs algebrába: LIKE. NULL értékek. Az ismeretlen (unknown) igazságérték

Adatbázis rendszerek 2. előadás. Relációs algebra

Adatbázisok elmélete 8. előadás

4. előadás. Relációalgebra és relációkalkulusok. Adatbázisrendszerek előadás október 10.

Adatbázisok elmélete 12. előadás

BASH script programozás II. Vezérlési szerkezetek

Több tábla összekapcsolásán alapuló lekérdezések. Copyright 2004, Oracle. All rights reserved.

Az SQL lekérdeznyelv

Lekérdezések az SQL SELECT utasítással

ADATBÁZIS-KEZELÉS. Relációs modell

Relációs algebra 1.rész

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Relációs adatmodell. Adatbázisok használata

SQL DDL-2 (aktív elemek) triggerek

Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

Adatbázisok elmélete 11. előadás

7. Gyakorlat A relációs adatmodell műveleti része

Adatbázisok elmélete 6. előadás

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

KOVÁCS BÉLA, MATEMATIKA I.

7. előadás. Karbantartási anomáliák, 1NF, 2NF, 3NF, BCNF, 4NF, 5NF. Adatbázisrendszerek előadás november 7.

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP /1/A

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

A relációs algebra egy speciális algebra, amely néhány egyszerű, de hathatós. operandusok. Egy reláció megadható a nevével vagy közvetlenül, sorainak

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Funkcionális függések lekérdezések feldolgozása, kifejezésfák

1. előadás: Halmazelmélet, számfogalom, teljes

KOVÁCS BÉLA, MATEMATIKA I.

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

T Adatbázisok-adatmodellezés

7. előadás. Karbantartási anomáliák, 1NF, 2NF, 3NF, BCNF. Adatbázisrendszerek előadás november 3.

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Többtáblás lekérdezések megjelenítése

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Adatbázisok I. Jánosi-Rancz Katalin Tünde 327A 1-1

8. Előadás tartalma. Funkcionális függőségek

Marton József BME-TMIT. Adatbázisok VITMAB november 11.

4.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

. Vegyük az R U 8 uniót, használjunk a leíráshoz két szabályt és n különbözo

LOGISZTIKAI ADATBÁZIS RENDSZEREK UNIÓ, ALLEKÉRDEZÉSEK

Vezérlési szerkezetek

Chomsky-féle hierarchia

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

Bevezetés: Relációs adatmodell

Csima Judit október 24.

Relációs algebrai lekérdezések átírása SQL SELECT-re (példák)

Adatbázisok elmélete

Adatbázisrendszerek. Karbantartási anomáliák, 1NF, 2NF, 3NF, BCNF, 4NF, 5NF március 13.

Adatbázisok elmélete 12. előadás

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: március 20.

Adatbázisok elmélete

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

E/K diagram átalakítása relációs adatbázistervre

modell, amiben csak bináris sok-egy kapcsolatok (link, memberowner,

Átírás:

f " it.. li~, J. 'o,. 6.2. Több rejációra vonatkozó lekérdezések 273 6.1.5. feladat. Legyenek a és b egész szám típusú attribútumok, melyek NULL értéket is felvehetnek. Az alábbi feltételek mindegyikére (ilyenek fordulhatnak elo például a WHEREzáradékban) adjuk meg pontosan a feltételt kielégíto (a, b)-k halmazát, vegyük figyelembe azokat az eseteket is, amikor a és/vagy b NULL értéku. aj a = 10 ORb = 20 bj a = 10 ANDb = 20 ej a < 10 ORa >= 10! dj a = b! ej a <= b! 6.1.6. feladat. A 6.10. példában a SELECT* FROMFilmek WHERE hossz <= 120 OR hossz> 120; lekérdezéssei foglalkoztunk, amely a NULLhosszú filmek esetén ösztöneinkkel ellentétesen viselkedett. Keressünk egyszerubb, ezzel ekvivalens lekérdezést, amelynek WHEREzáradékában egyszeru feltétel áll (olyan feltétel, amelyben nincs sem ANDsem OR)., ~i 6.2. Több relációra vonatkozó lekérdezések A relációs algebra legfobb erossége az, hogy két vagy több relációt tud kombinálni összekapcsolásokon, szorzatokon, egyesítéseken, metszeteken és különbségeken keresztül. Ezen muveletek mindegyikét alkalmazhatjuk az SQL-ben. A halmazmuveletek - egyesítés, metszet és különbség - direkt módon jelenqek meg az SQL-ben, ahogy a 6.2.5. alfejezetben szemléltetni fogjuk. Eloször azonban vizsgáljuk meg, hogy a select-from-where utasítás milyen módon teszi lehetové szorzatok és összekapcsolások képzését. 6.2.1. Szorzat és összekapcsolás az SQL-ben Több reláció összekapcsolása nagyon egyszeruen valósítható meg az SQL-ben: fel kell sorolni az összes relációt a FROMzáradékban. Ezután a SELECTés WHERE záradékok a FROMzáradék minden relációjának mimjen attribútumát felhasználhatják.

274 6. Az SQL adatbázisnyelv 6.2. Több rejációra vonatkozó lekérdezések 275 6.12. példa. Tegyük fel, hogy szeretnénk megtudni a Csillagok háborúja címu filro producerének nevét. A következo két relációra van ehhez szükség: Filmek(filmcím, év, hossz, mufaj, stúdiónév, producerazon) Gyártáslrányító(név, cím, azonosító, nettóbevétel) A producer azonosító száma a Filmek relációban megtalálható, így ez a Filmek reláción végrehajtott egyszeru lekérdezéssei megszerezheto. Ezután egy második, a GyártásIrányító reláción végrehajtott lekérdezésseimegtaláljuk a producerazonosítóhoz tartozó személy nevét. Ezt a két lépést összevonhatjuk egyetlen lekérdezésbe, mely a Filmekés a GyártásIrányító relációkra vonatkozik: SELECT név FROM Filmek, GyártásIrányító WHERE Filmek.filmcím = 'Csillagok háborúja' AND producerazon = azonosító; Ez a lekérdezés az összes Filmekés GyártásIrányítósorpárt megvizsgálja, és ezekre ellenorzi a WHERE feltételt: 1. A Filmek reláció sorának filmcím attribútuma 'Csillagok háborúja' értéku kell legyen. 2. A Filmek sor producerazon attribútumának ugyanaz kell legyen az értéke, mint a GyártásIrányító sor azonosító attribútumának, azaz a két sor ugyanarra a gyártásirányítóra vonatkozik. Valahányszor találunk egy sorpárt, amely mindkét feltételnek eleget tesz, a GyártásIrányító sor név attribútumértéke belekerül az eredménybe. Mindkét feltétel csak az általunk kívánt adatok esetén teljesül, nevezetesen amikor a Filmek közüléppena Csillagokháborújasort, a Gyártáslrányító-k közülpedig George Lucas sorát vizsgáljuk. Ekkor és csakis ekkor lesz a filmcím megfelelo és az azonosítók(producerazon és azonosító)megegyezok. Így George Lucas lesz az egyetlen válasz a lekérdezésre. Ezt a folyamatot a 6.3. ábra mutatja. A?~:4. ~fejezetben írjuk le részletesebben, hogyan is interpretáljuk a több relaciora hivatkozó lekérdezéseket. O filmcím producerazon név azonosító Ez a "Csillagok háborúja"? Filmek Egyenlok? GyártásIrányító Ha igen, akkor ez a válasz. 6.3. ábra. A 6.12. példa lekérdezése a Filmek reláció minden sorát párosítja a GyártásIrányítóösszes sorával, és ellenorzi a két feltétel teljesülését 6.13. példa. Tekintsük a következokét relációt: FilmSzínészCnév, cím, nem, születésidátum) GyártáslrányítóCnév, cím, azonosító, nettóbevétel) Mindkettoben szerepelnek a név és cím attribútumok. Tételezzük fel, hogy olyan filmszínész-gyártásirányító párosokat keresünk, akiknek azonos a lakcímük. A megfelelo lekérdezés a következo: SELECT FilmSzínész.név, Gyártáslrányító.név FROM FilmSzínész, GyártásIrányító WHERE FilmSzínész.cím = Gyártáslrányító.cím; Ebben a lekérdezésbenolyan FilmSzínés~ és GyártásIrányító sorpárokat keresünk, melyekbena cím attribútumérték megegyezik.a WHEREzáradék fejeziki a cím attribútumokra vonatkozó feltételt. Mindegyik olyan sorpár esetén, amely megfelel a feltételnek, mindkét név attribútumot hozzáadjuk az eredményhez. Így az eredményben olyan névpárok lesznek, mint: 6.2.2. Attribútumok megkülönböztetése ~lofordulhatnak olyan lekérdezések, amelyekben két vagy több reláció szerepel, es ezekben a relációkban két vagy több attribútumnak ugyanaz a neve. Ilyen ese~ben amikor ak" valamilyen.. módon jeleznünk kell, hogy melyik attribútumról van szó, h ozosnév szerepel a lekérdezésben. A problémát az SQL ugy ' old Ja ' meg, elott. Ngyr:regengedi egy relációnévnek és egy pontnak a használatát egy attribútum IgY R A " N. ' '. az R relácio A nevu attn b utum át Jelk epezl. '. O FilmSzínész. név GyártásIrányító. név Jane Fonda I Ted Turner

276 6. Az SQL adatbázísnyelv 6.2. Több rejációra vonatkozó lekérdezések 277 A relációnevet és a pontot olyan esetben is az attribútum elé írhatjuk, amikor nincs névazonosságból származó kétértelmuség. Például a 6.12. példa lekérdezését így is írhatnánk: SELECT Gyártáslrányító.név FROM Filmek, GyártásIrányító WHERE Filmek.filmcím = 'Csillagok háborúja' AND Filmek.producerAzon = Gyártáslrányító.azonosító; A relációnév és pont kombinációt a lekérdezésben szereplo bármely attribútumra alkalmazhatjuk. Sorváltozók és relációnevek Gyakorlatilaga SELECTésWHEREzáradékokban az attribútumokra mindig ú.$yutalunk, mint egy sorváltozó komponenseire. Viszont ha egy reláció -csak egyszer szerepel a FROMzáradékban, akkor a relációnevet használhatjuk mint sorváltozót. Így a FROMzáradékbeli R relációnevet tekinthetjük úgy, mint egy rövidítést az R AS R helyett. Továbbá, ahogy már láttuk, ha egy attribútum egyértelmuen egy relációhoz tartozik, akkor a reláció (sorváltozóként használt) neve elhagyható. A relációnév elotagként történo alkalmazása jó megoldás az attribútumok névütközésének elkerülésére addig, amíg több különbözo reláció szerepel a lekérdezésben. Néha azonban olyan lekérdezésre van szükségünk, amely ugyanazon reláció két vagy több sorát kombinálja össze. Az R relációt annyiszor sorolhatjuk fel a FROMzáradékban, ahányszor szükségünk van rá, de valamilyen módon meg kell tudnunk különböztetni az elofordulásait. Az SQL-ben lehetoségünk van arra, hogy a FROMzáradékban R minden elofordulásához hozzárendeljünk egy másodnevet, melyet sorváltozónak is nevezünk. A FROMzáradékban R minden elofordulása után következhet az AS kulcsszó és a sorváltozó neve; az AS kulcsszó általában elhagyható. R attribútumait a SELECTés WHEREzáradékokban megkülönböztethetjük egy elotag segítségével, mely a megfelelo sorváltozóból és egy pontból áll. Tehát a sorváltozó az R reláció másodneveként szerepel, ésbárhol használható az R helyett. 6.14. példa. Míg a 6.13. példában olyan filmszínészeket és gyártásirányítókat kerestünk, akiknek azonos a lakcímük, hasonlóképpen kereshetünk olyan színészpárokat is, akiknek megegyezik a lakcímük. A lekérdezés lényegében ugyanaz, de most a FilmSzínész reláció két sorát kell párosítani, és nem a FilmSzínész reláció egy sorát a GyártásIrányítóreláció egy sorával. A FilmSzínész reláció két elofordulására sorváltozókat használunk másodnévként, így a lekérdezés alakja a következo lesz; 6.2.3. Sorváltozók A WHERE záradék második feltétele, Színészi. név < Színész2. név, azt fejezi ki, hogy az elso színész neve ábécérendben megelozi a második színész nevét. Ha ezt a feltételt elhagynánk, akkor Színészi és Színész2 vonatkozhatnának ugyanarra a sorra. Ebben az esetben azt találnánk, hogy a két sorban a címek természetesen megegyeznek, tehát az eredménybe belekerülne minden színész neve önmagával párosítva.3 A második feltétel azt is kikényszeríti, hogy az eredményben minden közös lakcímu színészpár csak egyszer szerepeljen, ábécérendben. Ha a <> (nem egyenlo) jelet használnánk összehasonlítási operátorként, akkor az eredmény minden színész házaspárt kétszer tartalmazna, például: o Színészi. név I Színész2. név Paul Newman Joanne Wood'Ward Joanne Wood'Ward Paul Newman 6.2.4. Lekérdezések értelmezése Az elozoekben bemutatott select-from-,:"here kifejezések értelmezésére számos lehetoség van. Ezek az értelmezések mind egyenériékuek abban az értelemben, hogy ugyanazt a választ eredményezik, ha ugyanarra az adatbázis-elofordulásra alkalmazzuk ugyanazt a lekérdezést. Vizsgáljuk meg oket sorban! SELECT Színészi. név, Színész2.név FROM FilmSzínész AS Színészi, FilmSzínész AS Színész2 WHERE Színészi. cím = Színész2.cím AND Színészi. név < Színész2.név; A FROM záradékban a Színészi és Színész2 sorváltozókat használjuk a FilmSzínész reláció másodneveiként. A SELECT záradékban a sorváltozók segítségével különböztetjük meg a két sor azonos komponenseit. A másodneveket a WHERE záradékban is használjuk annak kifejezésére, hogy a két (Színészi- és Színész2-beli) FilmSzínész sor cím attribútumának ugyanaz az értéke. Beágyazott ciklusok A példákban eddig a sorváltozók szemantikáját alkalmaztuk. Idézzük fel, hogy egy reláció másodneve egy sorváltozó, amely a relációhoz tartozó összes sor értékét felveszi. Egy másodnév nélküli relációnév értelmezheto saját másodneveként, amint azt a,,sorváltozók és relációnevek" bekeretezett részben említettük. 3 Ugyanaz a probléma elofordulhat a 6.13. példában is, ha egy személy filmszínész és gyártásirányító is. A problémát hasonlóan tudjuk megoldani, ha feltételként szabjuk, hogy a két név legyen különbözo.

278 6. Az 8QL adatbázisnyelv 6.2. Több relációra vonatkozó lekérdezések 27~ Ha több sorváltozónk van, mindegyikhez rendelhetünk egy-egy ciklust, melyben a változó végigmegy a neki megfelelo reláció összes során. A ciklusok egymásba vannak ágyazva. A sorváltozók mindegyik értékadásakor leellenorizzük, hogy a WHEREfeltétel igaz-e vagy sem. Ha igaz, akkor a SELECTzáradékbeli komponenseknek megfelelo értékekbol összeállított sort az eredménybe illesztjük. A lekérdezést feldolgozó algoritmust a 6.4. ábra érzékelteti. Legyenek a FROM záradékban megadott relációk RI, R2,..., Rn; FOR ti sorra az RI relációban DO FOR t2 sorra az R2 relációban DO Párhuzamos FORtnsorra az Rn relációban DO IF a where záradék igaz, amikor az attribútumokban ti, t2,..., tn megfelelö értékei találhatóak THEN t1,t2,'",tn-nek megfeleloen kiértékeljük a select záradék attribútumait és az értékekbol alkotott sort az eredményhez adjuk 6.4. ábra. Egy egyszeru SQL-Iekérdezés kiértékelése értékadás Ebben az esetben nem kell explicit módon beágyazott ciklusokat létrehozni..ehelyett tekintsük tetszoleges sorrendben vagy párhuzamosan a sorváitozók összes lehetséges értékadását a megfelelo relációkból. Minden egyes értékadásra megvizsgáljuk, hogy a WHEREfeltétel igaz-eo Minden egyes olyan értékadás, amelyre a WHEREigaz, egy sort ad a válaszhoz. A válaszbeli sorok a SELECT záradék attribútumaiból épülnek fel, az aktuális értékadásnak megfeleloen. Konverzió a relációs algebrába Egy harmadik megközelítés az SQL-Iekérdezést a relációs algebrával kötj össze. A FROM záradék sorváltozóiból indulunk ki, és tekintjük a hozzájuk tartozó relációk Descartes-szorzatát. Ha két változó ugyanarra a relációra vonatkozik, akkor a reláció kétszer szerepel a szorzatban, és az attribútumait átnevezzük úgy, hogy minden attribútumnak egyedi neve legyen. Hasonlóan, a különbözo arelációkban kétértelmuséget. szereplo azonos attribútumneveket is átnevezzük, hogy elkerüljük A WHEREzáradékot átalakít juk egy kiválasztási feltétellé, amelyet alkalmazunk az elkészített szorzatra. A WHEREzáradékbeli mindegyik attribútumutalást kicseréljük arra a szorzat beli attribútumra, amelynek megfelel. Végül a SELECT záradék alapján létrehozzuk a kifejezések listáját, a záró (kiterjesztett) vetítési muvelet számára. Mint ahogyan a WHEREzáradéknál is tettük, a SELECT Az SQL-szemantika egy meglepo következménye Tételezzük fel, hogy R, 8 és T unáris (egyoszlopos) relációk, és mindegyik egyedüli attribútuma az A. Szeretnénk megkeresni azokat az elemeket, amelyek az R-ben és vagy az 8-ben, vagy a T-ben (vagy mindkettoben) megtalálhatók. Tehát az R n (8 U T) halmazt szeretnénk meghatározni. Azt hihetnénk, hogy a következo lekérdezés a megfelelo választ eredményezi: SELECT R.A FROMR, S, T WHERER.A = S.A OR R.A = T.A; Vizsgáljuk meg azt a speciális esetet, amikor T üres. Mivel az R.A = T.A egyenloség nem teljesülhet, az "OR" muvelettel kapcsolatos ismereteink alapján azt várnánk, hogy az eredmény R n 8 legyen. Mégis, a 6.2.4. alfejezet három értelmezése közül bármelyiket is választjuk ki, a lekérdezés eredménye az üres halmaz lesz, függetlenül attól, hogy R-nek és 8-nek hány közös eleme van. Ha a 6.4. ábrán bemutatott beágyazott ciklus szemantikát használjuk, észreveheto, hogya T változó ciklusa O hosszúságú, mivel annak a relációnak, mely fölött a T változik, nincs egy sora sem. Így a legbelso ciklusbeli if utasítás egyszer sem kerül végrehajtásra, tehát az eredmény üres lesz. Hasonlóképpen, ha a sorváltozók lehetséges értékadásait tekintjük, kiderül, hogy a T változóhoz nem rendelheto érték, tehát nincs egy lehetoség sem a sorváltozók érték-hozzárendelésére. Végül, ha a Descartes-szorzatos megközelítést alkalmazzuk, akkor akiindulópontunk az R x 8 x T szorzat, amely üres, mivel T is üres. záradékban minden attribútumot kicserélünk a szorzat neki megfelelo attribútumára. 6.15. példa. Írjuk át a 6.14. példát relációs algebrára. Eloször is a FROMzáradékban két sorváltozó van, mindketto a FilmSzínész relációra vonatkozik Ezért az algebrai kifejezés így kezdodik: FilmSzínész x FilmSzínész Az eredményrelációnak nyolc attribútuma van, az elso négy a FilmSzínés:;; reláció elso másolatának név, cím, nem és születésidátum attribútumainal felel meg, a következo négy pedig a FilmSzínész reláció második másolatánal ugyanazon attribútumainak. Az attribútumokat jelölhetnénk a sorváltozóval é: egy ponttal - például Színészi. nem ~, de a tömörség kedvéért nevezzük á' az attribútumokat Al, A2,..., As-nak. Így Al megfelel Színészl.név-nek, A~ pedig Színész2.név-nek és így tovább.

280 6. Az SQL adatbázisnyelv 6.2. Több relációra vonatkozó lekérdezések 281 Ezzel az attribútumátnevezési stratégiával a WHEREzáradék kiválasztási feltétele így alakul: A2 = A6 és Al < A5' A vetítési lista Ab A5' Így a következo kifejezés adja meg a lekérdezésnek megfelelo algebrai kifejezést: o 1rAl,A5 (CTA2=A6 AND Al <A5 (pm(al,a2,a3,a4) (FilmSzínész) x PN(A5,A6,A7,As) (FilmSzínész ))) 6.2.5. Egyesítés, metszet és különbség az SQL-ben Néha a relációs algebra halmazmuveleteit: az egyesítést, a metszetet és a különbséget kell használnunk relációk kombinálására. Az SQL biztosítja a megfelelo operátorokat, amelyeket lekérdezések eredményeire lehet alkalmazni, feltéve, hogy a lekérdezések ugyanolyan attribútumhalmazú (megegyezo nevu és típusú attribútumhalmazok) relációkat eredményeznek. Au, n és - muveleteknek megfelelo kulcsszavak: UNION,INTERSECTés EXCEPT.Ezeket a kulcsszavakat két zárójel közé írt lekérdezés közé kell helyezni. 6.16. példa. Tételezzük fel, hogy azokat a színésznoket keressük, akik gyártásirányítók is, 10 000 000 $ feletti nettó bevétellel. A következo két relációra van szükségünk: FilmSzínész(név, cím, nem, születésidátum) GyártásIrányító(név, cím, azonosító, nettóbevétel) A lekérdezést a 6.5. ábra mutatja be. Az 1-3. sorok egy olyan relációt eredményeznek, melynek sémája (név, tartalmazzák. cím), és sorai a színésznok nevét és címét 1) (SELECT név, cím 2) FROMFilmSzínész 3) WHERE nem = 'N') 4) INTERSECT 5) (SELECT név, cím 6) FROMGyártásIrányító 7) WHEREnettóBevétel > 10000000); 6.5. ábra. Színésznok és gazdag gyártásirányítók metszete Hasonlóképpen, az 5-7. sorok a "gazdag" gyártásirányítókat eredményezik, akiknek nettó bevétele meghaladja a 10 000 000 $-t. Ez a lekérdezés szintén egy olyan relációt eredményez, melynek sémája csak a név és cím attribútumokból áll. Mivel a két relációséma megegyezik, alkalmazhatjuk rá a metszet muveletet, melyet a 4. sor ad meg. D SQL-Iekérdezések olvashatósága Általában az SQL-Iekérdezéseket úgy írjuk, hogy az olyan fontos kulcsszavak/ mint a FROMvagy WHEREúj sorban kezdodjenek. Ez a stílus sokkal jobban láthatóvá teszi a lekérdezés struktúráját. Egy rövid lekérdezést azonban egy sorba is írhatunk, mint ahogy a 6.17. példában tettük. A lekérdezés tömörségét megtartva, ez a stílus is jó olvashatóságot biztosít. 6.17. példa. Hasonló módon meghatározhatjuk a két személyhalmaz különbségét. A következo lekérdezés: (SELECTnév, EXCEPT cím FROMFilmSzínész) (SELECT név, cím FROMGyártásIrányító); azon színészek nevét és címét adja meg, akik nem gyártásirányítók, a nemtol és a nettó bevételtol. O függetlenül A fenti két példában a két halmaz attribútumai szerencsére megegyeztek. Szükség esetén azonban - amint a 6.3. példában láttuk - átnevezhetjük az attribútumokat, hogy azonos attribútumhalmazokat kapjunk. 6.18. példa. Keressük meg azon filmcímeket és éveket, amelyek a Filmek vagy a SzerepelBenne relációkban megtalálhatók: Filmek(filmcím, év, hossz, mufaj, stúdiónév, producerazon) SzerepelBenne(filmCím, filmév, színésznév) Ideális esetben a két relációban megt~lálható filmhalmazoknak meg kellene egyezniük. Gyakorlatilag azonban könnyen megtörténhet, hogy van olyan film, amelyhez nincsenek felsorolva a benne szereplo színészek vagy olyan SzerepelBenne sor is létezhet, amelynek megfelelo sor nincs a film relációban4. Így a lekérdezés: (SELECT filmcím, év FROM Filmek) UNION (SELECT filmcím AS filmcím, filmév AS év FROM SzerepelBenne); Az er,edményreláció attribútumai: filmcím és év, azokat a filmeket fogja tartalmazni, amelyek legalább az egyik relációban szerepelnek. O 4 Léteznek módszerek az ilyen eltérések megakadályozására, lásd a 7.1.1. alfejezetben.