数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle数据库查询十个小技巧(一)


发布日期:2024年01月12日
 
Oracle数据库查询十个小技巧(一)

数据查询是数据库操作中最主要的功能之一有时候数据库查询性能的好坏直接关系到数据库的运行效率关系到数据库的选型下面笔者不谈大道理只是对其中对一些平时大家容易忽略的查询小技巧做一些总结或许大家可能正在为此犯愁呢?

第一个技巧利用连接符连接多个字段

如在员工基本信息表中有员工姓名员工职位出身日期等等如果现在视图中这三个字段显示在同一个字段中并且中间有分割符如我现在想显示的结果为经理Victor出身于这该如何处理呢?其实这是比较简单的我们可以在Select查询语句中利用连接符把这些字段连接起来

如可以这么写查询语句

SELECT员工职位 || ||员工姓名||出身于||出身日期 as 员工出身信息 FROM 员工基本信息表;

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

总之令后采用连接符可以提高我们报表的可读性于灵活性

第二个技巧取消重复的行

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

若我现在直接查询部门表其可以知道系统中具体设置了哪些部门与职位但是很有可能这些部门或者职位由于人事变动的关系现在已经没有人了所以这里查询出来的是所有的部门与职位信息而不能够保证这个部门或者职位一定有职员存在也就是说这不能够满足于我们上面的要求

若我现在直接从员工信息表中查询虽然可以保证所查询出来的部门与职位信息一定有员工信息的存在但是此时查询出来的部门与职位信息会有重复的行如采购部门分工合作可能会有采购采购小组长此时在查询出来的部门与职位的信息中就会有三条重复的记录

所以以上两种处理方式都不能够百分之百的满足企业用户的需求此时我们其实可以利用一个DISTINCT函数来消除其中查询出来的重复行

如我们可以利用SELECT DISTINCT 部门信息职位信息 FROM 员工基本信息表通过这条加了DISTINCT约束的查询语句不但可以查询出所有有员工的职位与部门信息而且会把重复的记录过滤掉从而提高可阅读性

所以在数据库设计过程中特别是在查询语句的使用中这个函数特别有用

第三个技巧勤用WHERE语句

我们都知道数据库查询效率高不高是我们评价数据库设计好坏的一个重要标准毋庸置疑在数据库查询中勤用Where条件语句是提高数据库查询性能的一个很重要的手段之一特别是在设计到比较大的表中查询符合条件的记录过程中利用WHERE条件语句加以限制可以大幅度的提高查询的响应速度

如在图书馆管理系统中现在有人想查询注册会计师辅导用书的时候虽然不在书的类别或者名称中输入注册会计师先查询出全部的纪录然后再一条条的看是否有相关的书籍信息也是可行的但是这么处理的话一方面系统响应的速度会非常的慢因为里面记录很多另一方面查询的结果看起来也会非常的头疼

其实我们只需要在查询中加入一些查询的参数利用Where条件语句加以限制则即可以提高数据库响应的速度也可以找出最符合用户需求的数据

另外我也接触过一些在Oracle数据库上设计的平台型管理软件他们可以自定义相关的报表在报表设计中只要用户在前台设计平台中选中大表查询的话则这个平台会在生成报表的时候自动应用Where条件语句以提高前台系统从数据库查询数据的效率

所以笔者认为在Oracle数据库系统设计中要勤于使用Where语句利用Where语句来提高数据库查询的效率

第四个技巧灵活使用COUNT函数

在查询处理的时候COUNT函数可以说是我们应用的比较多的函数之一如我们有时候需要统计员工的人数统计图书的种类数的时候都需要使用到这个函数不过这个函数很多人可能会用但是到灵活应用的地步还是有一点差距

下面笔者就COUNT函数的一些应用技巧谈谈自己的心得

一是要灵活放置COUNT函数的位置因为利用COUNT函数统计记录数的时候是会考虑空行的记录的如在数据表中一般有序列字段与其它的有意义字段两类有时候可能序列字段中有内容而其它字段中没有内容则在利用COUNT函数统计记录数量的时候会把这个空记录也考虑进去很明显则就会发生统计的错误所以这个COUNT函数该放在哪个位置上还是比较讲究的一般的话笔者试建议不要放在序列号字段上而要放在一些关键的实体字段中如统计员工人数的时候则就可以放在员工姓名或者编号上等等

二是灵活跟其它函数搭配使用如在上面的例子中笔者谈到有时候用户需要知道现在有员工编制的部门与职位有哪一些我们可以利用DISTINCT函数来找出具体的部门但是我现在只想知道有编制的部门与职位具体有多少此时我们也可以利用COUNT 与DISTINCT函数结合应用找出我们所需要的数据在COUNT函数中可以指定ALL与DISTINCT选项默认的情况下是ALL选项表示统计所有的行其中也包括重复的行而DISTINCT就表示只统计不重复的行可见COUNT函数跟其它函数搭配使用的话可以简化我们的查询语句提高查询效率

第五个技巧只查询时必须的字段

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

若单从技术上考虑两这都是可以实现的不会有多大的难度但是若是从数据库性能上考虑在则还是采用不同的视图来实现不同的需求为好

一方面若从安全方面讲则可以根据不同的视图来控制相关的访问权限可见把视图细化在权限控制上则会更加的灵活

另一方面数据的查询效率跟数据内容的多少也有非常密切的关系如在查询员工合同到期信息的时候一般不需要员工的地址信息等等若把这个信息也查询出来的话由于这个字段比较长就会花费比较长的时间所以在数据库设计中我们要学会根据用户不同的需求设计不同的视图虽然可能这在设计的时候会比较花时间但是在确可以提高数据库的性能与安全性这笔生意还是划得来的

上一篇:巧用数据库归档技术解决性能下降问题

下一篇:ORACLE入门之如何增加ORACLE连接数