热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle面试题之:复杂的查询与实例解析

当需要对查询到的结果进行比较复杂的处理的时候,可以借助联合查询、子查询等得到期望的结果。下面列举一个具体的经典试题,希望对读者有所启发。..总结思考

        当需要对查询到的结果进行比较复杂的处理的时候,可以借助联合查询、子查询等得到期望的结果。下面列举一个具体的经典试题,希望对读者有所启发。

1.题目要求:

表 NBA 记录了TEAM

夺冠球队的名称及年份:

TEAM               YEAR
--------------------------------------------------
活塞                 1990
公牛                 1991
公牛                 1992
公牛                 1993
火箭                 1994
火箭                 1995
公牛                 1996
公牛                 1997
公牛                 1998
马刺                 1999
湖人                 2000
湖人                 2001
湖人                 2002
马刺                 2003
活塞                 2004
马刺                 2005
热火                 2006
马刺                 2007
凯尔特人          2008
湖人                 2009

湖人                 2010



请写出一条 SQL 语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少,结果如下:
 
TEAM              BEGIN     END
-------------------------------------------
公牛                 1991       1993
火箭                 1994       1995
公牛                 1996       1998
湖人                 2000       2002
湖人                 2009       2010


2.题目分析:

这道题目可以分解为两步:

第一步:找出所有连续获得冠军的球队

第二

:计算

连续获得冠军的球队的起止年份


3.代码实现

《1》建表并插入一些数据:

-- Create table
create table NBA
(
  team NUMBER,
  year NUMBER
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
为了方便起见,这里仅用数字代替球队,随意插入一些测试数据:

技术分享

《2》我们观察数据发现,如果连续获的一年以上的冠军,那么前一年出现的球队下一年依然会出现,
即:team(year)=team(year+1);
例如下面记录片段 :

活塞                 1990
公牛                 1991
公牛                 1992
公牛                 1993
火箭                 1994

具体的 SQL 语句为:
select n2.team,n2.year 
from (select * from nba) n1  
join
(select * from nba) n2
on 
n1.team=n2.team
where 
n1.year=n2.year+1
执行结果为:
技术分享


《3》最后,将上面的查询结果作为子查询,对数据进行处理,因为得冠军最后一年的下面一年不是冠军,
所以结束年份为
max(year)+1:

select max(nn.team) team,min(nn.year) BeginYear,max(nn.year)+1 EndYear 
from 
(select n2.team,n2.year from (select * from nba) n1  
join
(select * from nba) n2
on 
n1.team=n2.team
where 
n1.year=n2.year+1) nn
group by 
(nn.year-rownum)
order by BeginYear
;

下面是最终的执行结果:

技术分享


4.总结思考

面对类似的面试题目或者问题,虽然涉及的知识点(子查询、连接查询等)不是很多,但是因为有一些数据的转化和查询的嵌套,可能会造成一些心理素质较差的读者手足无措。因此,面对类似的复杂问题,要学会使用“拆分法”进行分解,一步步地解决问题。

       祝你成功!







Oracle面试题之:复杂的查询与实例解析


推荐阅读
  • 例子如Table表有性别字段,1代表男2代表女、3代表中性、还有没填就代表未说明selectid,decode(sex,'1','男', ... [详细]
  • Java工作流引擎关于数据加密流程(MD5数据加密防篡改)
    关键字:驰骋工作流程快速开发平台工作流程管理系统工作流引擎asp.net工作流引擎java工作流引擎.开发者表单拖拽式表单工作流系统流程数据加密md5数据保密流程数据防篡改软加密适 ... [详细]
  • 以SOA服务为导向的信息系统构建是通过有计划地构建信息系统时,一种简单而有柔性的方法,就是组件化与服务导向架构。过去的信息系统,是在使用者需要新功能时才开发的,也就是响应不同时 ... [详细]
  • 简单动态字符串redis里面很多地方都用到了字符串,我们知道redis是一个键值对存储的非关系型数据库,那么所有的key都是用字符串存储的,还有字符串类型,这些都是用字符串存储的 ... [详细]
  • 接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对 ... [详细]
  • C#的Type对象的简单应用
    通过Type对象可以获取类中所有的公有成员直接贴代码:classMyClass{privatestringname;privateintid;publicstringcity;pu ... [详细]
  • 作业迁移
    背景:数据库服务器更换,1、数据库迁移(BACKUPRESTORE);2、数据库登录名用户迁移(注意孤立用户);3、作业迁移数据库迁移,备份数据库、拷贝备份文件到新服务器,还原数据 ... [详细]
  • Linux     系统安装
    Linux系统安装linux系统安装准备工作电脑、u盘、光盘、网络、硬盘主要使用光盘、网络虚拟化软件vmwarevi ... [详细]
  • 定义:定义两个数论函数\(f\)、\(g\)的Dirichlet卷积为:\[\left(f*g\right)\left(n\right)\sum_{d|n}f\left(d\rig ... [详细]
  • rbac 4表 常规设计
    rbac4表常规设计设计模型:1、管理员表(users)Schema::create('users',function(Blueprint$table){$tabl ... [详细]
  • packagetest;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOE ... [详细]
  • 读书这件事
    没事晒下自己的借书清单。60多本了,不知道自己一本子能读多少本?可惜的就是没写读书笔记,都是一些泛读。图书馆要 ... [详细]
  • win10如何将现有的桌面壁纸找出来
    直接在地址栏输入“C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Themes”,将用户名替换为本机当前用户名,然后按下回车键即可。P ... [详细]
  • 利用ipv6技术,废旧笔记本变成server
    如果你家的路由器已经get到了ipv6地址,并且你家的电脑也获取了有效的ipv6地址,在广域网的设备可以访问到。那恭喜你,再配合我这个dd ... [详细]
  • 题目:Givenanintegerarray,youneedtofindone continuoussubarray thatifyouonlysortthissubarrayin ... [详细]
author-avatar
Angel-約定_335_292_569_759
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有