具有可变长通配符的 WHERE 子句

下列查询中的语句在字符串的末尾使用通配符来检索 description 以字符 bicycle 开头的所有行。

图: 查询

SELECT stock_num, manu_code, description, unit_price 
          FROM stock
          WHERE description LIKE 'bicycle%'
          ORDER BY description, manu_code;
          
          SELECT stock_num, manu_code, description, unit_price
          FROM stock
          WHERE description MATCHES 'bicycle*'
          ORDER BY description, manu_code; 
任一语句都返回以下行。

图: 查询结果

stock_num manu_code description     unit_price
        
        102 PRC       bicycle brakes     $480.00
        102 SHM       bicycle brakes     $220.00
        114 PRC       bicycle gloves     $120.00
        107 PRC       bicycle saddle      $70.00
        106 PRC       bicycle stem        $23.00
        101 PRC       bicycle tires       $88.00
        101 SHM       bicycle tires       $68.00
        105 PRC       bicycle wheels      $53.00
        105 SHM       bicycle wheels      $80.00

比较 'bicycle%' 或 'bicycle*' 指定字符 bicycle 后跟零个字符或任何字符序列。它与 bicycle stem 匹配,而 stem 与通配符匹配。如果具有该描述的行存在,那么它只与字符 bicycle 匹配。

以下查询通过添加排除 PRCmanu_code 的另一个比较条件来缩小搜索范围。

图: 查询

SELECT stock_num, manu_code, description, unit_price 
          FROM stock
          WHERE description LIKE 'bicycle%'
          AND manu_code NOT LIKE 'PRC'
          ORDER BY description, manu_code;
该语句只检索到下列行。

图: 查询结果

stock_num manu_code description     unit_price
        
        102 SHM       bicycle brakes     $220.00
        101 SHM       bicycle tires       $68.00
        105 SHM       bicycle wheels      $80.00

当从大型表中进行选择并在比较字符串中使用词首通配符时(如 '%cycle'),查询通常需要较长时间来执行。由于不能使用索引,所以搜索每一行。