首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 進階教程:自我連接應用實例(公交換乘查詢)

     編輯:關於SqlServer

自我連接指單一資料表與自己 JOIN,需使用資料表別名區分兩個實例。語法:

FROM table AS A, table AS B
WHERE A.col = B.col ...

範例資料:愛丁堡公交系統

  • 車站表 stops:id, name
  • 路線表 route:num(路線號), company(營運商), pos(站序), stop(站點ID)

案例一:同一路線任意兩站連通性

SELECT * FROM route R1, route R2
WHERE R1.num = R2.num
  AND R1.company = R2.company;

結果:同一路線的所有站點組合,可知任意兩站是否直達。

案例二:共站換乘查詢

SELECT * FROM route R1, route R2
WHERE R1.stop = R2.stop;

結果:所有共用同一車站的路線組合,換乘分析基礎。

案例三:兩站之間換乘路線規劃

SELECT R1.company, R1.num
FROM route R1, route R2, stops S1, stops S2
WHERE R1.num = R2.num
  AND R1.company = R2.company
  AND R1.stop = S1.id
  AND R2.stop = S2.id
  AND S1.name = 'Craiglockhart'
  AND S2.name = 'Tollcross';

邏輯:找出同時經過 Craiglockhart 與 Tollcross 的路線(同路線不同站序),即為直達路線。若無直達,可進一步以共站為中介查詢換乘方案。

關鍵點總結

  • 自我連接語法簡單、語意豐富,善用別名與多表聯查可解決圖論、層級、網路拓撲等問題。
  • 公交換乘、員工主管關係、零件組裝樹(BOM)、好友社交圖譜皆為經典應用場景。
  • 效能注意:大表自我連接產生笛卡兒積,需配合索引(如 route(num, company)、route(stop))與必要篩選條件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved