zoukankan      html  css  js  c++  java
  • MySQL学习笔记(四)

    1、用通配符进行过滤

      通配符(wildcard) 用来匹配值的一部分的特殊字符

      百分号 (%) 通配符  %表示任何字符出现任意次数  

     1 mysql> SELECT prod_id, prod_name
     2     -> FROM products
     3     -> WHERE prod_name LIKE 'jet%';
     4 +---------+--------------+
     5 | prod_id | prod_name    |
     6 +---------+--------------+
     7 | JP1000  | JetPack 1000 |
     8 | JP2000  | JetPack 2000 |
     9 +---------+--------------+
    10 2 rows in set (0.05 sec)

      通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。

     1 mysql> SELECT prod_id, prod_name
     2     -> FROM products
     3     -> WHERE prod_name LIKE '%anvil%';
     4 +---------+--------------+
     5 | prod_id | prod_name    |
     6 +---------+--------------+
     7 | ANV01   | .5 ton anvil |
     8 | ANV02   | 1 ton anvil  |
     9 | ANV03   | 2 ton anvil  |
    10 +---------+--------------+
    11 3 rows in set (0.01 sec)

      通配符(%)不能匹配NULL

      下划线 (_) 通配符  只能匹配单个字符

     1 mysql> SELECT prod_id, prod_name
     2     -> FROM products
     3     -> WHERE prod_name LIKE '_ ton anvil';
     4 +---------+-------------+
     5 | prod_id | prod_name   |
     6 +---------+-------------+
     7 | ANV02   | 1 ton anvil |
     8 | ANV03   | 2 ton anvil |
     9 +---------+-------------+
    10 2 rows in set (0.00 sec)

      使用通配符的技巧

      (1) 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。

      (2) 在确定需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符至于搜索模式的开始处,搜索起来是最慢的。

      (3) 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

    2、用正则表达式进行搜索

      基本字符匹配

     1 mysql> SELECT prod_name
     2     -> FROM products
     3     -> WHERE prod_name REGEXP '1000'
     4     -> ORDER BY prod_name;
     5 +--------------+
     6 | prod_name    |
     7 +--------------+
     8 | JetPack 1000 |
     9 +--------------+
    10 1 row in set (0.03 sec)
    11 
    12 mysql> SELECT prod_name
    13     -> FROM products
    14     -> WHERE prod_name REGEXP '.000'
    15     -> ORDER BY prod_name;
    16 +--------------+
    17 | prod_name    |
    18 +--------------+
    19 | JetPack 1000 |
    20 | JetPack 2000 |
    21 +--------------+
    22 2 rows in set (0.00 sec)

      '.'是正则表达式语言中的一个特殊的字符。它表示匹配任意一个字符。

      LIKE匹配整个列。如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列

    值中出现,REGEXP将会找到它,相应的行将被返回。

      OR匹配

     1 mysql> SELECT prod_name
     2     -> FROM products
     3     -> WHERE prod_name REGEXP '1000|2000'
     4     -> ORDER BY prod_name;
     5 +--------------+
     6 | prod_name    |
     7 +--------------+
     8 | JetPack 1000 |
     9 | JetPack 2000 |
    10 +--------------+
    11 2 rows in set (0.03 sec)

      匹配几个字符之一

     1 mysql> SELECT prod_name
     2     -> FROM products
     3     -> WHERE prod_name REGEXP '[123] Ton'
     4     -> ORDER BY prod_name;
     5 +-------------+
     6 | prod_name   |
     7 +-------------+
     8 | 1 ton anvil |
     9 | 2 ton anvil |
    10 +-------------+
    11 2 rows in set (0.00 sec)

      匹配范围

     1 mysql> SELECT prod_name
     2     -> FROM products
     3     -> WHERE prod_name REGEXP '[1-5] Ton'
     4     -> ORDER BY prod_name;
     5 +--------------+
     6 | prod_name    |
     7 +--------------+
     8 | .5 ton anvil |
     9 | 1 ton anvil  |
    10 | 2 ton anvil  |
    11 +--------------+
    12 3 rows in set (0.00 sec)

      为了匹配特殊字符,必须用\\为前导。\\-表示查找-,\\.表示查找.

     1 mysql> SELECT vend_name
     2     -> FROM vendors
     3     -> WHERE vend_name REGEXP '\\.'
     4     -> ORDER BY vend_name;
     5 +--------------+
     6 | vend_name    |
     7 +--------------+
     8 | Furball Inc. |
     9 +--------------+
    10 1 row in set (0.05 sec)

      \\也用来引用元字符

    \\f           <==>           换页

    \\n           <==>          换行

    \\r           <==>           回车

    \\t           <==>           制表

    \\v           <==>           纵向制表

    匹配字符类


      类          说明


    [:alnum:]        任意字母和数字(同[a-zA-Z0-9])

    [:alpha:]        任意字符

    [:blank:]        空格和制表

    [:cntrl:]         ASCII控制字符(ASCII0到31和127)

    [:digit:]         任意数字

    [:graph:]        与[:printf:]相同,但不包含空格

    [:lower:]        任意小写字母

    [:print:]        任意可打印字符

    [:punct:]        既不在[:alnum:]又不在[:cntrl:]中的任意字符

    [:space:]        包含空格在内的任意空白字符

    [:upper:]        任意大写字母

    [:xdigit:]        任意十六进制数字


      匹配多个实例(举例)

     1 mysql> SELECT prod_name
     2     -> FROM products
     3     -> WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
     4     -> ORDER BY prod_name;
     5 +----------------+
     6 | prod_name      |
     7 +----------------+
     8 | TNT (1 stick)  |
     9 | TNT (5 sticks) |
    10 +----------------+
    11 2 rows in set (0.00 sec)
     1 mysql> SELECT prod_name
     2     -> FROM products
     3     -> WHERE prod_name REGEXP '[[:digit:]]{4}';
     4 +--------------+
     5 | prod_name    |
     6 +--------------+
     7 | JetPack 1000 |
     8 | JetPack 2000 |
     9 +--------------+
    10 2 rows in set (0.00 sec)

      定位符

     1 mysql> SELECT prod_name
     2     -> FROM products
     3     -> WHERE prod_name REGEXP '^[0-9\\.]'
     4     -> ORDER BY prod_name;
     5 +--------------+
     6 | prod_name    |
     7 +--------------+
     8 | .5 ton anvil |
     9 | 1 ton anvil  |
    10 | 2 ton anvil  |
    11 +--------------+
    12 3 rows in set (0.00 sec)
  • 相关阅读:
    Gym 100801D Distribution in Metagonia (数学思维题)
    Gym 100801E Easy Arithmetic (思维题)
    GNOME编辑器--gedit 构建基本脚本
    linux默认编辑器 sublime
    su和su-命令的本质区别
    #ifdef #ifndef使用
    linux 安装软件程序
    linux命令行与shell脚本编程大全---更多bash shell命令
    预处理语句--#define、#error和#warning
    FW开发代码规范---小任性(2)
  • 原文地址:https://www.cnblogs.com/liushaobo/p/3009178.html
Copyright © 2011-2022 走看看