文中涉及的数据表见文章:SQL DML 语句简介
条件运算在很多程序设计语言中都是存在的,其结果是布尔型,只有两种情况:真-true,假-false!
关于条件语句,PHP核心开发者鸟哥的博客有一篇文章-一个关于if else容易迷惑的问题 提到一句话:这个世界上本无
elseif,有的只不过是else (if statement),对条件运算的结果阐释的非常到位!

- 查询出第4号、第11号商品的名称、价格
select goods_id,goods_name,shop_price from goods where goods_id in(4, 11);

- 查询出第4号到第11号之间商品的名称、价格
select goods_id,goods_name,shop_price from goods where goods_id between 4 and 11;

SELECT 可以使用 LIKE 运算符进行模糊查询:%-通配任意长度任意字符;_-通配单一任意字符
- 取出名字以”诺基亚”开头的商品
select goods_id,goods_name,shop_price from goods where goods_name like '诺基亚%';

- 取出名字为”诺基亚Nxx”的手机
select goods_id,goods_name,shop_price from goods where goods_name like '诺基亚N__';

- 取出名字不以”诺基亚”开头的商品
select goods_id,goods_name,shop_price from goods where goods_name not like '诺基亚%';

当涉及到多重条件查询可以使用逻辑运算符: AND、 OR、 NOT…之类的来修饰条件时候,不管是 SQL 还是其他编程语言,多重条件一定要注意运算符的优先级问题,建议使用括号()将条件进行分类,避免优先级问题!
算数运算符
| 运算符 | 描述 |
|---|---|
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / | 除法 |
| % | 取模(取余数) |
比较运算符
| 运算符 | 描述 |
|---|---|
| = | 检查两个操作数的值是否相等,如果是,则条件为真(true) |
| != | 检查两个操作数的值是否相等,如果值不相等则条件为真(true) |
| <> | 检查两个操作数的值是否相等,如果值不相等则条件为真(true) |
| > | 检查左操作数的值是否大于右操作数的值,如果是,则条件为真(true) |
| < | 检查左操作数的值是否小于右操作数的值,如果是,则条件为真(true) |
| >= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真(true) |
| <= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真(true) |
| !< | 检查左操作数的值是否不小于右操作数的值,如果是,则条件变为真(true) |
| !> | 检查左操作数的值是否不大于右操作数的值,如果是,则条件变为真(true) |
逻辑运算符
| 运算符 | 描述 |
|---|---|
| AND | AND 运算符允许在SQL语句的WHERE子句中指定多个条件 |
| OR | OR 运算符用于组合SQL语句的WHERE子句中的多个条件 |
| BETWEEN | BETWEEN 运算符用于搜索在给定范围内的值 |
| LIKE | LIKE 运算符用于使用通配符运算符将值与类似值进行比较 |
| IS NULL | IS NULL 运算符用于将值与NULL值进行比较 |
| IN | IN 运算符用于将值与已指定序列的值列表进行比较 |
| EXISTS | EXISTS 运算符用于搜索指定表中是否存在满足特定条件的行 |
| NOT | NOT 运算符反转使用它的逻辑运算符的含义。 例如:NOT EXISTS, NOT BETWEEN, NOT IN, IS NOT NULL 等等,这是一个否定运算符 |
| ANY | ANY 运算符用于根据条件将值与列表中的任何适用值进行比较 |
| ALL | ALL 运算符用于将值与另一个值集中的所有值进行比较 |
| UNIQUE | UNIQUE 运算符搜索指定表的每一行的唯一性(无重复项) |
对于以上提到的绝大部分运算符都很好理解,有几个点需要特别注意: NULL 值的判断、 EXISTS 与 IN 的使用区别、 ALL 和 ANY 的用法、 BETWEEN 和 使用 > < 符号进行判断范围的区别。
NULL 值的判断
NULL 字面上表示的是什么都没有,在 SQL 中表示一个未知的不确定类型值,它与空字符串、0 这些是不等价的,是不能用于比较的!
如: <expr> = NULL 、 NULL = '' 得到的结果为 false,判断 NULL 必须使用 IS NULL 或 IS NOT NULL 进行判断。
如下图,在 result 表中插入一条含有 NULL 值的数据,进行演示!
insert into result values ('王五',NULL,NULL);

数据库建表的时候默认是 NULL,但在工作中一般建表的时候都会禁止使用 NULL 的!
- 不利于代码的可读性和可维护性,特别是强类型语言,查询
INT值,结果得到一个NULL,程序可能会奔溃…如果要兼容这些情况程序往往需要多做很多操作来兜底 - 若所在列存在
NULL值,会影响count()、<col> != <value>、NULL + 1等查询、统计、运算情景的结果 - 虽然
NULL代表什么都没有,但是MySQL需要一个额外字节作为判断是否为NULL的标志位(这就有点脱裤子放屁了)
因此:NULL 的操作判断不管在数据库、程序中都很麻烦,一般会通过一个有意义的同类型值表示 NULL 值
- MySQL文档:Problems with NULL Values
- MySQL文档:Working with NULL Values
- MySQL文档:How MySQL Partitioning Handles NULL


