SQL优化技巧之DISTINCT去重

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL优化技巧之DISTINCT去重

单列查询在数据库表中,每个表都包含若干列信息。用户在查询表中的记录时,大多数情况下只是关心表的一-列或者几列的信息。在SQL中,查询表中某- -列(字段)信息的语法可表示如下。SELECT column FROM table_ name_ name

SELECT关键词指明了要查询字段名称(column),FROM关键词指明了要获取字段信息

地表的名字。

在SQL语言中,SQL关键词对大小写不敏感,所以对SELECT关键词来说,注意SELECT、select 或者Seleet 都是一样的;然而对于表名或者列名来说,可能对大小写敏感,这取决于数据库的DBMS。

使用DISTINCT去除重复信息在查询中,我们经常需要去除查询结果中的重复信息。例如,一张学生成绩表,其字段包含学生姓名、选修课程和课程成绩3个字段。如果用户想要查询这张表中包含的所有学生的姓名信息,由于同-学生可能有多门选修课,同-学生在该表中就有多条记录,那么查询的姓名字段就会有多个重复值,显然不能很好满足用户的需求。在SELECT

子句中,我们通过指明DISTINCT关键字,可以去除列中的重复信息。语法如下。SELECT DISTINCT column FROM table_ name_ name

DISTINCT关键字去除的是SELECT 子句查询的列,即column的重复信息。如果说明SELECT子句查询的列为多列,那么只有这些列的信息同时重复的记录才能被去除。

使用DISTINCT去除重复信息在TEACHER表中查询所有教师的姓名信息(TNAME),对于重复的姓名只显示一个。示例代码如下。SELECT DISTINCT TNAME FROM TEACHER

从执行结果我们可以发现,重名的“李伟”只显示了一个,即去除了查询结果中的重复值,并且对查询结果进行了排序(升序)。实际上,DBMS的操作过程是先对查询结果排序,然后查

找并从结果中除去重复的值。对于汉字的排序,DBMS 是根据其汉语拼音的第一个字母的顺序

进行的,如果第一说明个字母相同,则比较第二个字母,以此类推。

DISTINCT的使用是要付出代价的。因为我们要去掉重复值,必须对结果关系进行排序,相

同的元组排在一起,只有按这种方法对元组分组,才能去掉重复值,而这一工作甚至比查询本身还费时间。

多列查询同单列查询一样,多列查询需要在SELECT关键词后指定要查询的列,但是各列

之间必须用逗号分开。注意一点,列出的最后- -列的名字后面不能加逗号,否则会造成语法

错误。语法如下。SELECT col1. col2, . coln FROM table_ name多列查询只是在SELECT

关键词后罗列出所要查询的列名并以逗号相互间隔。

使用“*” 通配符时我们要慎重,在不需要查询所有列时,尽量采用前面介绍的单列查询

或多列查询,以免占用过多的资源。

通过实例我们可以看到,无论是单列查询、多列查询还是查询所有的列,查询结果的纵向排序基本是按照其在表中存储的位置排列(使用DISTINCT关键字的情况除外)。但是,在实际应用中往往需要查询结果按照某--特定的顺序排列。

相关文档
最新文档