Oracle数据库:删除重复记录与查询已借出图书实战
3星 · 超过75%的资源 需积分: 9 39 浏览量
更新于2024-09-12
收藏 66KB PDF 举报
"Oracle复杂查询练习题用于提升初学者对Oracle查询的理解,涉及删除重复记录和获取当前已借出图书信息的SQL语句。"
在Oracle数据库管理中,查询是核心技能之一,对于初学者来说,通过练习可以快速掌握相关知识。本练习题提供了两个示例,分别涉及到删除重复记录和查询特定状态的图书信息。
首先,让我们来看看如何在没有主键的情况下删除重复记录。在示例中,创建了一个名为TESTTB的表,其中包含两个字段:BM和MC,且插入了重复数据。删除重复记录有两种方法:
1. 方案一:通过ROWID与GROUP BY结合的方式,保留每个分组中的最大ROWID(即最新的一条记录),然后删除其他ROWID。这是通过子查询实现的,子查询首先找到每个分组的最大ROWID,然后在外部删除语句中排除这些ROWID。
```sql
delete from TESTTB where rowid not in (select max(rowid) from TESTTB group by TESTTB.BM, TESTTB.MC)
```
2. 方案二:使用自连接来实现,将原表与自身进行连接,比较当前ROWID是否为同一分组内的最大ROWID,如果不是,则删除该记录。
```sql
delete from TESTTB a where a.rowid != (select max(rowid) from TESTTB b where a.bm = b.bm and a.mc = b.mc)
```
这两种方法都能达到删除重复记录的效果,但在实际应用中需要根据具体情况选择更适合的策略。
接下来,我们关注第二个问题,如何获取现在状态为已借出的所有图书的相关信息,同时排除ID为3的已归还的'JAVA'书。这里有两个表,book存储图书基本信息,bookEnrol记录图书的借阅信息,包括bookId、借阅日期和状态。要查询已借出的图书,我们需要找到状态为1的记录,并排除ID为3的图书。
```sql
select b.id, b.name, be.dependDate
from book b
join bookEnrol be on b.id = be.bookId
where be.state = 1 and b.id != 3
```
这个SQL语句会返回所有已借出图书的ID、名称以及借阅日期,但不包括ID为3的'JAVA'书。
通过这些练习,初学者可以加深对Oracle SQL查询的理解,包括子查询、聚合函数、连接操作以及条件过滤等概念,从而提升在实际工作中的查询能力。
2009-12-30 上传
2014-03-19 上传
2021-12-30 上传
2014-03-22 上传
2009-02-16 上传
2021-11-22 上传
2011-12-27 上传
2022-07-14 上传
dxiaobai
- 粉丝: 1
- 资源: 9
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载