`

oracle复杂查询练习题

 
阅读更多

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

Sql代码
  1. createtableTESTTB(
  2. bmvarchar(4),
  3. mcvarchar2(20)
  4. )
  5. insertintoTESTTBvalues(1,'aaaa');
  6. insertintoTESTTBvalues(1,'aaaa');
  7. insertintoTESTTBvalues(2,'bbbb');
  8. insertintoTESTTBvalues(2,'bbbb');
  9. /*方案一*/
  10. deletefromTESTTBwhererowidnotin
  11. (selectmax(rowid)fromTESTTBgroupbyTESTTB.BM,TESTTB.MC)
  12. /*方案二*/
  13. deletefromTESTTBawherea.rowid!=(
  14. selectmax(rowid)fromTESTTBbwherea.bm=b.bmanda.mc=b.mc
  15. )

2.bookEnrol是用来登记的,不管你是借还是还,都要添加一条记录。

请写一个SQL语句,获取到现在状态为已借出的所有图书的相关信息,

ID为3的java书,由于以归还,所以不要查出来。要求查询结果应为:(被借出的书和被借出的日期)

Sql代码
  1. createtablebook(
  2. idint,
  3. namevarchar2(30),
  4. PRIMARYKEY(id)
  5. )
  6. insertintobookvalues(1,'English');
  7. insertintobookvalues(2,'Math');
  8. insertintobookvalues(3,'JAVA');
  9. createtablebookEnrol(
  10. idint,
  11. bookIdint,
  12. dependDatedate,
  13. stateint,
  14. FOREIGNKEY(bookId)REFERENCESbook(id)ONDELETECASCADE
  15. )
  16. insertintobookEnrolvalues(1,1,to_date('2009-01-02','yyyy-mm-dd'),1);
  17. insertintobookEnrolvalues(2,1,to_date('2009-01-12','yyyy-mm-dd'),2);
  18. insertintobookEnrolvalues(3,2,to_date('2009-01-14','yyyy-mm-dd'),1);
  19. insertintobookEnrolvalues(4,1,to_date('2009-01-17','yyyy-mm-dd'),1);
  20. insertintobookEnrolvalues(5,2,to_date('2009-02-14','yyyy-mm-dd'),2);
  21. insertintobookEnrolvalues(6,2,to_date('2009-02-15','yyyy-mm-dd'),1);
  22. insertintobookEnrolvalues(7,3,to_date('2009-02-18','yyyy-mm-dd'),1);
  23. insertintobookEnrolvalues(8,3,to_date('2009-02-19','yyyy-mm-dd'),2);
  24. /*方案一*/
  25. selecta.id,a.name,b.dependdatefrombooka,bookenrolbwhere
  26. a.id=b.bookid
  27. and
  28. b.dependdatein(selectmax(dependdate)frombookenrolgroupbybookid)
  29. andb.state=1
  30. /*方案二*/
  31. selectk.id,k.name,a.dependdate
  32. frombookenrola,BOOKk
  33. wherea.idin(selectmax(b.id)frombookenrolbgroupbyb.bookid)
  34. anda.state=1
  35. anda.bookid=k.id;

3.查询每年销量最多的产品的相关信息

Sql代码
  1. createtablet2(
  2. year_varchar2(4),
  3. productvarchar2(4),
  4. salenumber
  5. )
  6. insertintot2values('2005','a',700);
  7. insertintot2values('2005','b',550);
  8. insertintot2values('2005','c',600);
  9. insertintot2values('2006','a',340);
  10. insertintot2values('2006','b',500);
  11. insertintot2values('2007','a',220);
  12. insertintot2values('2007','b',350);
  13. insertintot2values('2007','c',350);
  14. /**方案一*/
  15. selecta.year_,a.sale,a.productfromt2ainnerjoin(
  16. selectmax(sale)asslfromt2groupbyyear_)b
  17. ona.sale=b.slorderbya.year_
  18. /*方案二*/
  19. selectsa.year_,sa.product,sa.sale
  20. fromt2sa,
  21. (selectt.year_pye,max(t.sale)maxcout
  22. fromt2t
  23. groupbyt.year_)tmp
  24. wheresa.year_=tmp.pye
  25. andsa.sale=tmp.maxcout

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

Sql代码
  1. createtablet4(
  2. 姓名varchar2(20),
  3. 月积分varchar2(20),
  4. 总积分char(3)
  5. )
  6. insertintot4values('WhatIsJava','1','99');
  7. insertintot4values('水王','76','981');
  8. insertintot4values('新浪网','65','96');
  9. insertintot4values('牛人','22','9');
  10. insertintot4values('中国队','64','89');
  11. insertintot4values('信息','66','66');
  12. insertintot4values('太阳','53','66');
  13. insertintot4values('中成药','11','33');
  14. insertintot4values('西洋参','257','26');
  15. insertintot4values('大拿','33','23');
  16. /*方案一*/
  17. select*fromt4orderbycast(总积分asint)desc
  18. /*方案二*/
  19. select*fromt4orderbyto_number(总积分)desc;

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

Sql代码
  1. createtablet5(tmonthint,
  2. tnamevarchar2(10),
  3. incomenumber
  4. )
  5. insertintot5values('08','a',1000);
  6. insertintot5values('09','a',2000);
  7. insertintot5values('10','a',3000);
  8. /*方案一*/
  9. selecto.tmonth,sum(o.income)ascur,(selectsum(t.income)fromt5twheret.tmonth=(o.tmonth+1)groupbyt.tmonth)asnext,
  10. (selectsum(t.income)fromt5twheret.tmonth=(o.tmonth-1)groupbyt.tmonth)aslast
  11. fromt5owhereo.tmonth=2groupbyo.tmonth
  12. /*方案二*/
  13. selecttmonthas月份,tnameas姓名,sum(income)as当月工资,
  14. (selectsum(income)
  15. fromt5
  16. wheretmonth=to_number(substr(to_char(sysdate,'yyyy-mm-dd'),7,1))-1)AS上月工资,
  17. (selectsum(income)
  18. fromt5
  19. wheretmonth=to_number(substr(to_char(sysdate,'yyyy-mm-dd'),7,1))+1)AS下月工资
  20. fromt5wheretmonth=substr(to_char(sysdate,'yyyy-mm-dd'),7,1)
  21. groupbytmonth,tname

6.根据现有的学生表,课程表,选课关系表,查询一。没有修过李明老师的课的学生,查询二,既学过a课程,又学过b课程的学生姓名

Sql代码
  1. S表[SNO,SNAME]--学生表
  2. C表[CNO,CNAME,CTEATHER]--课程表
  3. SC表[SNO,CNO,SCGRADE]--选课关系表
  4. 查询一:没有修过李明老师的课的学生的姓名
  5. selectsnamefromswherenotexists
  6. (select*fromsc,cwheresc.cno=c.cnoandc.cteather='李明'andsc.sno=s.sno)
  7. 查询二:既学过a课程,又学过b课程的学生姓名
  8. SELECTS.SNO,S.SNAME
  9. FROMS,(
  10. SELECTSC.SNO
  11. FROMSC,C
  12. WHERESC.CNO=C.CNO
  13. ANDC.CNAMEIN('a','b')
  14. GROUPBYSNO
  15. )SCWHERES.SNO=SC.SNO
  16. 查询三:列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
  17. SELECTS.SNO,S.SNAME,AVG(SC.SCGRADE)
  18. FROMS,SC,(
  19. SELECTSNO
  20. FROMSC
  21. WHERESCGRADE<60
  22. GROUPBYSNO
  23. HAVINGCOUNT(DISTINCTCNO)>=2
  24. )AWHERES.SNO=A.SNOANDSC.SNO=A.SNO
  25. GROUPBYS.SNO,S.SNAME
分享到:
评论

相关推荐

    oracle存储过程练习题[收集].pdf

    本文档中提供的五个Oracle存储过程练习题,正好能帮助开发者加深对Oracle存储过程应用的理解和实践。 首先,创建用户和分配权限是Oracle数据库管理中的基础工作。通过创建特定的用户并为其分配适当的权限,可以确保...

    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的多表连接操作。 1. 第一个练习展示了如何通过内连接(INNER JOIN)来获取员工的姓名、部门名称和工资。`WHERE`子句中的`e.deptno=d.deptno`确保了只有当员工...

    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和...

Global site tag (gtag.js) - Google Analytics