linux命令select,linux select命令用法

最近在使用DESCENDING时遇到一个问题,按MBLNR MJAHR两列同时按降序进行排序时候,必须在两列后面都要加上关键字DESCENDING 例如: SELECT MBLNR MJAHR INTO (t_MBLNR , t_MJAHR ) FROM MKPF UP TO 1 ROWS WHERE XBLNR = CVBRP-VGBEL ORDER BY MBLNR DESCEND

最近在使用DESCENDING时遇到一个问题,按MBLNR MJAHR两列同时按降序进行排序时候,必须在两列后面都要加上关键字DESCENDING  例如:

SELECT MBLNR

MJAHR

INTO (t_MBLNR , t_MJAHR )

FROM MKPF

UP TO 1 ROWS

WHERE XBLNR = CVBRP-VGBEL

ORDER BY MBLNR DESCENDING MJAHR  DESCENDING.

ENDSELECT.

一.SELECT语句:

1)SELECT用于确定读取数据表中的哪些字段;2)FROM子句用于确定从哪些内表或者视图中读取数据;3)INTO用于确定将数据读取到程序内的哪些数据对象;4)WHERE用于限定选择条件;

SELECT select_clause FROM from_clause INTO into_clause WHERE where_clause.

在传统的ABAP语言中,如果使用TABLES语句声明表工作区,则可省略INTO子句(此方法已经被ABAP Object禁用)

除以上4种外还有:

GROUP BY:用于将一组数据条目压缩为一个单行作为选择最终结果;

HAVING:用于限定ORDER BY子句子数据目组的选择条件;

ORDER BY:用于限定行排序;

SELECT整体语法结构:

SELECT FROM INTO [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ].

二.选择单行数据:

如果只需要选取一个结果数据行,系统在数据库种找到第一个符合条件的数据条目时,就停止查询。单行选择需要在SELECT中使用SINGLE关键字,且INTO自居的结构必须为扁平结构:

SELECT SINGLE INTO FROM ...

如果系统找到一个完全符合指定条件的行,SY-SUBRC返回0,否则返回4。

1.选择全部字段

一般不需要指明所有字段,而是在SELECT后用"*"符号,其中INTO语句种的目标对象最好与FROM种的类型相同。

2.选择指定字段

若指定多个数据对象,则需要将这些对象放在括号中,并用逗号隔开,而且其顺序需要与SELECT子句中指明的表字段顺序一致。

如果指定一个扁平结构作为目标对象,且该结构体中的字段多需要选择的字段,则可以使用INTO子句的CORRESPONDING FIELDS选项,该选项只会将SELECT子句中指明字段的内容传送到目标工作区的同名组建中。

三.选择多行数据

将符合条件的数据全部选取出,其语句结构也需要有相应变化,包括循环选择和选择至内表,两种情况。多行选择也可以使用“*”选择整行数据或指定要选择的字段列表。

1.循环选择

通过SELECT / ENDSELECT循环从数据库中读取多行。

SELECT [DISTINCT] ... ENDSELECT.

注:使用DISTINCT自动去掉重复的行;SY-DBCNT(系统字段)为每次循环计数;对三塔tement block中语句块进行处理。

2.选择至内表

克刚变得一次性把数据选择到一个内表中去。

SELECT ...INTO|APPENDING[CORRESPONDING FIELDS OF]TABLE itab.

注:该情况下SELECT并不启动循环,因而不需要使用ENDSELECT语句;如果itab非空,则SELECT语句将用读取的数据覆盖其中的内容,使用APPENDING代替INTO将布覆盖内表,若结构不完全相同,也可使用CORRESPONDING FIELDS选项将同名区域相对应。

3.指定选择包大小

包的大小指的是一次选择到内表的行数,可使用INTO子句的PACKAGE SIZE选项。

SELECT * ... INTO TABLE itab PACKAGE SIZE n ...

ENDSELECT.

注:由于指定了包的大小,该语句以循环的形式出现;如果n小于等于0,将出现运行是错误。

四.指定查询条件:

1.比较运算符:(=、、<>、<=、>=及相应关键字)

WHERE ... f g ... //f为不带前缀数据表名称的字段名FROM中指定,g任意数据对象。

2.范围限定运算符:

WHERE ... f[NOT]BETWEEN g1 AND g2 ... //条目中f必须在g1与g2之间的值。

3.字符比较运算符:

WHERE f[NOT]LIKE g [ESCAPE h] ... //数据条目中,字段f值必须符合g的模式。g中通配符“_”用于代替单个字符,“%”用于代替任意字符串(包含空串)。

注:可使用ESCAPE选项指定一个忽略符号(h),如果通配符前有忽略符号,那么通配符和忽略符号本身都失去了其功能,而是还原为本义。

4.检查列表值:

WHERE ... f[NOT] IN (g1,...,gn)... //来价差数据库字段f中的值是否等于括号内列表中的一个值。

e.g. SELECT ... WHERE city IN('beijing','rome','london').

5.检查空值:

WHERE ... f IS[NOT] NUll ... //来判断数据库字段f中的值是否为空值。

注:在ABAP中,特定的数据对象都具有初始值,这些初始值可能是一串0或空格等,但不等同于数据库中的NULL值,因而使用ABAP语句添加数据条目时,所有的数据字段都不可能是空值。但在ABAP数据词典里仍有可能存在控制字段,因为Native SQL可以进行空值设置。

6.检查选择:

选择表是一种复杂而强大的逻辑表达式组合形式,其本身是一个内表,检查选择表意味着数据库字段f需满足所有逻辑表达式的组合。

WHERE ... f [NOT] IN seltab ...

其中seltab是选择标准表,是具有特定格式的内表,可以通过SELECT-OPTIONS语句添加到程序和报表选择屏幕,并由报表用户填充它。

查询条件也可在全部或者部分运行时动态指定,方法为在程序中将所有选择条件放置于一个内表中。

SELECT ... WHERE AND (itab) ...

内表itab金包含一个类型c组件且最大长度为72的字段。

五.夺标结合查询

应用程序需要从相关联的多个数据库表读取数据进行评估,此时需要用某些结合条件(字段)把各个数据库表连接起来。

1.SELECT语句嵌套:

2.FOR ALL ENTRIES选项:

Open SQL在WHERE子句中提供了FOR ALL ENTRIES附加项,选出符合已存在内表中所有满足条件的数据值:

SELECT ... FOR ALL ENTRIES IN itab WHERE ...

3.使用视图:

可通过视图(view)将多个数据库表的选择结合在同一个SELECT居于中进行。

4.结合查询(Join)

Inner Jion基本思想是如果主数据表和结合表中存在共同的字段内容,根据其相同值提取

SELECT ... FROM table [INNER] JOIN

jointable1[AS alias]ON,

jointable2[AS alias]ON...

table是主选择表;jointable是结合表;ON用于指定结合条件;

注:不同逻辑条件之间只能通过AND连接,且每个条件中必须包含一个主选择表中的字段,可用“~”指定其所属的数据库表作为前缀。

LeftOuterJoin与InnerJoin的主要区别是前者中对于主选择表的数据,即使在结合数据表中条件字段只不存在,也将该数据行选出,结合表中不存在的字段保持空白。

SELECT ... FROM table LEFT[OUTER]JOIN dbtab [AS alias] ON ...

ON附加项中,只能使用“=”操作符。

5.子查询

使用EXISTS,IN或者逻辑运算符连接至WHERE子句中,但不能与结合选择附加项ON同时出现,子查询可进行嵌套。

六.组合查询结果

1.总计功能:

特定字段:MAX最大值、MIN最小值、SUM求和、AVG平均值、COUNT行数。

SELECT agg ([DISTINCT] s1)[AS a1] agg ([DISTINCT] s1)[AS a1] ...

agg:总计的表达式;s1:字段;a1:目标变量;DISTINCT排出相同的选择结果。

2.分组总计:

使用GROUP BY子句进行分组总计,注:分组总计只能应用在查询字段已经指定了的情况,因此只有指定单独的基本字段列表或者使用INTO CORRESPONDING FIELD附加项的SELECT语句才能进行分组选择。

SELECT s1[AS a1] s2[AS a2] ... agg(sm)[AS am] agg(sn)[AS an]...

INTO (f1,f2,...fm,fn)|COORESPONDING FIELD OF itab...

GROUP BY s1,s2 ...

3.指定分组条件:

使用HAVING子句给分组选择的结果限定条件。注:只有使用GROUP BY时才可使用。

SELECT s1[AS a1] s2[AS a2] ... agg(sm)[AS am] agg(sn)[AS an]...

INTO (f1,f2,...fm,fn)|COORESPONDING FIELD OF itab...

GROUP BY s1,s2 ...

HAVING .

用法与WHERE子句中规则一致。

4.指定行的顺序:

ORDER BY 子句指定行的顺序,排序标准是数据表住关键字或指定的字段。

SELECT * FROM ... ORDER BY PRIMARY KEY. //系统以升序次序给出

SELECT * FROM ... ORDER BY f1[ASCENDING|DESCENDING] f2[ASCENDING|DESCENDING] ... //默认为升序,先按f1排,后按f2排

七.其它格式说明

1.使用标工作区: TABLES dbtab

标工作区是接口工作区中的一种,使用TABLES语句声明,在ABAP objects中不能再使用该语句格式,在指定了标工作区之后,SELECT语句中可省略INTO子句。

2.动态指定数据库表

SELECT ...FROM (dbtabname)...

通过在运行时为变量值指定数据库表名。

注:dbtabname必须包含一个数据库表名字,且必须为大写形式,不能使用表工作区忽略INTO子句。

e.g. dbtabname='SPFLI'

3.指定数据区域

不同应用被分为若干个商业区域,这些区域称为集团(Client)。每个集团都会被系统自动分配一个默认字段MANDT,

注:一些系统通用表是集团无关的,可跨区域存储无MANDT字段。

若要操作特定集团,则需要使用CLENT SPECIFIED取消系统自动处理功能。

SELECT|UPDATE ... dbtab CLENT SPECIFIED ...

注:CLENT SPECIFIED紧跟在表名之后,并在WHERE对mandt的集团字段进行使用。

4.设置缓冲机制

在数据字典Technical settings中进行不同类型缓冲设定。

SELECT语句中的FROM子句的BYPASSING BUFFER附加项,可取消数据字典对该表的缓冲。

DISTINCT附加项与结合选择、总计选择、IS NULL条件、子查询,以及GROUP BY和ORDER BY同时使用时,也将自动忽略缓冲设定。

SELECT ... FROM dbtab BYPASSING BUFFER ...

5.限定选择行数

SELECT ... FROM dbtab UP TO n ROWS ...

若n为正数,则系统最获选n行到程序中,若n为0,则选所有满足的行。

注:与ORDER BY同时使用时先排序,再从排序结果中选n行。

6.操作性能分析

GET RUN TIME FIELD f.

f为I类型,返回开始后的毫秒数。可得到当前系统已运行的时间,来分析SQL语句的操作性能。

注:若需要对程序进行更为复杂、全面性能分析,可以使用系统工具Runtime Aralysis(SE30)。

八.使用光标

在SELECT语句中,数据从数据库中以32KB的数据包传递至应用服务器中,并通过INTO子句传至ABAP中,Open SQL中提供了一套语句对数据的具体传输过程进行监测,这个监测通过操作数据库光标进行,使用光标几乎可以从任何SELECT语句的结果集中获得下一行,先用OPEN CURSOR语句将光标与相关的SELECT语句连接起来。

OPEN CURSOR [WITH HOLD] c FOR SELECT ... [WHERE (conditions)].

其中:c为CURSOR类型,不能在SELECT SINGLE中使用光标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值