热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oracle复杂查询练习题

oracle复杂查询练习题1.删除重复记录(当表中无主键时)www.2cto.comSql代码createtableTESTTB(bmvarchar(4),mcvarchar2(20))insertintoTESTTBvalues(1,'aaaa&...S

oracle复杂查询练习题
 
1.删除重复记录(当表中无主键时)
   www.2cto.com  
Sql代码  
create table TESTTB(    
       bm varchar(4),    
       mc varchar2(20)    
)  
insert into TESTTB values(1,'aaaa');    
insert into TESTTB values(1,'aaaa');    
insert into TESTTB values(2,'bbbb');    
insert into TESTTB values(2,'bbbb');   
 
/*方案一*/  
delete from TESTTB where rowid not in   
(select max(rowid) from TESTTB group by TESTTB.BM,TESTTB.MC)  
  
/*方案二*/  
delete from TESTTB a where a.rowid!= (    
select max(rowid) from TESTTB b where a.bm=b.bm and a.mc=b.mc    
)   
 
2.bookEnrol是用来登记的,不管你是借还是还,都要添加一条记录。
请写一个SQL语句,获取到现在状态为已借出的所有图书的相关信息,
ID为3的java书,由于以归还,所以不要查出来。要求查询结果应为:(被借出的书和被借出的日期)
 
Sql代码  
create table book(    
  id int ,    
  name varchar2(30),    
  PRIMARY KEY (id)    
)    
insert into book values(1,'English');    
insert into book values(2,'Math');    
insert into book values(3,'JAVA');    
  
create table bookEnrol(    
  id int,    
  bookId int,    
  dependDate date,    
  state int,    
  FOREIGN KEY (bookId) REFERENCES book(id) ON DELETE CASCADE    
)    
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);   
 www.2cto.com  
/*方案一*/  
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    
  
/*方案二*/  
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;   
 
3.查询每年销量最多的产品的相关信息
   www.2cto.com  
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);    
insert into t2 values('2007','c',350);    
  
/**方案一*/  
select a.year_,a.sale,a.product from t2 a inner join(    
select max(sale) as sl from t2 group by year_) b    
on a.sale=b.sl  order by a.year_  
  
/*方案二*/  
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   
 
4.排序问题,如果用总积分做降序排序..因为总积分是字符型,所以排出来是这样子(9,8,7,6,5...),要求按照总积分的数字大小排序。
  www.2cto.com  
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');    
  www.2cto.com  
/*方案一*/  
select * from t4 order by cast(总积分 as int) desc   
  
/*方案二*/  
select * from t4 order by to_number(总积分) desc;   
   www.2cto.com  
5.得出所有人(不区分人员)每个月及上月和下月的总收入
Sql代码  
create table t5 (  tmonth int,    
tname 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);    
  
/*方案一*/  
select o.tmonth,sum(o.income) as cur,(select sum(t.income) from t5 t where t.tmOnth=(o.tmonth+1) group by t.tmonth) as next,    
(select sum(t.income) from t5 t where t.tmOnth=(o.tmonth-1) group by t.tmonth) as last    
from t5 o where o.tmOnth=2 group by o.tmonth  
  
/*方案二*/  
select tmonth as 月份 ,tname as 姓名,sum(income) as 当月工资,    
(select sum(income)     
from t5     
where tmOnth= to_number(substr(to_char(sysdate,'yyyy-mm-dd'),7,1))-1) AS 上月工资 ,    
(select sum(income)     
from t5     
where tmOnth= to_number(substr(to_char(sysdate,'yyyy-mm-dd'),7,1))+1) AS 下月工资     
from t5 where tmOnth=substr(to_char(sysdate,'yyyy-mm-dd'),7,1)    
group by tmonth,tname    
 
6.根据现有的学生表,课程表,选课关系表,查询一。没有修过李明老师的课的学生,查询二,既学过a课程,又学过b课程的学生姓名
   www.2cto.com  
Sql代码  
S表    [SNO,SNAME]--学生表  
C表    [CNO,CNAME,CTEATHER] --课程表  
SC表  [SNO,CNO,SCGRADE] --选课关系表  
  
查询一:没有修过李明老师的课的学生的姓名  
select sname from s where not exists  
(select*from sc,c where sc.cno=c.cno and c.cteather='李明' and sc.sno=s.sno)  
  
查询二:既学过a课程,又学过b课程的学生姓名  
SELECT S.SNO,S.SNAME   
FROM S,(   
     SELECT SC.SNO   
     FROM SC,C   
     WHERE SC.CNO=C.CNO   
         AND C.CNAME IN('a','b')   
     GROUP BY SNO   
)SC WHERE S.SNO=SC.SNO   
    www.2cto.com  
查询三: 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩   
SELECT S.SNO,S.SNAME,AVG(SC.SCGRADE)  
FROM S,SC,(   
     SELECT SNO   
     FROM SC   
     WHERE SCGRADE <60   
     GROUP BY SNO   
     HAVING COUNT(DISTINCT CNO)>=2   
)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNO   
GROUP BY S.SNO,S.SNAME   

推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
author-avatar
用户r8l5835vd6
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有