定义复杂搜索条件
除基本比较谓词 (例如 = 和>) 外,搜索条件还可以包含下列任何谓词 :BETWEEN , IN , EXISTS , IS NULL 和 LIKE。
搜索条件可以包含标量全查询。
对于字符, UCS-2 或 UTF-16 图形列谓词,在对 BETWEEN , IN , EXISTS 和 LIKE 子句的谓词求值之前,排序顺序将应用于操作数。
您还可以执行多个搜索条件。
- 在...... 还有... 用于指定由位于两个其他值之间的任何值满足的搜索条件。 例如,要查找 1987 年雇佣的所有员工,您可以使用以下内容:
... WHERE HIREDATE BETWEEN '1987-01-01' AND '1987-12-31'BETWEEN 关键字包括在内。 生成相同结果的更复杂但显式的搜索条件是:
... WHERE HIREDATE >= '1987-01-01' AND HIREDATE <= '1987-12-31' - IN 表示您对您列出的值中包含指定表达式的值的行感兴趣。 例如,要查找部门 A00, C01和 E21中所有员工的名称,可以指定:
... WHERE WORKDEPT IN ('A00', 'C01', 'E21') - EXISTS 表示您有兴趣测试是否存在某些行。 例如,要了解是否有任何员工的工资高于 60000 ,可以指定:
EXISTS (SELECT * FROM EMPLOYEE WHERE SALARY > 60000) - IS NULL 表示您有兴趣测试空值。 例如,要了解是否有任何员工没有电话列表,可以指定:
... WHERE EMPLOYEE.PHONE IS NULL - LIKE 表示您对表达式与您提供的值相似的行感兴趣。 使用 LIKE 时, SQL 将搜索类似于您指定的字符串的字符串。 相似度由搜索条件中包含的字符串中使用的两个特殊字符确定:
- _
- 下划线字符代表任何单个字符。
- %
- 百分号代表未知字符串 0 或更多字符。 如果百分号启动搜索字符串,那么 SQL 允许 0 或更多字符在列中的匹配值之前。 否则,搜索字符串必须在列的第一个位置开始。
注: 如果您正在对 MIXED 数据进行操作,那么以下区分适用: SBCS 下划线字符是指一个 SBCS 字符。 任何此类限制都不适用于百分号; 即,百分号是指任意数目的 SBCS 或 DBCS 字符。 请参阅 Db2 for i SQL 参考 主题集合,以获取有关 LIKE 谓词和 MIXED 数据的更多信息。当您不知道或不关心列值的所有字符时,请使用下划线字符或百分号。 例如,要了解哪些员工居住在明尼阿波利斯,可以指定:
... WHERE ADDRESS LIKE '%MINNEAPOLIS%'无论字符串出现在何处, SQL 都会返回 ADDRESS 列中包含字符串 MINNEAPOLIS 的任何行。
在另一个示例中,要列出其名称以 "SAN" 开头的城镇,可以指定:
... WHERE TOWN LIKE 'SAN%'如果要查找街道名称不在主街道名称列表中的任何地址,那么可以在 LIKE 表达式中使用表达式。 在此示例中,假定表中的 STREET 列为大写。
... WHERE UCASE (:address_variable) NOT LIKE '%'||STREET||'%'如果要搜索包含下划线或百分号字符的字符串,请使用 ESCAPE 子句来指定转义字符。 例如,要查看名称中包含百分比的所有企业,可以指定:
LIKE 字符串中的第一个和最后一个百分号字符被解释为正常 LIKE 百分号字符。 作为实际百分比字符的组合 "@%' i"。... WHERE BUSINESS_NAME LIKE '%@%%' ESCAPE '@'