Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda

Slides:



Advertisements
Hasonló előadás
Koordináták, függvények
Advertisements

2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
10. gyakorlat SQL SELECT.
Tananyag: konzultáció
2012. tavaszi félév Véső Tamás. A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges,
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 4. Előadás Az SQL adatbázisnyelv Sorváltozók Alkérdések Ismétlődő sorok Összesítések 1.
Lekérdezések SQL-ben Relációs algebra A SELECT utasítás
Analitikus, statisztikai és szélsőérték fv-k Hári Veronika
Adatbázis rendszerek I Relációs kalkulus Általános Informatikai Tsz. Dr. Kovács László.
Anyagadatbank c. tárgy gyakorlat
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely ABR ( Adatbázisrendszerek) 12. Előadás: 0. Egyes érdekesebb lekérdezésekről 1.NULL értékek.
2012. tavaszi félév Vitéz Gergely. A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges,
Delphi programozás alapjai
Adatbázis gyakorlat – SUBSELECT – Tarcsi Ádám március.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
Többtáblás lekérdezések, allekérdezések Rózsa Győző
SQL – DQL (Data Query Language ) adat lekérdezések
SQL Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések
Adatbázis-kezelés.
Adatbázis-kezelés ACCESS program:
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
2006. október 2.Markó Tamás, PTE TTK1 Az Oracle SQL 4. Összesítés és csoportosítás lekérdezésekben. Halmazműveletek.
ADATBÁZISOK
ADATBÁZISOK
Részletező csoportosítások Rózsa Győző
ADATBÁZIS HASZNÁLAT I. 2. gyakorlat. Figyelem!!! A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem.
Folytassuk… (2.).
Érettségi feladatok megoldása LINQ-kel
Lekérdezésfordító Adatbázisok 2.. Elemzés Lekérdezés Elemző Előfeldolgozó Logikai lekérdezéstervet generáló Lekérdezésátíró Jónak vélt logikai lekérdezésterv.
Lekérdezésfordító Adatbázisok tervezése, megvalósítása, menedzselése.
Összesítés és csoportosítás lekérdezésekben. Halmazműveletek.
- adatbázisséma definiálása (DDL) Data Definition Languages, - adatok aktualizálása (DML),Data Maniputaion Language - lekérdezési lehetőségek (DML) Data.
SQL. SQL = Structured Query Language (= struktúrált lekérdező nyelv). A relációs adatbázis-kezelés szabványos nyelve. Nem algoritmikus nyelv, de algoritmikus.
SQL.
Az SQL nyelv alapjai.
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
2012. tavaszi félév Véső Tamás. Kérdezze le minden dolgozó nevét, jövedelmét, részlegének nevét és a részlegében dolgozók legkisebb és legnagyobb jövedelmét,
2012. tavaszi félév Véső Tamás Véső Tamás OE­NIK / 18.
2012. tavaszi félév Véső Tamás Véső Tamás OE­NIK / 29.
Részletező csoportosítások Hári Veronika
Részletező csoportosítások Rózsa Győző
Adatbázis használat I. 2. gyakorlat.
ADATBÁZIS HASZNÁLAT I. 3. gyakorlat. Figyelem!!! A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem.
Készítette: Tóth Ervin
Az SQL nyelv. SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data.
DQL. A select parancs az adattábla lekérdezésére szolgál, azaz a táblában tárolt adatok közül az előírt feltételeknek megfelelőket kiválogatja. Formája.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 10. gyakorlat SQL SELECT, Összekapcsolás, Nézettáblák.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
SQL SELECT parancsok Kottyán László. A bemutató mintatáblái.
1 Informatikai Szakképzési Portál Adatbázis kezelés DQL – Adatlekérdező nyelv.
Adatbázisok gyakorlat
SQL haladó Külső összekapcsolások, Csoportosítás/Összesítés,
Többtáblás lekérdezések, hierarchikus lekérdezések, allekérdezések
2. AB gyakorlat Egytáblás csoportosító lekérdezések.
SQL. SQL jellemzői Nem algoritmikus (nem tartalmaz algoritmikus szerkezeteket: ciklus, eljárás, elágazás) Nem rekurzív (önmagát nem hívhatja) Halmazorientált.
Adatbázis-kezelés 3-4. Adatok lekérdezése utasítás általános formája SELECT [ALL/DISTINCT] {*/, …, } FROM [ ], …, [ ] [WHERE GROUP BY, …, HAVING ORDER.
Adatbázis-kezelés. Középszint: –1-2 tábla –SQL-nyelv és lekérdező-rács használata –Űrlap és jelentés készítés Emelt szint: –több tábla (kapcsolatok) –több.
– SELECT - 1. – Tarcsi Ádám január Adatbázis gyakorlat.
1 Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda ABR ( Adatbázisrendszerek) 2. Előadás : Műveletek a relációs modellben 2.2 Műveletek a.
SQL bevezetés Select-From-Where záradékok
Adatbázisok 1. SQL (alkérdések). Az IN használata Emlékezzünk vissza: Az IN után szereplő multihalmaz elemei lekérdezéssel is megadhatók SELECT nev FROM.
SQL aggregálás, csoportosítás és összekapcsolás Adatbázisok 1.
Sapientia - Erdélyi Magyar Tudományegyetem (EMTE) Csíkszereda
SQL Több táblás lekérdezések. Halmazműveletek. Alkérdések
ABR ( Adatbázisrendszerek)
Előadás 03 Algebrai optimalizáció Mi a NULL? Multihalmazok
Előadás másolata:

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 4. Előadás Az SQL adatbázisnyelv Sorváltozók Alkérdések Ismétlődő sorok Összesítések 1

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda Sorváltozók 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

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda Sorváltozók 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

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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 (multiple-row subquery); több oszlopot, több sort, u.n. több oszlopos alkérdés (multiple-column); Használt operátorok: IN (NOT IN)-benne van, tartalmazza ALL-mind ANY-valamelyik 5

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda Példa: “Keressük azokat a gyártókat, akik 2.5 GHz alatti pc-ket árulják. A megoldás alkérdés segítségével: 1) SELECT termek.gyarto 2) FROM termek 3) WHERE termek.modell IN 4) (SELECT pc.modell 5) FROM pc WHERE pc.sebesseg<2.5); A skalár értéket adó alkérdéssel használható operátorok az: =, <, <=, >, >=, <>. 6

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda Példa: Keressük azon pc-ket, amelyek sebessége nagyobb, mint az 1003-as pc-jé; SELECT pc.modell FROM pc WHERE pc.sebesseg > (SELECT pc.sebesseg WHERE pc.modell = 1003); 7

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda Példa: Keressük azon pc-ket, amelyeknek az ára nagyobb, mint a laptopok közül a minimális ár. SELECT pc.modell FROM pc WHERE pc.ar> (SELECT MIN(laptop.ar) FROM laptop) 8

Példa: SELECT termek.gyarto FROM termek, pc 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 termek.gyarto FROM termek, pc WHERE termek.modell = pc.modell AND EXISTS (SELECT * FROM pc WHERE pc.ar< 1000); A fenti példa csak abban az esetben adja meg a pc-k gyártóit, ha van legalább egy pc, amelyik ára kisebb, mint 1000 dollár. 9

Szállítók: Szállít: SzallID SzallNev SzallCim 111 Rolicom A.Iancu 15 222 Sorex 22 dec. 6 SzallID AruID Ar 111 45 25000 222 26500 67 17000 56 20000 18000 22500 Áruk: AruID AruNev MertEgys 45 Milka csoki tábla 67 Heidi csoki 56 Milky way rúd 10

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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 szallitok.SzallID, szallitok.SzallCim 2) FROM szallitok 3) WHERE SzallID IN 4) (SELECT szallit.SzallID 5) FROM szallit 6) WHERE szallit.AruID IN 7) (SELECT aruk.AruID 8) FROM aruk 9) WHERE AruNev LIKE ‘%csoki%’) ); 11

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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) GROUP BY RészlegID); 12

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. 13

gyártó(Laptop Termék) gyártó(PC Termék) 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 SELECT gyarto FROM termek WHERE termek.tipus=‘laptop’ AND Termek.gyarto NOT IN (SELECT gyarto FROM termek WHERE termek.tipus = ‘pc’); gyártó(Laptop Termék) gyártó(PC 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); 14

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) 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); 15

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) 16

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)); 17

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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) 18

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda Ö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; 19

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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 20

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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>]; 21

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 900 234555 Szilágyi Pál 700 123444 Vincze Ildikó 1 800 333333 Kovács István 500 Eredmény: RészlegID AVG(Fizetés) MIN(Fizetés) MAX(Fizetés) SUM(Fizetés) 1 800 2 500 300 700 1500 9 650 400 900 1300 22

Ev Szak Csoport letszam 2 KGI A 13 B 14 GI 12 SELECT ev, SUM(letszam) FROM hallgato GROUP BY ev Ev SUM(letszam) 2 51 SELECT ev,szak, SUM(letszam) FROM hallgato GROUP BY ev, szak Ev Szak SUM(letszam) 2 KGI 27 GI 24

Ev Szak Csoport letszam 2 KGI A 13 B 14 GI 12 SELECT ev, COUNT(*) FROM hallgato GROUP BY ev Ev SUM(letszam) 2 4 SELECT ev,szak, COUNT(*) FROM hallgato GROUP BY ev, szak Ev Szak SUM(letszam) 2 KGI GI

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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); 25

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda Keressük meg a PC-k átlagos sebességét? Keressük meg a 2500$-nál drágább laptopok átlagos sebességét? 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’; 26

e) SELECT sebesseg, AVG(ar) FROM PC GROUP BY (sebesseg); 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); 27

h) Keressük meg minden gyártó esetén a maximális PC árat? 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; 28

Hajók(név, osztály, felavatva) Csaták(név, dátum) 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; 29

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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’; 30

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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; 31

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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’; 32

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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); 33

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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; 34

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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; 35

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda 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 36