1. 财务报表分显示公式和显示数据,显示数据下输入的文字不能再显示公式下显示数
据。新建好的财务报表怎么保存到报表中,还有删除功能:删除的时候需要在文件菜单下打开报表才能删除。ACCT、SUM函数的应用。报表重算,公式取数参数。还可以引出excel,在excel里设置公式后可以导入到报表中。
2. 采购管理中主要3张单子 采购申请单 采购订单 采购入库单,一般用这3张单子
就可以了,收料通知单能不用尽量不要用。如果要用的话可以用采购入库单做这样的功能,比如采购部做入库单,仓库根据实物审核就可以了。按收货比例做采购订单。流程尽可能简单。外购入库单入库时候可以进行条目拆分。赊购和现购的操作。如果采购100元,#5@p过来80元,这个时候就要采购入库单就需要做拆分处理。#5@p处理时候,采购#5@p与费用#5@p的勾稽及补充勾稽。退料通知单也建议不要做,做外购入库下推外购入库单自动生成红字退料单。采购价格控制
3. 仓库管理中,盘点作业:首先把盘点方案新增;盘点表打印;盘点数据录入;编制
盘点报告。仓库管理中批次管理:通过仓存管理下的批次调整单进行调整,有批次拆分和汇总。
4. 供应链整体操作:a单据流转分两种分下推和找源单据。下推的优势是更加直观,
找原单是更加简便,不需要到上游序时簿去下推。各个模块单据的流转的方向可以看序时簿的下推单据,就是需要流转的方向。b查询工具下交叉统计分析表的应用,当金蝶的报表不够用的时候,可以用它来实现其他的功能。但要搞清楚报表的行列的具体含义,这样可以根据具体含义设置报表。c公共功能:序时簿查询功能是一个主要的公共功能,条件、高级、排序、表格设置。条件设置好,排序可以进行升序和降序排列,表格设置是对一些字段是否显示进行设置,打钩表示显示。所以在培训的时候,可以对序时簿作为一个公共的讲解。关闭与行业务关闭的区别:关闭指的是对整个单据的关闭,下游单据生成审核后就可以关闭了;行业务关闭指的是对单行明细进行的关闭,还有更深一层含义,订单必须流到出入库环节的时候,才能进行行业关闭。行业务关闭的单据,MRP分析时不需要考虑在内。单据头完整显示的作用,当单据头完整显示时候当用excel导出后就比较完整,做筛选的时候就不会把具体的明细漏掉。过滤条件中有清除按钮可以对方案清除,还有对条件的方案进行保存。点击下次以本方案自动进入时不会出现条件过滤的界面。d在报表分析下报表查询界面:进入收发存汇总表的过滤界面,选择的条件都是并的关系,如果选择分级汇总和仅显示汇总行指的是按类别进行汇总,具体的条件是通过汇总依据选择。一般仅显示汇总行没什么作用。如果不选择的话,就按照物料进行汇总。双击汇总表后就进入明细表,在查看菜单下有显示隐藏列、设置行高等参数。
5. 单据录入:对基础资料输入时候,都需要按F7键,F7默认为搜索界面,如果要默
认浏览界面可以在基础资料-物料-选项下设置。也可以设置F7默认的字段(代码、名称等);录入单据时在产品代码下面显示下拉列表,这个可以在菜单选项下面禁止使用。F12键的运用,在录出库单的过程中,可以通过F12键来对库存的查询及对物料的选取。系统设置中单据设置可以对单据的进行一些控制。
1在k3客户端工具里单据自定义,6. 单据自定义:○可以对单据头定义、增加、修改、
2增加单据头隐藏等操作。首先隐藏单据头右键找到属性,设置可见性就可以了。○
后右键后可以添加字段的名字,特别注意字段属性一定要一致,字符串、数字一定要匹配,特别是在关联的时候如果字段属性不同的话,会选不到相应的字段。在高级里面可以对来源方式进行选择:手工录入、基础资料、已有基础资料属性、通过公式得到、系统信息。我会把这几种的用处大概讲一下:手工录入就是你自己录入固定的东西;基础资料会把核算项目里面任何一个类添加在里面,录单的时候可以
F7键选择,如果核算项目里面没有这个类的话,可以在系统基础资料里面新增核算项目类别,新增的核算项目类别一样能够被选到;已有基础资料属性是指可以把核算项目类别的其它属性(比如客户联系方式、地址)等信息,自动带出到对话框,当然这些资料需要事先维护好才可以;通过公式得到指的是增加分列录时,比如增加2列A和B,通过公式可以设置单价*A=B这样的公式,当录单的时候系统会自
3动根据公式算出B的值;系统信息指的制单人、日期等系统信息可以直接选出。○
单据关联的设置:比如要把销售订单的合同号关联到销售出单里面,首先在两张单子里分别增加分列录,名称是合同号。在销售订单里面,根据分录列的属性,在下拉框分录里面,下三角下面找到刚才新添加的分录列,添加名称,在高级里面选择来源方式。接下来重新打开单据自定义,找到销售出库单,同样的操作方法增加合同号的分录列,字段类型、来源方式和销售订单里一样,不同的是要在高级下面的选单来源定义中选择销售订单,并在来源字段里选择合同号。这样关联字段就可以了,销售订单下推销售出库单的时候就可以把合同号带到出库单里了。
1服务设置的时候一般选取使用本地系统账户。7. 系统安装:sql安装中遇到的几点。○
身份验证的时候最好选取混合模式,添加sa密码。如果sa密码为空的话,在windows2003+sql2005的环境下sa密码为空可能导致客户端与服务器连接不上。
2k3安装有2个盘,一个是sql200不支持文件夹中文目录,可能安装过程报错。○
资源盘,一个是安装盘。首先讲一下安装盘,在help文件夹下首先是demo,下面是演示帐套,个人感觉最好用的是蓝海机械这个帐套。然后是manual手册,里面有简体、繁体、英文版,也就是产品说明书。还有一个other文件夹下regclear.exe金
3金蝶卸载,蝶注册表清除,卸载金蝶很管用的○首先添加删除里面把金蝶卸载一遍,
还要进行注册表的删除,注册表的删除可以根据登陆界面里的常见问题进行查看,里面1.3.2 Q28用K/3卸载程序无法卸载K/3,如何通过手动方式卸载K/3?这里面有详细指导可以参考这个,按照里面的步骤删除完后金蝶k3就完全卸载干净了,可以重装了,如果还是不行就只能重新系统了。有的人可能要问了,k3界面打不开的情况下,怎么参考手册?这个时候需要到安装目录k3erp文件夹下,找到
4客户端连接服务器。a服务器连通必备条件:iis一定k3FAQ手册,进行查看。○
要安装;ping通,这个不知道可以问网管;共享文件夹访问。b同名同密码,这个安全性比较高,但要把客户端的账户和密码,都要在服务器上建立,我的电脑右键-管理-用户在这里面,新建每一个客户端的用户和密码,建好后右键属性进入后,进行隶属于添加-高级-立即查找,在这个界面,如果系统管理不严的话,就隶属于administrators,如果管理比较严格的话,就隶属于power users就可以了。同名同密码时客户端密码修改时,服务器也要修改。c匿名方式等录,如果同名同密码比较麻烦的话,可以选择匿名方式,先在服务器建立一个账户,但属性设置一定要隶属于管理员,然后在开始-程序-中间层组件注册,打开后里面有交互式用户方式和信任方式,交互式用户方式就是同名同密码,信任方式就是匿名方式,在信任方式里输入刚才建立的用户和密码后,然后重新安装下就可以了。安装过后如何检查我们设置成功了呢?在控制面板里-管理工具-组件服务-COM+应用程序里有很多ebo开头的文件,随便选一个右键属性查看,点击标识后,如果设置成功后系统会在下列用户中显示。建议在做匿名方式之前先做一个同名同密码的,测试一下网络环境。做完这些后如果还没有连通,启用guest账户,还有一种情况就是客户端的系统账户一般都是用的系统管理员administrator,所以和服务器的系统管理员administrator一样产生冲突,就连不上。那怎么解决呢?一种是把客户端账户修改一下或者重新建立管理员;另一种是逆向思维把服务器账户名称修改一下比如admin就可以了。
1总账初8. 财务初始化:在系统设置下的初始化,可以对系统绝大多数进行初始化。○
始化,在初始化下点击总账,进行科目初始数据录入,在录入之前需要在基础资料里对会计科目进行设置和核算项目搭建。打开录入界面,如果是一月份启动,只有期初余额;年中启动的话,有本年累计借方、本年累计贷方,如果的话尽量录入,如果整理不出来就不填了,只录入期初余额了,这样就推不出年初余额。录入的过程中涉及核算项目的,要在核算项目里面录入,根据客户或者供应商。界面上方有币别选项,根据银行的核算币别,进行筛选核算。录入完后,在综合本位币下平衡。科目初始数据引入通过模板引入,模板引入不建议操作。平衡后就可以结束初始化。
2现金管理初始化,现金流量初始数据录入比较简单。○在系统管理初始化下现金管
理,打开界面点引入从总账引入科目,在科目类别中选择银行存款,然后录入银行账号。设置银行可能存在未达账的情况,有4种:第一种是银行已收,企业未收;第二种是银行已付,企业未付;第三种是企业已收,银行未收;第四种是企业已付,银行未付。录完后,在编辑下结束初始化。如果又有两个银行科目怎么办?继续引
3固定资产初始化,首先系统设置-固入,录入完后,编辑下结束新科目初始化。○
定资产-系统参数,在参数选项里固定资产启用。这个时候固定资产初始化就不在初始化里面,在财务会计-固定资产管理里面,维护基础资料。变动方式系统默认的就可以了;使用状态系统也维护好了,主要是计不计提折旧;折旧方法大多数企业都用平均年限法,当然也支持你自定义的。卡片类别管理,里面意思也比较简单,但信息要录好,卡片规则要强调一下,比如电脑用DN_。还有下面有个允许抵扣增值税进项税这个选上后,固定资产卡片录入界面会不一样,根据新会计准则是有一部分可以抵扣增值税进项税的。存放地点这个录入就好了。b资料维护好就可以在业务处理里面新增卡片了,录完的话就可以在系统设置初始化里结束初始化了。4应收账款初始化。在系统设置-初始化-应收款管理,里面有初始的普通#5@p、初○
始的增值#5@p、其他应收单、预收单、应收票据这是影响数据的。应收初始化有2种方式:一是在这里手工录;二是从总账里引入。但是总账里引入的只是余额,同一个核算项目只显示一张#5@p。单据录入完后,在初始应收单据-维护里面查询,进入查询界面,注意一下事务类型。在序时簿里上面栏里有转余额会把数据传到总账;文件菜单下面引入总账余额是把总账里数据引出一张#5@p。单据日期与财务日期:财务日期就是登记入账的日期,系统根据财务日期判定凭证,财务日期大于等于单据日期。在初始化数据-应收账款里查询所有的数据,进行核对。结束初始化在财务会计-初始化下结束。
第二篇:数据库基础总结
本文档初步介绍了,建表、修改表、向表中插入数据、更新数据、检索数据、删除数据、序列以及索引,适合初学数据库的人员。
本资料主要正对Oracle数据库的SQL,其他数据库可以参考,但在细节上存在差异。
一、创建表
1. 建表的简化语法说明:
在数据库中,可以使用createtable 语句创建表。create table 语句的简化语法如下: CREATE [GLOBALTEMPORARY] TABLE table_name
(
Column_name type [CONSTRAINT constraint_def DEFAULT default_exp]
[,column_name type [CONSTRAINT constraint_def DEFAULT default_exp]?] ) [ON COMMIT {DELETE | PRESERVE} ROWS] TABLESPACE tab_space;
2. 语法中关键字说明如下:
1) GLOBAL TEMPORARY说明该表的行都是临时的,这种表就称为临时表。临时表中的行是特定于某个用户会话的,行的有效期由ONCOMMIT子句指定。
2) table_name指定要分配给该表的名称。
3) column_name 指定要分配给某个列的名称。
4) type 指定某个列的类型。
5) constraint_def 指定对某个列的约束。
6) default_exp 指定一个表达式,用来为某个列赋予默认值。
7) ON COMMIT 控制临时表中行的有效期。 DELETE说明这些行在事务的末尾要被删除。
8) PRESERVE 说明这些行在用户会话的末尾要被删除。如果对临时表没有指定ON COMMIT选项,那么默认值是DELETE。
9) tab_space 为该表指定表空间。如果没有指定表空间,该表就被存储在该用户的默认表空间中。
3. 建立普通表举例
如: create tablebasetab
(
msisdn varchar2(21) not null primary key,
imsi varchar2(16) null,
paytype number null default 0
)
4. 建立临时表
所谓临时表就是在一个事务中,要来保存数据的,退出事务,数据将被清空。
如: create globaltemporary table basetab_temp
(
msisdnvarchar2(14)
) on commit preserve rows;
如果向表basetab_temp中插入一条数据,然后断开连接,再连接后,查询该表会发现该表为空。
二、修改表
在我们将表建好后,发现表结构需要修改、后来需要增加新列或需要加约束等,这时我们可以使用ALTERTABLE语句对表进行修改。ALTER TABLE语句可以执行以下任务:
添加、修改或删除列。
添加或删除约束。
启动或禁用约束。
1. 添加列
如:
1) 向basetab中增加一个20个变长字符列name
alter table basetab add name varchar2(20);
2) 向basetab增加number型的low_num和high_num列默认值都为0
alter tablebasetab add low_num number(3) default 0;
alter tablebasetab add high_num number(3) default 0;
2. 虚拟列
虚拟列在定义好后,不需要对该列插入数据,通过现有的列计算后的值填进去。 如:
在basetab中增加一列mid_num,该列是通过low_num和high_num的平均值得到。 alter table basetab add(mid_num as ((low_num + high_num)/2));
3. 修改列
1) 修改basetab中msisdn的长度为15
alter table basetab modify msisdn varchar2(15);
说明:只有在表中没有任何行或所有列都为空值时才可以减小列的长度。
2) 修改basetab中的数字列low_num的精度为5
alter table basetab modify low_num number(5);
3) 修改basetab中msisdn列的数据类型为字符型定长14
alter table basetab modify msisdn char(14);
4) 修改basetab中high_num列的默认值为100
alter table basetab modify high_num default 100;
5) 删除basetab中high_num列
alter table basetab drop column high_num;
6) 限制basetab中high_num列值必须大于等于0
alter table basetab add constraint basetab_hig_num_ck check(high_num>=0);
7) 限制basetab中msisdn列不为空
alter table basetab modify msisdn constraint basetab_msisdn_nn notnull;
8) 添加foreign key约束
foreign key是约束两张表,如果在subscribeinfo建立msisdn关联basetab的外键,则subscribeinfo中msisdn必须在basetab中存在。
在subscribeinfo建立msisdn关联basetab的外键语句如下:
alter table subscribeinfo add constraint sub_fk msisdn referencesbasetab(msisdn); 带foreign key 约束的 on delete cascade 意思就是当删除主表中的数据是,关联表中的数据一起被删除。如:
alter table subscribeinfo add constraint sub_fk msisdn referencesbasetab(msisdn) on delete cascade;
带foreign key 约束的 on delete null意思是删除主表中的数据时,关联表的外键列将为
空,如:
alter table subscribeinfo add constraint sub_fk msisdn referencesbasetab(msisdn) on delete null;
9) 将basetab中msisdn设置为唯一值
alter table basetab add constraint base_uq unique(msisdn);
10) 删除basetab中的唯一约束
alter table basetab drop constraint base_uq;
11) 禁用basetab中对hig_num大于等于0的约束
alter table basetab disable constraint basetab_hig_num_ck;
12) 启用basetab中对hig_num大于等于0的约束
alter table basetab enable constraint basetab_hig_num_ck;
1, 将表basetab_exp重命名为basetab_nn表
rename basetab_exp to basetab_nn;
2, 截断表
截断表即将表中数据清空,在截断过程中不会undo日志,所有截断不会被会滚。如: truncate table basetab;
3, 删除basetab_nn表
drop table basetab_nn;
三、插入数据
我们在将表建立好后,需要将我们的数据插入到表中,可以使用insert语句。Insert可以往表中插入单行数据,也可以通过子查询将一张表的多行数据插入到另一张表中,还可以进行多表插入。下面就对单行插入、多行插入和多表插入进行说明。
1. 单行插入数据
1) 具体语法:
INSERT INTO TABLE [(column[,column,?])] VALUES(value[,value,?]);
TABLE用于指定表名;column用于指定列名,如果要指定多个列,那么列之间要用逗号分开;value用于提供列数据。
说明:如果不提供列,则每个列都要有数据。
2) 向basetab中中插入一条数据
insert into basetab(msisdn,paytype) values(‘861xxxxxxxx’,0);
2. 多行插入数据
当我们想一次插入多行数据时可以使用子查询插入数据。当使用子查询插入数据时,可以将一张表的数据复制到另外一张表中。当处理行迁移、复制表数据或者装载外部表数据到数据时,可以使用子查询插入数据。
1) 具体语法:
INSERT INTO TABLE[(column[,column,?])] subQuery
TABLE用于指定表名;column用于指定列名,如果要指定多个列,那么列之间要用逗号分开;subQuery用于指定为目标表提供数据的子查询。需要插入的列和子查询的列的数据类型和个数要完全匹配。
2) 使用子查询插入数据
insert into subscribeinfo(msisdn,serviceid) select msisdn,serviceidfrom subscribeinfo;
3) 使用子查询执行直接装载
insert/*+APPEND*/ intosubscribeinfo(msisdn,serviceid) select msisdn,serviceid from subscribeinfo;
注意,尽管以上两条语句的执行结果一样,但第二条语句使用/*+APPEND*/来表示直接装载方式。当要装载大批量数据时,采用第二种方法装载数据的速度要远远优于第一种方法。Append在数据库oracle常用操作培训.ppt中有说明。
3. 多表插入数据
所谓多表插入即在通过一些限制条件,将子查询中的数据分别插入到不同的表中。其中通过两个操作符ALL和FIRST来实现的。
1) ALL操作符
如:insert all when type=0 then into waptab
when type=1 then into javatab
when type=2 then into smstab
when orderflag =8 then into ordertab
else into othertab
select * from serviceinfo;
2) FIRST操作符
当使用FIRST操作符执行多表插入时,如果数据已经满足了先前条件,并且已经被插入到某表中,那么该行数据在后续插入中不会再次使用
如:insert first when type=0 then into waptab
when type=1then into javatab
when type=2then into smstab
when orderflag=8 then into ordertab
else intoothertab
select * fromserviceinfo;
四、更新数据
插入数据后,我们需要对插入的数据进行更改,这时可以使用UPDATE或MERGE语句来修改。使用UPDATE语句时,可以使用表达式更新列值,也可以使用子查询更新一列或多列的数据。
1. 用UPDATE来更新数据时,需要注意:
1) 如果要更新数字列,则可以直接提供数字值;如果要更新字符列霍日期列,则数据必须用单引号引住。
2) 当更新数据时,数据必须要满足约束规则。
3) 当更新数据时,数据必须要与列的数据类型匹配。
2. 使用表达式更新数据
1) 具体语法
UPDATE TABLE SET <column>=<value> [,<column>=<value>?] [WHERE <condition>];
2) 将basetab的msisdn是139xxxxxxxx的更新为138xxxxxxxx且paytype为0 update basetabset paytype=0,msisdn=’138xxxxxxxx’where msisdn=’139xxxxxxxx’; 建议:大家可以养成一个好的习惯,在update和delete语句时就算是不想加where条件,也希望写成 where1=1;这样就不是忘了些where 而导致全部更新或删除了。
3. 使用子查询更新数据
当使用update语句更新数据时,不仅可以使用表达式或数值直接更新数据。也可以使用子查询更新数据。
如:update basetab set paytype=(select paytype from basetrab where msisdn=’
86139xxxxxxxx’)where msisdn=’861xxxxxxxx’;
4. 使用MERGE语句来进行更新数据。
1) 具体例子
有两张表,basetab和 basetab_exp表,要如果msisdn在basetab中存在,这用basetab_exp对basetab中更新;如果msisdn不在basetab则用basetab_exp数据插入basetab中。 merger into basetab b using basetab_exp be on (b.msisdn = be.msisdn)
when matched then
update set b.paytype = be.paytype,b.imsi = be.imsi
when not matched then
insert (b.msisdn,b.imsi,b.paytype)values(be.msisn,be.imsi,b.paytype);
2) 例子说明
merger into 子句指名了合并操作的目标表(即行要合并到的表)。上面的例子为basetab表。
using??on 子句指定了一个表连接。上面的例子为basetab_exp表,并通过msisdn来连接。 when matched then 子句指定了当一行满足using??..on子句的条件时要执行的操作。上面的例子执行的操作为update.
when not matched then 子句指定了不满足using??on 子句的条件时要执行的操作。上面的例子执行的操作为insert.
五、检索数据
当表中已经有数据了,我们需要查看数据的时候,就需要用到select语句了。和select相关的主要关键字有:from、where和order by。
select关键字告诉数据库你想要那些列。
from告诉数据库这些列所在的表。
where告诉数据库想为所选择的信息做出怎样的限制。
order by 告诉Oracle按所给出的顺序返回信息。
下面说明一下简单表查询以及一些和查询有关的知识点。
1. 间单表查询
1) 查询手机号为86139xxxxxxxx的用户信息
select msisdn, paytype frombasetab where msisdn=’86139xxxxxxxx’;
2) 查询所有paytype为0的用户的定购关系信息,按照msisdn降序序排序 select msisdn,serviceid,nextchargetime from subscribeinfo s,basetab b where s.msisdn=b.msisdn and paytype=0 order by msisdn desc,
说明:关键字desc代表降序(descending) asc代表升序,不加asc默认是升序。 s代表subscribeinfo的别名,b代表basetab的别名。
2. 单值的逻辑说明
paytye = 0 paytype 等于0
paytye >0 paytype 大于 0
paytye >=0 paytype 大于等于0
paytye <0 paytype 小于0
paytye <=0 paytype 小于等于0
paytye !=0 paytype 不等于 0
paytye ^=0 paytype 不等于 0
paytye <> paytype 不等于 0
说明:因为有些键盘没有惊叹号(!)或加字记号(^),所以Oracle允许使用三种输入不等运算符的方式。
注意:当使用大于和小于运算符比较存储在字符数据类型列中的数字时,要小心。所有的varchar2和char列的值在比较中都被看做是字符。因此,存储在这些类型列中的数字将按字符串而不是数字进行比较。如果列数据类型为NUMBER,那么12大于9。如果为字符列,则0大于12,因为字符’9’大于字符’1’。
3. 运算符like说明
Sql的最强大的功能之一是提供了称为LIKE的模式匹配运算符,该运算符能搜索数据库列的每一行来查找你所描述的模式值。它使用两个特殊的字符来指示要进行哪种匹配。一个为百分号,称为通配符(wildcard),还有一个是下划线,称为位置标示符(position marker)。
1) 百分号(%)表示此处可接受任何内容,包括1个字符、100个字符,或无字符。
2) 下划线( _ )表示此处可以接受一个字符,不为无字符。
如:select * from basetab where msisdn like ‘861381542__%’;
3) 转义符说明
如:create tabletest1(test varchar2(10));
insert intotest1 values('_nihao');
insert intotest1 values('n_ihao');
想查出’_nihao’这条记录
select * from test1where test like ‘t_%’ escape ‘t’; t为转义符’_’被转义。
想查出’n_ihao’这条记录
select * from test1where test like ‘nl_%’ escape ‘l’; l 为转义符。
4) 有时需要将字符串连接起来,连接字符串是使用”||”操作符来完成的。当连接字符串时,要在字符串中加入数字值,”||”后面可以直接加入数字,如果要加入字符或日期,则需要用单引号引住。
4. NULL 与 NOT NULL
IS NULL 指示Oracle识别数据为空的列,IS NOT NULL指示Oracle识别数据不为空的列 为NULL不能就认为是0,NULL表示未知,
Oracle允许将关系运算符(=、!=等等)与NULL连用,但这种比较不返回有意义的结果。与NULL值比较要使用IS 和 IS NOT。
1) 使用NVL函数处理NULL
NVL函数用于将NULL转变为实际值,其语法格式为NVL(expr1,expr2).如果expr1是NULL,则返回expr2,如果不是NULL则返回expr1;
2) 使用NLV2函数处理NULL值
NVL2,该函数也用于处理NULL,其语法格式为NVL2(expr1, expr2, expr3). 如果expr1不是NULL,则返回expr2;如果expr1是NULL,则返回expr3。
5. 值列表的简单测试
1) 对数字的逻辑测试
paytye IN(1,2,3) paytype在列表(1,2,3)中
paytye NOTIN(1,2,3) paytye不在列表(1,2,3)中
paytye BETWEEN 6 AND 10paytye等于6、10或在6到10之间的任何数
paytye NOTBETWEEN 6 AND 10 paytye小于6或大于10
2) 对字母(或字符)的测试
msisdn IN (‘A’,’C’,’F’) msisdn在列表(‘A’,’C’,’F’)中
msisdn NOT IN(‘A’,’C’,’F’) msisdn不在列表(‘A’,’C’,’F’)中 msisdn BETWEEN ‘B’AND ‘D’ msisdn等于’B’、’D’,或在’B’、’D’之间 msisdn NOT BETWEEN ‘B’AND ‘D’ msisdn为小于’B’或大于’D’的任何字符
6. 子查询
1) 返回单值
如:select * from parentserviceinfo p where p.serviceid = ( select pserviceidfrom serviceinfo where serviceid=’10111’);
2) 返回列表
如:select * from basetab where msisdn in (select msisdn fromsubscribeinfo);
7. group by 和having的用法
1) group by子句用于对查询结果进行分组统计。
如:selectpaytype,count(*) from basetab group by paytype;
2) Having子句的功能和where子句很相似,只是它的逻辑仅和分组函数的结果有关,而不与单个行的列和表达式有关,单个行仍然可被where子句选择。
如:select paytype,count(*) from basetab groupby paytype having count(*)>6;
说明:上述查询语句中有几个子句。下面列出Oracle用来执行这些子句的规则以及执行的顺序:
a) 根据where子句选择行。
b) 根据group by子句组合行
c) 为每个组计算分组函数的结果
d) 根据having子句选择和排除组
e) 根据order by子句中的分组函数的结果对组进行排序,order by 子句必须使用分组函数,或者使用在groupby子句中指定的列。
8. EXISTS及其相关子查询的使用
EXISTS用来测试存在状态,它以子查询可能放置IN的方式放置,不同之处在于,它是对从一个查询返回的行的逻辑测试,而不是对行本身的逻辑测试。
如:select msisdn,serviceid from subscribeinfoA where EXISTS (select * from subscribeinfo B where A.msisdn=B.msisdn group byB.msisdn having count(B.serviceid)>1) order by msisdn,serviceid;
用IN替换
Selectmsisdn,serviceid from subscribeinfo where msisdn in (select msisdn fromsubscribeinfo group by msisdn having count(serviceid)>1) order bymsisdn,serviceid;
9. 外部连接
1) right outer join
如:select su.msisdn,su.nextchargetime,s.serviceid from subscribeinfo suright outer join serviceinfo s on su.seriviceid=s.serviceid;
select su.msisdn,su.nextchargetime,s.serviceid from subscribeinfo su,serviceinfo s where su. serviceid (+)=s. serviceid;
作为外部连接语法的一部分使用了on子句。可以使用using子句及表共同的拥有的列名来替换on子句,不要用表名或表别名限制此列名。
select msisdn,nextchargetime,serviceid from subscribeinfo right outer join serviceinfo using(serviceid);
2) left outer join
如:select su.msisdn,su.nextchargetime,s.serviceid from serviceinf sleft outer join
subscribeinfo su on s.seriviceid=su.serviceid;
select su.msisdn,su.nextchargetime,s.serviceid from subscribeinfosu,serviceinfo s
where su.serviceid =s.serviceid (+);
3) full outer join
如:select su.msisdn,su.nextchargetime,s.serviceid from serviceinf sfull outer join
subscribeinfo su on s.seriviceid=su.serviceid;
10. 合并查询
1) UNION
UNION操作符用于获取两个结果集的并集。当使用该操作符时,会自动 去掉结果集中的重复行,并且会以第一列的结果进行排序。
select msisdn,paytype from basetab wheremsisdn=’86131%’
union
select msisdn,paytype from basetab where paytpe=0;
2) UNION ALL
UNION ALL 操作符用于获取两个结果集的并集。但与UNION操作符不同,该操作符不会取消
重复值;也不会按照任何列进行排序。
3) INTERSECT
INTERSECT操作符是取两个结果集的交集
select msisdn,paytype from basetab where msisdn=’86131%’
intersect
select msisdn,paytype from basetab where paytpe=0;
4) MINUS
MINUS操作符是取两个结果集的差
select msisdn,paytype from basetab where msisdn=’86131%’
minus
select msisdn,paytype from basetab wherepaytpe=0;
六、删除数据
当要删除表中某行的数据时,可以使用DELETE语句。使用该语句既可以删除一行数据,也
可以删除多行数据。
DELETE FROM T <table> [WHERE <condition>];
table 表示表名,condition用于指定条件子句。
1. 删除满足条件的数据
如:delete from baset where msisdn=’8613112345%’;
2. 使用子查询删除数据
如:delete from subscribeinfo where serviceid in (select serviceid
fromserviceinfo );
注意:在主从表中,要删除主表数据是,要确保从表不存在相关记录。
七、序列
序列(sequence)是一种数据库项,它生成一个整数序列。序列所生成的整数通常可以用来
填充数字类型的主键列。
1. 创建序列
CREATE SEQUENCE语句可以用来创建序列,其语法如下:
CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[{MAXVALUE maximum_num|NOMAXVALUE}]
[{MINVALUE minimum_num|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE cache_num}]
[{NOCACHE}][{ORDER|NOORDER}]
sequence_name指定序列名。
start_num 指定序列从哪个整数开始,该值默认为1
increment_num 指定该序列每次增加的整数增量,值默认为1。increment_num的绝对值 必须小于maximum_num和minimum_num值之差。
maximum_num指定该序列的最大整数。maximum_num必须大于等于start_num,必须大于minimum_num。
minimum_num指定该序列的最小整数。minimum_num必须小于或等于start_num,必须小于maximun_num。
NOMAXVALUE指定升序序列的最大值为10的27次方,降序序列的最大值为-1。NOMAXVALUE为默认值。
NOMINVALUE 指定升序序列的最小值为1,降序排序的最小值为-10的26次方。NOMINVALUE为默认值。
CYCLE表示循环生成整数。升序序列达到最大值,下一个生成的值是最小值,降序相反。 NOCYCLE即达到最大值或最小值就不再生成数了。
cache_num指定要保留在内存中的整数的个数。默认要缓存的整数为20个。可以缓存最少为2个:缓存的整数个数最多ceil((maximum_num -minimum_num)/abs(increment_num))。 NOCACHE指定不缓存任何整数。这可以阻止数据库为序列预分配值,从而避免序列产生不连续的情况,但这回降低性能。序列不连续的情况之所以会发生,是因为在关闭数据库时所缓存的值将全部丢失。如果省略CACHE和NOCACHE,则数据库默认缓存为20。
ORDER确保按照请求次序生成整数,在RAC环境下要用到。
NOORDER不确保按照请求次序生成整数。NOORDER为默认值。
如:createsequence SQ_CHGSERVICEID
minvalue 1
maxvalue 99
start with 1
increment by 1
nocache
cycle;
2. 使用序列
序列生成一系列数字。一个序列中包含两个“伪列”,currval和nextval,可以分别用来获取该序列的当前值和下一个值。在检索序列的当前值是,需要对序列进行初始化,在选择SQ_CHGSERVICEID.nextval时,该序列就被初始化了。
select SQ_CHGSERVICEID.nextvalfrom dual;
select SQ_CHGSERVICEID.currvalfrom dual;
insert intotable_name(table_value) values(SQ_CHGSERVICEID.nextval);
3. 修改序列
ALTER SEQUENCE语句可以用来修改序列。在修改序列时,可以修改的序列内容如下限制:
1) 不能修改序列的初值
2) 序列的最小值不能大于当前值
3) 序列的最大不能小于当前值
如:alter sequence SQ_CHGSERVICEID increment by2;
4. 删除序列
drop sequence SQ_CHGSERVICEID;
八、索引
在查询时,如果引用索引,一般情况下可以提高查询速度,但在插入和删除时,要维护索引,系统也会有开销。下面介绍一下建立索引的简单语法。
1. 创建一般的索引
具体语法: CREATE[UNIQUE] INDEX index_name ON table_name(column_name [, column_name?])TABLESPACE tab_space;
如: create uniqueindex base_index on basetab(msisdn);
2. 创建基于函数的索引
如:create indexbase_index on basetab(upper(msisdn));
说明:并不是所有的索引扫描都快于表扫描,当返回的总数量达到一定程度以后,如返回数据量为表总量的10%以上,索引扫描就不一定快于表扫描了。索引扫描适合返回少量的数据。
九、函数
数据库提供了很多函数,这里选择了一些来进行说明,组值函数中的AVG、COUNT、MAX、MIN和SUM,再介绍一下格式转换to_char和to_date。最后说一下时间函数ADD_MONTHS、LAST_DAY.
1. AVG函数
AVG函数是用来取平均值的函数。
如:basetab中有用户的身高hight列,现在需要得到所有用户的平均值。
Selectavg(hight) from basetab;
2. COUNT函数
Count函数是用来得到表中的行数的
如:要得到basetab中有多少用户
Selectcount(*) from basetab;
3. MAX函数
MAX函数是用来取最大值的函数。
如:basetab中要得到用户最高身高是多少。
Selectmax(hight) from basetab;
4. MIN函数
MIN函数是用来取最小值的函数
如:basetab中要得到用户最小身高是多少
Selectmin(hight) from basetab;
5. SUM函数
SUM函数是用来对列值进行合计
如:basetab中有用户的使用金额列money,现在要得到所有用户使用了多少钱 Selectsum(money) from basetab;
6. TO_CHAR
TO_CHAR是将日期格式的数据转换成指定格式的字符
如:将现在的时间转换成字符。
Selectto_char(sysdate,’yyyymmddhh24miss’) from dual;
7. TO_DATE
TO_DATE是将字符格式的数据转换成指定格式的日期格式
如:将’19820609000000’字符转换成时间。
Select to_date(‘19820609000000’,’yyyy-mm-ddhh24:mi:ss’) from dual;
8. ADD_MONTHS函数
ADD_MONTHS函数在指定的日期上加上或减去(参数传入为负的)几个月
如:在当前时间加上三个月。
Selectadd_months(sysdate,3) from dual;
如:在当前时间上减上三个月
Selectadd_months(sysdate,-3) from dual;
9. LAST_DAY函数
LAST_DAY函数是获得一个月的最后一天的函数
如:获得但前月的最后一天
Select last_day(sysdate) from dual;