SELECT
SELECT语句从数据库表中读取必要的数据。
SELECT语句分为两个部分。一部分为<lines>,用于指定查询数据的件数,当查询一件时用SINGLE语句。另一部分是<columns>,用于指定要查询的数据库表字段。
AS(别名)
利用AS语句可以给字段指定别名。
SELECT <cols> [AS <alias>]
例:
SELECT SINGLE CARRID AS ZCARRID INTO GV_CARRID FROM SFLIGHT WHERE CONNID = '123'.
Single field
查询数据库的个别字段或者使用Aggregate(聚合函数)时使用如下所示的语句。INTO 语句后面列出现两个以上的目标时需要括号分别指定变量名。
若存在空格,则会发生语法错误。
SELECT CARRID CONNID INTO (GV_CARRID,GV_CONNID) FROM SFLIGHT.
限制查询个数
利用下列语句可以限制要查询的数据个数。
SELECT ... FROM <TAB> UP TO <N> ROWS...
WHERE 语句
WHERE语句可以指定查询条件使用户正确的取得自己所需数据,此语句还适用与UPDATE、DELETE等命令。
SELECT ... WHERE <s> <operator> <f> ...
1.interval条件
需要在条件中追加范围时使用此语
SELECT ... WHERE <S> [NOT] BETWEEN <F1> AND <F2>
例如,取得字段COL为1~10的数据时可以写成 WHERE COL BETWEEN 1 AND 10.
2.字符串比较
比较字符串时使用LIKE语句。若要取得以ABC开头的数据,则可以追加如以下条件。
COLS = 'ABCDEFGH'.
SELECT ~ WHERE COL2 LIKE 'ABC%'.
若要取得ABC开头的四位长字符串时,例如,在ABCD、ABCE、AFCF、ABCG等数据中
只要比较一位时,可以使用符号‘_’.
WHERE COL2 LIKE 'ABC '
3.LIST VALUE
利用IN语句可以取得符合多种情况的数据。例如,读取居住在'北京'、'上海'的人时条件
可以为“WHERE 地址 IN ('北京','上海')”。
SELECT ... WHERE <S> [NOT] IN (<F1>,...,<FN>)...
4.SELECTION TABLE
利用IN语句可以查询存储在Selection Table,Range变量里的数据。Selection Table,Range变量
类似于内表,可以存储多条数据。
SELECT ... WHERE <S> [NOT] IN <SELTAB>
GROUPING 语句
使用Aggregate(聚合函数)函数之前,选择数据时需要用Group bY 语句进行分组。group by语句是当表的特定关键字中存在相同值时就显示在同一行中
SELECT <F1> <F2> <AGG> ... GROUP BY <F1> <F2>
GROUP BY 语句使用的字段一定要在SELECT语句中查询出来。
例子:分别取得每个航班ID的评价占有率。
DATA GV_CARRID TYPE SFLIGHT-CARRID. DATA GV_CONNID TYPE SFLIGHT-CONNID. DATA GV_PAYMENTSUM TYPE SFLIGHT-PAYMENTSUM. SELECT CARRID CONNID AVG( PAYMENTSUM ) INTO ( GV_CARRID,GV_CONNID,GV_PAYMENTSUM ) FROM SFLIGHT GROUP BY CARRID CONNID PAYMENTSUM. WRITE:/ GV_CARRID,GV_CONNID. ENDSELECT.
结果:
在OPEN SQL 中利用SUM 函数时 使用INTO CORRESPONDING FIELDS OF TABLE 语句会取不到预期结果。
此时要利用AS语句为合计字段起个别名,具体使用方法如下面代码所示。
SELECT CARRID SUM( PRICE ) AS PRICE FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE GT_GLT WHERE CARRID = 'AA'.