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

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

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

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

Tankönyv példák kidolgozása

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 2.rész

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

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

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

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

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

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

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

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

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

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

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

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

Az SQL adatbázisnyelv: DML

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

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

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

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

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

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Lekérdezések az SQL SELECT utasítással. Copyright 2004, Oracle. All rights reserved.

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

Adatbázis tartalmának módosítása. SQL DML utasítások

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

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

Relációs algebra 2.rész példák

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

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

SQL DDL-1: táblák és megszorítások

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

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

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

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

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

Feladatok A mai előadáson: Tankönyv -- Termékek feladatai:

SQL DDL-2 (aktív elemek) triggerek

SELECT. SELECT(projekció) FROM(forrás) WHERE(szűrés) GROUPBY(csoportosítás) HAVING(csoportok szűrése) ORDERBY(rendezés)

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

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

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

Bevezetés: az SQL-be

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

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 I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Relációs algebra 1.rész

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

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

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

Adatok szűrése, rendezése

Adabáziskezelés gyakorlat SQL

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

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

Adatbázis tartalmának módosítása (DML), az adatbázis-kezelı rendszerek felépítése,

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

SQL DDL: Táblák, megszorítások (constraints), triggerek, nézettáblák

Az SQL lekérdeznyelv

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

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

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

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

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

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

SQL parancsok feldolgozása

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

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Bevezetés: Relációs adatmodell

Megszorítások. AB1_06A_Megszorítások - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Adatbázis Rendszerek

Adatbázisrendszerek megvalósítása 2

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Adatbázisok elmélete

5.3. Logika a relációkhoz

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

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

Az SQL*Plus használata

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

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

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

Adatbázisok* tulajdonságai

Bevezetés: Relációs adatmodell

Információs rendszerek Adatbázis-kezelés

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

ADATBÁZISOK I. ELŐADÁS ÉS GYAKORLAT JEGYZET

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

Bevezetés: Relációs adatmodell

Databases 1. Relációs algebra és nemrekurzív Datalog

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Az SQL nyelv. SQL (Structured Query Language = Strukturált Lekérdező Nyelv).

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Tervezés: Egyed-kapcsolat modell és az SQL DDL: táblák, nézetek

A SELECT működése. Ttanar tábla: Tdiak tábla:

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Átírás:

3.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK) http://sila.hajas.elte.hu/ SQL SELECT - FROM WHERE Alkérdések - Összekapcsolások Tankönyv: 6.3. Alkérdések WHERE záradékban Alkérdések FROM záradékban Összekapcsolások az SQL-ben Külső összekapcsolások Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 1

(2EA) ismétlés: Select-From-Where (SFW) Gyakran előforduló relációs algebrai kifejezés Π Lista ( σ Felt (R 1 x x R n )) típusú kifejezések Szorzat és összekapcsolás az SQL-ben SELECT s-lista -- milyen típusú sort szeretnénk az eredményben látni? FROM f-lista -- relációk (táblák) összekapcsolása, illetve szorzata WHERE felt -- milyen feltételeknek eleget tevő sorokat kell kiválasztani? FROM f-lista elemei (ezek ismétlődhetnek) táblanév [[AS] sorváltozó, ] Itt: a from lista elemei a táblák direkt szorzatát jelenti, az összekapcsolási feltételt where-ben adjuk meg, később bevezetünk majd tovább lehetőségeket a különböző összekapcsolásokra az SQL from záradékában. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 2

(2EA) ismétlés: SFW alapértelmezése Tk.6.2.fej.: 2.EA: Több táblára vonatkozó lekérdezések: SELECT [DISTINCT] kif 1 [[AS] onév 1 ],, kif n [[AS] onév n ] FROM R 1 [t 1 ],, R n [t n ] WHERE feltétel (vagyis logikai kifejezés) Alapértelmezés (a műveletek szemantikája -- általában) A FROM záradékban levő relációkhoz tekintünk egy-egy sorváltozót, amelyek a megfelelő reláció minden sorát bejárják (beágyazott ciklusban) Minden egyes aktuális sorhoz kiértékeljük a WHERE záradékot (csak az igaz sorok kerülnek az eredménybe) A SELECT záradékban szereplő kifejezéseknek megfelelően képezzük a sorokat. Ha van DISTINCT, akkor az ismétlődő sorokat elhagyjuk. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 3

(2EA) ismétlés: Halmazműveletek az SQL-ben A relációs algebrai halmazműveletek: unió, különbség és metszet, ebből csak az unió és különbség alapművelet, az SQL-ben mindhárom használható, implementálva van A SELECT-FROM-WHERE utasítások általában multihalmaz szemantikát használnak, külön kell kérni DISTINCT-tel ha halmazt szeretnénk kapni, viszont a halmazműveleteknél mégis a halmaz szemantika az érvényes, itt a multihalmaz szemantikát kell kérni: ALL Az SQL-ben a halmazműveleteket úgy vezették be, hogy azt mindig két lekérdezés között lehet értelmezni: (SFW-lekérdezés1) [ UNION [ALL] INTERSECT [ALL] {EXCEPT MINUS} [ALL] ] (SFW-lekérdezés2); Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 4

Alkérdések Zárójelezett SFW SELECT-FROM-WHERE utasításokat (alkérdéseket) is használhatunk a WHERE záradékban, HAVING záradékban (később lesz) és a FROM listán is. Szintaktikus alakja: zárójelbe kell tenni a lekérdezést Hol használható? Ott, ahol relációnevet használunk: (1) WHERE záradékban: kifejezésekben, feltételekben (2) FROM listában: új listaelem (rel.név változó SQL-ben) (lekérdezés) [AS] sorváltozó Ez felel meg annak, ahogyan a relációs algebrában tetsz.helyen használhattuk a lekérdezés eredményét. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 5

Alkérdések a WHERE záradékban WHERE záradékban: (i) Az alkérdés eredménye egyetlen skalárérték, vagyis az alkérdés olyan, mint a konstans, ami egy új elemi kifejezésként tetszőleges kifejezésben használható. (ii) Skalár értékekből álló multihalmaz logikai kifejezésekben használható: [NOT] EXISTS (lekérdezés) kifejezés [NOT] IN (lekérdezés) kifejezés [ANY ALL] (lekérdezés) (iii) Teljes, többdimenziós tábla a visszatérő érték: [NOT] EXISTS (lekérdezés) (kif 1, kif n ) [NOT] IN (lekérdezés) Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 6

Alkérdések a WHERE záradékban Milyen változók szerepelhetnek egy alkérdésben? Lokális saját változói a saját FROM listáról Külső kérdés változói: ekkor az alkérdés korrelált. Szemantikája Ha az alkérdés nem korrelált, önállóan kiértékelhető és ez az eredmény a külső kérdés közben nem változik, a külső kérdés szempontjából ez egy konstanstábla, akkor a kiértékelés mindig a legbelsőből halad kifelé. Korrelált alkérdés, amely többször kerül kiértékelésre, minden egyes kiértékelés megfelel egy olyan értékadásnak, amely az alkérdésen kívüli sorváltozóból származik (ezt később, példákon keresztül mutatjuk be) Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 7

Skalár értéket visszaadó alkérdések Ha egy alkérdés biztosan egy attribútumon egy sort ad vissza eredményként (egyelemű), akkor úgy használható, mint egy konstans érték. az eredmény sornak egyetlen oszlopa van. Futásidejű hiba keletkezik, ha az eredmény nem tartalmaz sort, vagy több sort tartalmaz. Példa: Felszolgál(söröző, sör, ár) táblában keressük meg azokat a sörözőket, ahol a Miller ugyanannyiba kerül, mint Joe-bárjában a Bud. Két lekérdezésre biztos szükségünk lesz: 1. Mennyit kér Joe a Budért? 2. Melyik kocsmákban adják ugyanennyiért a Millert? Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 8

Skalár értéket visszaadó alkérdések Példa: Felszolgál(söröző, sör, ár) táblában keressük meg azokat a sörözőket, ahol a Miller ugyanannyiba kerül, mint Joe bárjában a Bud. SELECT söröző FROM Felszolgál WHERE sör = Miller AND Ennyit kér Joe a Budért. ár = (SELECT ár FROM Felszolgál WHERE söröző = Joe s bar AND sör = Bud ); Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 9

Tk.példa: Skalár értéket adó alkérdések Csillagok háborúja film gyártásirányítója: SELECT név FROM GyártásIrányító WHERE azonosító = (SELECT producerazon ); FROM Filmek WHERE cím = 'Csillagok háborúja Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 10

Skalár értékekből álló multihalmazt visszaadó alkérdések: ANY művelet x = ANY(alkérdés) akkor és csak akkor igaz, ha x egyenlő az alkérdés legalább egy sorával. = helyett bármilyen aritmetikai összehasonlítás szerepelhet. Példa: x > ANY(alkérdés) akkor igaz, ha x nem az alkérdés legkisebb elemével azonos. Itt az alkérdés sorai egy mezőből állnak. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 11

Skalár értékekből álló multihalmazt visszaadó alkérdések: ALL művelet x <> ALL(alkérdés) akkor és csak akkor igaz, ha x az alkérdés egyetlen sorával sem egyezik meg. <> helyett tetszőleges összehasonlítás szerepelhet. Példa: x >= ALL(alkérdés) x az alkérdés eredményének maximum értékével azonos. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 12

SELECT sör Példa: ALL FROM Felszolgál WHERE ár >= ALL( SELECT ár FROM Felszolgál); A külső lekérdezés Felszolgáljának söre egyetlen alkérdésbeli sörnél sem lehet olcsóbb. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 13

Az IN művelet a WHERE záradékban sor IN (alkérdés) akkor és csak akkor igaz, ha a sor eleme az alkérdés eredményének (itt a sor egy sor/tuple, nem sör) Tagadás: sor NOT IN (alkérdés). Az IN-kifejezések a WHERE záradékban jelenhetnek meg Példa: SELECT * FROM Sörök WHERE név IN (SELECT sör A sörök, melyeket Fred szeret. FROM Szeret WHERE név = Fred ); Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 14

Tk.példa: Sorokat tartalmazó feltételek Harrison Ford filmjeinek gyártásirányítója: SELECT név FROM GyártásIrányító WHERE azonosító IN (SELECT producerazon FROM Filmek WHERE (cím, év) IN (SELECT filmcím, filmév FROM SzerepelBenne WHERE színész = 'Harrison Ford ) ); Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 15

Mi a különbség? SELECT a FROM R, S WHERE R.b = S.b; SELECT a FROM R WHERE b IN (SELECT b FROM S); Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 16

IN az R soraira vonatkozó predikátum SELECT a FROM R WHERE b IN (SELECT b FROM S); Egy ciklus R sorai fölött. a b 1 2 3 4 R b c 2 5 2 6 S (1,2) kielégíti a feltételt; 1 egyszer jelenik meg az eredményben. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 17

Itt R és S sorait párosítjuk SELECT a FROM R, S WHERE R.b = S.b; Dupla ciklus R és S sorai fölött a b 1 2 3 4 R b c 2 5 2 6 S (1,2) és (2,5) (1,2) és (2,6) is kielégíti a feltételt; 1 kétszer kerül be az eredménybe. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 18

Az EXISTS művelet a WHERE-ben EXISTS (alkérdés) akkor és csak akkor igaz, ha az alkérdés eredménye nem üres. Tagadása: NOT EXISTS (alkérdés) Példa: A Sörök(név, gyártó) táblában keressük meg azokat a söröket, amelyeken kívül a gyártójuk nem gyárt másikat. Ez korrelált alkérdés, többször kerül kiértékelésre, a külső tábla minden sorára kiértékeljük az alkérdést. A korrelált lekérdezések használata közben figyelembe kell vennünk a nevek érvényességi körére vonatkozó szabályokat. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 19

SELECT név Azon b1 sörtől különböző sörök, melyeknek ugyanaz a gyártója. FROM Sörök b1 WHERE NOT EXISTS (SELECT * FROM Sörök Példa: EXISTS WHERE gyártó = b1.gyártó AND név <> b1.név); Változók láthatósága: itt a gyártó a legközelebbi beágyazott FROM-beli Táblából való, aminek van ilyen attribútuma. A nem egyenlő művelet SQL-ben. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 20

Tk.példa: Korrelált alkérdés A több, mint egyszer előforduló filmcímek megkeresése: SELECT DISTINCT cím FROM Filmek AS Régi WHERE év < ANY (SELECT év FROM Filmek WHERE cím = Régi.cím ); Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 21

Alkérdések használata FROM listán FROM záradékban a tényleges relációk helyett alkérdéssel létrehozott ideiglenes táblát is megadhatunk. Ilyenkor a legtöbb esetben meg kell adnunk a sorváltozó nevét, egy másodnevet ezzel tudunk a soraira hivatkozni. Szintaktikus alakja: (lekérdezés) [AS] sorváltozó Ez felel meg annak, ahogyan a relációs algebrában tetsz.helyen használhattuk a lekérdezés eredményét. Szemantikája: A FROM záradékban kiértékelődik az alkérdés, utána a sorváltozót ugyanúgy használjuk, mint a közönséges adatbázis relációkat. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 22

Alkérdések használata FROM listán Példa: Keressük meg a Joe s bár vendégei által kedvelt söröket (a feladatnak sok megoldása van) SELECT sör FROM Kedvel, (SELECT név FROM Látogat WHERE bár = Joe s bar )JD WHERE Szeret.név = JD.név; Sörivók, akik látogatják Joe s bárját. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 23

Összekapcsolások a FROM listán Az SQL-ben összekapcsolások számos változata megtalálható: Természetes összekapcsolás USING utasítással történő összekapcsolás Teljes (vagy két oldali) külső összekapcsolás Tetszőleges feltételen alapuló külső összekapcsolás Direktszorzat (kereszt-összekapcsolás). 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)] [{LEFT RIGHT FULL} OUTER JOIN tábla2 ON (tábla1.oszlopnév = tábla2.oszlopnév)] [CROSS JOIN tábla2] Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 24

Példa: Többtáblás lekérdezések EMPLOYEES DEPARTMENTS Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 25

Természetes összekapcsolás A NATURAL JOIN utasítás a benne szereplő két tábla azonos nevű oszlopain alapul. A két tábla azon sorait eredményezi, ahol az azonos nevű oszlopokban szereplő értékek megegyeznek. Ha az azonos nevű oszlopok adattípusa eltérő, akkor hibával tér vissza az utasítás. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 26

Példa a természetes összekapcsolásra SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ; A WHERE használható további megszorítások megfogalmazására. Például, ha csak a 20-as illetve 50-es department_id-kra vagyunk kíváncsiak, akkor: SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations WHERE department_id IN (20, 50); Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 27

Összekapcsolás USING kulcsszóval Ha több oszlopnak azonos a neve, de az adattípusa eltérő, akkor a USING segítségével megadható, hogy mely oszlopokat lehet használni az egyenlőségen alapuló összekapcsoláshoz. Használjunk USING-ot, ha csak egy oszlop egyezik meg. Ne használjuk a tábla eredeti vagy alias nevét a kiválasztott oszlopok megadásánál. A NATURAL JOIN és a USING kulcsszavak együttes használata nem megengedett. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 28

Oszlopnevek összekapcsolása EMPLOYEES DEPARTMENTS Foreign key Primary key Az osztályok dolgozóinak meghatározásához a Departments tábla és az Employees tábla DEPARTMENT_ID oszlopaikban szereplő értékeinek összehasonlítása kell. Ez egy egyenlőségen alapuló összekapcsolás lesz. Az ilyen típusú összekapcsolásban általában az elsődleges- és az idegen kulcs komponensei szerepelnek.

A USING kulcsszó használata lekérdezésben SELECT employees.employee_id, employees.last_name, departments.location_id, department_id FROM employees JOIN departments USING (department_id) ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 30

Azonos nevű oszlopok megkülönböztetése Használjuk a táblaneveket előtagként az azonos nevű oszlopok megkülönböztetésére A előtagok használata javítja a hatékonyságot is. Használhatunk alias neveket az olyan oszlopokra, amelyeket megkülönböztetünk a többi táblában lévő azonos nevű társaiktól. Ne használjunk alias nevet azon oszlopokra, amelyeket a USING kulcsszó után adtunk meg és az SQL utasításban még más helyen is szerepelnek. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 31

Sorváltozók használata tábláknál A lekérdezések átláthatósága miatt használhatunk sorváltozót (tábla alias neveket). A sorváltozók használata javítja a lekérdezés teljesítményét. A sorváltozók maximum 30 karakter hosszúak lehetnek (minél rövidebb annál jobb) A sorváltozók csak az aktuális SELECT utasítás során lesznek használhatóak! Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 32

Összekapcsolások az ON kulcsszó segítségével A természetes összekapcsolás alapvetően az azonos nevű oszlopok egyenlőségvizsgálatán alapuló összekapcsolása volt. Az ON kulcsszót használhatjuk az összekapcsolás tetszőleges feltételének vagy oszlopainak megadására. Az összekapcsolási feltétel független a többi keresési feltételtől. Az ON használata áttekinthetőbbé teszi a kódot Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 33

Lekérdezés az ON kulcsszó használatával SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id); Az ON segítségével különböző nevű oszlopok is összekapcsolhatóak Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 34

Önmagával való összekapcsolás (self-join) az ON kulcsszóval 1. EMPLOYEES (WORKER) EMPLOYEES (MANAGER) A WORKER tábla Manager_ID mezője megfelel a MANAGER tábla A EMPLOYEE_ID mezőjével Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 35

Önmagával való összekapcsolás (self-join) az ON kulcsszóval 2 SELECT e.last_name emp, m.last_name mgr FROM employees e JOIN employees m ON (e.manager_id = m.employee_id); Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 36

További feltételek megadása egy összekapcsoláshoz SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) AND e.manager_id = 149 ; Ugyanezt érhetjük el a WHERE feltétellel is, azaz: SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) WHERE e.manager_id = 149; Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 37

Három-utas összekapcsolás ON segítségével SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id; Három tábla összekapcsolását nevezzük három-utas összekapcsolásnak Az SQL 1999-es szintaxis szerint az ilyen összekapcsolások balról jobbra haladva hajtódnak végre (DEPARTMENTS EMPLOYEES) LOCATION Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 38

Nem egyenlőségvizsgálaton alapuló összekapcsolás EMPLOYEES JOB_GRADES Az EMPLOYEES tábla fizetés mezőjének értéke a JOBS_GRADE tábla legmagasabb illetve legalacsonyabb fizetés közötti kell legyen. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 39

Példa a nem egyenlőségvizsgálaton alapuló összekapcsolás SELECT e.last_name, e.salary, j.grade_level FROM employees e JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal; Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 40

Külső összekapcsolás DEPARTMENTS EMPLOYEES A 190-es számú osztályon nincs alkalmazott Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 41

Belső vagy külső összekapcsolás? SQL-1999: Belső összekapcsolásnak nevezzük azokat az összekapcsolásokat, amelyek két tábla megegyező soraival térnek vissza. Két tábla olyan összekapcsolását, amely a belső összekapcsolás eredményéhez hozzáveszi a bal (vagy jobboldali) tábla összes sorát, baloldali (vagy jobboldali) külső összekapcsolásnak nevezzük. Teljes külső összekapcsolásnak hívjuk azt az esetet, amikor a külső összekapcsolás egyszerre bal- és jobboldali. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 42

Baloldali külső összekapcsolás SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 43

Jobboldali külső összekapcsolás SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 44

Teljes külső összekapcsolás SELECT e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 45

A direkt szorzat A direkt-szorzat a következőként kapható: az összekapcsolási feltétel elhagyásával, nem megengedett összekapcsolási feltétellel, az első tábla összes sorának összekapcsolása a másik tábla összes sorával. A direkt szorzatok elkerülése érdekében, mindig kell legalább egy megengedett összekapcsolási feltétel legyen. Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 46

A direkt szorzat EMPLOYEES (20 rows) DEPARTMENTS (8 rows) Direkt-szorzat : 20 x 8 = 160 sor Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 47

A direkt szorzat A CROSS JOIN kulcsszó előállítja két tábla keresztszorzatát (vagyis a direkt szorzatát) SELECT last_name, department_name FROM employees CROSS JOIN departments ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 48

Összekapcsolások alkérdéssel Legyen R(X, Y) és S(Y, Z), ahol X, Y, Z attr.halmazok (1a) SELECT X, Y FROM R NATURAL JOIN S; (1b) SELECT X, Y FROM R JOIN S USING (Y); (2a) SELECT X, R.Y FROM R, S WHERE R.Y=S.Y; (2a) SELECT X, R.Y FROM R JOIN S ON R.Y=S.Y; (3) SELECT X,Y FROM R WHERE Y IN (SELECT Y FROM S); (4) SELECT X,Y FROM R WHERE EXISTS (SELECT * FROM S WHERE Y=R.Y); Az R és S relációk félig-összekapcsolása R S (szemijoin) Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 49

Összekapcsolások alkérdéssel Az R és S relációk félig-összekapcsolása R S (szemijoin), az R azon sorainak halmaza, amely sorok megegyeznek az S legalább egy sorával az R és S összes közös attribútumán. H.F: Adjunk meg olyan három különböző relációs algebrai kifejezést, amelyek ekvivalensek az R S kifejezéssel! Adatbázisok-1 (Hajas Csilla, ELTE IK) 3.előadás: Lekérdezések 50