刚开始上班,闲着没什么事情,搞到一份2012年1月1号的列车时刻表数据库,是access版本的,稍后我会给出下载链接,研究了一下表结构,觉得这样的表结构还是比较合理的。于是也考虑了一下大家经常使用的时刻表查询工具的后台SQL实现。我估计大多数的工具比如极品时刻表、路路通时刻表等等,都是这样实现的。首先给出表结构,
基于这样的表结构,给出常用的查询SQL。
--车次查询
select * from train where id='K7726/K7727';
--车站查询
select * from train where station='龙家营';
--站站查询
SELECT T1.id, T1.station, t1.d_time, T2.station, T2.a_time,t2.p1-t1.p1 as 票价
FROM train AS T1, train AS T2
WHERE T1.station='龙家营' and T2.Station='邯郸' and T1.S_NO<T2.S_NO and T1.id=T2.id;
--中转查询(邯郸到聊城没有直达车)
select t1.id,t1.station,t2.station,t2.a_time,t3.id,t3.d_time,t4.station,(t2.distance-t1.distance)+(t4.distance-t3.distance) as 总里程
from train T1,train t2,train t3,train t4
where T1.station='邯郸'
and t4.station='聊城'
and t1.id=t2.id and t1.s_no<t2.S_No
and t3.id=t4.id and t3.s_no<t4.s_no
and t2.station=t3.station and t3.d_time>t2.A_time
order by (t2.distance-t1.distance)+(t4.distance-t3.distance) asc;
下面给出数据库的下载链接: