SQL经典实例(第2版)
上QQ阅读APP看书,第一时间看更新

1.13 模式查找

  1. 问题

    你想返回与特定子串或模式匹配的行。请看下面的查询及其返回的结果集。

    select ename, job
      from emp
     where deptno in (10,20)
    
    ENAME       JOB
    ----------  ---------
    SMITH       CLERK
    JONES       MANAGER
    CLARK       MANAGER
    SCOTT       ANALYST
    KING        PRESIDENT
    ADAMS       CLERK
    FORD        ANALYST
    MILLER      CLERK
    

    在部门编号为 10 和部门编号为 20 的员工中,你只想返回那些姓名包含字母 I 或职位名称以 ER 结尾的员工。

    ENAME       JOB
    ----------  ---------
    SMITH       CLERK
    JONES       MANAGER
    CLARK       MANAGER
    KING        PRESIDENT
    MILLER      CLERK
    

     

  2. 解决方案

    结合使用 LIKE 运算符和 SQL 通配符(%)。

    1 select ename, job
    2   from emp
    3  where deptno in (10,20)
    4    and (ename like '%I%' or job like '%ER')

     

  3. 讨论

    用于模式匹配运算 LIKE 中时,通配符(%)与任何字符序列都匹配。大多数 SQL 实现还提供了与单个字符匹配的下划线运算符(_)。通过将搜索模式 I 放在两个 % 之间,可以与任何包含 I 的字符串匹配。在没有将搜索模式放在两个 % 之间的情况下,% 的位置将影响查询结果。如果要查找以 ER 结尾的职位名称,那么可以将 % 放在 ER 前面;如果要查找以 ER 开头的职位名称,则需要将 % 放在 ER 后面。