mysql从头开始(5)

断了今生、忘了曾经 提交于 2019-12-19 09:57:20

数据过滤

组合where语句

mysql允许给出多个where子句,这些子句可以以两种方式使用:以AND子句的方式或OR子句的方式使用。
操作符(operator):用来连接或者改变WHERE子句中的子句的关键字。也称为逻辑操作符。

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.05 sec)

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)

计算次序

注意以下两个的区别:

select prod_name,prod_price
FROM products
where vend_id =1002 OR vend_id = 1003 AND prod_price >=10;
select prod_name,prod_price
from products
where(vend_id =1002 OR vend_id =1003) AND prod_price>=10;

注意:在where子句中使用圆括号, 任何时候使用具有and和or操作符的where子句,都应该使用圆括号明确区分操作符。
不要过分依赖默认计算次序,使用圆括号没有什么坏处。

IN操作符

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.01 sec)

注意:IN能完成部分和OR相同的功能。

mysql> select prod_name,prod_price from products where vend_id =1002 OR vend_id =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)

使用IN的优点:

  • 在使用长的合法选项清单时,IN操作符的语法更加清楚和直观。
  • 在使用IN时,计算次序更容易管理。
  • IN操作符一般比OR操作符执行的更快。
  • IN操作的最大优点是可以包含其他SELECT语句。

NOT操作符

WHERE子句中的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)

注意:MySql中的NOT,mysql支持使用NOT对IN,BETWEEN和EXISTS子句取反,这与多数其他DBMS允许使用NOT
对各种条件取反有很大差别。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!