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 | " 单行 |
PACKAGE SIZE 处理大数据量
1 | SELECT carrid connid |
| 方面 | 详情 |
|---|---|
| 用途 | 以可管理的块处理大型结果集 |
| 机制 | 反复填充内表,通过 ENDSELECT 循环 |
| 内存 | 受控的内存消耗 |
| 要求 | 必须与 SELECT ... ENDSELECT 循环配合使用 |
📌
PACKAGE SIZE 需要 SELECT ... ENDSELECT 结构。INTO TABLE 对每个包反复填充。行数限制
| 语句 | 行为 |
|---|---|
SELECT SINGLE ... |
获取一行;应使用完整键;不允许 ORDER BY |
SELECT ... UP TO n ROWS |
最多获取 n 行;可与 ORDER BY 配合 |
1 | " 按完整键获取一行 |
⚠️
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 通配符?” | % = 任意序列,_ = 单个字符 |