- 浏览: 455848 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
飞天奔月:
我来个简单点的代码 使用 LinkedHashSetpubli ...
ArrayList去重 -
飞天奔月:
public static <T> List< ...
ArrayList去重 -
aaron7524:
事务隔离级别 -
月陨殇:
wlh269 写道rswh110 写道lz内容写的不错,就是略 ...
事务隔离级别 -
lnx1824:
我的更奇怪,在本地静态的可以,放jetty里的页面后就不然,都 ...
JS得到上传图片尺寸
例题:如何删除表中重复的记录?
例题,
分组查询:
按部门求每个部门薪水的前2名?
1.分组求出每个部门薪水最高的前2名雇员(普通sql方法查询)
2.分组求出每个部门薪水最高的前2名雇员,(利用分区功能)
备注:
--row_number() 自然排序,无并列排序 1,2,3
--rank() 有并列排名,两个第一名,接着是第三名 1,1,3
--dense_rank() 有并列排名,两个第一名,接着是第二名 1,1,2
例二:
建立三张表:注意学生选课程时候一门课程只选择一次,这和查询的时候具体的操作密切相关
--建表 create table a ( bm char(4), --编码 mc varchar2(20) --名称 ) --插入记录 insert into a values('1111','0001'); insert into a values('1112','0002'); insert into a values('1113','0003'); insert into a values('1114','0004'); --制造4条重复记录 insert into a select * from a; --(找到重复记录)8条记录的后四条 select rowid ,a1.bm,a1.mc from a a1 where a1.rowid=( select max(a2.rowid) from a a2 where a2.bm=a1.bm and a2.mc=a1.mc ) --删除重复记录 delete from a a1 where a1.rowid != (select max(rowid) from a a2 where a1.bm = a2.bm and a1.mc = a2.mc); --注意:找到重复记录的方法和下面的关联查询的区别 --16条记录 select a1.rowid,a2.rowid,a1.*,a2.* from a a1,a a2 where a2.bm=a1.bm and a2.mc=a1.mc
例题,
分组查询:
按部门求每个部门薪水的前2名?
create table DEPT ( DEPTNO VARCHAR2(20), DEPTNAME VARCHAR2(20) ) ; create table EMP ( ENO VARCHAR2(20), ENAME VARCHAR2(20), SAL VARCHAR2(20), DEPTNO VARCHAR2(20) ) ; insert into DEPT (DEPTNO, DEPTNAME)values ('001', '开发一部'); insert into DEPT (DEPTNO, DEPTNAME)values ('002', '开发二部'); commit; insert into EMP (ENO, ENAME, SAL, DEPTNO) values ('00001', '谷超', '2500', '001'); insert into EMP (ENO, ENAME, SAL, DEPTNO) values ('00002', '武立海', '1000', '001'); insert into EMP (ENO, ENAME, SAL, DEPTNO) values ('00003', '张三', '2000', '002'); insert into EMP (ENO, ENAME, SAL, DEPTNO) values ('00004', '李四', '4000', '002'); insert into EMP (ENO, ENAME, SAL, DEPTNO) values ('00005', '赵柳', '5000', '001'); insert into EMP (ENO, ENAME, SAL, DEPTNO) values ('00006', '王八', '5000', '001'); commit;
1.分组求出每个部门薪水最高的前2名雇员(普通sql方法查询)
select deptno, ename, sal from emp e1 where ( select count(1) from emp e2 where e2.deptno=e1.deptno and e2.sal>=e1.sal ) <=2 order by deptno, sal desc;
2.分组求出每个部门薪水最高的前2名雇员,(利用分区功能)
select * from (select deptno,ename,sal,row_number() over (partition by deptno order by sal desc) rn from emp) where rn<=2;
备注:
--row_number() 自然排序,无并列排序 1,2,3
--rank() 有并列排名,两个第一名,接着是第三名 1,1,3
--dense_rank() 有并列排名,两个第一名,接着是第二名 1,1,2
例二:
建立三张表:注意学生选课程时候一门课程只选择一次,这和查询的时候具体的操作密切相关
create table s( sno number(4) primary key , sname varchar2(8) ); create table c( cno number(4) primary key, cname varchar2(8), teacher varchar2(8) ); create table sc( sno number(4) references s(sno), cno number(4) references c(cno), score number(2) ); insert into s values (1101,'zhangs'); insert into s values (1102,'lisi'); insert into s values (1103,'wangwu'); insert into c values (1,'物理','teacher6'); insert into c values (2,'化学','teacher2'); insert into c values (3,'中文','teacher3'); insert into c values (4,'体育','teacher5'); insert into sc values (1101,1,61); insert into sc values (1101,4,64); insert into sc values (1102,1,66); insert into sc values (1102,2,53); insert into sc values (1102,4,34); insert into sc values (1103,1,84); insert into sc values (1103,2,55); insert into sc values (1103,3,65); insert into sc values (1103,4,24); commit; --统计每门课程被多少人选择了; select cno ,count(cno) from sc group by cno --选择2门以上课程的学生学号 select sno from sc group by sno having count(sno)>2 --选择2门以上课程的学生信息 select * from s where exists ( select 'x' from sc where sc.sno=s.sno group by sc.sno having count(sc.sno)>2 ) select * from s where s.sno in( select sno from sc group by sno having count(sno)>2 ) --没有选择'teacher2'所授课程的学生的信息? -错误的 select sc.sno from sc where sc.cno not in (select c.cno from c where c.teacher='teacher2') -正确的 select * from s where s.sno not in (select sno from sc where cno='2') select * from s where not exists (select 'x' from sc where cno='2'and sc.sno= s.sno ) select * from s where not exists(--注意 not exsits select 'x' from sc where exists(--注意 exsits select 'y' from c where sc.cno=c.cno and sc.sno=s.sno and c.teacher='teacher2' ) ) --选择了所有课程的学生的学号(分两步:a.统计每个学生所学的课程;b.统计所有课程数) select sc.sno from sc group by sc.sno having count(sc.sno) --统计每个学生所学的课程 =(select count(*) from c)--统计所有课程数 --所有学生都选择的课程 方法一: select * from c where cno in( select cno from sc group by cno having count(cno) --统计每门课程被选择数 = (select count(*) from s)--统计所有学生数 ) 方法二: select * from c where exists( select 'x' from sc where sc.cno=c.cno group by cno having count(cno) --统计每门课程被选择数 = (select count(*) from s)--统计所有学生数 ) 方法三: select * from (select c.cno,c.cname,count(sc.sno) as c_s from sc,c where sc.cno=c.cno group by c.cno,c.cname) a, --统计每门课程被选择数 (select count(*) as all_s from s)b --统计所有学生数 where a.c_s=b.all_s 例子2: [color=red][size=medium]创建一张销售交易表:(注:一个人可以购买多种商品;一种商品可以被多个人购买;一个人可以多次购买同一种商品,但是数量随意[/size]) [/color] [color=darkred][size=medium]与例1不同的地方就在一个人可以多次购买同一件商品,也就是说同一个购买者和同一商品在数据表中可以有多条记录;但是例1中学生选择课程,在SC表中是不可能有重复的记录的;[/size] [/color] 商店交易数据表deal: 购买人:buyer 商品名称:product_name 数量:num A, 甲, 4 A, 乙, 6 B, 丙, 3 B, 丁, 9 C, 甲, 7 C, 丁, 2 A, 丙, 5 C, 丁, 1 B, 丙, 5 A, 乙, 2 create table deal ( --交易 buyer varchar2(4), product_name varchar2(20), num number(3) ); --插入数据(一个人可以购买多种商品;一种商品可以被多个人购买;一个人可以多次购买同一种商品,但是数量随意) insert into deal values('A','甲',4); insert into deal values('A','乙',6); insert into deal values('B','丙',3); insert into deal values('B','丁',9); insert into deal values('C','甲',7); insert into deal values('C','丁',2); insert into deal values('A','丙',5); insert into deal values('C','丁',1); insert into deal values('B','丙',5); insert into deal values('A','乙',2); commit; --每个人购买每种商品的数量 select buyer,product_name,sum(num) from deal group by buyer,product_name --购买2中以上商品的购物者 select t.buyer from (select buyer,product_name from deal group by buyer,product_name )t group by t.buyer having count(t.buyer)>2 --销售的数量最大的商品 --方法一,普通方式: select * from( select d.product_name as name,sum(num) as total from deal d group by d.product_name order by total desc ) where rownum=1 --方法二,普通方式: select d.product_name as name,sum(num) as total from deal d group by d.product_name having sum(num)= ( select max(t.total) from (select d.product_name as name,sum(num) as total from deal d group by d.product_name ) t ) --方法三:(视图方式) create view v$_deal as ( select d.product_name as name,sum(num) as total from deal d group by d.product_name ) select v$_deal.name,v$_deal.total from v$_deal where v$_deal.total=( select max(v$_deal.total) from v$_deal )
发表评论
-
java开发实战视频详解
2017-07-02 08:09 510java开发实战视频详解 链接: http://pan.bai ... -
mysql在window下备份
2013-02-03 09:25 1042命令:mysqldump –uroot –ppassword ... -
NoSQL非关系型数据库
2011-08-23 10:25 1500NoSQL(NoSQL = Not Only SQL ), ... -
Oracle 编码再回顾
2011-02-15 10:53 1157一、什么是Oracle字符集 ... -
位图索引与 B-tree 索引:选择与时间
2010-08-26 10:58 1575位图索引与 B-tree 索引:选择与时间 了解每个索引的正 ... -
Oracle的redo 和undo的区别
2010-07-28 15:33 1038redo--> undo-->datafile i ... -
Oracle归档模式与非归档模式设置
2010-07-16 16:14 1729Oracle的日志归档模式可以有效的防止instance和d ... -
比较牛逼的插入SQL语句
2010-06-02 10:22 1896MessageDaoImpl.java$saveMessa ... -
oracle的分析函数over 及开窗函数
2010-03-07 20:53 1079一:分析函数over Oracle从8.1.6开始提 ... -
Oracle Case 条件函数
2010-03-02 10:53 1301select dx.docid, case ... -
关于两表关联的update
2010-02-23 13:38 1701-- update 一个字段 update a ... -
oracle客户端编码修改
2010-02-04 12:15 1901从注册表修改:HKEY_LOCAL_MACHINE\SOFTW ... -
Oracle两个数据库间的数据同步 (DBLink 、计划任务)
2010-01-31 19:42 7263--配置本地数据库服务器的tnsnames.ora文 ... -
Oracle乱码最佳解决方案(JDK动态代理)
2010-01-18 17:29 4345该文章所解决的问题是Oracle下,乱码问题 描述: 1.库服 ... -
Oracle数据库字符集问题解析
2009-12-14 16:15 1034经常看到一些朋友问OR ... -
Oracle函数大全
2009-12-14 16:13 941SQL中的单记录函数 1.ASCII 返回与指定的字 ... -
导入导出
2009-11-10 09:50 928导入命令: 1.cmd进入命令行; (1)无连接登录o ... -
两种外连接
2009-10-26 13:54 950select cpxx.cp_xh, ... -
Oracle Blob (二进制文件的读写)
2009-10-18 23:16 6158import java.io.FileNotFoundEx ... -
Oracle时间操作
2009-08-21 16:04 967一.插入当前日期 //构造系统时间的字符串 Str ...
相关推荐
Oracle 基础查询关联查询练习题 Oracle 基础查询关联查询练习题中涉及到多种查询类型,包括基础查询、关联查询、分组查询等。下面我们将对每个练习题的知识点进行详细解释。 1. 基础查询 基础查询是指从数据库中...
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
首先,Oracle查询优化的基础是SQL(结构化查询语言)。优化查询通常从编写高效的SQL语句开始,包括选择合适的索引、避免全表扫描、减少子查询以及合理使用JOIN操作。在Oracle中,理解执行计划至关重要,因为它是...
oracle基础教程 课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 ORACLE数据库概述 2 1.1 产品概述 2 1.1.1 产品简介 2 1.1.2 基本概念 3 1.2 ORACLE系统结构 4 1.2.2 ORACLE物理结构 4 1.2.3 系统全局区 6 ...
本教程《Oracle数据库基础教程》由孙风栋等编著,旨在帮助初学者系统地理解和掌握Oracle数据库的基本概念、操作以及应用。 教程中的习题解答部分是学习过程中的重要辅助资料,它可以帮助读者检验自己的理解程度,...
以下将基于这些信息,详细阐述Oracle数据库的基础知识。 ### Oracle Database 11g 概述 #### 一、Oracle Database 简介 Oracle Database 是一款由美国Oracle公司开发的关系型数据库管理系统(RDBMS)。它提供了...
在"Oracle_chaxunyouhuagaixiejiqiaoyuanli_20180929.pdf"这份文档中,可能会详细讲解以上提到的概念,并提供实际案例和技巧,帮助你深入理解和应用Oracle查询优化改写。通过学习这些内容,你将能够更好地诊断和解决...
《玩转Oracle查询部分》这份PPT是针对Oracle数据库系统中的查询操作进行深入探讨的资料。Oracle数据库系统作为全球广泛使用的数据库管理系统之一,其查询语言SQL(Structured Query Language)是数据库管理员、开发...
根据提供的标题、描述、标签及部分内容,我们可以了解到本篇文章主要关注的是如何在Oracle数据库中查询一个月内的数据。这里的关键在于日期范围的确定以及如何利用Oracle的内置函数来完成这一任务。接下来,我们将...
本教程基于Oracle 11g版本,旨在为初学者提供全面的数据库管理、应用与开发基础知识。通过以下章节的讲解,我们可以深入理解Oracle数据库的核心概念和技术。 首先,"第1章 Oracle 11g简介"介绍了Oracle 11g的主要...
"Oracle核心基础总结"涵盖了Oracle数据库系统的基础知识,对于初学者和需要巩固基础的IT从业者来说,是非常宝贵的资源。以下是Oracle核心基础的一些关键知识点: 1. 数据库概念:了解数据库的基本构成,如表、索引...
Oracle 基础教程 Oracle 是一款流行的关系型数据库管理系统,由 Oracle 公司开发和维护。作为一个功能强大且广泛应用的数据库管理系统,Oracle 具有强大的数据存储和管理能力,广泛应用于各种 Industries,包括金融...
首先,SQL查询是获取特定时间段内数据的基础。在Oracle中,可以使用`BETWEEN`关键字来筛选特定日期范围内的记录。例如,如果你有一个名为`orders`的表,其中包含`order_date`列,你可以这样查询2020年1月1日至2020年...
本文将深入探讨Oracle数据库的基础操作,包括数据的增加、删除、修改和查询,以及常用的数据库命令。 首先,让我们从创建数据库开始。在Oracle中,数据库是由一个或多个表空间组成的,表空间又包含数据文件。使用`...
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
第三章 ORACLE SQL 单行函数 第四章 从多表中查询数据 第五章 用组函数合计数据 第六章 子查询 第七章 操纵数据 第八章 创建和管理表 第九章 内置约束 第十章 创建视图 第十一章 其他数据库对象 第十二章 控制用户...