`

oracle复杂查询练习题

    博客分类:
  • db
阅读更多

1.删除重复记录(当表中无主键时)

 

 

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书,由于以归还,所以不要查出来。要求查询结果应为:(被借出的书和被借出的日期)

 

 

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); 

/*方案一*/
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.查询每年销量最多的产品的相关信息

 

 

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...),要求按照总积分的数字大小排序。

 

 

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');  
 
/*方案一*/
select * from t4 order by cast(总积分 as int) desc 

/*方案二*/
select * from t4 order by to_number(总积分) desc; 

 

 

 

 

5.得出所有人(不区分人员)每个月及上月和下月的总收入

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课程的学生姓名

 

 

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 

查询三: 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩 
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 
分享到:
评论

相关推荐

    oracle最经典练习题及答案

    从文件内容中,我们可以看到涉及Oracle数据库查询的相关知识点,具体如下: 1. 连接查询(Join Query):文件中大量使用了内连接(INNER JOIN)的...通过这些练习题,我们可以深入理解Oracle SQL的复杂性与实用性。

    oracle分节练习题

    "Oracle分节练习题"着重于考察对Oracle数据库系统中SQL(结构化查询语言)和PL/SQL(Oracle的编程扩展)的理解和应用能力。在这个练习集中,你将有机会深入学习并实践这两门技术。 SQL,全称Structured Query ...

    oracle数据库练习题emp练习题

    根据提供的Oracle数据库练习题及其描述,我们可以逐一解析并总结出其中涉及的重要知识点: ### 一、多表查询 1. **子查询与多表连接**: - 练习题目中涉及到了`emp`表与`dept`表的关联查询。 - 例如:“获取在同...

    Oracle 入门及提高练习题

    本资源"Oracle 入门及提高练习题"旨在帮助用户从基础开始,逐步深入到高级实践,提升在Oracle领域的技能。 一、Oracle基础 1. 数据库概念:了解数据库是什么,它的作用以及Oracle数据库的特点,如ACID属性(原子性...

    Oracle认证介绍与练习题

    ### Oracle 认证介绍 Oracle认证是Oracle公司推出的一系列技术认证项目,旨在评估和确认IT专业人士在...以上是对Oracle认证介绍及其相关练习题的详细解释,希望能帮助到正在备考或有兴趣深入了解Oracle认证的读者。

    Oracle练习题初学者适用

    这份"Oracle练习题初学者适用"的压缩包提供了一系列的DOC文件,旨在帮助初学者系统地学习和巩固Oracle的相关知识。 首先,我们可以从“Oracle习题”这个文件名推测,这些文档可能包含了各种类型的题目,如选择题、...

    Oracle查询练习(单行,函数查询)

    在“组函数.txt”和“单行函数.txt”文件中,可能包含了更多关于这些函数的实际示例和练习题。通过这些练习,你可以加深对Oracle SQL的理解,提升你的查询技能。记得实践是检验理论的最好方式,尝试解决这些练习,你...

    Oracle查询练习题.docx

    这些题目涵盖了Oracle数据库查询的基本操作,包括了对多个表的联接、聚合函数的应用、条件过滤、排序以及复杂的逻辑运算。下面将逐一解析这些练习题所涉及的知识点: 1. **查询部门及其平均工资、最低工资和最高...

    Oracle培训练习题和相关环境

    "Oracle培训练习题和相关环境"这个资源显然是为那些希望深入学习Oracle技术,尤其是初学者设计的。在这个压缩包中,有两个子文件夹:"fundationII"和"fundationI",它们可能包含了逐步学习Oracle的基础内容。 ...

    oracle经典sql语句练习题和答案

    文件"习题一(答案).txt"和"习题一.txt"分别提供了练习题的题目和答案,可以作为自我测试和学习的参考。在实际操作中,可以先尝试自己编写SQL语句,然后再对比答案,以确保理解并掌握了每种查询方法。 总之,通过...

    oracle数据库练习题

    本文档“Oracle数据库练习题”显然旨在帮助用户深入理解和掌握Oracle数据库的相关知识。通过解决这些练习题,你可以提升你在SQL查询、表管理、索引优化、存储过程、触发器以及数据库安全性等方面的能力。 1. **SQL...

    ORACLE复杂查询/面试练习一.doc

    【Oracle复杂查询与面试练习详解】 在Oracle数据库中,复杂查询是数据分析和业务处理的关键技能。以下是对给定文档中13道SQL题目及其解答的详细解析: 1. **列出所有员工的姓名及其直接上级的姓名** ```sql SELECT...

    oracle练习题关于触发器的作业

    Oracle数据库是世界上最流行的数据库管理系统...通过解决这个"oracle练习题关于触发器的作业",你将深化对Oracle触发器的理解,并提升数据库管理技能。请仔细研究每个题目,逐步解答,不断实践,相信你会从中受益匪浅。

    Oracle练习题

    根据提供的Oracle练习题及其背景信息,我们可以逐一分析并解释这些SQL查询语句背后的逻辑和实现方式,以便更好地理解和掌握相关的数据库操作技巧。 ### 1. 查询“001”课程比“002”课程成绩高的所有学生的学号 这...

    Oracle经典练习题

    Oracle经典练习题中涵盖了多种知识点,包括 Oracle 实例系统、SQL 语言、数据定义、数据控制、查询优化、存储结构、权限管理、备份恢复等。 1. Oracle 实例系统:在多进程 Oracle 实例系统中,进程分为用户进程、...

    Oracle 查询优化,个人练习

    7. **查询重写**:通过数据库的查询重写功能,可以将复杂查询转化为更简单的形式,比如利用物化视图或索引组织表。 8. **资源管理**:通过设置SQL Profile、SQL Plan Baseline和资源限制(如pga_aggregate_target和...

    Oracle查询习题下载

    以下是一些Oracle查询的相关知识点,这些知识点基于提供的标题和描述,以及可能在“题目1.txt”和“题目2.txt”文件中的练习内容。 1. **SQL基础**: SQL是所有关系型数据库的基础,包括Oracle。基本的SQL命令包括...

    Oracle多表连接练习

    在本实验中,我们将通过一系列练习题来深入理解Oracle的多表连接操作。 1. 第一个练习展示了如何通过内连接(INNER JOIN)来获取员工的姓名、部门名称和工资。`WHERE`子句中的`e.deptno=d.deptno`确保了只有当员工...

Global site tag (gtag.js) - Google Analytics