`
kfcman
  • 浏览: 396959 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle 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   可以解决这个问题。


分享到:
评论

相关推荐

    oracle rownum和distinct

    "Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,...

    23.Oracle的distinct关键字1

    Oracle数据库中的`DISTINCT`关键字是一个非常重要的SQL查询语句组成部分,它用于去除查询结果中的重复行,确保返回的每一条记录都是唯一的。在本例中,我们将通过创建一个名为`T_GIRL`的超女基本信息表,并插入一些...

    oracle中distinct的用法详解

    在Oracle数据库中,`DISTINCT` 是一个非常重要的SQL关键字,用于从查询结果中去除重复的行。在本文中,我们将深入探讨`DISTINCT`的用法及其在不同情况下的应用。 首先,让我们看一个简单的例子。假设我们有一个名为...

    完美解决distinct中使用多个字段的方法

    完美解决distinct中使用多个字段的方法,完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法

    oracle sql 去重复记录不用distinct如何实现

    用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 。 select distinct name from t1 能消除重复记录,但只能取一个字段,...

    distinct的使用.docx

    本文将深入探讨`DISTINCT`在Oracle数据库中的使用,以及如何与其他SQL元素结合来优化查询。 首先,`DISTINCT`关键字通常与`SELECT`语句一起使用,位于`SELECT`之后,用来指定我们希望从查询结果中获取的独特或唯一...

    oracle中使用group by优化distinct

    4. **使用`DISTINCT ON`(Oracle不支持,但其他数据库如PostgreSQL支持)**:虽然Oracle不直接支持`DISTINCT ON`,但可以尝试通过子查询或窗口函数模拟此功能。例如,你可以先用`ROW_NUMBER()`分配唯一的行号,然后...

    oracle函数介绍(6) 著名函数之分析函数.doc

    Oracle函数在数据库查询和数据分析中扮演着至关重要的角色,尤其是一些著名的分析函数,它们能够帮助我们进行复杂的统计计算和数据处理。在本篇中,我们将深入探讨几个关键的分析函数,包括AVG、SUM、COUNT、FIRST_...

    Oracle和SqlServer语法区别

    SELECT [/*+ optimizer_hints*/] [ALL | DISTINCT] select_list FROM {table_name | view_name | select_statement} [WHERE clause] [GROUP BY group_by_expression] [HAVING search_condition] [START WITH U ...

    Oracle 数据库经典练习

    找出42部门的职位列表,可以使用`DISTINCT`关键字去除重复,SQL语句为:`SELECT DISTINCT title FROM s_emp WHERE dept_id = 42` 6. **非特定部门筛选** 要找出非'Sales'部门的员工,可以使用`NOT`和`IN`或简单...

    ORACLE和SQL Server的语法区别

    [ALL|DISTINCT] select_list FROM {table_name|view_name|select_statement} WHERE clause GROUP BY group_by_expression HAVING search_condition START WITH U CONNECT BY {...} ``` - **SQL Server:** ...

    Oracle 常用数据字典

    SELECT DISTINCT OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_NAME LIKE 'USER_%'; ``` 这将查询出所有以 "USER_" 开头的对象名称。 Oracle 数据字典的优点包括: * 提供了关于数据库对象的详细信息 * 帮助数据库...

    oracle基础的文档 熟悉oracle的对象

    - **去除重复数据**:默认情况下,SQL会返回所有匹配的行,但DISTINCT关键字可以去除重复的值,如`SELECT DISTINCT stu_age FROM stu`。 - **表达式查询**:在SELECT语句中,可以使用算术运算符和逻辑运算符来构造...

    oracle查询重复数据方法

    Oracle 查询重复数据方法 Oracle 查询重复数据方法是数据库管理中非常重要的一个问题, Oracle 数据库提供了多种方法来查询和删除重复数据。下面我们将详细介绍几种常见的方法。 方法一:使用 Having 子句 第一种...

    Informix迁移至Oracle数据库的研究.pdf

    - DISTINCT关键字在Oracle中与LIMIT功能类似,可以结合ROWNUM来限制返回的行数。 - WHERE子句中的条件判断,Oracle通常使用代替,并且在处理日期和字符串时,可能需要调整比较运算符和格式。 5. **异常处理**: ...

    oracle实现行转列功能,并使用逗号进行隔开拼接,成为一条数据.pdf

    Oracle 实现行转列功能并使用逗号进行隔开拼接成为一条数据 Oracle 中实现行转列功能,并使用逗号进行隔开拼接,成为一条数据是指将多行数据合并成一行数据,并用逗号分隔每个字段的值。这种功能在实际应用中非常...

    oracle讲义

    ### Oracle基础知识总结 #### 1. Oracle服务器架构与概念 - **Oracle服务器**:由一个数据库和多个实例组成。数据库存储在硬盘上,而实例存在于内存中。 - **数据库**:存储数据的地方,通常位于硬盘之上。 - **...

Global site tag (gtag.js) - Google Analytics