oracle中的prior用法

一、概述

Oracle中的prior关键字是一种用于处理树形结构数据的特殊语法,它常常用于对自身表进行递归查询,或者在连接查询中使用。在实际应用中,prior关键字的使用可以帮助我们快速有效地处理复杂的数据结构,并且提高查询效率。

二、递归查询

1. prior关键字在递归查询中的使用

在处理树形结构数据时,通常需要进行递归查询以获取整个树的数据。这时,prior关键字就可以派上用场了。通过在查询语句中使用prior关键字,我们可以实现从父节点向子节点的递归查询,轻松地获取整个树形结构的数据。

2. 使用prior关键字实现递归查询的示例

我们有一个部门表,表中包含部门ID和上级部门ID两个字段。如果我们想要查询某个部门及其所有下属部门的信息,可以使用prior关键字来实现递归查询。示例代码如下:

```sql

select *

from department

start with department_id = :dept_id

connect by prior department_id = parent_department_id; ```

以上代码中,我们通过start with指定了起始部门ID,然后通过connect by prior指定了递归关系,从而实现了部门及其所有下属部门的查询。

三、连接查询

1. prior关键字在连接查询中的使用

除了在递归查询中的应用,prior关键字还可以在连接查询中发挥作用。通过在连接查询中使用prior关键字,我们可以实现对历史数据的查询、版本间的比较等功能,极大地丰富了数据查询的灵活性和功能性。

2. 使用prior关键字实现连接查询的示例

假设我们有一个员工表,表中包含员工ID、入职日期和离职日期等字段。如果我们想要查询某个员工在入职后的所有薪资记录,可以使用prior关键字来实现连接查询。示例代码如下:

```sql

select *

from salary_history

where employee_id = :emp_id

and salary_date > (select hire_date from employees where

employee_id = :emp_id) start with salary_date = hire_date

connect by prior salary_date = prior_salary_date;

```

在以上示例中,我们通过start with和connect by prior关键字,实现了对员工在入职后所有薪资记录的查询,从而满足了具体业务需求。

四、总结

在Oracle数据库中,prior关键字是一种非常有用的语法,它可以帮助我们处理树形结构数据、实现递归查询,并且在连接查询中发挥重要作用。通过灵活运用prior关键字,我们可以轻松处理复杂的数据结构,提高查询效率,满足具体业务需求。在实际应用中,我们应该充分利用prior关键字的强大功能,提高数据库查询的效率和灵活性。Oracle中的prior关键字在处理树形结构数据、实现递归查询以及在连接查询中的应用已经被深入讨论。prior关键字还可以用于处理数据的版本间比较、历史数据查询以及数据的层次结构处理。

在实际应用中,例如在企业的人事管理系统中,我们经常会碰到需要查询员工的组织架构、岗位变动历史以及薪资调整记录等需求。在这些场景下,prior关键字可以发挥重要作用。我们可以通过prior关键字来实现查询某个员工及其所在部门的层级结构,并且可以轻松地获取其岗位变动历史和薪资调整记录。这样一来,我们就能够方便地对员工的整个职业生涯进行全面的查询和分析。

另外,通过使用prior关键字,我们还可以实现对历史数据的查询。在金融领域中,我们经常需要查询某个客户的账户变动历史,包括存款、取款、利息发放等记录。通过使用prior关键字,我们可以轻松地实现对这些账户变动记录的递归查询,从而方便地进行数据分析和统计。

除了在上述应用场景中的作用外,prior关键字还可以在数据的版本间比较中发挥重要作用。在软件开发领域中,我们经常需要对不同版本的数据库结构进行比较,以便进行数据库升级或者版本迁移。通过使用prior关键字,我们可以方便地实现对不同版本数据库表结构的比较和数据的迁移,从而简化了数据库升级的过程,并且可以保证数据的完整性和一致性。

prior关键字在Oracle数据库中的应用非常广泛,不仅可以用于处理树形结构数据和实现递归查询,还可以用于连接查询、历史数据查询、版本间比较等多种场景。通过灵活运用prior关键字,我们可以方便地处理复杂的数据结构,提高查询效率,并且满足具体业务需求。在实际应用中,我们应该充分利用prior关键字的强大功能,提高数据库查询的效率和灵活性。不断学习和掌握prior关键字的用法,可以帮助我们更好地处理各种复杂的数据查询和分析需求。

合集下载

oracle中insertall的用法

oracle中insertall的用法

oracle中insertall的⽤法

oracle中insert all的⽤法

现在有个需求:将数据插⼊多个表中。怎么做呢?可以使⽤insert into语句进⾏分别插⼊,但是在oracle中有⼀个更好的实现⽅式:使⽤

insert all语句。

insert all语句是oracle中⽤于批量写数据的 。insert all分⼜为⽆条件插⼊和有条件插⼊。

⼀、表和数据准备

--创建表

CREATE TABLE stu(

ID NUMBER(3),

NAME VARCHAR2(30),

sex VARCHAR2(2)

);

--删除表

drop table stu;

drop table stu1;

drop table stu2;

--向stu表中插⼊数据

INSERT INTO stu(ID, NAME, sex) VALUES(1, '成都', '⼥');

INSERT INTO stu(ID, NAME, sex) VALUES(2, '深圳', '男');

INSERT INTO stu(ID, NAME, sex) VALUES(3, '上海', '⼥');

--复制表结构创建表stu1,stu2

CREATE TABLE stu1 AS SELECT t.* FROM stu t WHERE 1 = 2;

CREATE TABLE stu2 AS SELECT t.* FROM stu t WHERE 1 = 2;

--查询表

select * from stu;

select * from stu1;

select * from stu2;

⼆、insert all⽆条件插⼊

将stu表中的数据插⼊stu1和stu2表中可以这样写

insert all

into stu1 values(id,name,sex)

into stu2 values(id,name,sex)

select id,name,sex from stu;

三、insert all有条件插⼊

oracle中connect_by_prior用法,实战解决日期分解问题

oracle中connect_by_prior用法,实战解决日期分解问题

connect by prior 是结构化查询中用到的,其基本语法是:

select ... from tablename start with 条件1

connect by prior 条件2

where 条件3;

例:

select * from table

start with org_id = 'AAA'

connect by prior org_id = parent_id;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:

org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中:

条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id =

parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。

条件3 是过滤条件,用于对返回的所有记录进行过滤。

简单介绍如下:

早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:

第一步:从根节点开始;

第二步:访问该节点;

第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;

第四步:若该节点为根节点,则访问完毕,否则执行第五步;

第五步:返回到该节点的父节点,并执行第三步骤。

总之:扫描整个树结构的过程也即是中序遍历树的过程。

1. 树结构的描述

树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编号,MGR表示领导该雇员的人的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点的MGR(除根节点外),通过每个节点的父节点,就可以确定整个树结构。

oracle中connectbyprior的使用

oracle中connectbyprior的使用

oracle中connectbyprior的使⽤

作⽤

connect by主要⽤于⽗⼦,祖孙,上下级等层级关系的查询

语法

{ CONNECT BY [ NOCYCLE ] condition [AND condition]... [ START WITH condition ]

| START WITH condition CONNECT BY [ NOCYCLE ] condition [AND condition]...}

解释:

start with: 指定起始节点的条件

connect by: 指定⽗⼦⾏的条件关系

prior: 查询⽗⾏的限定符,格式: prior column1 = column2 or column1 = prior column2 and ... ,

nocycle: 若数据表中存在循环⾏,那么不添加此关键字会报错,添加关键字后,便不会报错,但循环的两⾏只会显⽰其中的第⼀条

循环⾏: 该⾏只有⼀个⼦⾏,⽽且⼦⾏⼜是该⾏的祖先⾏

connect_by_iscycle: 前置条件:在使⽤了nocycle之后才能使⽤此关键字,⽤于表⽰是否是循环⾏,0表⽰否,1 表⽰是

connect_by_isleaf: 是否是叶⼦节点,0表⽰否,1 表⽰是

level: level伪列,表⽰层级,值越⼩层级越⾼,level=1为层级最⾼节点

例⼦

⾃定义数据

-- 创建表

create table employee(

emp_id number(18),

lead_id number(18),

emp_name varchar2(200),

salary number(10,2),

dept_no varchar2(8)

);

-- 添加数据

insert into employee values('1',0,'king','1000000.00','001');

insert into employee values('2',1,'jack','50500.00','002');

oracle中的mergeinto用法解析

oracle中的mergeinto用法解析

oracle中的mergeinto⽤法解析

oracle中的merge into⽤法解析

merge into的形式

MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)

WHEN MATCHED THEN

[UPDATE sql]

WHEN NOT MATCHED THEN [INSERT sql]

作⽤:判断B表和A表是否满⾜on条件,如果满⾜则⽤B表去更新A表,如果不满⾜,则将B表数据插⼊A表,但有很多可选项。

例如:

1:正常模式

2:只update或者只insert

3:带条件的update或带条件的insert

4:全插⼊insert实现

5:带delete的update -------------------不做讲解

⼀:正常模式

例如:

MERGE INTO A_MERGE A

USING (select B.AID,,B.YEAR from B_MERGE B) C

ON (A.id=C.AID)

WHEN MATCHED THEN UPDATE SET A.YEAR=C.YEAR

WHEN NOT MATCHED THEN

INSERT(A.ID,,A.YEAR) VALUES(C.AID,,C.YEAR);

commit;

解析:

1:被更新的表写在MEGER INTO之后

2:更新来源数据表写在USING之后,并将相关字段查询出来,为查询结果定义别名

3:ON之后表⽰更新满⾜的条件

4:WHEN MATCHED THEN:表⽰当满⾜条件时要执⾏的操作。

5:UPDATE SET 被更新表.被更新字段 = 更新表.更新字段---此更新语句不同于常规更新语句

6:WHEN NOT MATCHED THEN:表⽰当不满⾜条件时要执⾏的操作。

Oracle中union的用法

Oracle中union的用法

Oracle中union的⽤法

UNION 指令的⽬的是将两个 SQL 语句的结果合并起来,可以查看你要的查询结果.

例如:

SELECT Date FROM Store_Information

UNION

SELECT Date FROM Internet_Sales

注意:union⽤法中,两个select语句的字段类型匹配,⽽且字段个数要相同,如上⾯的例⼦,在实际的软件开发过程,会遇到更复杂的情况,具体请看

下⾯的例⼦

select '1' as type,FL_ID,FL_CODE,FL_CNAME,FLDA.FL_PARENTID from FLDA

WHERE ZT_ID=2006030002

union

select '2' as type,XM_ID,XM_CODE ,XM_CNAME ,FL_ID from XMDA

where exists (select * from (select FL_ID from FLDA WHERE ZT_ID=2006030002 ) a where XMDA.fl_id=a.fl_id)

order by type,FL_PARENTID ,FL_ID

这个句⼦的意思是将两个sql语句union查询出来,查询的条件就是看XMDA表中的FL_ID是否和主表FLDA⾥的FL_ID值相匹配,(也就是存在).

UNION在进⾏表链接后会筛选掉重复的记录,所以在表链接后会对所产⽣的结果集进⾏排序运算,删除重复的记录再返回结果。

在查询中会遇到 UNION ALL,它的⽤法和union⼀样,只不过union含有distinct的功能,它会把两张表了重复的记录去掉,⽽union all不会,所以从

效率上,union all 会⾼⼀点,但在实际中⽤到的并不是很多.

表头会⽤第⼀个连接块的字段。。。。。。。。。。

⽽UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数

Oracle中Using用法

Oracle中Using用法

Oracle中Using用法

1. 静态SQLSQL与动态SQL

Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型;另外一种是后期联编(late binding),即SQL语句只有在运行阶段才能建立,例如当查询条件为用户输入时,那么Oracle的SQL引擎就无法在编译期对该程序语句进行确定,只能在用户输入一定的查询条件后才能提交给SQL引擎进行处理。通常,静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式。

本文主要就动态SQL的开发进行讨论,并在最后给出一些实际开发的技巧。

2. 动态SQL程序开发

理解了动态SQL编译的原理,也就掌握了其基本的开发思想。动态SQL既然是一种”不确定”的SQL,那其执行就有其相应的特点。Oracle中提供了Execute immediate语句来执行动态SQL,语法如下:

Excute immediate 动态SQL语句 using 绑定参数列表 returning into 输出参数列表;

对这一语句作如下说明:

1) 动态SQL是指DDL和不确定的DML(即带参数的DML)

2) 绑定参数列表为输入参数列表,即其类型为in类型,在运行时刻与动态SQL语句中的参数(实际上占位符,可以理解为函数里面的形式参数)进行绑定。

3) 输出参数列表为动态SQL语句执行后返回的参数列表。

4) 由于动态SQL是在运行时刻进行确定的,所以相对于静态而言,其更多的会损失一些系统性能来换取其灵活性。

为了更好的说明其开发的过程,下面列举一个实例:

设数据库的emp表,其数据为如下:

ID NAME SALARY

100 Jacky 5600

101 Rose 3000

102 John 4500

要求:

oracle中的exists 和not exists 用法详解

有两个简单例子,以说明 “exists”和“in”的效率问题

1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;

T1数据量小而T2数据量非常大时,T1<

2) select * from T1 where T1.a in (select T2.a from T2) ;

T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。

exists 用法:

请注意 1)句中的有颜色字体的部分 ,理解其含义;

其中 “select 1 from T2 where T1.a=T2.a” 相当于一个关联表查询,相当于

“select 1 from T1,T2 where T1.a=T2.a”

但是,如果你当当执行 1) 句括号里的语句,是会报语法错误的,这也是使用exists需要注意的地方。

“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。

因此“select 1”这里的 “1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,这 1) 句的where 条件成立。

in 的用法:

继续引用上面的例子

“2) select * from T1 where T1.a in (select T2.a from T2) ”

这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,T1和T2这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。

打个比方:T1,T2表都有一个字段,表示工单号,但是T1表示工单号的字段名叫“ticketid”,T2则为“id”,但是其表达的意义是一样的,而且数据格式也是一样的。这时,用 2)的写法就可以这样:

“select * from T1 where T1.ticketid in (select T2.id from T2) ”

Oracle中having、group by的用法

Having

这个是用在聚合函数的用法。当我们在用聚合函数的时候,一般都要用到

GROUP BY 先进行分组,然后再进行聚合函数的运算。运算完后就要用到

HAVING 的用法了,就是进行判断了,例如说判断聚合函数的值是否大于某一

个值等等。

select customer_name,sum(balance)

from balance

group by customer_name

having balance>200; yc_rpt_getnew

order by 、group by 、having的用法区别

order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须

列出排序的字段名,可以是多个字段名。

group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用

时至少需要一个分组标志字段。

什么是“聚合函数”?

像sum()、count()、avg()等都是“聚合函数”

使用group by 的目的就是要将数据分类汇总。

一般如:

select 单位名称,count(职工id),sum(职工工资) form [某表]

group by 单位名称

1 这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总

额。

在sql命令格式使用的先后顺序上,group by 先于 order by。

select 命令的标准格式如下:

SELECT select_list

[ INTO new_table ]

FROM table_source

[ WHERE search_condition ]

[ GROUP BY group_by_expression ]

[ HAVING search_condition ]

1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须

浅谈Oracle数据库中Merge Into的用法

浅谈Oracle数据库中Merge Into的用法 曹国强 (云南省楚雄师范学院) 摘要:Merge Into语句是Oracle从9j开始新增的一种语法,是Oracle 中的一个非常有用的功能,它主要用来合并update和insert语句,即用一个 表中的数据来修改或插入到另一个表中,是update还是insert主要依据于 所指定的条件判断的,它的主要原则是“有则更新,无则插入”,比如说要用 Merge Into来实现用B表来更新A表中的数据,如果A表中没有,贝0把B 表的数据插入A表。在使用DBMS过程中,我们总是难以避免的遇到像这样 的需求,如果不使用Merge Into语句,我们将不得不在程序中增加大段的 代码,这样实现起来不仅费时麻烦而且容易出错。 关键词:用途语法操作改进 1 Merge Into语句在Oracle中的用途 Merge Into语句是Oracle从9i开始新增的一种语法,是Ora— cle中的一个非常有用的功能,它类似干MySQL中的insert into on duplicate key ̄ 单从字面意思上来看,Merge是合并、兼并的意思,顾名思义, Merge Into的用途就是对目标表进行匹配,并根据是否匹配条件进 行分别处理,它主要用来合并Update和Insert语句,即用一个表中 的数据来修改或插入到另一个表中。通过Merge Into语句,我们能 够在~个语句中对一个表同时执行Insert和Update操作,根据这 个表或子查询的连接条件对另外一张表进行查询,连接条件匹配上 的进行Update操作,并且在其后面还可接删除操作,无法匹配的执 行lnsert,它能减少执行多条Insert和Update语句,且插入或者修 改的操作取决于on子句的条件。这个语法仅需要一次全表扫描就 完成了全部工作,执行效率要高于Insert+Update。 2 Merge Into的语法和基本操作 2.1语法 MERGE INTO[your table—name】Irename your table here] USING([write your query here])[rename your query—sql and using just like a table] ON([conditional expression here1 AN D【…】_..) WHEN MATHED THEN 『here you can execute some update sql or something else 1 WHEN N0T MATHED THEN [execute somethinq else here!】 其中:  ̄into子句:指定所要修改或者插入数据的目标表 ②using子句:指定用来修改或者插入的数据源。数据源可以是 表、视图或者一个子查询语句。 ⑧0n子句:指定执行插入或者修改的满足条件。在目标表中符 合条件的每一行,oracle用数据源中的相应数据修改这些行。对于不 满足条件的那些行,oracle则插入数据源中相应数据。 @when matched l not matched子句:通知oracle如何对满 足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。  ̄merge—update子句:执行对目标表中的字段值修改。当在符 合on子句条件的情况下执行。如果修改子句执行,则目标表上的修 改触发器将被触发。 限制:当修改一个视图时,不能指定一个default值。 ( ̄merge_insert子句:执行当不符合on子句条件时,往目标表 中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。 限制:当修改一个视图时,不能指定一个default值。 例:教务处对计算机专业学生的《算法与数据结构》成绩做了部 分调整,现在要把调整后的成绩更新到原数据表中,假设调整后的数 据保存在表tmp—score,原数据保存在表my score,则程序可写成: merge into my_score m using tmp_score t on (m.student_id=t.studenLid and m.subject_id:t. subject_id) when matched then update set m.score1=t.score1, m.score2=t.score2, m.score3=t.score3, m.score=t.score when not matched then insert values( t.student_id, t.subjecLid, t.score1, t.score2, t.score3, t.score) 2.2 Merge Into的基本操作 (上接第228页) 第一个不同之处:VMware本身庞大而复杂,但KVM十分简 洁。使用VMware使得非常复杂的X86架构完全虚拟化,并且性能 和稳定性都非常好,这是它的长处,但同时就很多方面而言, VMware是一个基础破坏技术,它只用软件技术进行管理,因此也使 得它自身变得非常庞大和复杂。而KVM,基于最新的硬件虚拟技术, 所以就其本身而论,它非常小大约只有1万行代码左右且相当简 单。 第二个不同之处在于使用成本,VMware是有专利的,而KVM 是开源的,这点对于市场尤为重要。 4.2 Xen Xen是一个独立的内核,而KVM只是内核的一个模块,因此在 开发的难度上差别显而易见。 Xen可同时提供半虚拟化和完全虚拟化,它被设计成一个独立 的内核,它只需要Linux执行I,0,这样就使得它必须具有非常强大 的功能,自己的调度程序、内存管理器、计时器和机器初始化程序等 等。而KVM只是内核的一个模块,它使用标准的Linux调度程序、内 存管理器和其他服务。因此KVM开发者们可以集中精力在虚拟化 上,将虚拟技术建立在内核上而不是去替换内核。 4.3 QEMU 229 OEMU是一个用户空间模拟器,它可以在不同宿主处理器上模 拟很多的客户处理器,并且性能非常好。但用户空间架构不允许它在 无内核加速器的条件下解决先天的速度问题。KVM依然认可QE— MU的实用价值,使用它进行l/0硬件模拟。 总之,KVM是第一个进入内核的虚拟化解决方案,还有其他一 些方法一直在为进入内核而竞争,但是由于KVM需要的修改较少, 并且可以将标准内核转换成一个系统管理程序,因此它的优势不言 而喻。 KVM的另外~个优点是它本身是内核的一部分,因此可以利用 内核自身的优化和改进。和其他独立的系统管理程序方案相比,这种 方法是一种不可能过时的技术。KVM有两个最大的缺点,分别是:第 一,需要较新的能够支持虚拟化的处理器;第二,需要一个用户空间 的QEMU进程来提供I/0虚拟化。但是不论好坏,KVM位于内核 中,这对于现有解决方案来说是一个巨大的飞跃。 参考文献: n1何晓龙,宋吉广.KVM:驶入虚拟化快车道:Linux内核虚拟化KVM详 解;2007年.软件世界.第11期. 【2】丁涛,郝沁汾,张冰.内核虚拟机调度策略的研究与分析【A】;2010系统 仿真技术及其应用学术会议论文集【Cl,2010年.

oracle中CASE的用法

oracle中CASE的⽤法

1.第⼀种⽤法:可以称为简单变量;

SELECT ename,

(CASE deptno

WHEN 10 THEN 'ACCOUNTING'

WHEN 20 THEN 'RESEARCH'

WHEN 30 THEN 'SALES'

WHEN 40 THEN 'OPERATIONS'

ELSE 'Unassigned'

END ) as Department

FROM emp;

ENAME DEPARTMENT

---------- ----------

SMITH RESEARCH

ALLEN Unassigned

WARD SALES

JONES RESEARCH

MARTIN SALES

BLAKE SALES

CLARK ACCOUNTING

SCOTT RESEARCH

KING ACCOUNTING

TURNER SALES

ADAMS RESEARCH

JAMES SALES

2.第⼆种⽤法:可以称为条件表达式;

SELECT ename, sal, deptno,

CASE

WHEN sal <= 500 then 0

WHEN sal > 500 and sal<1500 then 100

WHEN sal >= 1500 and sal < 2500 and deptno=10 then 200

WHEN sal > 1500 and sal < 2500 and deptno=20 then 500

WHEN sal >= 2500 then 300

ELSE 0

END "bonus"

FROM emp;

ENAME SAL DEPTNO bonus

---------- ---------- ---------- ----------

SMITH 800 20 100

ALLEN 1600 90 0

WARD 1250 30 100

JONES 2975 20 300

MARTIN 1250 30 100

BLAKE 2850 30 300

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