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

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

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

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

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

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

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

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

Adatbázisok I. Az SQL nyelv

Adatbázisok I A relációs algebra

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

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

Adatbázisok* tulajdonságai

Adatbázis használat I. 2. gyakorlat

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

Adatbázis használat I. 2. gyakorlat

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

Adatbázisok elmélete 9. előadá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.

Alkalmazói rendszerek ACCESS ZH - javítókulcs Informatika tanár MSC, levelező tagozat, január 06.

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

ADATBÁZISKEZELÉS ADATBÁZIS

Adatbázisok II. rész

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

ALAPOK. 0 és 255 közé eső számértékek tárolására. Számértékek, például távolságok, pontszámok, darabszámok.

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

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

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

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

Hogyan fogalmazzuk meg egyszerűen, egyértelműen a programozóknak, hogy milyen lekérdezésre, kimutatásra, jelentésre van szükségünk?

Java és web programozás

Adatbázis, adatbázis-kezelő

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

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

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

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

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

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

Adatbázis rendszerek SQL nyomkövetés

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

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

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

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

Adattípusok. Max. 2GByte

Tankönyv példák kidolgozása

Adattípusok. Max. 2GByte

INFORMATIKAI ALAPISMERETEK

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlaton a következőket fogjuk gyakorolni:

Adatbázis-kezelés az Excel 2013-ban

Adatbázis-kezelés. Harmadik előadás

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

1.óra. Bevezetés. Adatmodellezés, elméleti háttér

Paraméteres-, összesítı- és módosító lekérdezések

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

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

Bódy Bence Az SQL egy újabb példán keresztül

Óravázlat. az ECDL oktatócsomaghoz. 5. modul. Adatbáziskezelés. Krea Kft Budapest, Szőlő u 21. Tel/fax: / krea@krea.

Adatok szűrése, rendezése

Adatbázis használat I. 1. gyakorlat

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

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

Nem klaszterezett index. Klaszterezett index. Beágyazott oszlopok. Index kitöltési faktor. Indexek tulajdonságai

JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

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

CAD-CAM informatikus CAD-CAM informatikus

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

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

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

Adatbázis-kezelés Feladatok és megoldások

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

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

Fogalmak: Adatbázis Tábla Adatbázis sorai: Adatbázis oszlopai azonosító mező, egyedi kulcs Lekérdezések Jelentés Adattípusok: Szöveg Feljegyzés Szám

Választó lekérdezések

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Tájékoztató. Használható segédeszköz: -

SQL DDL-2 (aktív elemek) triggerek

Nem klaszterezett index. Beágyazott oszlopok. Klaszterezett index. Indexek tulajdonságai. Index kitöltési faktor

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

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

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

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.

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

Tájékoztató. Használható segédeszköz: -

Access alapok. Megnevezés Művelet Minta. Új adatbázis létrehozása. Új / Üres adatbázis.. Tábla létrehozása tervező nézetben.

Adatbázis-kezelés Feladatok és megoldások

Adatbáziskezelés alapjai. jegyzet

INFORMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Java és web programozás

INFORMATIKAI ALAPISMERETEK

LBRA6i integrált rendszer

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

(Cikksorozat a portálról. Átszerkesztette és kiegészítette: Szentendrey Péter) TARTALOM

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Az állományokban UTF-8 kódolással magyar betűk is vannak, ezért az az Unicode (UTF-8) kódolást.

Adatbázis rendszerek tervezése

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

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

BEVEZETÉS Az objektum fogalma

SQL összefoglaló. dbase, Clipper, FoxBase, FoxPro, Access (nem tesz eleget pl. a 3.pontnak)

Átírás:

A SELECT működése A SELECT utasítás általános formája: SELECT [ALL/DISTINCT] {*/<mező név 1 >,, <mező név k >} FROM <tábla név 1 > [<hivatkozási név 1 >],, <tábla név h > [<hivatkozási név h >] [WHERE <feltétel 1 > GROUP BY <mező név 1 >,, <mező név m > HAVING <feltétel 2 > ORDER BY <mező név 1 > [ASC/DESC],, <mező név j > [ASC/DESC]] műveletek sorrendje 1. FROM: melyik táblákból? (direkt szorzat képzés) 2. WHERE: melyik rekordok? (nem kívánt sorok elhagyása) 3. GROUP BY: mi szerint csoportosítva? (csoportosítás) 4. HAVING: melyik csoportok? (nem kívánt csoportok elhagyása) 5. ORDER BY: mi szerint rendezve? (rendezés) 6. SELECT: melyik oszlopok? (nem kívánt oszlopok elhagyása) Vessézzük ki ezt a SELECT-et néhány példán keresztül! Van két táblánk, az egyszerűség kedvéért ugyanazok, amiket az órán vettünk! Tanár és diák táblák az alábbi tartalommal: Ttanar tábla: TAZON 1 Zsakó László 2 Szlávi Péter 3 Pap Gáborné 4 Illés Zoltán Tdiak tábla: KOR OFO 1 Zsíros B. Ödön 16 1 2 Feles Elek 19 2 3 Deb Ella 21 1 4 Ka Pál 16 1 5 Har Mónika 28 2 6 Elektrom Ágnes 22 3 Maradjunk rögtön a két táblás lekérdezésnél! Legyen a feladat: Kiket tanít Zsakó László? Az eredményt jelenítsük meg név szerint rendezve! A feladat megoldása: SELECT tdiak.nev WHERE tdiak.ofo = ttanar.tazon ORDER BY tdiak.nev Azonban tegyük föl, hogy ezt még nem tudjuk! Elnézve a tábla szerkezetét, ehhet mindkét táblára szükségünk van. Induljunk ki most ebből!

1. lépés Mert a SELECT utasításban elsőként a FROM záradék lép működésbe, ezért elkészül a tábláink direkt szorzata, azaz a: 2 Feles Elek 19 2 1 Zsakó László 5 Har Mónika 28 2 1 Zsakó László 6 Elektrom Ágnes 22 3 1 Zsakó László 1 Zsiros B. Ödön 16 1 2 Szlávi Péter 3 Deb Ella 21 1 2 Szlávi Péter 4 Ka Pál 16 1 2 Szlávi Péter 6 Elektrom Ágnes 22 3 2 Szlávi Péter 1 Zsiros B. Ödön 16 1 3 Pap Gáborné 2 Feles Elek 19 2 3 Pap Gáborné 3 Deb Ella 21 1 3 Pap Gáborné 4 Ka Pál 16 1 3 Pap Gáborné 5 Har Mónika 28 2 3 Pap Gáborné 6 Elektrom Ágnes 22 3 3 Pap Gáborné 1 Zsiros B. Ödön 16 1 4 Illés Zoltán 2 Feles Elek 19 2 4 Illés Zoltán 3 Deb Ella 21 1 4 Illés Zoltán 4 Ka Pál 16 1 4 Illés Zoltán 5 Har Mónika 28 2 4 Illés Zoltán 6 Elektrom Ágnes 22 3 4 Illés Zoltán Hiszen amíg nem mondjuk meg az idegen kulcs által leírt kapcsolattal nem törődik! Keletkezett tehát 4*6, azaz 24 sor. (4 sor volt a Ttanar és 6 sor a tdiak táblában, ezeket kombinálta, minden lehetséges módon) Kiemelve jelölöm a helyes sorokat. Tehát, ha azt akarom, hogy a kapcsolatot is figyelembe vegye, már pedig ez mindig szükséges nálunk, azt a WHERE záradékban külön meg kell mondanom. Erre később visszatérek. 2. lépés. WHERE záradék. Itt adom meg azon feltételeket, amelyeket minden olyan sornak teljesítenie kell, amely az eredményben bent szeretne maradni. A feltételeknek teljes körűen teljesülniük kell. Ha több feltétel van tehát, akkor mindnek teljesülnie kell. Az ellenőrzés soronként fut le, amelyik sor megszegi, kiesik. Jelen esetben két feltételünk van. A tanár neve: Zsakó László és mivel a tábláink között kapcsolat van, az OFO és a TAZON értékeknek soron belül meg kell egyezniük. Ennek három sor (azaz rekord) tesz eleget:

A SELECT utasításunk tehát most így néz ki: WHERE tdiak.ofo=ttanar.tazon 3. lépés. Még rendeznünk kell diák neve szerint a sorokat. Ezt az ORDER BY záradékkal tehetjük meg. WHERE tdiak.ofo = ttanar.tazon ORDER BY tdiak.nev 4. lépés. Végezetül pedig megmondjuk, hogy csak a név oszlopra vagyunk kiváncsiak. Azaz más már nem maradt hátra, eldobjuk a nem fontos oszlopokat. Az oszlopkiválasztás fut le utoljára. SELECT tdiak.nev WHERE tdiak.ofo = ttanar.tazon ORDER BY tdiak.nev Deb Ella Ka Pál Zsiros B. Ödön Következő feladat: Adjuk meg azon osztályfőnökök nevét ABC sorrendben és tanítványainak átlagéletkorát, akik legalább 2 diáknak osztályfőnökei! Ebben a feladatban a SELECT utasítás minden záradékát használni fogjuk! SELECT t.nev, AVG(d.Kor) AS Atlag FROM tdiak d, ttanar t WHERE d.ofo=t.tazon GROUP BY t.nev,t.tazon HAVING COUNT(d.DAzon)>=2 ORDER BY t.nev Az utasítás első három és az utolsó sorának, tehát a FROM, WHERE, ORDER BY zaradékok és az oszlopkiválasztás lefutása már ismert, az előző feladatéhoz hasonló.

A feladat érdekessége a csoportosítás. Amire azért van szükség, mert valamit tanáronként szeretnénk megkapni, ilyenkor mindenféleképpen csoportosítani kell. Illetve, ha egy összegzőfüggvény (mint amilyen az átlagot kiszámító AVG is) használata mellett egyéb, de az egyes csoportokban azonos értéket szeretnénk kiírni. Jelen esetben a tanár nevét. Ilyenkor persze ezen mező szerint (is) csoportosítani kell. Na de mi is az a csoportosítás és hogyan is működik? Csoportosítás előtt a SELECT-ünk itt tart: FROM tdiak d, ttanar t WHERE d.ofo=t.tazon 6 Elektrom Ágnes 22 3 3 Pap Gáborné Látható, hogy azok a sorok maradtak bent, amiket a WHERE feltétel bent hagyott. Ezeket fogjuk tanáronként csoportosítani, tehát lesz két csoportunk, mert két tanár maradt bent. Azaz a tanár neve szerint külön-külön annyi csoportot alkotunk, ahány tanárunk van. Ez persze csak a háttérben történik meg, az egyes csoportokat így kiirattatni nem tudjuk. FROM tdiak d, ttanar t WHERE d.ofo=t.tazon GROUP BY t.nev,t.tazon Zsakó László csoportja Szlávi Péter csoportja Pap Gáborné csoportja: 6 Elektrom Ágnes 22 3 3 Pap Gáborné Innentől a következő, a HAVING záradék ezekben a csoportokban dolgozik. A HAVING-ben a WHERE feltételhez hasonlóan feltételeket adhatunk meg. Azonban itt már csoportfeltételeket. Azaz olyanokat, amely egy adott csoportra összességében, teljeskörűen vonatkozik. Például megszámolhatjuk hány sor található az egyes csoportokban és arra adhatunk egy feltételt. Jelen esetben azt, hogy legalább ketten legyenek az egyes csoportokban.

FROM tdiak d, ttanar t WHERE d.ofo=t.tazon GROUP BY t.nev,t.tazon HAVING COUNT(d.DAzon)>=3 Tehát csak Zsakó László és Szlávi Péter csoportja maradt bent. Ezek után újra összeilleszti a csoportokban lévő sorokból a nagy táblát: Ez után fut le az ORDER BY, majd az oszlopkiválasztás. Csak olyan oszlopot válaszhatok ki, ami szerint csoportosítottam, vagy pedig egy vagy több összesítő függvényt. A végeredmény pedig: ATLAG Szlávi Péter 23.5 Zsakó László 1.76666666666666666666666666666666666667E01

AL-SELECT használata, működése Két esetben használunk mindenféleképpen al-selektet. Tagadás esetén illetve, ha olyan feltételünk van, amit egy soron belül nem tudunk megvizsgálni. Hiszen a WHERE feltétel ellenőrzése soronként fut le, más sorra, más sornak vagy táblának egy konkrét értékére nem hivatkozhatunk. Miképpen olyan értékre sem, melyet egy másik tábla adataiból számoltunk ki. Ilyenkor ezt a más értéket egy al-select segítségével számítjuk ki és ezt az al-select által adott értéket hasonlítjuk össze. Érdemes úgy tekinteni az alselectre, mint egy konkrét értékre, számra, stb-re. Alselectes feladatokat a legegyszerűbben úgy lehet elkészíteni, ha előbb elkészítjük a belső selecttet, majd ezt zárójelbe téve e köréépítjük a külsőt! Nézzük meg ezt egy egyszerű példán keresztül! Feladat: Ki a legidősebb diák? A feladat megoldásához egy táblára, a diák táblára van szükségünk. KOR OFO 1 Zsiros B. Ödön 16 1 2 Feles Elek 19 2 3 Deb Ella 21 1 4 Ka Pál 16 1 5 Har Mónika 28 2 6 Elektrom Ágnes 22 3 A fentiek alapján könnyen átgondolhatjuk, hogy ez egy lefutásban nem oldható meg, hiszen nem tudjuk, hogy hány éves a legidősebb diák, más sorok tartalmára pedig nem hivatkozhatunk. A tábla tartalma alapján ez egy ellenőrzéssorozattal nem oldható meg. Ha jobban tetszik úgy is mondhatjuk, hogy egy számlálós (FOR) ciklussal nem tudjuk ezt a feladatot megoldani. Első lépésben tehát ki kell számolnunk, hány éves a legidősebb diák, azaz: SELECT max(kor) FROM tdiak MAX(KOR) 28 Majd azt kell megnéznünk, hogy ki az, vagy kik azok, akik szintén ennyi idősek (azaz ebben a pillanatban 28 évesek). Hogy tovább egyszerűsítsük, írjuk meg a feladatot úgy, mintha tudnánk, hogy a legidősebb diákunk 28 éves. Azaz a feladat most úgy szól, ki 28 éves? SELECT nev FROM tdiak WHERE kor = 28 Har Mónika Ez azonban nyilvánvalóan nem megoldása az eredeti feladatnak, hiszen csak az adattábla egy pillanati állapotát tükrözi, ez azóta megváltozhatott (új, még idősebb diák jöhetett, Har Mónika kiléphetett az iskolából, vagy időközben akár a születésnapját is ünnepelhette). Tehát a belső szelektet be kell építenünk a külsőbe, azaz: SELECT nev

FROM tdiak WHERE kor = (SELECT max(kor) FROM tdiak) Har Mónika Figyelni kell arra, hogy relációsjeleket (=, <, <=, >, >=, <>,!=) csak akkor használhatunk, ha a belső select csak egy értéket adott vissza. Ezt összesítő függvény használatával, vagy csoportosítással elérhetjük. Ha előfordulhat, hogy több értéket ad vissza, akkor meg kell mondani, hogy a kapott lista: - Bármely elemével lehet egyenlő (előfordulásvizsgálat): IN - Egyik elemével sem lehet egyenlő: NOT IN - Minden eleme teljesíti a feltételt: ALL (például nagyobb nála) - Nem minden eleme teljesíti a feltételt, azaz legalább van egy akivel nincs relációban: NOT ALL - Van egy elem, ami kielégíti a feltételt: ANY - Vagy semelyikkel sincs a megadott relációban (egyetlen esetben sem igaz): NOT ANY.