SQL WHERE 与 INTO 子句

SQL WHERE 条件与 INTO 子句 (★★)

#open-sql #database

WHERE 运算符

运算符 含义 示例
= 等于 WHERE carrid = 'LH'
<> 不等于 WHERE carrid <> 'LH'
<, >, <=, >= 比较 WHERE price > 500
LIKE 模式匹配(% 任意,_ 单个) WHERE name LIKE 'S%'
IN 集合成员 WHERE carrid IN ('LH', 'BA')
BETWEEN 范围(包含边界) WHERE price BETWEEN 100 AND 500
IS NULL 空值检查 WHERE city IS NULL
NOT 否定(与上述组合) WHERE NOT carrid IN ('LH')
💡使用 LIKE 配合 % 进行”包含”模式匹配。使用 LIKE 'text%'(前缀)进行索引友好的搜索。

INTO 变体

变体 使用场景 行为
INTO wa 单行到工作区 覆盖工作区
INTO TABLE itab 所有行到内表 填充表(覆盖已有内容)
APPENDING TABLE itab 添加行到已有表 追加而不清空
INTO CORRESPONDING FIELDS OF wa 按列名匹配 仅填充匹配的字段
INTO (f1, f2, ...) 变量内联列表 基于位置的赋值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
" 单行
SELECT SINGLE carrid connid INTO wa FROM spfli WHERE ...

" 所有行到表
SELECT carrid connid INTO TABLE lt_spfli FROM spfli WHERE ...

" 追加到已有表
SELECT carrid connid INTO APPENDING TABLE lt_spfli FROM spfli WHERE ...

" 对应字段
SELECT carrid connid INTO CORRESPONDING FIELDS OF ls_flight FROM sflight WHERE ...

" 内联变量
SELECT SINGLE carrid connid INTO (lv_carr, lv_conn) FROM spfli WHERE ...

PACKAGE SIZE 处理大数据量

1
2
3
4
5
6
7
8
SELECT carrid connid
INTO TABLE lt_package
FROM spfli
PACKAGE SIZE 1000. " 每次处理 1000 行

" 在此处处理 lt_package

ENDSELECT.
方面 详情
用途 以可管理的块处理大型结果集
机制 反复填充内表,通过 ENDSELECT 循环
内存 受控的内存消耗
要求 必须与 SELECT ... ENDSELECT 循环配合使用
📌PACKAGE SIZE 需要 SELECT ... ENDSELECT 结构。INTO TABLE 对每个包反复填充。

行数限制

语句 行为
SELECT SINGLE ... 获取一行;应使用完整键;不允许 ORDER BY
SELECT ... UP TO n ROWS 最多获取 n 行;可与 ORDER BY 配合
1
2
3
4
5
" 按完整键获取一行
SELECT SINGLE * FROM spfli INTO wa WHERE carrid = 'LH' AND connid = '0400'.

" 最佳匹配(带排序)
SELECT * FROM spfli INTO TABLE lt_tab UP TO 10 ROWS ORDER BY distance.
⚠️SELECT SINGLE 应使用完整的主键。如果 WHERE 不能唯一标识一行,结果未定义(返回第一个匹配,取决于数据库)。当你需要单行但缺少完整键时,使用 SELECT ... UP TO 1 ROWS

SELECT SINGLE vs UP TO 1 ROWS

特性 SELECT SINGLE SELECT UP TO 1 ROWS
需要完整键 是(推荐)
允许 ORDER BY
用途 按键获取唯一行 任意单行
性能 有完整键时略优 无完整键时相同

考试/测试模式

关键词 / 短语 答案
“APPENDING vs INTO TABLE” APPENDING 添加到已有内容;INTO TABLE 覆盖
“PACKAGE SIZE 需要什么?” SELECT … ENDSELECT 循环
“SELECT SINGLE 的要求?” 应使用完整主键
“UP TO n ROWS 配合 ORDER BY?” 允许 – 排序后返回前 n 行
“INTO CORRESPONDING FIELDS” 按列名匹配,忽略不匹配的
“LIKE 通配符?” % = 任意序列,_ = 单个字符

相关笔记