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



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

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely. ABR ( Adatbázisrendszerek) 12. Előadás:

Tankönyv példák kidolgozása

Az SQL lekérdeznyelv

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

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

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

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

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

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

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

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

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

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

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

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.

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

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

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

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

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

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

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

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

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

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

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

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

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

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.

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.

Adatbázis használat I. 2. gyakorlat

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

A relációs adatmodell

Adatbázis rendszerek SQL nyomkövetés

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

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

Adattípusok. Max. 2GByte

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

Adatbázisok* tulajdonságai

Adabáziskezelés gyakorlat SQL

Adattípusok. Max. 2GByte

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

Az SQL adatbázisnyelv: DML

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

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

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

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

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

Adatbázisok I A relációs algebra

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

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

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

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

Adatbázisok I. Az SQL nyelv

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

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

Adatbázis használat I. 2. gyakorlat

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

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

Adatbázis, adatbázis-kezelő

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

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

SQL DDL-2 (aktív elemek) triggerek

Adatbázisok II. rész

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

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Adatbázis rendszerek tervezése

Példák átírásokra: Relációs algebrai kifejezések, a kiértékelı fák átírása SQL lekérdezésekre

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

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

BEVEZETÉS Az objektum fogalma

SQL parancsok feldolgozása

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

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

Relációsémák létrehozása SQL nyelvben

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

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

Adatbázisok elmélete

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

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:

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

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

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

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

SQL feladatok megoldasa

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

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

Java és web programozás

A sorozat. A feladatlapon szereplő kérdések megválaszolásával és feladatok megoldásával maximum 100 pont érhető el.

INFORMATIKAI ALAPISMERETEK

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

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

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

ADATBÁZISKEZELÉS ADATBÁZIS

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

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

Átírás:

4. Előadás Az SQL adatbázisnyelv Sorváltozók Alkérdések Ismétlődő sorok Összesítések 1

Sorváltozók Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Olyan lekérdezéseknél, amelyik UGYANAZON reláció két vagy több sorát kombináljuk össze. A FROM záradékban R minden előfordulásához hozzárendelünk egy másodnevet. Ezt nevezzük sorváltozónak. A FROM záradékban R minden előfordulása után következhet az AS szócska és a sorváltozó neve. R attribútumait megkülönböztetjük a SELECT és a WHERE záradékokban egy előtag segítségével, amelyik a megfelelő sorváltozóból és egy pontból áll. 2

Sorváltozók Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Keressük azon színész párokat, akik egy címen laknak. (házastársak pl.) SELECT Szinesz1.nev, Szinesz2.nev FROM Filmszinesz AS Szinesz1, Filmszinesz AS Szinesz2 WHERE Szinesz1.cim=Szinesz2.cim AND Szinesz1.nev<Szinesz2.nev; 3

Alkérdések Az alkérdések segítségével sorokat vagy relációkat tudunk összehasonlítani. Egy alkérdés egy olyan kifejezés, mely egy relációt eredményez, például egy select-from-where kifejezés. SELECT SQL parancs általános formája, mely tartalmaz alkérdést a következő: SELECT <attribútum_lista> FROM <tábla> WHERE <kifejezés> <operátor> (SELECT <attribútum_lista> FROM <tábla>); 4

Alkérdéseket csoportosíthatjuk annak megfelelően, hogy az eredménye hány sort és hány oszlopot tartalmaz: egy oszlopot, egy sort, vagyis egy skalár értéket ad vissza (single-row); egy oszlopot, több sort, u. n. több soros alkérdés (multiplerow subquery); több oszlopot, több sort, u.n. több oszlopos alkérdés (multiple-column); Használt operátorok: 1. IN (NOT IN)-benne van, tartalmazza 2. ALL-mind 3. ANY-valamelyik 5

Példa: Keressük a Tervezés nevű részleg menedzserének a nevét. A megoldás alkérdés segítségével: 1) SELECT Név 2) FROM Alkalmazottak 3) WHERE SzemSzám = 4) (SELECT MenSzemSzám 5) FROM Részlegek 6) WHERE Név = Tervezés ); A skalár értéket adó alkérdéssel használható operátorok az: =, <, <=, >, >=, <>. 6

Példa: Keressük azon alkalmazottakat, kiknek fizetése nagyobb, mint annak az alkalmazottnak, kinek a személyi száma 333333. SELECT Név FROM Alkalmazottak WHERE Fizetés > (SELECT Fizetés FROM Alkalmazottak WHERE SzemSzám = 333333); 7

Példa: Keressük azon részlegeket és az alkalmazottak minimális fizetését a részlegből, ahol a minimális fizetés nagyobb, mint a minimális fizetés a 2-es ID-jű részlegből. SELECT RészlegID, MIN(Fizetés) FROM Alkalmazottak GROUP BY RészlegID HAVING MIN(Fizetés) > (SELECT MIN(Fizetés) FROM Alkalmazottak WHERE RészlegID = 2); 8

A több-soros alkérdések esetén a WHERE záradék feltétele tartalmazhat olyan operátorokat, amelyeket egy R relációra alkalmazhatunk és az eredmény logikai érték lesz. Bizonyos operátoroknak egy skaláris s értékre is szükségük van. Ilyen operátorok: EXISTS R feltétel, mely akkor és csak akkor igaz, ha R nem üres. Példa: SELECT Név FROM Alkalmazottak, Managerek WHERE Alkalmazottak. SzemSzám = Managerek.SzemSzám AND EXISTS (SELECT * FROM Alkalmazottak WHERE Fizetés > 500); A fenti példa csak abban az esetben adja meg a managerek nevét, ha van legalább egy alkalmazott, kinek a fizetése nagyobb, mint 500 Euro. 9

s IN R, mely akkor igaz, ha s egyenlő valamelyik R-beli értékkel. Az s NOT IN R akkor igaz, ha s egyetlen R-beli értékkel sem egyenlő. Példa: Adjuk meg azon szállítók nevét és címét, kik szállítanak valamilyen csokit (Áruk.Név LIKE *csoki* ) 1) SELECT Név, Helység, UtcaSzám 2) FROM Szállítók 3) WHERE SzállID IN 4) (SELECT SzállID 5) FROM Szállít 6) WHERE ÁruID IN 7) (SELECT ÁruID 8) FROM Áruk 9) WHERE Név LIKE %csoki% ) ); 10

s > ALL R, mely akkor igaz, ha s nagyobb, mint az R reláció minden értéke, ahol az R relációnak csak egy oszlopa van. A > operátor helyett használhatjuk bármelyik összehasonlítási operátort. Az s <> ALL R eredménye ugyanaz, mint az s NOT IN R feltételnek. Példa: Legyen a következő lekérdezés: SELECT SzemSzám, Név FROM Alkalmazottak WHERE Fizetés > ALL (SELECT MIN(Fizetés) FROM Alkalmazottak GROUP BY RészlegID); 11

MySQL alkérdések a FROM-ban Alkérdések legálisak a SELECT utasítás FROM direktívájában. Az aktuális szintaxis: SELECT... FROM (alkérdés) [AS] név... Sok esetben az alkérdésekkel megoldunk bizonyos alproblémákat. Hogy ne bonyolítsuk a komplexitását a lekérdezésnek, ezen alkérdést ugyanúgy használhatjuk, mint a relációkat. 12

A 7-ik előadásban szereplő lekérdezés megvalósítása e) Melyek azok a gyártók, akik laptopot árulnak, PC-t viszont nem gyártó(laptop gyártó(pc Termék) Termék) SELECT DISTINCT Gyarto FROM Termek INNER JOIN Laptop ON Termek.modell=Laptop.modell WHERE Gyarto NOT IN (SELECT DISTINCT Gyarto FROM Termek INNER JOIN PC ON Termek.modell=PC.modell); 13

Adott az adatbázis sémája, amelyik négy relációból áll: Termék(gyártó, modell, típus) PC(modell, sebesség, memória, merevlemez, cd, ár) Laptop(modell, sebesség, memória, merevlemez, képernyő, ár) Nyomtató(modell, színes, típus, ár) a) Keressük meg a legalább 160-as sebességű PC-k gyártóit? SELECT gyarto FROM Termek INNER JOIN PC ON Termek.modell=PC.modell WHERE PC.sebesseg>=160; SELECT gyarto FROM Termek WHERE modell IN (SELECT modell FROM PC WHERE sebesseg>=160); 14

b) Keressük meg a legdrágább nyomtatókat? c) Keressük meg azokat a laptopokat, amelyek minden PC-nél lassúbbak? d) Keressük meg a modellszámát a legdrágább terméknek (PC, laptop vagy nyomtató) SELECT modell FROM Nyomtato WHERE ar=(select MAX(ar) FROM Nyomtato); SELECT modell FROM Laptop WHERE sebesseg< ALL (SELECT sebesseg FROM PC); Q1=(SELECT modell,ar FROM PC) UNION (SELECT modell,ar FROM Laptop) UNION (SELECT modell,ar FROM Nyomtato); SELECT modell FROM Q1 WHERE ar=(select MAX(ar) FROM Q1) 15

e) Keressük meg a legolcsóbb színes nyomtató gyártóját? Melyik a jó válasz, és miért? SELECT gyarto FROM Termek WHERE modell IN (SELECT modell FROM Nyomtato WHERE szines AND ar=(select MIN(ar) FROM Nyomtato)); SELECT gyarto FROM Termek WHERE modell IN (SELECT modell FROM Nyomtato WHERE ar=(select MIN(ar) FROM Nyomtato WHERE szines)); SELECT gyarto FROM Termek WHERE modell IN (SELECT modell FROM Nyomtato WHERE szines AND ar=(select MIN(ar) FROM Nyomtato WHERE szines)); 16

f) Keressük meg annak a nyomtatónak a gyártóját, amely a leggyorsabb processzorú PC-t gyártja a legkisebb memóriájú PC-k között. Q2=SELECT gyarto, sebesseg FROM Termek INNER JOIN PC ON Termek.modell=PC.modell WHERE sebesseg IN (SELECT sebesseg FROM PC WHERE memoria=(select MIN(memoria) FROM PC)); SELECT gyarto FROM Q2 WHERE sebesseg IN (SELECT MAX(sebesseg) FROM Q2) 17

Összesítések: Az összesítés művelete egy oszlop értékeiből egy új értéket hoz létre Összesítő függvények a következők: SUM, megadja az oszlop értékeinek az összegét; AVG, megadja az oszlop értékeinek a átlag értékét; MIN, megadja az oszlop értékeinek a minimumát; MAX, megadja az oszlop értékeinek a maximumát; COUNT, megadja az oszlopban szereplő értékek számát, beleértve az ismétlődéseket is, ha azok nincsenek megszüntetve a DISTINCT kulcsszóval; 18

Példa: A következő lekérdezés segítségével megkapjuk az alkalmazottak átlagos fizetését: SELECT AVG(Fizetés) FROM Alkalmazottak; Példa: Az Egyetem adatbázis esetén keressük azon csoportoknak a számát, amelyekben vannak diákok, akik átlaga kisebb, mint 7: SELECT COUNT(DISTINCT CsopKod) FROM Diákok WHERE Átlag < 7 19

Csoportosítások: A reláció sorait csoportosítani szeretnénk egy vagy több oszlop értékei szerint. A parancs általános formája: SELECT < csoportosító oszlopok listája >, <összesítőfüggvény>(<oszlop>) FROM <reláció> [WHERE <feltétel>] [GROUP BY <csoportosító oszlopok listája>] [HAVING <csoportosítási-feltétel>] [ORDER BY <oszlop>]; 20

Példa: A részlegeken belüli átlag fizetést a következő parancs segítségével kapjuk meg: SELECT RészlegID, AVG(Fizetés), MIN(Fizetés), MAX(Fizetés), SUM(Fizetés) FROM Alkalmazottak GROUP BY RészlegID; SzemSzám Név RészlegID Fizetés (Euro) 111111 Nagy Éva 2 300 222222 Kiss Csaba 9 400 456777 Szabó János 9 900 234555 Szilágyi Pál 2 700 123444 Vincze Ildikó 1 800 333333 Kovács István 2 500 Eredmény: RészlegID AVG(Fizetés) MIN(Fizetés) MAX(Fizetés) SUM(Fizetés) 1 800 800 800 800 2 500 300 700 1500 9 650 400 900 1300 21

A csoportosítás után kapott eredmény reláció soraira alkalmazhatunk egy feltételt a HAVING kulcsszót használva. Példa: Keressük azon részlegeket, ahol az alkalmazottak átlag fizetése nagyobb, mint 500 Euro, átlag fizetés szerint növekvő sorrendben. SELECT RészlegID, AVG(Fizetés) FROM Alkalmazottak GROUP BY RészlegID HAVING AVG(Fizetés) > 500 ORDER BY AVG(Fizetés); 22

a) Keressük meg a PC-k átlagos sebességét? b) Keressük meg a 2500$-nál drágább laptopok átlagos sebességét? c) Keressük meg az A gyártó által gyártott PC-k átlagos árát? a) SELECT AVG(sebesseg) AS atlagsebesseg FROM PC; b) SELECT AVG(sebesseg) FROM Laptop WHERE ar>2500; c) SELECT AVG(ar) FROM Termek INNER JOIN PC ON Termek.modell=PC.modell WHERE Gyarto= A ; 23

d) Keressük meg a D gyártó által gyártott PC-k és laptopok átlagos árát? e) Keressük meg minden egyes PC-sebességéhez az ilyen sebességű PC-k átlagos árát? f) Keressük meg minden gyártó esetén a laptopok átlagos képernyőméretét? d)q1=(select ar FROM Termek INNER JOIN PC ON Termek.modell=PC.modell WHERE Termek.gyarto= D ) UNION ALL (SELECT ar FROM Termek INNER JOIN Laptop ON Termek.modell=Laptop.modell WHERE Termek.gyarto= D ); SELECT AVG(ar) FROM Q1; e) SELECT sebesseg, AVG(ar) FROM PC GROUP BY (sebesseg); f) SELECT gyarto, AVG(kepernyo) FROM Termek INNER JOIN laptop ON Termek.modell=laptop.modell GROUP BY (gyarto); 24

g) Keressük meg azokat a gyártókat, akik legalább háromfajta PC-t gyártanak? h) Keressük meg minden gyártó esetén a maximális PC árat? i) Keressük meg minden 150-nél nagyobb sebességű PC átlagos árát? j) Keressük meg minden olyan gyártóhoz, akik nyomtatót gyártanak, a PC-k átlagos merevlemezméretét g) SELECT gyarto FROM Termek INNER JOIN PC ON Termek.modell=PC.modell GROUP BY gyarto HAVING Count(*)>2; h) SELECT gyarto, MAX(ar) FROM Termek INNER JOIN PC ON Termek.modell=pc.modell GROUP BY (gyarto); i) SELECT AVG(ar) FROM PC WHERE sebesseg>150 GROUP BY sebesseg; i) SELECT gyarto, AVG(merevlemez) FROM Termek INNER JOIN PC ON Termek.modell=PC.modell WHERE gyarto IN (SELECT DISTINCT gyarto FROM Termek WHERE tipus= nyomtato ) GROUP BY gyarto; 25

Hajóosztályok(osztály, típus, ország, ágyúkszáma, kaliber, vízkiszorítás) Hajók(név, osztály, felavatva) Csaták(név, dátum) Kimenetek(hajó, csata, eredmény) 1. Adjuk meg a hajóosztályokat a gyártó országok nevével együtt, amelyeknek az ágyúi legalább 16-os kaliberűek. SELECT osztaly,orszag FROM Hajoosztalyok WHERE kaliber>=16; 26

2. Melyek azok a hajók, amelyeket 1921-ben avattak fel? 3. Adjuk meg a North Atlantic csatában elsüllyedt hajók nevét. SELECT nev FROM Hajok WHERE felavatva=1921; SELECT hajo FROM Kimenetelek WHERE csata= North Atlantic AND Allapot= elsullyedt ; 27

4. Az 1921-es washingtoni egyezmény betiltotta a 35.000 tonnánál súlyosabb hajókat. Adjuk meg azokat a hajókat, amelyek megszegték az egyezményt. SELECT hajo FROM Hajoosztalyok INNER JOIN Hajok ON Hajoosztaly.osztaly=Hajok.osztaly WHERE vizkiszoritas>35000 AND Felavatva>1921; 28

5. Adjuk meg a Guadalcanal csatában részt vett hajók nevét, vízkiszorítását és ágyúinak a számát. SELECT Hajo.nev, hajoosztaly.vizkiszoritas, hajoosztaly.agyukszama FROM Hajoosztaly, Kimenetelek, Hajok WHERE Hajoosztaly.osztaly=Hajo.osztaly AND Hajo.nev=Kimenetelek.hajo AND Csata= Guadalcanal ; 29

6. Adjuk meg az adabázisban szereplő összes hadihajó nevét (ne feledjük, hogy a Hajók relációban nem szerepel az összes hajó!) (SELECT hajo FROM Kimenetelek) UNION (SELECT nev FROM Hajok); 30

7. Adjuk meg azokat az osztályokat, amelyekbe csak egyetlenegy hajó tartozik SELECT hajoosztalyok.osztaly FROM hajoosztalyok, hajok WHERE hajoosztalyok.osztaly=hajok.osztaly GROUP BY hajoosztalyok.osztaly HAVING COUNT(*)=1; 31

8. Melyek azok az országok, amelyeknek csatahajóik és cirkálóhajóik is voltak? SELECT Hajoosztaly.orszag FROM Hajoosztaly, Hajoosztaj AS HO2 WHERE Hajoosztaly.orszag=HO2.orszag AND Hajoosztaly.tipus<>HO2.tipus; 32

9 Adjuk meg azokat a hajókat, amelyek újjáéledtek, azaz egyszer már megsérültek egy csatában, de egy későbbi csatában újra harcoltak. Q=SELECT hajo, csata, allapot, datum FROM Csatak INNER JOIN Kimenetelek ON Csatak.nev=Kimenetelek.csata WHERE ALLAPOT<> elsullyedt ; SELECT Q.hajo FROM Q, Q AS Q2 WHERE Q.hajo=Q2.hajo AND Q.allapot= serult AND Q.datum<Q2.datum 33