Oracle数据库:删除重复记录与查询已借出图书实战
3星 · 超过75%的资源 需积分: 9 82 浏览量
更新于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查询的理解,包括子查询、聚合函数、连接操作以及条件过滤等概念,从而提升在实际工作中的查询能力。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-12-30 上传
2009-02-16 上传
2014-03-22 上传
2021-11-22 上传
2011-12-27 上传
2022-07-14 上传
dxiaobai
- 粉丝: 1
- 资源: 9
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器