Az adatbázis forrását az OurAirports.com
kínálja, melynek adatait rendszeresen frissítik, karbantartják. Mi jelenleg a 2023. decemberi adatokkal
fogunk dolgozni. Az oldal egyébként az adatokon túl
térképen
is izgalmasan szemlélteti a világ repülőtereit.
Pontosítsunk egy picit! Az adatbázisban nem csupán nagy nemzetközi légikikötők, hanem pici, kisgépes,
füves pályájú repülőterek, sőt helikopter leszállóhelyek is szerepelnek. Továbbá találhatóak benne olyan
légibázisok is, melyek valaha ugyan valóban léteztek, ám már nem működnek, esetenként akár már a helyüket
sem feltétlenül találnánk meg a helyszínen járva. Ezek a tulajdonságok azonban jelölve vannak a táblákban,
tehát lesz lehetőségünk csak a létező helyekkel dolgoznunk, és azon belül is a sajátosságokra rákeresnünk,
szűrnünk.
![]() |
![]() |


Mivel az airports.sql és a runways.sql fájlok mérete nagyobb, mint a webszerverek
jellemző alapértelmezett fájlméret korlátja, importálás előtt célszerű lehet ellenőriznünk
saját fejlesztőkörnyezetünk beállításait, és szükség esetén a
xampp/php/php.ini
fájlban az alábbi sorok paramétereit módosítani:
post_max_size = 8M -> post_max_size = 32M upload_max_filesize = 2M -> upload_max_filesize = 32MA módosított beállítások életbe lépéséhez a webszervert újra kell indítani.
A phpMyAdmin felületen ismerkedjen meg az adattáblák szerkezetével, fedezze fel az azok között kialakítható
kapcsolatokat, majd ezt követően SQL lekérdezésekkel adjon választ az alábbi kérdésekre. Egy-egy kérdés
megválaszolása után a működő lekérdezést mentse el egy .txt szöveges fájlba a kérdésekhez tartozó
sorszám feltüntetésével.
ráhúzva az egeret információbuborékot ad az elkészítendő SQL utasítás megírásához
haladó szintű, összetettebb feladat, szintén információbuborékablakkal
rákattintás után megmutatja a lekérdezés kívánt eredményét, vagy annak egy részét

SELECT COUNT(DISTINCT type)
FROM airports
A lekérdezés feltételében használjuk ki, hogy mindhárom leszállóhely-típus - és csak ezek - megnevezése úgy végződik, hogy airport.

A folytatásban szereplő kérdésekben csak a valóban repülőtereket (large_airport, medium_airport, small_airport), nevezzük repülőtérnek. Ennek megfelelően az egyéb típusú leszállóhelyeket (heliport, balloonport, seaplane_base) hagyja figyelmen kívül a repülőterekre vonatkozó kérdések esetén!



SELECT * FROM countries
WHERE code NOT IN (SELECT iso_country FROM airports)

SELECT code, name, continent FROM countries
WHERE code IN
(SELECT iso_country FROM airports
WHERE iso_country NOT IN
(SELECT iso_country FROM airports
WHERE type!='heliport' AND type!='closed'))

Olyan országokat keresünk tehát, amelyekhez kizárólag heliport leszállóhely található az airports táblában, ám sem működő reptér, sem működő balloonport nem létezik jelenleg. Ha korábban bezárt repterek most már nem számítanak leszállóhelynek.


SELECT iso_country,
COUNT( IF( continent='EU', 1, null ) ) AS 'Europe',
COUNT( IF( continent='AS', 1, null ) ) AS 'Asia'
FROM airports
WHERE iso_country='RU' OR iso_country='TR'
GROUP BY iso_country
ORDER BY 1

A 19. kérdés eredményétől függetlenül nem volna helyes, ha Oroszország, illetve Törökország minden leszállóhelyét ugyanarra a kontinensre helyezné az adatbázis, mint magát az országot, hiszen mindkét országnak van európai és ázsiai területe is.

SELECT ... FROM ... WHERE ...
ORDER BY SIGN(longitude_deg) DESC, longitude_deg

Némi egyszerűsítéssel tekintsük Oroszország egyértelműen ázsiai területének a keleti hosszúság 60.35°-tól keletre eső részét! Ám az SQL kérés megfogalmazásánál legyen körültekintő, ugyanis keleti területeknek számítanak azok a legmesszebb fekvő távol-keleti tájak is, amelyek földrajzi koordinátáit már nyugati hosszúsággal (az adatbázisban negatív számokkal) azonosítjuk!

UPDATE airports
SET continent = 'AS'
WHERE iso_country='RU' AND continent='EU'
AND (longitude_deg>60.35 OR longitude_deg<0)
VIGYÁZZON! A módosító utasítás helytelen megírása olyan adatokat is átírhat a táblázatban, amiket nem szeretnénk megváltoztatni. A MŰVELET NEM VISSZAVONHATÓ! Körültekintően dolgozzon!

SELECT name, elevation_ft, ROUND(elevation_ft*0.3048) AS elevation_m
FROM airports
ORDER BY elevation_ft DESC
LIMIT 0, 1

1 láb = 0.3048 méter.
Nemzetközi repülőterek azok a repterek, amelyek esetén az airports tábla name mezőjében szerepel az International szó.

UPDATE airports
SET elevation_m = ROUND(elevation_ft*0.3048)
Tesszük mindezt azért, hogy ebben az oszlopban az egyes leszállóhelyek tengerszint feletti magassága méterben is szerepelhessen a táblázatban, a további kérdések megválaszolásának megkönnyítése érdekében.

SELECT name, continent
FROM countries
WHERE code IN
(SELECT iso_country FROM airports
WHERE elevation_m > 4000 )
ORDER BY 2, 1


SELECT ... , ... , ... , ...
FROM airports, countries
WHERE airports.iso_country = countries.code
AND ...
AND ...
ORDER BY ... LIMI 0, 1

A folytatásban a kifutópályák adatait tartalmazó runways táblával fogunk dolgozni. Ez a tábla az airport_ref mezőjén keresztül kapcsolódik az airports táblához, annak elsődleges kulcsát használva. Szükség esetén ennek megfelelően kapcsolhatja össze a két táblát a következő lekérdezésekben.

SELECT ... ... ...
FROM runways, airports, countries
WHERE runways.airport_ref=airports.id
AND airports.iso_country=countries.code
AND lighted=1
ORDER BY ...
LIMIT 0, 1

SELECT CONCAT( ROUND(
(SELECT COUNT(DISTINCT airport_ref) FROM runways)
/ (SELECT COUNT(id) FROM airports)
* 100 , 1) , '%' ) AS szazalek
Mivel kevesebb sor van a runways táblában, mint az airports táblában, biztosak lehetünk benne, hogy nem minden reptérhez tartozik kifutópálya adat is az adatbázisban. Ám abban már nem lehetünk biztosak, hogy minden reptérhez legfeljebb egy kifutópálya tartozik.

CREATE TEMPORARY TABLE eu_biggest
SELECT name, COUNT(*) AS db
FROM airports, runways
WHERE airports.id=runways.airport_ref
AND continent='EU'
AND type!='closed'
GROUP BY airports.id ;
SELECT * FROM eu_biggest
WHERE db = (SELECT MAX(db) FROM eu_biggest)
A lekérdezés eredményében megjelenő rövidítések könnyebb értelmezéhez szükséges lehet rájuk keresni a neten. A találatok között segíthet pl. ez a link: Runway surface types
| solid | szilárd burkolatként jelöljük meg az aszfalt, ill. a beton burkolatú leszállóhelyeket, vagyis azokat, ahol a surface oszlopban szereplő kifejezésnek része az ASP, a BIT, a CON, vagy a PEM karaktersorozat. |
| grass | tehát füves megjelölést használjunk ott, ahol a surface oszlopnak része a GRAS, GRE, GRS, TURF karaktersorozatok valamelyike. |
| unknown | ezt a jelölést használjuk ott, ahol a surface mező kitöltetlen, vagy szerepel benne az UNK karaktersorozat. |
| other | legyen ez a surface_type tartalma minden más jelölés esetén! |
A feladatot egy lépésben nem, csak négy önálló UPDATE utasítással tudja elvégezni.
A következő három kérdés során kifejezetten helikopter leszállóhelyekkel foglalkozunk. Tekintsük most helikopter leszállóhelynek azokat a sorokat a runways táblából, ahol a length_ft és a width_ft mezők értéke megegyezik, és értelemszerűen nagyobb nullánál.
előző oldal |
random oldal | következő oldal ![]() |