`

SQL查询练习题(oracle)[转]

阅读更多
SQL查询练习题(oracle)

博客分类: Oracle数据库
SQL练习题
作者:赵磊
博客:http://elf8848.iteye.com

------------------------------------ 练习题 一  删除重复记录 ---------------------------------------
前提说明:
distinct  只能在查询时过滤,不能完成本题要的删除功能。  例如 select distinct *  from t6

表的结构:
Sql代码 
create table t6( 
       bm char(4), 
       mc varchar2(20) 


表中的数据:

Sql代码 
insert into t6 values(1,'aaaa'); 
insert into t6 values(1,'aaaa'); 
insert into t6 values(2,'bbbb'); 
insert into t6 values(2,'bbbb'); 

要求:
删除重复记录

答案:
方法一,好理解:
 
Sql代码 
delete from t6 where rowid not in (    
select max(t6.rowid) from  t6 group by     
t6.bm,t6.mc); 
--这里用min(rowid)也可以。 

方法二,比前面的复杂一点:

Sql代码 
delete from t6 a where a.rowid!= ( 
select max(rowid) from t6 b where a.bm=b.bm and a.mc=b.mc 



-------------------------------------- 练习题 二  一个查询的练习 ------------------------------------
表的结构:
表1:book表,字段有id(主键),name (书名);
表2:bookEnrol表(图书借出归还登记),字段有id,bookId(外键),dependDate(变更时间),state(1.借出 2.归还)。

创建表的DDL:

Sql代码 
create table book( 
  id int , 
  name varchar2(30), 
  PRIMARY KEY (id) 

   
create table bookEnrol( 
  id int, 
  bookId int, 
  dependDate date, 
  state int, 
  FOREIGN KEY (bookId) REFERENCES book(id) ON DELETE CASCADE 


表中的数据:
book表:
id  name               
1   English
2   Math
3   JAVA

bookEnrol表:
id   bookId   dependDate  state
1      1      2009-01-02    1
2      1      2009-01-12    2
3      2      2009-01-14    1
4      1      2009-01-17    1
5      2      2009-02-14    2
6      2      2009-02-15    1
7      3      2009-02-18    1
8      3      2009-02-19    2

插入数据的SQL语句:

Sql代码 
insert into book values(1,'English'); 
insert into book values(2,'Math'); 
insert into book values(3,'JAVA'); 
 
insert into bookEnrol values(1,1,to_date('2009-01-02','yyyy-mm-dd'),1) 
insert into bookEnrol values(2,1,to_date('2009-01-12','yyyy-mm-dd'),2); 
insert into bookEnrol values(3,2,to_date('2009-01-14','yyyy-mm-dd'),1); 
insert into bookEnrol values(4,1,to_date('2009-01-17','yyyy-mm-dd'),1); 
insert into bookEnrol values(5,2,to_date('2009-02-14','yyyy-mm-dd'),2); 
insert into bookEnrol values(6,2,to_date('2009-02-15','yyyy-mm-dd'),1); 
insert into bookEnrol values(7,3,to_date('2009-02-18','yyyy-mm-dd'),1); 
insert into bookEnrol values(8,3,to_date('2009-02-19','yyyy-mm-dd'),2); 

要求查询出:  不要使用存储过程

第二个表(bookEnrol)是用来登记的,不管你是借还是还,都要添加一条记录。
请写一个SQL语句,获取到现在状态为已借出的所有图书的相关信息,
ID为3的java书,由于以归还,所以不要查出来。

要求查询结果应为:(被借出的书和被借出的日期)
Id    Name     dependDate
1    English    2009-01-17
2    Math      2009-02-15

答案:
 
Sql代码 
select a.id,a.name,b.dependdate from book a,bookenrol b where 
a.id=b.bookid  
and  
b.dependdate in(select max(dependdate) from bookenrol group by bookid ) 
and b.state=1 
如果大家有更好的方法,可以发出来交流一下。

下面是群友发出来的答案:

副主任的答案

Sql代码 
select a.bid, bo.name, a.adate    
  from (select t.bookid bid, t.state, count(*) acou, max(t.dependdate) adate    
          from bookenrol t    
         group by t.bookid, t.state    
        having t.state = 1) a,    
       (select t.bookid bid, t.state, count(*) bcou, max(t.dependdate) bdate    
          from bookenrol t    
         group by t.bookid, t.state    
        having t.state = 2) b,    
       book bo    
where a.bid = b.bid(+)    
   and bo.id = a.bid    
   and a.acou <> nvl(b.bcou,0); 

副主任小师姝的答案

Sql代码 
select k.id,k.name,a.dependdate 
  from bookenrol a, BOOK k 
where a.id in (select max(b.id) from bookenrol b group by b.bookid) 
   and a.state = 1 
   and a.bookid = k.id; 


小米的答案

Sql代码 
select a.id,a.name,b.dependdate from book a, bookenrol b,(select max(dependdate) dependdate 
from bookenrol group by bookid) c where a.id(+) =b.bookid and b.dependdate(+)=c.dependdate and b.state=1; 

----------------------------------------- 练习题 三  一个查询的练习 --------------------------------------
表的结构与数据:
表一:各种产品年销售量统计表  sale
  年       产品           销量  
   2005       a             700  
   2005       b             550  
   2005       c             600  
   2006       a             340  
   2006       b             500  
   2007       a             220  
   2007       b             350 


Sql代码 
create table t2 ( 
year_ varchar2(4), 
product varchar2(4), 
sale    number 

 
insert into t2 values('2005','a',700); 
insert into t2 values('2005','b',550); 
insert into t2 values('2005','c',600); 
insert into t2 values('2006','a',340); 
insert into t2 values('2006','b',500); 
insert into t2 values('2007','a',220); 
insert into t2 values('2007','b',350); 
Sql代码 
insert into t2 values('2007','c',350); 

要求查询出: 
要求得到的结果应为:
  年       产品           销量  
   2005       a           700  
   2006       b           500  
   2007       b           350  
  即:每年销量最多的产品的相关信息。

答案:

Sql代码 
我的: 
select * from t2 a inner join( 
select year_,max(sale) as sl from t2 group by year_) b 
on a.year_=b.year_ and a.sale=b.sl 
 
副主任的: 
select sa.year_, sa.product, sa.sale  
from t2 sa, 
       (select t.year_ pye, max(t.sale) maxcout 
        from t2 t 
        group by t.year_) tmp 
where sa.year_ = tmp.pye 
and sa.sale = tmp.maxcout 

-------------------------------------------- 练习题 四  排序问题 -------------------------------------
表的结构与数据:

Sql代码 
create table t4( 
姓名   varchar2(20), 
月积分 varchar2(20), 
总积分 char(3) 

 
insert into t4 values('WhatIsJava','1','99'); 
insert into t4 values('水王','76','981'); 
insert into t4 values('新浪网','65','96'); 
insert into t4 values('牛人','22','9'); 
insert into t4 values('中国队','64','89'); 
insert into t4 values('信息','66','66'); 
insert into t4 values('太阳','53','66'); 
insert into t4 values('中成药','11','33'); 
insert into t4 values('西洋参','257','26'); 
insert into t4 values('大拿','33','23'); 


要求查询出:
如果用总积分做降序排序..因为总积分是字符型,所以排出来是这样子(9,8,7,6,5...),要求按照总积分的数字大小排序。

答案:

Sql代码 
我的: 
select * from t4 order by cast(总积分 as int) desc 
小米的: 
select * from t4 order by to_number(总积分) desc; 


---------------------------------------- 练习题 五  查询 --------------------------------------
表的结构与数据:
表A字段如下
month  name income
月份   人员 收入
8      a    1000
9      a    2000
10     a    3000

Sql代码 
create table t5 ( 
month int, 
name varchar2(10), 
income number 

insert into t5 values('08','a',1000); 
insert into t5 values('09','a',2000); 
insert into t5 values('10','a',3000); 
 
这个日期要与你做题的日期 相符,才会有当前月,上一个月,下一个月, 过期请自行修改 


要求查询出:
要求用一个SQL语句(注意是一个)得出所有人(不区分人员)每个月及上月和下月的总收入
要求列表输出为:
        月份       当月收入       上月收入       下月收入
---------- ---------- ---------- ----------
         9       2000       1000       3000

答案:
小程的答案:
Sql代码 
select o.month,sum(o.income) as cur,(select sum(t.income) from t5 t where t.month=(o.month+1) group by t.month) as next, 
(select sum(t.income) from t5 t where t.month=(o.month-1) group by t.month) as last 
from t5 o where o.month=2 group by o.month 
重庆--小彭:
Sql代码 
select month as 月份 ,name as 姓名,sum(income) as 当月工资, 
(select sum(income)  
from t5  
where month = to_number(substr(to_char(sysdate,'yyyy-mm-dd'),7,1))-1) AS 上月工资 , 
(select sum(income)  
from t5  
where month = to_number(substr(to_char(sysdate,'yyyy-mm-dd'),7,1))+1) AS 下月工资  
from t5 where month=substr(to_char(sysdate,'yyyy-mm-dd'),7,1) 
group by month,name 

副主任:

Sql代码 
drop table t5 
create table t5 (    
month date,    
name varchar2(10),    
income number    
)    
insert into t5 values(to_date('2010-08-01','yyyy-MM-dd'),'a',1000);    
insert into t5 values(to_date('2010-09-01','yyyy-MM-dd'),'a',2000);    
insert into t5 values(to_date('2010-10-01','yyyy-MM-dd'),'a',3000); 
 
select sum(to_number(substr(to_char(sysdate,'yyyy-MM-dd'),6,2)))/count(*), 
       sum(decode(month, to_date(to_char(add_months(trunc(sysdate),-1),'yyyy-MM'),'yyyy-MM'), income, 0)) 上月, 
       sum(decode(month, to_date(to_char(add_months(trunc(sysdate),0),'yyyy-MM'),'yyyy-MM'), income, 0)) 当月, 
       sum(decode(month, to_date(to_char(add_months(trunc(sysdate),1),'yyyy-MM'),'yyyy-MM'), income, 0)) 下月 
  from t5 
group by name; 




----------------------------------------------- 练习题 其它 ----------------------------------------
rowid 和 rownum 的区别
rowid 用于定位数据表中某条数据的位置,是唯一的、也不会改变
rownum 表示查询某条记录在整个结果集中的位置,
同一条记录查询条件不同对应的 rownum 是不同的而 rowid 是不会变的

分享到:
评论

相关推荐

    受激拉曼散射计量【Stimulated-Raman-Scattering Metrology】 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    MMC整流器技术解析:基于Matlab的双闭环控制策略与环流抑制性能研究,Matlab下的MMC整流器技术文档:18个子模块,双闭环控制稳定直流电压,环流抑制与最近电平逼近调制,优化桥臂电流波形,高效

    MMC整流器技术解析:基于Matlab的双闭环控制策略与环流抑制性能研究,Matlab下的MMC整流器技术文档:18个子模块,双闭环控制稳定直流电压,环流抑制与最近电平逼近调制,优化桥臂电流波形,高效并网运行。,MMC整流器(Matlab),技术文档 1.MMC工作在整流侧,子模块个数N=18,直流侧电压Udc=25.2kV,交流侧电压6.6kV 2.控制器采用双闭环控制,外环控制直流电压,采用PI调节器,电流内环采用PI+前馈解耦; 3.环流抑制采用PI控制,能够抑制环流二倍频分量; 4.采用最近电平逼近调制(NLM), 5.均压排序:电容电压排序采用冒泡排序,判断桥臂电流方向确定投入切除; 结果: 1.输出的直流电压能够稳定在25.2kV; 2.有功功率,无功功率稳态时波形稳定,有功功率为3.2MW,无功稳定在0Var; 3.网侧电压电流波形均为对称的三相电压和三相电流波形,网侧电流THD=1.47%<2%,符合并网要求; 4.环流抑制后桥臂电流的波形得到改善,桥臂电流THD由9.57%降至1.93%,环流波形也可以看到得到抑制; 5.电容电压能够稳定变化 ,工作点关键词:MMC

    Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基

    Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构,Simulink建模,MPPT最大功率点追踪,扰动观察法采用功率反馈方式,若ΔP>0,说明电压调整的方向正确,可以继续按原方向进行“干扰”;若ΔP<0,说明电压调整的方向错误,需要对“干扰”的方向进行改变。 ,Boost升压;光伏并网结构;Simulink建模;MPPT最大功率点追踪;扰动观察法;功率反馈;电压调整方向。,光伏并网结构中Boost升压MPPT控制策略的Simulink建模与功率反馈扰动观察法

    STM32F103C8T6 USB寄存器开发详解(12)-键盘设备

    STM32F103C8T6 USB寄存器开发详解(12)-键盘设备

    2011-2020广东21市科技活动人员数

    科技活动人员数专指直接从事科技活动以及专门从事科技活动管理和为科技活动提供直接服务的人员数量

    Matlab Simulink仿真探究Flyback反激式开关电源性能表现与优化策略,Matlab Simulink仿真探究Flyback反激式开关电源的工作机制,Matlab Simulimk仿真

    Matlab Simulink仿真探究Flyback反激式开关电源性能表现与优化策略,Matlab Simulink仿真探究Flyback反激式开关电源的工作机制,Matlab Simulimk仿真,Flyback反激式开关电源仿真 ,Matlab; Simulink仿真; Flyback反激式; 开关电源仿真,Matlab Simulink在Flyback反激式开关电源仿真中的应用

    基于Comsol的埋地电缆电磁加热计算模型:深度解析温度场与电磁场分布学习资料与服务,COMSOL埋地电缆电磁加热计算模型:温度场与电磁场分布的解析与学习资源,comsol 埋地电缆电磁加热计算模型

    基于Comsol的埋地电缆电磁加热计算模型:深度解析温度场与电磁场分布学习资料与服务,COMSOL埋地电缆电磁加热计算模型:温度场与电磁场分布的解析与学习资源,comsol 埋地电缆电磁加热计算模型,可以得到埋地电缆温度场及电磁场分布,提供学习资料和服务, ,comsol;埋地电缆电磁加热计算模型;温度场分布;电磁场分布;学习资料;服务,Comsol埋地电缆电磁加热模型:温度场与电磁场分布学习资料及服务

    ibus-table-chinese-yong-1.4.6-3.el7.x64-86.rpm.tar.gz

    1、文件内容:ibus-table-chinese-yong-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-yong-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    基于51单片机protues仿真的汽车智能灯光控制系统设计(仿真图、源代码)

    基于51单片机protues仿真的汽车智能灯光控制系统设计(仿真图、源代码) 一、设计项目 根据本次设计的要求,设计出一款基于51单片机的自动切换远近光灯的设计。 技术条件与说明: 1. 设计硬件部分,中央处理器采用了STC89C51RC单片机; 2. 使用两个灯珠代表远近光灯,感光部分采用了光敏电阻,因为光敏电阻输出的是电压模拟信号,单片机不能直接处理模拟信号,所以经过ADC0832进行转化成数字信号; 3. 显示部分采用了LCD1602液晶,还增加按键部分电路,可以选择手自动切换远近光灯; 4. 用超声模块进行检测距离;

    altermanager的企业微信告警服务

    altermanager的企业微信告警服务

    MyAgent测试版本在线下载

    MyAgent测试版本在线下载

    Comsol技术:可调BIC应用的二氧化钒VO2材料探索,Comsol模拟二氧化钒VO2的可调BIC特性研究,Comsol二氧化钒VO2可调BIC ,Comsol; 二氧化钒VO2; 可调BIC

    Comsol技术:可调BIC应用的二氧化钒VO2材料探索,Comsol模拟二氧化钒VO2的可调BIC特性研究,Comsol二氧化钒VO2可调BIC。 ,Comsol; 二氧化钒VO2; 可调BIC,Comsol二氧化钒VO2材料:可调BIC技术的关键应用

    C++学生成绩管理系统源码.zip

    C++学生成绩管理系统源码

    基于Matlab与Cplex的激励型需求响应模式:负荷转移与电价响应的差异化目标函数解析,基于Matlab与CPLEX的激励型需求响应负荷转移策略探索,激励型需求响应 matlab +cplex 激励

    基于Matlab与Cplex的激励型需求响应模式:负荷转移与电价响应的差异化目标函数解析,基于Matlab与CPLEX的激励型需求响应负荷转移策略探索,激励型需求响应 matlab +cplex 激励型需求响应采用激励型需求响应方式对负荷进行转移,和电价响应模式不同,具体的目标函数如下 ,激励型需求响应; matlab + cplex; 负荷转移; 目标函数。,Matlab与Cplex结合的激励型需求响应模型及其负荷转移策略

    scratch介绍(scratch说明).zip

    scratch介绍(scratch说明).zip

    深度学习模型的发展历程及其关键技术在人工智能领域的应用

    内容概要:本文全面介绍了深度学习模型的概念、工作机制和发展历程,详细探讨了神经网络的构建和训练过程,包括反向传播算法和梯度下降方法。文中还列举了深度学习在图像识别、自然语言处理、医疗和金融等多个领域的应用实例,并讨论了当前面临的挑战,如数据依赖、计算资源需求、可解释性和对抗攻击等问题。最后,文章展望了未来的发展趋势,如与量子计算和区块链的融合,以及在更多领域的应用前景。 适合人群:对该领域有兴趣的技术人员、研究人员和学者,尤其适合那些希望深入了解深度学习原理和技术细节的读者。 使用场景及目标:①理解深度学习模型的基本原理和结构;②了解深度学习模型的具体应用案例;③掌握应对当前技术挑战的方向。 阅读建议:文章内容详尽丰富,读者应在阅读过程中注意理解各个关键技术的概念和原理,尤其是神经网络的构成及训练过程。同时也建议对比不同模型的特点及其在具体应用中的表现。

    day02供应链管理系统-补充.zip

    该文档提供了一个关于供应链管理系统开发的详细指南,重点介绍了项目安排、技术实现和框架搭建的相关内容。 文档分为以下几个关键部分: 项目安排:主要步骤包括搭建框架(1天),基础数据模块和权限管理(4天),以及应收应付和销售管理(5天)。 供应链概念:供应链系统的核心流程是通过采购商品放入仓库,并在销售时从仓库提取商品,涉及三个主要订单:采购订单、销售订单和调拨订单。 大数据的应用:介绍了数据挖掘、ETL(数据抽取)和BI(商业智能)在供应链管理中的应用。 技术实现:讲述了DAO(数据访问对象)的重用、服务层的重用、以及前端JS的继承机制、jQuery插件开发等技术细节。 系统框架搭建:包括Maven环境的配置、Web工程的创建、持久化类和映射文件的编写,以及Spring配置文件的实现。 DAO的需求和功能:供应链管理系统的各个模块都涉及分页查询、条件查询、删除、增加、修改操作等需求。 泛型的应用:通过示例说明了在Java语言中如何使用泛型来实现模块化和可扩展性。 文档非常技术导向,适合开发人员参考,用于构建供应链管理系统的架构和功能模块。

    清华大学104页《Deepseek:从入门到精通》

    这份长达104页的手册由清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的余梦珑博士后及其团队精心编撰,内容详尽,覆盖了从基础概念、技术原理到实战案例的全方位指导。它不仅适合初学者快速了解DeepSeek的基本操作,也为有经验的用户提供了高级技巧和优化策略。

    MXTU MAX仿毒舌自适应主题源码 苹果CMSv10模板.zip

    主题说明: 1、将mxtheme目录放置根目录 | 将mxpro目录放置template文件夹中 2、苹果cms后台-系统-网站参数配置-网站模板-选择mxpro 模板目录填写html 3、网站模板选择好之后一定要先访问前台,然后再进入后台设置 4、主题后台地址: MXTU MAX图图主题,/admin.php/admin/mxpro/mxproset admin.php改成你登录后台的xxx.php 5、首页幻灯片设置视频推荐9,自行后台设置 6、追剧周表在视频数据中,节目周期添加周一至周日自行添加,格式:一,二,三,四,五,六,日

    基于matlab平台的数字信号处理GUI设计.zip

    运行GUI版本,可二开

Global site tag (gtag.js) - Google Analytics