Ana içeriğe geç
Kesit SQL
Orta · Kanat Havayolları

Aynı tabloyu iki kez kullanmak: kalkış ve varış şehri, aktarmalı yolculuklar

Havalimanı tablosunu iki rolde birleştirmek, dönüşü olmayan rotayı bulmak ve aktarma bağlantılarını eşleştirmek.

Uygulamada aç, 6 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Bir tablo, iki rol

Bir rotanın hem kalkışı hem varışı hv_airports tablosuna bağlanır. Aynı tabloyu iki farklı takma adla birleştirirsin: biri kalkış, biri varış rolünde.

SELECT r.route_id, k.city AS kalkis, v.city AS varis, r.distance_km
FROM hv_routes r
JOIN hv_airports k ON k.airport_code = r.origin
JOIN hv_airports v ON v.airport_code = r.dest
ORDER BY r.distance_km DESC
LIMIT 5;

Aktarma: iki uçuşu eşleştirmek

Bir yolcu Van'dan İstanbul'a inip aynı gün yurt dışına devam edebilir mi? İlk uçuşun varış havalimanı ikincinin kalkışı olmalı ve arada makul bir bekleme süresi olmalıdır. Bu, hv_flights'ın kendisiyle birleştirilmesidir:

SELECT f1.flight_no AS ilk, f2.flight_no AS ikinci, r2.dest AS son_varis,
       ROUND((julianday(f2.sched_dep) - julianday(f1.sched_arr)) * 1440) AS bekleme_dk
FROM hv_flights f1
JOIN hv_routes r1 ON r1.route_id = f1.route_id
JOIN hv_routes r2 ON r2.origin = r1.dest
JOIN hv_flights f2 ON f2.route_id = r2.route_id
WHERE r1.origin = 'VAN' AND r1.dest = 'IST'
  AND f1.sched_dep >= '2024-12-20' AND f1.sched_dep < '2024-12-21'
  AND f2.sched_dep >= f1.sched_arr
  AND f2.sched_dep < '2024-12-21'
ORDER BY bekleme_dk
LIMIT 5;
Eşleşme patlamasıKendine birleştirmede koşulları dar tutmazsan (aynı gün, belirli havalimanı) sonuç uçuş sayısının karesi kadar büyüyebilir. Önce filtrele, sonra birleştir.
Alıştırmalara geç (6)