一.题目
最后结果要显示出 flight_id ;from_location; to_location; 航班出发时间为四月份的ticket price
二.思路
(1)首先观察要显示的结果都在哪些表中,就把那些表join 起来
from_location; to_location 都在air_flight中
price在air_flight_details里
航班出发时间(涉及到月的)是air_flight_details中的flight_departure_date
flight_id 是air_flight和air_flight_details的关联列
(2)先join起来,再细改
SELECT *
FROM air_flight af
JOIN air_flight_details afd ON af.flight_id=afd.flight_id
(3)join好后看条件
from_location to_location flight_id price 这四个都好办
af.from_location af.to_location af.flight_id afd.price 对应就好
关键是“航班出发时间为四月份”怎么办?
date 数据类型是“yyyyy-mm-dd”
且题中条件全为模糊,between and 显然无从下手
此时需要用到datepart
先看一个简单的datepart例子明白它的含义用法(菜鸟教程-datepart)
相当于把“2008-11-11”按年,月,日拆分成名为
OrderYear OrderMonth OrderDay 这三个表格
按这个思路运用到这道题上来
我要求4月份的航班,就把flight_departure_date拆开,不过由于我只需要月份筛选,所以只拆一个月份表格就行了。
datepart(mm,afd.flight_departure_date) as month
这下就单独拆出一张月份列了,对这列进行筛选
WHERE datepart(mm,afd.flight_departure_date) =4
注意几个细节:
1.datepart返回值为int 类型
2.mm,m,month 都是月,都可以用
3.04=4,mm与m是同样的,不区分几位数,写04也可以,不要加‘04’这种单引号,因为是int
三.综上
SELECT af.flight_id, afd.price, af.from_location, af.to_location,
datepart(mm,afd.flight_departure_date) as month
FROM air_flight af
JOIN air_flight_details afd ON af.flight_id=afd.flight_id
WHERE datepart(mm,afd.flight_departure_date)=4
ORDER BY af.flight_id,af.from_location;
注意的细节:
1.WHERE datepart(mm,afd.flight_departure_date)=4 这里不能写成
WHERE month =4
因为优先级的问题
sql执行顺序优先级由高到低依次是:
1.from关键字后面的语句
2.where关键字后面的语句
3.group by后面的语句
4.select后面的语句
5.order by后面的语句。
直接写WHERE month =4 ,SQL不知道month是什么东西
所以要WHERE datepart(mm,afd.flight_departure_date)=4