- 浏览: 495773 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (301)
- Swing技术 (1)
- Linux (1)
- Javascript (22)
- 数据结构和算法 (3)
- J2SE (36)
- workflow (5)
- 设计模式 (14)
- web service (19)
- Ajax (14)
- 中间件 & 服务器 (8)
- 多线程 (9)
- Oracle (52)
- sys & soft (10)
- JMS (3)
- sso (9)
- android (11)
- struts2 (10)
- web协议 (2)
- 分布式 (2)
- PM (2)
- OLAP (3)
- Redis (2)
- Hibernate (7)
- ibatis (2)
- SQLServer (1)
- maven (3)
- Spring (7)
- Jsp (2)
- slf4j (1)
- jQuery (15)
- 权限 (1)
- 系统集成 (1)
- 笔记 (1)
- Freemarker (2)
- 项目管理 (1)
- eclipse (3)
- GIS (1)
- NoSql (3)
- win10 (1)
- win10网络 (2)
- 底层 (3)
- 数据库 (0)
最新评论
-
kabuto_v:
请问那种图,uml图是怎么画出来的呢?是您自己手工画的,还是有 ...
FastJSON 序列化、反序列化实现 -
梦行Monxin商城系统:
电商实例、业务并发、网站并发及解决方法 -
rockethj8:
client 㓟有一个参数是可以忽略一些URL 不进行验证登录 ...
SSO 之 (单点登录)实施中遇到的几个问题 -
mengxiangfeiyan:
好啊。。。。。
Oracle删除表,删除数据以及恢复数据、利用现有表创建新表
http://hi.baidu.com/homappy/item/5f7ae3b8931544eb4ec7fd38
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低。
select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录
所以用distinct达不到想要的效果,用group by 可以解决这个问题。
例如要显示的字段为A、B、C三个,而A字段的内容不能重复可以用下面的语句:
select A, min(B),min(C),count(*) from where [条件] group by A
having [条件] order by A desc
为了显示标题头好看点可以把select A, min(B),min(C),count(*) 换称select A as A, min(B) as B,min(C) as C,count(*) as 重复次数
显示出来的字段和排序字段都要包括在group by 中
但显示出来的字段包有min,max,count,avg,sum等聚合函数时可以不在group by 中
如上句的min(B),min(C),count(*)
一般条件写在where 后面
有聚合函数的条件写在having 后面
如果在上句中having加 count(*)>1 就可以查出记录A的重复次数大于1的记录
如果在上句中having加 count(*)>2 就可以查出记录A的重复次数大于2的记录
如果在上句中having加 count(*)>=1 就可以查出所有的记录,但重复的只显示一条,并且后面有显示重复的次数----这就是所需要的结果,而且语句可以通过hibernate
下面语句可以查询出那些数据是重复的:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
将上面的>号改为=号就可以查询出没有重复的数据了。
例如 select count(*) from (select gcmc,gkrq,count(*) from gczbxx_zhao t group by gcmc,gkrq having
count(*)>=1 order by GKRQ)
推荐使用:
select * from gczbxx_zhao where viewid in ( select max(viewid) from gczbxx_zhao group by
gcmc ) order by gkrq desc
ps:distinct
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,
而不是用它来返回不重记录的所有值。
其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。
下面先来看看例子:
table表
字段1 字段2
id name
1 a
2 b
3 c
4 c
5 b
库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。
比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。
select distinct name from table
得到的结果是:
----------
name
a
b
c
好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:
select distinct name, id from table
结果会是:
----------
id name
1 a
2 b
3 c
4 c
5 b
distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。
我们再改改查询语句:
select id, distinct name from table
很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。
------------------------------------------------------------------------------------------------------------
下面方法可行:
select *, count(distinct name) from table group by name
结果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1
最后一项是多余的,不用管就行了,目的达到。。。。。
group by 必须放在 order by 和 limit之前,不然会报错
=====================================以上是关于oracle的distinct的一种用法========================================
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低。
select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录
所以用distinct达不到想要的效果,用group by 可以解决这个问题。
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低。
select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录
所以用distinct达不到想要的效果,用group by 可以解决这个问题。
例如要显示的字段为A、B、C三个,而A字段的内容不能重复可以用下面的语句:
select A, min(B),min(C),count(*) from where [条件] group by A
having [条件] order by A desc
为了显示标题头好看点可以把select A, min(B),min(C),count(*) 换称select A as A, min(B) as B,min(C) as C,count(*) as 重复次数
显示出来的字段和排序字段都要包括在group by 中
但显示出来的字段包有min,max,count,avg,sum等聚合函数时可以不在group by 中
如上句的min(B),min(C),count(*)
一般条件写在where 后面
有聚合函数的条件写在having 后面
如果在上句中having加 count(*)>1 就可以查出记录A的重复次数大于1的记录
如果在上句中having加 count(*)>2 就可以查出记录A的重复次数大于2的记录
如果在上句中having加 count(*)>=1 就可以查出所有的记录,但重复的只显示一条,并且后面有显示重复的次数----这就是所需要的结果,而且语句可以通过hibernate
下面语句可以查询出那些数据是重复的:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
将上面的>号改为=号就可以查询出没有重复的数据了。
例如 select count(*) from (select gcmc,gkrq,count(*) from gczbxx_zhao t group by gcmc,gkrq having
count(*)>=1 order by GKRQ)
推荐使用:
select * from gczbxx_zhao where viewid in ( select max(viewid) from gczbxx_zhao group by
gcmc ) order by gkrq desc
ps:distinct
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,
而不是用它来返回不重记录的所有值。
其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。
下面先来看看例子:
table表
字段1 字段2
id name
1 a
2 b
3 c
4 c
5 b
库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。
比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。
select distinct name from table
得到的结果是:
----------
name
a
b
c
好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:
select distinct name, id from table
结果会是:
----------
id name
1 a
2 b
3 c
4 c
5 b
distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。
我们再改改查询语句:
select id, distinct name from table
很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。
------------------------------------------------------------------------------------------------------------
下面方法可行:
select *, count(distinct name) from table group by name
结果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1
最后一项是多余的,不用管就行了,目的达到。。。。。
group by 必须放在 order by 和 limit之前,不然会报错
=====================================以上是关于oracle的distinct的一种用法========================================
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低。
select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录
所以用distinct达不到想要的效果,用group by 可以解决这个问题。
发表评论
-
windows下oracle每天定时备份
2016-01-26 17:32 1464http://blog.csdn.net/jimmy609/ ... -
mysql用户管理和权限设置
2016-01-21 11:40 787http://www.cnblogs.com/fslnet ... -
SQL语句优化及原理
2016-01-14 16:14 903一、问题的提 ... -
Mysql日志操作 Windows下
2016-01-14 14:22 893日志文件类型概述: 1.错误日志 记录启动、运行或停 ... -
MongoDB专题、来源开发
2016-01-07 11:24 6581、maven+MongoDB+html5搭建的开源项目代 ... -
for update锁级别、存在的问题分析、for update of
2016-01-06 14:01 4023一、oracle默认在update ... -
oracle事务讲解、事务隔离级别实例
2016-01-06 13:47 1225今天温习oracle事务, ... -
oracle事务 set transaction readonly演示
2016-01-06 13:27 1142set transaction readonly 类似于S ... -
ORA-01034和ORA-27101的解决办法
2014-12-29 21:47 3376http://www.cnblogs.com/chuyu ... -
ORA-01207:文件比控制文件更新 - 旧的控制件
2014-12-20 09:06 997ORA-01207:文件比控制文件更新 - 旧的控制件 ... -
大数据处理之 专题笔记
2014-05-11 19:11 9191、oracle分区技术、应用详解 http://wenku ... -
oracle 之 Orapwd命令
2014-05-01 13:32 1159数据库密码忘记后,需要修改密码。 在数据库没有启动之前,数据库 ... -
Oracle问题集 之 ORA-01261: Parameter db_recovery_file_dest destination string cannot
2014-05-01 13:18 7622我本机安装的数据库版 ... -
Oracle工具sql 之 查询用户所有表sql
2013-11-26 20:29 868热度 1已有 104 次阅读2012-11-22 09:53 ... -
Oracle开发与优化 之 数据完整性和锁机制
2013-10-08 22:14 960Oracle数据完整性和锁机制——《12年资深DBA教你Ora ... -
存储过程 之 调用实例
2013-10-07 23:29 0CREATE OR REPLACE PROCEDURE PRO ... -
sql 之 distinct
2013-08-17 00:03 867distinct这个关键字用来 ... -
oracle、sqlserver语法区别一
2013-08-16 15:18 1034MySql: MySQL数据库实现分页比较简单,提供了 LIM ... -
提高数据库查询速度一
2013-06-02 23:50 9341、缓存,在持久层或持久层之上做缓存。 2、数据库表的大 ... -
oracle海量数量一
2013-05-29 23:57 919目录: Oracle数据完整性和锁机制 索引及优化之表分析 ...
相关推荐
select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。 select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录 所以用distinct达...
在Oracle数据库中,`DISTINCT`操作可能会影响查询性能,因为它需要对结果进行额外的处理以消除重复项。在大数据量的表上使用`DISTINCT`时,应考虑其潜在的性能影响,并可能需要使用索引来优化查询。 另外,`...
在SELECT语句中使用DISTINCT关键字可以去除结果集中的重复行。HAVING子句用于对分组后的数据进行条件筛选,而不能单独使用,必须与GROUP BY子句一起使用。SUM、COUNT、MAX、MIN等是常用的聚合函数,用于执行数据的...
在SQL中,处理重复记录的一个常见方法是使用`DISTINCT`关键字。例如,可以创建一个临时表`#Tmp`,存储`tableName`中的唯一记录: ```sql SELECT DISTINCT * INTO #Tmp FROM tableName; DROP TABLE tableName; ...
我们将深入探讨Oracle数据库中去除重复记录的方法。 在Oracle中,面对重复数据时,我们通常有以下几种处理策略: 1. **DISTINCT关键字**: 在查询数据时,可以使用DISTINCT关键字来去除结果集中的重复行。例如: ...
1. **查询去重记录**:`DISTINCT`关键字可以用于消除所有字段完全相同的重复记录。例如: ```sql SELECT DISTINCT * FROM t_table; ``` 2. **数据迁移**:为了安全起见,通常我们会将去重后的数据保存到临时表,...
若想查询每位雇员的职位并消除重复数据,可以使用`DISTINCT`关键字: ``` SELECT DISTINCT job FROM emp; ``` 通过上述内容,我们不仅掌握了Oracle数据库的基本结构和操作,还深入了解了SQL语言的核心概念及其在...
#### 一、使用 EXISTS 代替 DISTINCT 消除排序操作 在进行数据查询时,为了去除结果集中的重复行,我们通常会使用 `DISTINCT` 关键字。然而,在某些场景下,这种方法可能会导致不必要的排序操作(`SORT OPERATION`...
* DISTINCT:消除查询输出中的重复行 * WHERE:指定过滤条件 * AND:组合两个或两个以上的布尔表达式 * OR:组合两个或两个以上的布尔表达式 * FETCH:使用行限制子句限制查询返回的行数 * IN:确定值是否与...
- `DISTINCT`:可选关键字,用于消除重复行。 - `column`:表中的列名。 - `expression`:基于列的计算表达式。 - `alias`:为列名或表达式提供别名。 - `FROM`:指定要从其中检索数据的表。 #### 四、执行基本的...
消除重复行,可以使用`distinct`关键字: ```sql select distinct deptno from emp; ``` 查看表结构的命令是`desc`: ```sql desc 表名; ``` 清空控制台屏幕可以使用`host cls`(这可能依赖于你的终端环境)。 ...
`DISTINCT`关键字用于消除结果集中的重复项,如`SELECT DISTINCT deptno FROM emp`将返回`emp`表中不重复的部门编号。`WHERE`子句用于设定查询条件,例如`SELECT * FROM emp WHERE ename='CLIRK'`会返回名字为'CLIRK...
- **DISTINCT**: 用于消除查询结果中的重复记录,只返回唯一值。这对于数据分析特别有用,可以帮助快速获取数据集合中的不同值。 ### 5. DUAL 表 - **DUAL**: Oracle 数据库中的一个特殊表,常用于测试 SQL 函数...
- **消除重复行**: - `SELECT DISTINCT 列名 FROM 表名;` - **使用WHERE语句查询**: - `SELECT * FROM 表名 WHERE 条件 ORDER BY 列名;` - `SELECT * FROM 表名 WHERE 条件 ORDER BY 列名 DESC;` — 按降序排列 ...
`DISTINCT`关键字用于消除重复记录,如`SELECT DISTINCT job FROM emp_xxx;`可获取所有不同的职位名称。 大小写敏感性在SQL语句中通常被忽略,但在数据中却很重要。`LOWER()`和`UPPER()`函数可分别将字符转换为小写...
如果不需要消除重复行,使用UNION-ALL代替UNION可以节省去重的时间开销。 **15. 用索引提高效率** 正确创建和使用索引可以显著提高查询速度。了解索引类型(B树、位图、函数索引等),针对查询模式设计合适的索引...
- **实体完整性**: 主键的唯一性,防止同一张表中出现重复记录。 - **参照完整性**: 外键约束,确保引用的完整性,即主表中的每一项记录必须存在于从表中。 - **自定义完整性**: 通过定义约束条件(如 CHECK 约束)...