Uçuş verileri için seyahat planlama

SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Jasmin Ludolf

Content Developer

Bir havalimanının skor tahtası

Bir havalimanının örnek skor tahtası

SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Bir uçuş veri kümesi nasıl yapılandırılır?

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
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Bir uçuş rotası nasıl oluşturulur?

Dünyadaki tüm olası uçuş rotaları hakkında bir görsel

  • Tüm olası uçuş rotalarını almak için özyineleme kullanın
  • Bir rota, kalkış ve varış havalimanlarıyla tanımlanır
  • Gerçekçi rotalar için aktarma sayısını sınırlayın
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Uçuş rotası oluşturma - adım 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      |
| ...       | ...           | ...    |
+-----------+---------------+--------+
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Uçuş rotası oluşturma - adım 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 )
  • Bağlayıcı bölümde route alanını ekleyin

  • Özyinelemeli bölümde route değerlerini takip edin

  • Aktarma sayısını sınırlayın

SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Uçuş rotası oluşturma - sonuç

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     |    
| ...       | ...          | ...                                       |
+-----------+--------------+-------------------------------------------+
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Sınırlı olası uçuşları sorgulama

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 '...' ;

Aşağıdaki koşullarda tüm olası varış havalimanlarını bulun:

  • Kalkış havalimanı sabittir
    • New York
  • stops sayısı n ile sınırlıdır
  • Çıktı bir koşulla sınırlandırılır
    • maliyet sınırı
    • belirli bir varış için en ucuz rota
SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Olası uçuş rotalarını bulalım!

SQL Server'da Hiyerarşik ve Özyinelemeli Sorgular

Preparing Video For Download...