zoukankan      html  css  js  c++  java
  • MySQL数据过滤和搜索

    操作符

    AND操作符

    mysql> SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 AND prod_price<=10;
    +---------+------------+----------------+
    | prod_id | prod_price | prod_name      |
    +---------+------------+----------------+
    | FB      |      10.00 | Bird seed      |
    | FC      |       2.50 | Carrots        |
    | SLING   |       4.49 | Sling          |
    | TNT1    |       2.50 | TNT (1 stick)  |
    | TNT2    |      10.00 | TNT (5 sticks) |
    +---------+------------+----------------+
    5 rows in set (0.00 sec)
    
    • 此SQL语句检索由供应商1003制造且价格小于等于10美元的所有产品的名称和价格。

    OR操作符

    mysql> SELECT prod_name,prod_price FROM products WHERE vend_id=1002 OR vend_id=1003;
    +----------------+------------+
    | prod_name      | prod_price |
    +----------------+------------+
    | Fuses          |       3.42 |
    | Oil can        |       8.99 |
    | Detonator      |      13.00 |
    | Bird seed      |      10.00 |
    | Carrots        |       2.50 |
    | Safe           |      50.00 |
    | Sling          |       4.49 |
    | TNT (1 stick)  |       2.50 |
    | TNT (5 sticks) |      10.00 |
    +----------------+------------+
    9 rows in set (0.00 sec)
    
    • 此SQL语句检索由任一个指定供应商制造的所有产品的产品名和价格。

    IN 操作符

    mysql> SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;
    +----------------+------------+
    | prod_name      | prod_price |
    +----------------+------------+
    | Bird seed      |      10.00 |
    | Carrots        |       2.50 |
    | Detonator      |      13.00 |
    | Fuses          |       3.42 |
    | Oil can        |       8.99 |
    | Safe           |      50.00 |
    | Sling          |       4.49 |
    | TNT (1 stick)  |       2.50 |
    | TNT (5 sticks) |      10.00 |
    +----------------+------------+
    9 rows in set (0.00 sec)
    
    • 此SELECT语句检索供应商1002和1003制造的所有产品。

    NOT 操作符

    mysql> SELECT prod_name,prod_price FROM products WHERE vend_id NOT IN(1002,1003) ORDER BY prod_name;
    +--------------+------------+
    | prod_name    | prod_price |
    +--------------+------------+
    | .5 ton anvil |       5.99 |
    | 1 ton anvil  |       9.99 |
    | 2 ton anvil  |      14.99 |
    | JetPack 1000 |      35.00 |
    | JetPack 2000 |      55.00 |
    +--------------+------------+
    5 rows in set (0.01 sec)
    
    • 此SELECT语句检索供应商不是1002和1003制造的所有产品;
    • MySQL中NOT支持NOT对IN,BETWEEN和EXISTS子句取反。

    运算符优先级

    优 先 级 由 低 到 高 排 列 运 算 符
    1 =(赋值运算)、:=
    2 II、OR
    3 XOR
    -- --
    5 NOT
    6 BETWEEN、CASE、WHEN、THEN、ELSE
    7 =(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN
    8 |
    9 &
    10 <<、>>
    11 -(减号)、+
    12 *、/、%
    13 ^
    14 -(负号)、〜(位反转)
    15

    LIKE操作符

    百分号(%)通配符

    mysql> SELECT prod_id,prod_name FROM products WHERE prod_name LIKE 'jet%';
    +---------+--------------+
    | prod_id | prod_name    |
    +---------+--------------+
    | JP1000  | JetPack 1000 |
    | JP2000  | JetPack 2000 |
    +---------+--------------+
    2 rows in set (0.00 sec)
    
    • 将检索任意以jet起头的词,%告诉MySQL接受jet之后的任意字符。

    下划线(—)通配符

    mysql> SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '_ ton anvil';
    +---------+-------------+
    | prod_id | prod_name   |
    +---------+-------------+
    | ANV02   | 1 ton anvil |
    | ANV03   | 2 ton anvil |
    +---------+-------------+
    2 rows in set (0.00 sec)
    
    • 下划线(—)总是匹配一个字符。

    正则表达式

    基础字符匹配

    mysql> SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;
    +--------------+
    | prod_name    |
    +--------------+
    | JetPack 1000 |
    +--------------+
    1 row in set (0.04 sec)
    
    mysql> SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;
    +--------------+
    | prod_name    |
    +--------------+
    | JetPack 1000 |
    | JetPack 2000 |
    +--------------+
    2 rows in set (0.00 sec)
    
    
    • REGEXP后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理;
    • .它表示匹配任意一个字符。

    进行OR匹配

    mysql> SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;
    +--------------+
    | prod_name    |
    +--------------+
    | JetPack 1000 |
    | JetPack 2000 |
    +--------------+
    2 rows in set (0.00 sec)
    

    匹配几个字符之一

    mysql> SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;
    +-------------+
    | prod_name   |
    +-------------+
    | 1 ton anvil |
    | 2 ton anvil |
    +-------------+
    2 rows in set (0.00 sec)
    
    • [123]定义一组字符,它的意思是匹配1或2或3。

    匹配范围

    mysql> SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
    +--------------+
    | prod_name    |
    +--------------+
    | .5 ton anvil |
    | 1 ton anvil  |
    | 2 ton anvil  |
    +--------------+
    3 rows in set (0.00 sec)
    
    • [1-5]定义了一个范围,这个表达式意思是匹配1到5。

    匹配特殊字符

    mysql> SELECT prod_name FROM products WHERE prod_name REGEXP '\.' ORDER BY prod_name;
    +--------------+
    | prod_name    |
    +--------------+
    | .5 ton anvil |
    +--------------+
    1 row in set (0.00 sec)
    
    • .匹配.,所以只检索出一行。这种处理就是所谓的转义(escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义。这包括.、|、[]以及迄今为止使用过的其他特殊字符。
    元 字 符 说 明
    \f 换页
    \n 换行
    \r 回车
    \t 制表
    \v 纵向制表

    匹配字符类

    • 为更方便工作,可以使用预定义的字符集,称为字符类(character class)。
    说明
    [:alnum:] 任意字母和数字(同[a-zA-Z0-9])
    [:alpha:] 任意字符(同[a-zA-Z])
    [:blank:] 空格和制表(同[ ])
    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与[:print:]相同,但不包括空格
    [:lower:] 任意小写字母(同[a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
    [:space:] 包括空格在内的任意空白字符(同[f v])
    [:upper:] 任意大写字母(同[A-Z])
    [:xdigit:] 任意十六进制数字(同[a-fA-F0-9])

    匹配多个实例

    元 字 符 说 明
    * 0个或多个匹配
    + 1个或多个匹配(等于{1,})
    ? 0个或1个匹配(等于{0,1})
    {n} 指定数目的匹配
    {n,} 不少于指定数目的匹配
    {n,m} 匹配数目的范围(m不超过255)
    mysql> SELECT prod_name FROM products WHERE prod_name REGEXP '\([0-9] sticks?\)' ORDER BY prod_name;
    +----------------+
    | prod_name      |
    +----------------+
    | TNT (1 stick)  |
    | TNT (5 sticks) |
    +----------------+
    2 rows in set (0.00 sec)
    
    • \([0-9] sticks?\):\(匹配),[0-9]匹配任意数字(这个例子中为1和5),sticks?匹配stick和sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现),\)匹配)。没有?,匹配stick和sticks会非常困难。

    定位符

    元 字 符 说 明
    ^ 文本的开始
    $ 文本的结尾
    [[:<:]] 词的开始
    [[:>:]] 词的结尾
    mysql> SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\.]';
    +--------------+
    | prod_name    |
    +--------------+
    | .5 ton anvil |
    | 1 ton anvil  |
    | 2 ton anvil  |
    +--------------+
    3 rows in set (0.00 sec)
    
    • ^匹配串的开始。因此,^[0-9\.]只在.或任意数字为串中第一个字符时才匹配它们。
  • 相关阅读:
    Linux下Tomcat日志分割
    adb logcat 命令使用说明
    linux系统下安装两个或多个tomcat
    架构师小跟班:SSL证书免费申请及部署,解决页面样式错乱问题完整攻略
    springboot获取七牛云空间文件列表及下载功能
    Java使用ganymed工具包执行LINUX命令教程
    Java学生信息管理系统源码
    数据库SQL语句性能优化
    Java开发环境系列:一篇能解决你99%问题的排雷日记
    架构师小跟班:教你从零开始申请和配置七牛云免费OSS对象存储(不能再详细了)
  • 原文地址:https://www.cnblogs.com/chengmf/p/13143175.html
Copyright © 2011-2022 走看看