您的位置:首页 > 数据库 > MySQL

MySQL数据过滤和通配符过滤.md

2017-06-23 13:28 309 查看
第七章 数据过滤
1 组合WHERE子句
11 AND操作符

12 OR操作符

13 计算次序

2 IN操作符

3 NOT操作符

第八章 用通配符进行过滤
1 LIKE操作符
11 百分号通配符

12 下划线_通配符

2 使用通配符技巧

第七章 数据过滤

使用
WHERE
子句建立更高级的搜索条件,并且使用
NOT
IN
操作符

7.1 组合
WHERE
子句

MySQL允许使用多个
WHERE
子句,使用方式为,

1. 以
AND
子句的形式;

2. 以
OR
子句的形式。

7.1.1
AND
操作符

为了通过不止一个列进行过滤,可以使用
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) |
+---------+------------+----------------+


分析,此语句检索出供应商为1003且价格小于等于*10的产品名称和价格。

7.1.2
OR
操作符

从字意可以理解为,指示mysql检索匹配任一条件的行。例如,

mysql> SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| Detonator      |      13.00 |
| Bird seed      |      10.00 |
| Carrots        |       2.50 |
| Fuses          |       3.42 |
| Oil can        |       8.99 |
| Safe           |      50.00 |
| Sling          |       4.49 |
| TNT (1 stick)  |       2.50 |
| TNT (5 sticks) |      10.00 |
+----------------+------------+


7.1.3 计算次序

WHERE
可包含任意数目的
AND
OR
操作符。

-注意,在任何时候具有
AND
OR
的子句中,都应该使用圆括号明确地分组操作,不可以过分依赖默认计算次序。

7.2
IN
操作符

IN
操作符圆括号在
WHERE
中的另外一种用法,
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 |
+----------------+------------+


分析,
IN
的作用与
OR
相同。

使用
IN
操作符优点如下,

1. 在使用长的合法清单时,
IN
操作符更加清晰且直观;

2. 计算次序更容易管理;

3.
IN
一般比
OR
执行更快;

4. 最大优点是可以执行其他
SELECT
语句,即嵌套语句。

7.3
NOT
操作符

NOT
操作符,用来否定之后的任何条件,纵使前面过滤中会显示。

第八章 用通配符进行过滤

介绍使用通配符及
LIKE
操作符进行统配搜索

8.1
LIKE
操作符

通配符,用来匹配值的一部分特色符号。

搜索模式,由字面值、通配符或两者组合成的搜索条件。

在SQL中使用通配符,必须使用
LIKE
操作符。

8.1.1 百分号(%)通配符

在搜索串中,&表示任何字符出现任意次数,可以出现在搜索模式的任意位置。例如找到所有以jet开头的产品,

mysql> SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%';
+---------+--------------+
| prod_id | prod_name    |
+---------+--------------+
| JP1000  | JetPack 1000 |
| JP2000  | JetPack 2000 |
+---------+--------------+


例如找到所有含有jet的产品,

mysql> SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '%anvil%';
+---------+--------------+
| prod_id | prod_name    |
+---------+--------------+
| ANV01   | .5 ton anvil |
| ANV02   | 1 ton anvil  |
| ANV03   | 2 ton anvil  |
+---------+--------------+


或者,寻找以s开头e结尾的产品,

mysql> SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 's%e';
+---------+-----------+
| prod_id | prod_name |
+---------+-----------+
| SAFE    | Safe      |
+---------+-----------+


注意,字符串尾部可能包含空格,使用单一%无法匹配。可以通过添加尾部%,更好的办法是使用函数去掉收尾空格。

8.1.2 下划线(_)通配符

下划线(_)通配符,只能匹配单个字符而不是多个。

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 |
+---------+-------------+


若使用%字符,

mysql> SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '% ton anvil';
+---------+--------------+
| prod_id | prod_name    |
+---------+--------------+
| ANV01   | .5 ton anvil |
| ANV02   | 1 ton anvil  |
| ANV03   | 2 ton anvil  |
+---------+--------------+


8.2 使用通配符技巧

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

在确定需要使用通配符,除非必要,否则不将他们用在搜索模式的开始处(尽量避免)

仔细注意通配符的位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql