前两天看到一个sql面试题,发现不太会做,在Javaeye论坛上提问,N多达人进行了回答,个人进行总结归纳一下,以备忘,也可以让大家借鉴一下,很不错。
在数据库中已存在如下表(’pk’表示主键,fk引用pk)
flight(航班信息表) city(城市表)
Flowid (流水号) pk
|
orgCityCode(起飞城市编号) fk
dstCityCode(到达城市编号) fk
flightnum(航班号)
deptDateTime(起飞时间)
|
cityCode(城市编号) PK
|
cityName(城市名称)
|
1) 请用SQL语句选出从“北京”出发飞往各地的航班号,并按照到达城市编号排序
2) 请用SQL语句选出2009-6-1以后起飞的航班,并按起飞时间从早到晚排序。输出内容:起飞城市名称、到达城市名称、航班号、起飞时间
3) 请用SQL语句统计2009-6-1至2009-6-10每天从“北京”出发飞往各地的航班的数量。
4) 请用SQL语句找出今天只有去程,没有回程的航线。
----------------------------------------------------------------------------------------------------------------------------------
1)select flightnum from flight f inner join city c
on f.orgCityCode=c.cityCode
where c.cityName='北京'
order by f.dstCityCode
2)推荐使用第二种方法。第一种较复杂,不太容易理解。
select start_flight.startName as startCityName,c2.cityname as endCityName,start_flight.flightnum,start_flight.deptDateTime
from (select f.*,c1.cityname as startName from flight f inner join city c1 on c1.citycode=f.orgCityCode) start_flight
inner join city c2 on start_flight.dstCityCode=c2.cityCode
where start_flight.deptDateTime>cast('2009-06-01' as datetime)
order by start_city.deptDateTime
select c1.cityname,c2.cityname,f.flightnum,f.deptDateTime
from flight f
inner join city c1 on c1.cityCode=f.orgCityCode
inner join city c2 on c2.cityCode=f.dstCityCode
where f.deptDateTime>'2009-06-01'
order by f.deptDateTime
3)
select count(f.flowid)
from flight f inner join city c on f.orgCityCode=c.cityCode
where c.cityName='北京' and f.deptDateTime>=cast('2009-06-01' as datetime) and f.deptDateTime<=cast('2010-06-10' as datetime)
group by convert(varchar(10),f.deptDateTime,23)
4)推荐使用第二种方法较好。第一种方法是一种union all连接,它会把flight所有的字段合在一起两次(有两个flight表),sql的执行效率会很低;第二种使用了一个not exist,很聪明,它只需要进行简单的两次查询就可以得到结果。
select distinct f1.*
from flight f1,flight f2
where f1.orgCityCode!=f2.dstCityCode and f1.dstCityCode!=f2.orgCityCode and convert(char(10),f.deptDateTime,23)=convert(char(10),getdate(),23)
select f.*
from flight f
where convert(char(10),f.deptDateTime,23)=convert(char(10),getdate(),23)
and not exists(select * from train f1 where f.startCode=f1.endCode and f.endCode=f1.startCode)
分享到:
相关推荐
同时,理论与实践相结合,每解完一道题,尝试理解和应用其背后的原理,这样不仅能提升你的SQL技能,还能增强解决问题的能力。希望这个题库能成为你SQL学习旅程中的宝贵财富,祝你在学习的道路上不断进步!
《数据库系统工程师2006...每一道题的详细解答可以帮助理解考点,找出知识盲点,并提升解题能力。对于准备软考数据库系统工程师的人员来说,这是一份非常实用的学习资料,能有效提升备考效率,为考试成功打下坚实基础。
- **数的推理题**:这是一道逻辑推理题,通常需要根据信息推断出两数之和与积的特性。解答这类问题需要逻辑推理和数学知识。 - **病狗问题**:这是一个经典的逻辑推理问题。假设每户都知道其他家的狗是否生病,但...
这涉及到多表查询和数据库连接的管理,可能需要用到ADO.NET库来与SQL Server 2005进行交互。候选人应展示如何创建并执行SQL查询语句,以分别从左侧和右侧商品表中获取数据。 2. 查询功能: 左侧的商品列表应支持...
每一道题目的解答都能帮助考生巩固和深化对数据库理论及实践的理解。同时,答案的解析部分尤为重要,它能帮助考生理解错误所在,避免在未来遇到类似问题时再次出错。因此,充分利用这些真题资料,结合教材和实际操作...
7. **数据库管理系统**:了解常见的DBMS(如Oracle、MySQL、SQL Server)的特点和用法,可能有选择题或简答题,考察不同DBMS之间的区别和应用场景。 虽然提供的文件名称列表“IMG_7834.jpg、IMG_7835.jpg、IMG_7833...
1. 采用SQL Server数据库,NT4.0或者Windows98操作系统以上。题库可以自由维护、扩充,题库大小只受物理限制的存储容量。 2. 权限分明的管理操作系统,支持按操作者及题库权限进行操作,确保题库的公共性与私有性...
考生应仔细解答每一道题目,并对照答案进行自我评估,找出知识盲点。 "tp1;全国计算机等级考试实战冲刺模拟试卷三级数据库技术雪;光明科技;西安电子科技大学出版社;.TIF" 这个文件名表明它可能是一本由光明科技出版...
### .NET方向企业面试题解析 #### 1. 什么叫SQL注入?...以上是对给定文件中的部分面试题进行了详细的解答和扩展。每一道题目都涵盖了关键知识点,旨在帮助准备面试的人更好地理解和掌握.NET相关的技术要点。