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

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

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

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

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. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

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

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

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 PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

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

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Adatbázis rendszerek SQL nyomkövetés

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

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

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Adattípusok. Max. 2GByte

Java és web programozás

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

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

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

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

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

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

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Tankönyv példák kidolgozása

Adattípusok. Max. 2GByte

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

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

Adatbázisok* tulajdonságai

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

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

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

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

Adatok szűrése, rendezése

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

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

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

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

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

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

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

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

SQL parancsok feldolgozása

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

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

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

BEVEZETÉS Az objektum fogalma

Keskeny Zoltán 2007/08 SQL. Structured Query Language. (gyakorlat az SQL2 szabvány alapján) Keskeny Zoltán tanév

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

SQL DDL-2 (aktív elemek) triggerek

Java és web programozás

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

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

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

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

Webfejlesztés 4. alkalom

B I T M A N B I v: T M A N

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

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

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

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

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

Az SQL adatbázisnyelv: DML

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

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

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

Az SQL lekérdeznyelv

Adatbázis, adatbázis-kezelő

Adatbázis Rendszerek II. 8. Gyakorló környezet

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

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

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

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

Készítette: Szabóné Nacsa Rozália

Adatbázis használat I. 2. gyakorlat

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

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

Adatbázisok II. rész

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

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

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

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

A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja:

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áziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

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

A könyv tartalomjegyzéke

Adatbázis rendszerek Gy: DQL Lekérdezések

Adatbázis használat I. 2. gyakorlat

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

Indexek és SQL hangolás

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

Adabáziskezelés gyakorlat SQL

Adatbázis I. 11. előadás. Kulcsok az SQL ben. Hivatkozásépségi megszorítások és idegen kulcsok.

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

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

Átírás:

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

A SELECT UTASÍTÁS ÁLTALÁNOS ALAKJA (ISM.) SELECT [DISTINCT] megjelenítendő oszlopok FROM táblá(k direkt szorzata) [WHERE feltétel] [GROUP BY csoportosítási szempont] [HAVING csoportok szűrése] [ORDER BY rendezési szempont];

TERMÉSZETES ÖSSZEKAPCSOLÁS SQL-BEN ID Név Fizetés Szül. dát. OsztályId 123 Kiss Mária 120500 1955-12-11 3 124 Kovács Gyula 134000 1967-09-09 11 Dolgozó ID Név 3 Hulladékgazdálkodási 4 Pénzügyi 11 Marketing Osztály SELECT Dolgozó.Név, Fizetés, Osztály.Név FROM Dolgozó, Osztály WHERE Dolgozó.OsztályId = Osztály.ID; vagy SELECT Dolgozó.Név, Fizetés, Osztály.Név FROM Dolgozó INNER JOIN Osztály ON Dolgozó.OsztályId = Osztály.ID;

TERM. ÖSSZEKAPCSOLÁS SQL-BEN Mindkét jelölésnél képződik a táblák direkt szorzata, és projekcióval kiválasztódnak az általunk megjeleníteni kívánt oszlopok Ahol névütközéstől kell tartanunk a direkt szorzatban, a táblák nevét is kiírjuk az oszlopnév elé (pl. Dolgozó.Név) az első módszernél a WHERE feltételben kell megadni azt, hogy a külső kulcsok mentén egyező sorok maradjanak meg az eredménytáblában Példa. Határozzuk meg az előző táblák esetén, hogy hány fő dolgozik az egyes osztályokon. SELECT Osztály.Név, COUNT(Dolgozó.Név) FROM Dolgozó, Osztály WHERE Dolgozó.OsztályId = Osztály.ID GROUP BY Osztály.Név;

TERM. ÖSSZEKAPCSOLÁS SQL-BEN A kapott eredmény a következő lenne: Osztály.Név Hulladékgazdálkodási 1 Marketing 1 COUNT(Dolgozó.Név) Vegyük észre, hogy a Pénzügyi osztálynál nem jelenik meg, hogy 0 fő dolgozik ott Ennek oka: Egy dolgozó sincs az osztályon => a direkt szorzat egyik sorában sem lesz egyezés a külső kulcs mentén 4 érték esetén => nem fogja tartalmazni az eredménytábla a pénzügyi osztályt => nem fog összesítéskor szerepelni

KÜLSŐ ÖSSZEKAPCSOLÁS A látott probléma kiküszöbölésére létezik a külső összekapcsolás: a lógó sorok is megmaradhatnak az összekapcsolt táblában LEFT OUTER JOIN baloldali külső összekapcsolás; a bal oldali tábla lógó sorai maradnak meg, a nem baloldali táblából származó oszlopok az ilyen sorokban NULL értéket kapnak RIGHT OUTER JOIN jobb oldalról ua. FULL OUTER JOIN mindkét tábla nem párosított sorai megőrződnek Észrevétel. Természetesen bármilyen összekapcsolásról is legyen szó kettőnél több tábla is összekapcsolható.

KÜLSŐ ÖSSZEKAPCSOLÁS Így a korábbi probléma az összes (akár nulla létszámú) osztályhoz tartozó dolgozói létszámok kiíratása már meg is oldható: SELECT Osztály.Név, COUNT(Dolgozó.Név) FROM Dolgozó RIGHT OUTER JOIN Osztály ON Dolgozó.OsztályId = Osztály.Id GROUP BY Osztály.Név; Osztály.Név COUNT(Dolgozó.Név) Hulladékgazdálkodási 1 Marketing 1 Pénzügyi 0

ALIASOK A SELECT utasítás után adandó oszloplista nem csak oszlopneveket, hanem kifejezéseket is tartalmazhat, amiket el lehet nevezni ez az aliasok egyik szerepe; szintaxis: kifejezés AS alias_név Példa. Ország népsűrűsége. SELECT név, lakosság/terület AS népsűrűség FROM ország; Alias használandó akkor is, ha egy SQL utasításon belül adott táblára többszörösen hivatkozunk, például azonos nevű dolgozók lekérése: SELECT d1.név FROM Dolgozó AS d1, Dolgozó AS d2 WHERE d1.név = d2.név AND d1.id < d2.id;

ALLEKÉRDEZÉSEK Korábban láttunk már példát rájuk tulajdonképpen arról van szó, hogy egy adott SQL utasításon belül elhelyezünk egy SELECT-tet. Példa. Allekérdezéssel előállított halmaz IN után: SELECT Név FROM Dolgozó WHERE Dolgozó.OsztályId IN ( SELECT Osztály.Id FROM Osztály WHERE Osztály.Id > 5 );

ALLEKÉRDEZÉSEK Allekérdezést persze használhatunk a FROM parancs után is: Példa. Adott az Employee(id, name, salary, address) reláció. Állítsunk ebből elő egy olyan táblát, amiben magyar oszlopnevek vannak a következő adatokkal: név, azonosító, éves bér. Csak a $4000-nál többet kereső Smith családnevű dolgozók jelenjenek meg. SELECT altabla.nev, altabla.id, altabla.eves_ber FROM ( SELECT name AS nev, id, salary*12 AS eves_ber, address FROM Employee WHERE salary > 4000 ) AS altabla WHERE altabla.nev LIKE % Smith ; Sőt, még akár INSERT-en belül is elhelyezhető alkérdés: INSERT INTO tábla SELECT

ALLEKÉRDEZÉSEK Halmazműveleteknél UNION, INTERSECT, EXCEPT jellemzően két alkérdés áll az utasítás oldalán: (SELECT nev FROM oktatok) UNION (SELECT nev FROM hallgatok); Ilyenkor a UNION-nál mint azt már tudjuk a többszörösen szereplő értékek csak egyszer jelennek meg. Ha azt akarjuk, hogy a duplikált sorok többször megjelenjenek, UNION ALL használandó A táblák kompatibilitására ügyelni kell!

ALLEKÉRDEZÉSEK Nem minden esetben tudunk a korábbiakban látottakhoz hasonló megoldást adni a problémáinkra Példa. Növeljük meg azon dolgozók fizetését 10%-al, akik az átlagfizetésnél kevesebbet keresnek: UPDATE Dolgozo AS d1 SET d1.fizetes = 1.1 * d1.fizetes WHERE (SELECT AVG(d2.fizetes) FROM Dolgozo AS d2 ) > d1.fizetes; A MySQL nem engedi meg, hogy módosítsunk egy táblát úgy, hogy a WHERE feltételben ugyanezen táblára vonatkozó alkérdés van! Szintén nem jó, ha INSERT után próbálkozunk hasonlóan.

NÉZETTÁBLÁK Nem valódi táblák, feladatuk az adatbázisban lévő adatok bemutatása egy adott transzformáció végrehajtása után Tulajdonképpen megadunk egy formulát, ami a már meglévő adatok alapján létrehoz egy nézettáblát Létrehozása: CREATE VIEW táblanév [(oszloplista)] AS SELECT ; Törlése: DROP VIEW táblanév; A nézettáblákon is végrehajthatók ugyanazon műveletek, mint a tárolt táblákon, azaz pl. az értékek aktualizálhatók és ilyenkor a forrástáblába is bekerülnek a módosítások Nyilván a forrástábla módosítása is automatikusan látszik a nézettáblában

NÉZETTÁBLÁK Van néhány eset, amikor azonban a nézettábla módosítása nem lehetséges: Példa. Raktár(cikkszám, név, egységár, mennyiség) CREATE VIEW Keszlet(aru, ertek) AS SELECT nev, egysegar*mennyiseg FROM raktar; Nem lehet módosítani a nézettáblát, ha nem lehet egyértelmű a végrehajtás (pl. fent), vagy ha DISTINCT opciót, valamilyen összekapcsolást, GROUP BY alparancsot tartalmaz a definíció.

FELADATOK Honlapon: sqlfolyt.sql táblák létrehozását tartalmazza 8.1 Hány fős lengyel kisebbség él Franciaországban? 8.2 Mennyi Európában a GDP-k átlaga? 8.3 Listázd az egyes országok neveit és népességét, de csak a 1200000-nél népesebb országok jelenjenek meg! 8.4 Mennyi Svájc összlakossága? 8.5 Adj meg lekérdezést, ami megmutatja, hogy egy adott országban melyik a legnagyobb lélekszámú nép!