Perencanaan perjalanan untuk data penerbangan

Kueri Hierarkis dan Rekursif di SQL Server

Jasmin Ludolf

Content Developer

Papan jadwal bandara

Contoh papan jadwal bandara

Kueri Hierarkis dan Rekursif di SQL Server

Struktur data penerbangan

Departure Arrival FlightNumber Cost Time
London Paris LH3827 90 2
Vienna New York MH2370 379 8
New York Paris LH9832 489 9
Vienna Paris SU2389 200 3
London Chicago OP1230 650 10
New York Chicago NL5460 150 2
Kueri Hierarkis dan Rekursif di SQL Server

Cara membangun rute penerbangan

Gambar tentang semua rute penerbangan yang mungkin di dunia

  • Gunakan rekursi untuk mendapatkan semua rute penerbangan
  • Rute ditentukan oleh bandara keberangkatan dan tujuan
  • Batasi jumlah transit agar rute realistis
Kueri Hierarkis dan Rekursif di SQL Server

Membangun rute penerbangan - langkah 1

WITH flightRoute (Departure, Arrival, stops) AS(
  -- Anchor query
  SELECT f.Departure,f.Arrival, 0
      FROM flightPlan f
      WHERE Departure = 'Vienna'
  -- Recursive query
  UNION ALL
      SELECT p.Departure, f.Arrival, p.stops + 1
      FROM flightPlan f, flightRoute p
      WHERE p.Arrival = f.Departure AND 
        p.stops < 5 
)
SELECT Departure, Arrival, stops
    FROM flightRoute
+-----------+---------------+--------+
| Departure | Arrival       | stops  |
|-----------|---------------|--------|
| Vienna    | Paris         | 2      |
| Vienna    | San Francisco | 3      |
| Vienna    | Vienna        | 3      |
| Vienna    | Frankfurt     | 3      |
| ...       | ...           | ...    |
+-----------+---------------+--------+
Kueri Hierarkis dan Rekursif di SQL Server

Membangun rute penerbangan - langkah 2

WITH flightRoute (Departure, Arrival, stops, route) AS(
  SELECT f.Departure, f.Arrival, 0, 
  CAST(Departure + '->' + Arrival AS VARCHAR(MAX))
      FROM flightPlan f
      WHERE Departure = 'Vienna'

UNION ALL SELECT p.Departure, f.Arrival, p.stops + 1, p.totalCost + f.Cost, CAST(p.route + '->' + f.Arrival AS VARCHAR(MAX)) FROM flightPlan f, flightRoute p
WHERE p.Arrival = f.Departure AND p.stops < 5 )
  • Perkenalkan route di anggota jangkar

  • Lacak route di anggota rekursif

  • Batasi jumlah singgah

Kueri Hierarkis dan Rekursif di SQL Server

Membangun rute penerbangan - hasil

SELECT Departure, Arrival, Route
    FROM flightRoute
+-----------+--------------+-------------------------------------------+
| Departure | Arrival      | route                                     |
|-----------|--------------|-------------------------------------------+
| London    | New York     | London -> Vienna -> Chicago -> New York   |
| Vienna    | Chicago      | Vienna -> London -> Chicago               |        
| Paris     | Los Angeles  | Paris -> Toronto -> Los Angeles           |
| Chicago   | New York     | Chicago -> New York                       |
| Rome      | New York     | Rome -> London -> Chicago -> New York     |    
| ...       | ...          | ...                                       |
+-----------+--------------+-------------------------------------------+
Kueri Hierarkis dan Rekursif di SQL Server

Kueri rute penerbangan dengan batasan

WITH flightRoute (Departure, Arrival, stops, totalCost, route) AS(
  SELECT f.Departure, f.Arrival, 0, Cost,
    CAST(Departure + '->' + Arrival AS NVARCHAR(MAX))
      FROM flightPlan f
      WHERE Departure = 'New York'
  UNION ALL
  SELECT  p.Departure, f.Arrival, p.stops+1, 
  p.totalCost + f.Cost, p.route + '->' + f.Arrival
      FROM flightPlan f, flightRoute p
      WHERE p.Arrival = f.Departure AND p.stops < '...' 
)
SELECT '...'    
    FROM flightRoute
    WHERE '...' ;

Temukan semua bandara tujuan yang memungkinkan jika:

  • Bandara keberangkatan tetap
    • New York
  • Jumlah stops dibatasi hingga n
  • Keluaran dibatasi oleh suatu kondisi
    • batas biaya
    • rute termurah ke suatu tujuan
Kueri Hierarkis dan Rekursif di SQL Server

Ayo cari rute penerbangan yang mungkin!

Kueri Hierarkis dan Rekursif di SQL Server

Preparing Video For Download...