példa: Legyen egy zenés CD-ket tartalmazó objektum-orientált adatbázis. Feltételezzük: egy zenés CD típusa audio, vagy mp3-as, vagy videoklippeket

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

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

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

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

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

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

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* tulajdonságai

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

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

Objektumorientált adatbázisok

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ázisok I. Az SQL nyelv

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

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

Adattípusok. Max. 2GByte

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 áttekintés és egy táblára vonatkozó lekérdezések

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

Adatbázisok I A relációs algebra

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adattípusok. Max. 2GByte

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

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

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

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

Adatbázis kezelés Delphiben. SQL lekérdezések

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

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

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

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.

Az SQL lekérdeznyelv

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ázis-kezelés. Harmadik előadás

BEVEZETÉS Az objektum fogalma

Adatbázis használat I. 2. gyakorlat

SQL parancsok feldolgozása

Tankönyv példák kidolgozása

Adatbázis-kezelés, információs-rendszerek

Adatok szűrése, rendezése

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

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

11. előadás Objektumorientált adatbázisok haladóbb ismeretek

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

GEIAL Kovács László. GEIAL Kovács László

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

Java és web programozás

Adatbázisok II. rész

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

Adatbázis használat I. 2. gyakorlat

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

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

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

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

Adatbáziskezelés. SQL parancsok. Függvények

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

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

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

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

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 6. előadás

Az SQL adatbázisnyelv: DML

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

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Bevezetés: az SQL-be

Csoportosított adatok megjelenítése összesítı függvények használatával. Copyright 2004, Oracle. All rights reserved.

Java és web programozás

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

Apple Swift kurzus 3. gyakorlat

XML alapú adatbázis-kezelés. (Katona Endre diái alapján)

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

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

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

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

A könyv tartalomjegyzéke

Ezek után már csak a Mentés és a Lekérdezés Futtatása (az ellenőrzés miatt) van hátra. Ügyeljünk, hogy a mentésnél a megadott (Kezd) nevet adjuk meg.

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

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

ügyfél. Adatbázisok elmélete 2. előadás. Korai modellek. Adatbáziskezelő rendszerek története. Első rendszerek

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP

ADATBÁZISOK ELMÉLETE 2. ELŐADÁS 1/26 Adatbáziskezelő rendszerek története Ősei a file-kezelők; ezek nem teljesítik ugyan azokat az elvárásokat, amiket

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

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

1. Az adatbázis fogalma, fontosabb összetevÿi, felhasználási módjai

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

Access gyakorlati feladatok lépésről lépésre

Adatbázis rendszerek SQL nyomkövetés

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

SQL gyakorló feladatok. 6. Adatbázis gyakorlat április 5.

Adatbázis, adatbázis-kezelő

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

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

Gazdasági folyamatok térbeli elemzése. 5. elıadás

Java II. I A Java programozási nyelv alapelemei

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

A C programozási nyelv I. Bevezetés

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

Adatbázisrendszerek Tervezése Közgazdászoknak Munkapéldány

SQL feladatok megoldasa

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

Átírás:

OQL alapfogalmak Object Query Language (OQL) objektum-orientált adatbázisok lekérdezésére szolgál. az OQL-t használhatjuk egy objektum-orientált befogadó nyelv, például C++, Java, stb. kiterjesztéseként. a befogadó nyelvi utasítások és az OQL parancsok keveredhetnek anélkül, hogy a lekérdezés eredményei és befogadó nyelvi változók között az értékeket explicit át kellene adni.

példa: Legyen egy zenés CD-ket tartalmazó objektum-orientált adatbázis. Feltételezzük: egy zenés CD típusa audio, vagy mp3-as, vagy videoklippeket tartalmaz és ezek nem keverednek. egy előadónak több albuma is van, egy albumon több zeneszám jelenik meg, viszont egy zeneszám csak egy albumon jelenik meg, egy albumon azonos stílusú zeneszámok jelennek meg. egy album teljes egészében egy CD-n található egy zeneszám, csak egyszer jelenik meg a CD-ken.

interface Előadó (extent Előadók key enév) { attribute string enév; attribute string nemzetiség; relationship set<album> albumai inverse Album::előadója; };

interface Album (extent Albumok key (acíme, megjeleneve)) { attribute string acíme; attribute string stílus; attribute integer megjeleneve; relationship Előadó előadója inverse Előadó::albumai; relationship CD CDje inverse CD::CDalbumai; relationship set<zeneszám> zeneszámai inverse Zeneszám::albuma; };

interface Zeneszám (extent Zeneszámok key (szcíme, időtartam)) { attribute string szcíme; attribute float időtartam; relationship Album albuma inverse Album::zeneszámai; string stílus() raises (nincsstílus); ElőadóNeve(out string); };

interface CD (extent CDk key azonosító) { attribute string azonosító; attribute enum CDTípus {audio, mp3, videoklipp} típus; relationship set<album> CDalbumai inverse Album::CDje; };

Típusok az OQL-ben Az OQL-ben használt változókat a befogadó nyelvben deklaráljuk. Konstansokat a következő típusokból kiindulva építhetünk: alaptípusok atomi típusok: egész számok, valós számok, karaktersorok és logikai értékek. A karakterláncokat dupla idézőjel közé helyezzük. felsorolások: egy felsorolásban szereplő értékeket ODL-ben adjuk meg, ezek közül bármelyik használható konstans értékeként.

- összetett típusok kollekciótípusok - Set() - Bag() - List() - Array() Rekortípus - Struct(). példa: struct (tanárgy: "matematika", jegyek:bag (9,8,9,7,8,10,9))

Útkifejezések - összetett változók komponenseit a pont segítségével választjuk el. Ha o egy C osztályba tartozó objektum és k az osztály valamely összetevője: attribútuma, kapcsolata vagy metódusa, akkor az o.k kifejezés az o objektum k komponensére hivatkozik. Az összetevő típusa szerint a következő esetek állnak fenn: Ha k egy attribútum, akkor o.k az o objektum k attribútumának értéke. Ha k egy kapcsolat, akkor o.k az o objektumnak a k kapcsolaton keresztül kapcsolatban álló objektum vagy objektumok kollekciója. Ha k egy metódus, akkor az o.k a k o-ra való alkalmazásának az eredménye.

példa: Legyen a kedvenczeneszám egy Zeneszám típusú befogadó nyelvi változó, akkor: A kedvenczeneszám.hossz értéke, az adott zeneszám hossza, vagyis a hossz attribútum értéke abban a Zeneszám objektumban, mely a kedvenczeneszám változóban található. A kedvenczeneszám.stílus() értéke egy karaktersor, mely a zeneszám stílusát adja meg. Mivel a stílus nem a zeneszámnál, hanem a szám albumánál van megadva, írtunk egy metódust, mely megadja a zeneszám stílusát. A kedvenczeneszám.albuma megadja azt az Album objektumot, melyhez a kedvenczeneszám tartozik. A kedvenczeneszám.előadóneve(előadónév) szintén metódus meghívás, mely az ElőadóNév paraméter értékeként karaktersor formájában magadja a kedvenczeneszám előadójának a nevét.

A pontot töbször is alkalmazhatjuk egy kifejezésben. A fenti példát folytatva a kedvenczeneszám.albuma.előadója.enév kifejezés megadja a kedvenczeneszám változóban található Zeneszám objektum előadójának a nevét, a következőképpen: Amint már láttuk fennebb, a kedvenczeneszám.albuma azt az Album objektumot adja meg, melyhez a kedvenczeneszám tartozik. Tovább lépve, A kedvenczeneszám.albuma.előadója a fenti Album objektum Előadó objektumához vezet. A kedvenczeneszám.albuma.előadója.enév megadja az keresett előadó nevét.

Select-from-where kifejezések OQL-ben SELECT <kifejezések_listája> FROM <változó_deklaráció> WHERE <logikai_kifejezés> példa: Keressük a Gyöngyhajú lány című zeneszám időtartamát. SELECT z.időtartam FROM Zeneszámok z WHERE z.szcíme = "Gyöngyhajú lány"

A FROM kulcsszó után változókat adunk meg a következőképpen: egy kifejezés, amelynek értéke valamilyen kollekciótípusú (halmaz vagy multihalmaz). leginkább: egy osztálynak az objektumkészlete, példa: Albumok objektumkészlet. (objektumkészlet relációs tábla) kifejezés, mely kollekciót ad eredményül, példa: egy másik selectfrom-where kifejezés. SQL2-ben ez nem volt lehetséges, de kereskedelmi rendszerek (pl. Oracle) már megengedik az alkérdések használatát a FROM záradékban; opcionálisan az AS kulcsszó a változó neve (kötelező).

A SELECT kulcsszó után a FROM záradékban deklarált változókat tartalmazó kifejezéseket adhatunk meg. A WHERE kulcsszó utáni logikai kifejezésben: operandusok: a FROM záradékban deklarált változókat és konstansokat tartalmaznak. összehasonlító operátorok: <, >, <=, >=, =,!= logikai operátorok pedig: AND, OR, NOT. karaktersor esetén dupla idézőjelet használtunk.

A FROM záradékban több változó is szerepelhet. példa: Keressük az Omega 7 album zeneszámait. SELECT z.szcíme, z.időtartam FROM Albumok a, a.zeneszámai z WHERE a.acíme = "Omega 7" Algoritmikusan a kifejezés kiértékelése: minden a-ra az Albumok-ból minden z-re az a.zeneszámai-ból ha a.acíme = "Omega 7" a z.szcíme, z.időtartam az eredménybe kerül

select-from-where kifejezések eredménye multihalmaz ismétlődő sorokat megszüntethetjük a DISTINCT kulcsszóval példa: Keressük azon előadókat, akik rock stílusú albumokat adtak ki. (egy előadónak több rock albuma is lehet) SELECT DISTINCT e.enév FROM Előadók e, e.albumai a WHERE a.stílus LIKE "%rock%"

Kvantort használó kifejezések Az OQL lehetőséget ad logikai kvantorok: minden és létezik, használatára. Legyen A egy halmaz, x egy változó és F(x) egy feltétel. FOR ALL x IN A : F(x) ellenőrzi, hogy az A halmaz minden eleme kielégíti az F(x) feltételt. a kifejezés értéke TRUE, ha minden x az A-ból kielégíti az F(x) feltételt, különben FALSE (hamis).

példa: Keressük azon előadókat, akik csak rock stílusú albumot adtak ki. SELECT DISTINCT e.enév FROM Előadók e WHERE FOR ALL a IN e.albumai : a.stílus LIKE "%rock%" e változó végigjárja az Előadó osztály objektumkészletét A halmaz = e.albumai, melyet az a-val járunk végig az előadó bekerül az eredménybe, ha minden a albumra igaz a feltétel, hogy a stílusa rock.

Legyen A egy halmaz, x egy változó és F(x) egy feltétel. EXISTS x IN A : F(x) - ha létezik legalább egy x az A-ból, mely kielégíti az F(x) feltételt, a kifejezés értéke TRUE (igaz), különben FALSE (hamis). példa: Keressük azon előadókat, akiknek van olyan zeneszáma, melyek címében szerepel a love szó. SELECT DISTINCT a.előadója.enév FROM Albumok a WHERE EXISTS z IN a.zeneszámai: z.szcíme LIKE "%love%" OR z.szcíme LIKE "%loving%"

Alkérdések - minden olyan helyen, ahol egy kollekció megjelenhet, használhatunk select-from-where kifejezést. példa: Keressük Celine Dion zeneszámait! SELECT z.szcíme, z.időtartam, a.acíme,a.megjeleneve FROM (SELECT a FROM Albumok a WHERE a.előadója.enév = "Celine Dion") c, c.zeneszámai z

OQL-ben is használhatjuk a halmazműveleteket UNION EXCEPT INTERSECT.

Az eredmény rendezése példa: Adjuk meg a 2004-ben megjelent rap számok címét és előadójának a nevét előadók szerint rendezve, egy előadón belül pedig albumon belül rendezve. SELECT DISTINCT e.enév, a.acíme, z.szcíme FROM Előadók e, e.albumai a, a.zeneszámai.z WHERE a.megjeleneve=2004 AND a.stílus LIKE "%rap%" ORDER BY e.enév, a.acíme, z.szcíme Az alapértelmezett a növekvő sorrend (ASC), a csökkenő sorrendet a DESC kulcsszóval kérhetjük.

Összesítő kifejezések OQL-ben is használhatjuk az AVG, COUNT, SUM, MIN, MAX összesítő operátorokat. SQL-ben tábla oszlopára vagy kifejezésekre, melyek táblák oszlopaira vonatkoznak, OQL-ben olyan kollekciókra alkalmazhatjuk, amelyek elemei megfelelő típusúak. A COUNT bármilyen típusú kollekcióra alkalmazható. A SUM és AVG aritmetikai típusú (egész számok, valós számok) kollekcióra. A MIN és MAX olyan típusú kollekciókra alkalmazhatóak, amelyeken értelmezett az összehasonlítás, például az aritmetikai típus és karaktersorok.

példa: Adjuk meg a CD-ken található zeneszámok összidejét! SUM (SELECT z.időtartam FROM Zeneszámok z) példa: Adjuk meg hány különböző gótikus metal album található a CDken. COUNT (SELECT a.acíme FROM Albumok a WHERE a.stílus = "gótikus metál")

Csoportosító kifejezések (GROUP BY) példa: Adjuk meg zenénk összidejét stílusokra, évekre leosztva a következőképpen: StílusNév, Ev, Időtartam. SELECT stl, év, összidő: SUM (SELECT p.z.időtartam FROM partition p) FROM Zeneszámok z GROUP BY stl:z.albuma.stílus, év:z.albuma.megjeleneve

a GROUP BY záradékban is megadunk változókat: stl és év minden egyes stl stílus esetén, minden év esetén, azon zeneszámok, melyek stílusa stl és megjelenési éve év bekerülnek a partition nevű multihalmazba, melyre összesítő függvényt alkalmazhatunk, a mi esetünkben összegezést. a partition olyan típusú objektumokat tartalmaz, amilyen a FROM után szerepel, a p változó végigfutja a partition multihalmazt.

OQL-ben is használhatjuk a HAVING záradékot, melynek segítségével a GROUP BY által létrehozott csoportok közül csak azokat választjuk ki, melyek a HAVING feltételét kielégítik, a HAVING feltételében szintén a partition multihalmazra hivatkozhatunk. példa: Egészítsük ki utolsó példánkat azzal, hogy csak akkor érdekel zenénk összideje stílusokra, évekre leosztva, ha az adott stílusból, az adott évben van legalább 10 perc zene.

SELECT stl, év, összidő: SUM (SELECT p.z.időtartam FROM partition p) FROM Zeneszámok z GROUP BY stl: z.albuma.stílus, év: z.albuma.megjeleneve HAVING SUM (SELECT p.z.időtartam FROM partition p) >= 10

Objektumok létrehozása és kollekció végigjárása a C++-t fogjuk használni befogadó nyelvnek, melyben az OQL select-from-where kifejezéseit természetes módon lehet használni, nincs szükség adatátvitelre, mint SQL és befogadó nyelv között. a select-from-where kifejezések eredményként objektumokat állítanak elő, melyet megfelelő típusú változónak értékül adhatunk. példa: Legyen SarahSzamai egy set<zeneszám> típusú változó. OQL-el kiegészített C++-ban írhatjuk a következő értékadást: SarahSzamai = SELECT DISTINCT z FROM Albumok a, a.zeneszámai z WHERE a.előadója.enév = "Sarah Connor";

egy select-from-where kifejezés eredményéhez soronként is hozzáférhetünk, ha listává alakítjuk ORDER BY kulcsszóval egy ilyen lista elemeihez a tömböknél megszokott módon férhetünk hozzá. példa: RasmusSzamok egy list<zeneszám> típusú változó; szam egy Zeneszám típusú változó;

RasmusSzamok = SELECT DISTINCT z FROM Albumok a, a.zeneszámai z WHERE a.előadója.enév = "The Rasmus" ORDER BY z.szcíme; NrSzamok = COUNT(SELECT DISTINCT z FROM Albumok a, a.zeneszámai z WHERE a.előadója.enév = "The Rasmus"); for (i=0; i<nrszamok; i++) { szam = RasmusSzamok[i]; cout << szam.szcíme << " " << szam.idotartam << "\n"; } RasmusSzamok[i] - egy zeneszám