Oracle进行数据库查询的小技巧

Oracle进行数据库查询的小技巧,第1张

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

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

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

如可以这么写查询语句

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

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

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

第二个技巧 取消重复的行

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

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

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

所以 以上两种处理方式 都不能够百分之百的满足企业用户的需求 此时 我们其实可以利用一个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函数跟其它函数搭配使用的话 可以简化我们的查询语句 提高查询效率

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

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

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

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

lishixinzhi/Article/program/Oracle/201311/17049

ORACLE由两部分:实例和数据库\x0d\实例由以下组成: SGA,Shared pool,Database buffer cache,Redo log buffer cache\x0d\数据库由物理文件组成,其中必须有的文件是:数据文件,控制文件,重做日志\x0d\另外还有:参数文件,口令文件,归档日志文件(这三个不是必须的)\x0d\ORACLE SERVER 由两个部分组成,\x0d\1INSTANCE:又由内存结构和后台进程组成\x0d\2DATABASE:又由数据文件,日志文件和控制文件组成\x0d\CONTROL FILE是用来连接实例和DATABASE的\x0d\SQL>SHUTDOWN IMMEDIATE\x0d\SQL>STARTUP NOMOUNT\x0d\SQL>ALTER DATABASE MOUNT\x0d\以上三个过程就是通过CONTROL FILE来连接实例和数据库\x0d\SQL>ALTER DATABASE OPEN\x0d\在OPEN的过程对DATABASE的数据文件和重做日志文件进行一次性的验证,验证它们的状态\x0d\ORACLE INSTANCE:存取数据库的一个手段\x0d\ 一个DATABASE与INSTANCE之间是1:N的关系,一个INSTANCE只能 *** 作一个DATABASE,由内存结构(共享池,\x0d\ BUFFER CACHE,REDO LOG BUFFER CACHE)及相应的进程结构组成(PMON,SMON,CKPT)\x0d\SQL>SHOW SGA ---显示DATABASE内存结构信息\x0d\SQL>SET WRAP OFF\x0d\SQL>SET LINESIZE 200\x0d\以上这两个是设置行宽\x0d\SQL>SELECT FROM V$BGPROCESS;\x0d\将看到在这个系统中所有可能使用到的进程,其中PADDR并不每个进程都分配到有效的地址,即并不是每个进程都是必须的\x0d\SQL>SELECT FROM V$BGPROCESS WHERE PADDR\'00\'\x0d\将显示所有必需的进程\x0d\ESTABLISHING A CONNECTION AND CREATING A SESSION\x0d\连接到ORACLE实例包括建立一个用户连接及创建会话\x0d\\x0d\ORACLE MEMORY STRUCTURE (内存结构)\x0d\由两部分组成:\x0d\ 1SGA\x0d\ SGA是动态的,其最大值由SGA_MAX_SIZE指定,SGA的内存由SGA COMPONENTS来动态调整\x0d\ 2PGA 是不共享的,即其包含的信息是不一样的,有两个可享的内存可以由SGA配置\x0d\ LARGE POOL\x0d\ JAVA POOL\x0d\SQL>SHOW PARAMETER SHARED\x0d\SQL>SHOW PARAMETER DB_CACHE\x0d\SQL>SHOW PARAMETER LOG\x0d\以上三个命令是用于查看相关内存信息\x0d\SQL>ALTER SYSTEM SET DB_CACHE_SIZE=20M;\x0d\所有内存大小总和不能大于SGA_MAX_SIZE的值,当提示信息出现号或乱码时,是由于系统的语言问题\x0d\可以通过ALTER SESSION SET NLS_LANGUAGE=\'AMERICAN\'或ALTER SESSION SET NLS_LANGUAGE=\"SIMPLE\x0d\[Page]\x0d\CHINESE\"\x0d\SHARED POOL (共享池)\x0d\含:LIBRARY CACHE 库缓存\x0d\ DATA DICTIONARY CACHE 数据字典缓存,有的地方又称行CACHE,由SHARED_POOL_SIZE指定大小\x0d\SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=64M;\x0d\LIBRARY CACHE 主要为提高代码的共享,存储的是最近使用的SQL和PL/SQL代码\x0d\用最近最少使用(LRU)算法\x0d\包括两个结构 1:共享SQL代码 2:共享PL/SQL代码\x0d\不可直接定义,而由SHARED POOL SIZE决定\x0d\DATA DICTONARY CACHE\x0d\执行此命令的过程是:首先确认是否存在AUTHORS,,然后确认字段存不存在,再检查语法,最后验证权限,而\x0d\这些信息就属于DATA DICTIONARY CACHE的内容其包含的信息有:DATABASE FILES,表,索引,字段,用户,\x0d\权限和其他数据库对象

ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。

顾名思义就是存储数据的

不是所有的软件都需要装数据库,

数据库大都装在服务器上,比如你访问的网页,数据就是存在互联网服务器上,所以一般的个人电脑都没有安装数据库软件,只有访问的组件,

还有就是有一些单机数据库,你的软件安装的时候就已经安装好了,只是,没有通知你,比如ACCESS,SYBASE ASA,他们有的只需要简单的配置注册表,和一些驱动就可以运行了

oracle是块结构语言,oracle程序划分成几个部分,并在每个部分中写入逻辑代码块,每个块由三个子部分组成。

声明部分:此部分是以关键字DECLARE开头。这是一个可选部分,并定义了程序中要使用的所有变量,游标,子程序和其他元素。

可执行命令部分:此部分包含在关键字BEGIN和END之间,这是一个强制性部分。由程序的可执行oracle语句组成。应该有至少一个可执行代码行,可以只是一个NULL命令,表示不执行任何 *** 作。

异常处理部分 :此部分以关键字EXCEPTION开头。这是一个可选部分,包含处理程序中错误的异常。

每个oracle语句以分号(;)结尾。使用BEGIN和END可以将oracle块嵌套在其他oracle块中。以下是Poracle块的基本结构。

Hello World示例:

END;行表示oracle块的结尾。要从oracle命令行运行代码,需要在代码的最后一行之后键入/字符。当上述代码在oracle提示符下执行时,它会产生以下结果:

oracle标识符:oracle标识符是常量,变量,异常,过程,游标和保留字。标识符包括一个字母,可选地后跟多个字母,数字,美元符号,下划线和数字符号,不得超过30个字符。

默认情况下,标识符不区分大小写。例如,可以使用integer或INTEGER来表示一个数值。 不能使用保留关键字作为标识符。

扩展资料

oracle注释程序:注释可以在编写的oracle代码中包含的说明性文字,并帮助其他人阅读源代码。所有编程语言都允许某种形式的注释。

oracle支持单行和多行注释。注释中的所有字符都被oracle编译器忽略。oracle单行注释以分隔符开头 --(双连字符),多行注释由/和/括起来。

当上述代码在oracle提示符下执行时,会产生以下结果:

oracle变量的名称由可选的字母,数字,美元($)符号,下划线和数字符号组成,不能超过30个字符。 默认情况下,变量名不区分大小写。不能将保留的oracle关键字用作变量名称。

oracle编程语言允许定义各种类型的变量,如:日期时间数据类型,记录,集合等,我们将在后面的章节中介绍。 在本章中仅学习基本的变量类型。

一 物理结构

数据文件 ORACLE数据库包含若干数据文件 数据文件存储数据库数据 包括表 索引等等 数据文件的几个特点

)一个数据文件只允许分配给一个数据库

)数据文件可设置为自动扩展

)一个或多个数据文件构成表空间

在进行数据库 *** 作的时候 数据库先从内存寻找要 *** 作的数据 如果没有找到的话 再从数据文件取出数据放在内存中 然后才对内存中的数据进行相关的 *** 作 *** 作完的数据并没有立即写到数据文件中(这样减少了磁盘的IO) 而是放在内存中 然后由DBWn进程决定何时批量写入数据文件

控制文件 每一个数据库都有一个或多个控制文件 控制文件包含了数据库的物理结构 包括

)数据库名

)数据文件名及位置

)重做日志文件名及位置

)数据库的建立时间等等

一般一个数据库都有若干个控制文件镜像 数据库在打开的时候(ALTER

DATABASE OPEN) 会读取控制文件中的信息来打开数据库 当数据库的物理结构发生变化的时候 比如增加一个数据文件 一组重做日志等等 控制文件都会自动地做相应的修改 在数据库物理结构发生变化后 最好重新备份一下控制文件 用于数据库恢复

重做日志文件 重做日志中记录了数据的变化 一般一个数据库都会有两到三组重做日志文件 同一日志组的镜像最好分布于不同的磁盘上

归档日志 当数据库启动归档的时候 重做日志会被自动归档到指定的位置

初始化参数文件 包含了数据库启动时的配置信息

警告和跟踪日志文件

)跟踪文件 每一个后台进程都有一个单独的跟踪文件 比如当系统发现某一个进程有问题的时候 相关的信息就会写到相应的跟踪文件中 可以从数据库的跟踪文件来发现和调试数据库的错误

)警告文件 也叫警告日志 是一个特别的跟踪文件 它记录着数据库启动 运行中的相关信息 它是按时间顺序进行记录的

备份文件

二 逻辑结构

表空间 相关逻辑对象的集合 在oracle g中 在创建数据库的时候就自动创建了SYSTEM和SYSAUX表空间

数据块 数据存储在数据块中 一个数据块的大小(DB_BLOCK_SIZE)由 *** 作系统块来决定 可以指定 种 分别为 K K K K K

区 一系列连续的数据块组成区 区存储特定类型的数据 比如索引 表等等

段 由一系列区组成段

)数据段 对于每一个非聚集表有一数据段 表的所有数据存放在该段 每一聚集有一个数据段 聚集中每一个表的数据存储在该段中 分区表中的每一个分区有一个数据段 分区中的数据存储在该段中

)索引段 每一个索引有一索引段 存储索引数据 分区索引中的每一分区有一个索引段

)回滚段 用于临时存储要撤消的信息 这些信息用于生成读一致性数据库信息 在数据库恢复时使用 回滚未提交的事务 系统回滚段用于处理系统事务 不建议用户使用系统回滚段来做其它 *** 作

lishixinzhi/Article/program/Oracle/201311/17699

以上就是关于Oracle进行数据库查询的小技巧全部的内容,包括:Oracle进行数据库查询的小技巧、oracle数据库组成部分、oracle是什么类型的数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9352144.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存