因为不同的公司可能使用同一公共汽车线路号,所以必需用公交公司和线路号来同时确定一条线路.

Stops 车站表 一些公共汽车停靠的站点.包含Edinburgh(爱丁堡)以及附近地区.
字段名 字段类型 字段说明
id INT 随机唯一标识
name CHAR(30) 站名,至少有一辆公交车停靠
Route 公交线路表 公共汽车行使的路线.
字段名 字段类型 字段说明
num CHAR(5) 公共汽车线路号 - 显示在公共汽车的前部.这些线路号经常包含一些字符.
company CHAR(3) 营运这些公交线路的公司, 在爱丁堡主要的公交公司是Lothian Region Transport - LRT
pos INT 说明该站在本条线路中的序号,一些线路可能多次经过同一车站. 大部分汽车双向行使.
stop INT 用来应用stops(车站)表
  1. 显示数据库中包含多少车站.
  2. 找出站名为'Craiglockhart'的id 号 .
  3. 给出 'LRT'公司经营的'4'号线路的所有车站的id(站号)和name(站名).
  1. 请看一下已经给出的查询,'SELECT company, num, COUNT(*) FROM route WHERE stop=149 OR stop=53 GROUP BY company, num '它将列出所有公交线路经过车站London Road (149)或Craiglockhart (53)的次数.修改一下该查询,使得该查询仅列出两次经过这些车站的两条线路.请用 HAVING 子句来仅显示这两条线路.
  2. 执行下面的self join(自连接)查询,'SELECT a.company, a.num, a.stop, b.stop FROM route a JOIN route b ON (a.company=b.company AND a.num=b.num) WHERE a.stop=53',可以发现 b.stop 给出了所有从Craiglockhart(stop=53)出发可到达的站点.请调整一下该查询,让它给从Craiglockhart(stop=53)到London Road(stop=149)的线路.
  3. 列下面的查询和上例中的比较类似.只是通过两次连接stops表,让我们可以通过站名而不是站号来查询公交线路.'SELECT a.company, a.num, stopa.name, stopb.name FROM route a JOIN route b ON (a.company=b.company AND a.num=b.num) JOIN stops stopa ON (a.stop=stopa.id) JOIN stops stopb ON (b.stop=stopb.id) WHERE stopa.name='Craiglockhart',请调整一下该查询,让它可以显示'Craiglockhart'和'London Road'间的公交线路. 你也可以试试显示'Fairmilehead' 和 'Tollcross'间的公交线路.
  1. 给出连接车站号为115和137公交线路.
  2. 给出连接车站 'Craiglockhart' and 'Tollcross'的公交线路.
  3. 给出可以从'Craiglockhart' 车站乘坐一辆汽车就能到达的车站.显示的结果包含到达车站号,车站名,公交线路的公司和公交线路号.
  4. 给出从Sighthill 到 Craiglockhart的所有可能的交通线路.

Technorati : SQL 练习

posted on 2007-10-24 09:34  田老师  阅读(1120)  评论(1)    收藏  举报