数据仓库与数据挖掘  - 讨论区

标题:Oracle数据库查询五个小技巧

2010年10月17日 星期日 20:24


数据 查询,是 数据库 操作中最主要的功能之一;有时候数据库查询性能的好坏,直接关系到数据库的运行效率,关系到数据库的选型。下面笔者不谈大道理,只是对其中对一些平时大家容易忽略的查询小 技巧 做一些总结。或许大家可能正在为此犯愁呢? ( [7 A& w5 Z' |! l7 L
) C# i, w$ {8 c* l" h0 |/ }
第一个技巧:利用连接符连接多个字段

如在员工基本信息表中,有员工姓名、员工职位、出身日期等等。如果现在视图中这三个字段显示在同一个字段中,并且中间有分割符。如我现在想显示的结果为“经理Victor出身于1976年5月3日”。这该如何处理呢?其实,这是比较简单的,我们可以在Select查询语句中,利用连接符把这些字段连接起来。
6 w4 N6 P6 t/ T/ b$ d4 G. q
如可以这么写查询语句:

SELECT员工职位 ||’ ’ ||员工姓名||’出身于’||出身日期 as 员工出身信息 FROM 员工基本信息表; ( b  o7 t5 X, G3 q" n2 W+ l
7 x; J( M. _! t' [, Z( Z) M
通过这条语句就可以实现如上的需求。也就是说,我们在平时查询中,可以利用||连接符把一些相关的字段连接起来。这在 报表 视图中非常的有用。如笔者以前在设计图书馆管理 系统 的时候,在书的基本信息处有图书的出版社、出版序列号等等内容。但是,有时会在打印报表的时候,需要把这些字段合并成一个字段打印。为此,就需要利用这个连接符把这些字段连接起来。而且,利用连接符还可以在字段中间加入一些说明性的文字,以方便大家阅读。如上面我在员工职位与员工姓名之间加入了空格;并且在员工姓名与出身日期之间加入了出身于几个注释性的文字。这些功能看起来比较小,但是却可以大大的提高内容的可读性。这也是我们在数据库设计过程中需要关注的一个内容。

总之,令后采用连接符,可以提高我们报表的可读性于灵活性。
! n% m$ b) o! ~2 i; g+ Y
第二个技巧:取消重复的行 7 R( ^4 `2 u; S3 g* D" x# C9 h5 |2 ?

如在人事管理系统中,有员工基本信息基本表。在这张表中,可能会有部门、职位、员工姓名、身份证件号码等字段。若查询这些内容,可能不会有重复的行。但是,我若想知道,在公司内部设置了哪些部门与职位的时候,并且这些部门与职位配置了相关人员。此时,又该如何查询呢?

若我现在直接查询部门表,其可以知道系统中具体设置了哪些部门与职位。但是,很有可能这些部门或者职位由于人事变动的关系,现在已经没有人了。所以,这里查询出来的是所有的部门与职位信息,而不能够保证这个部门或者职位一定有职员存在。也就是说,这不能够满足于我们上面的要求。 " p$ ]/ s. F2 w3 \4 _# _
; K2 W, n- H, \
若我现在直接从员工信息表中查询,虽然可以保证所查询出来的部门与职位信息,一定有员工信息的存在。但是,此时查询出来的部门与职位信息会有重复的行。如采购部门分工合作,可能会有采购采购小组长。此时,在查询出来的部门与职位的信息中,就会有三条重复的记录。
% b2 `; N! [6 ^; y( C
所以,以上两种处理方式,都不能够百分之百的满足 企业 用户的需求。此时,我们其实可以利用一个DISTINCT函数,来消除其中查询出来的重复行。 $ ]$ r2 h. \# L5 \
: u6 ?  E- ]1 }. D! n$ D0 b. r9 d
如我们可以利用SELECT DISTINCT 部门信息,职位信息 FROM 员工基本信息表。通过这条加了DISTINCT约束的查询语句,不但可以查询出所有有员工的职位与部门信息,而且,会把重复的记录过滤掉,从而提高可阅读性。
* [4 x. W: [. _7 ^
所以,在数据库设计过程中,特别是在查询语句的使用中,这个函数特别有用。

第五个技巧:只查询时必须的字段 9 k! ^* c5 e& c7 `$ ~

有时候,用户不同的查询需求都要用到同一张表。如在员工信息表中包含了很多内容。有时候用户想要知道正式员工有多少;管理层员工有多少;生产线员工又有哪些;或者想知道合同即将到期的员工有哪些。为此,就遇到一个问题,因为这些内容基本上都是在同一张表中,那是在同一个视图中实现,而是根据需求不同,设计不同的视图呢?

若单从技术上考虑,两这都是可以实现的,不会有多大的难度。但是,若是从数据库性能上考虑在,则还是采用不同的视图来实现不同的需求为好。
5 s. G7 E6 P. ?- j2 H- A4 ?: r
一方面,若从安全方面讲,则可以根据不同的视图来控制相关的访问权限。可见,把视图细化,在权限控制上则会更加的灵活。
* b: |1 ]' b  u! \( z6 w2 H
另一方面,数据的查询效率,跟数据内容的多少也有非常密切的关系。如在查询员工合同到期信息的时候,一般不需要员工的地址信息等等。若把这个信息也查询出来的话,由于这个字段比较长,就会花费比较长的时间。所以,在数据库设计中,我们要学会根据用户不同的需求,设计不同的视图。虽然可能这在设计的时候会比较花时间,但是,在确可以提高数据库的性能与安全性。这笔生意还是划得来的。

 

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2020

    京ICP备05028076号