文中涉及的数据表见文章: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

 
 
        
         
       
                
 
                 
                
