[TOC=1,4]
>[success] # 条件查询解释
>数据库表中一般包含大量的数据,很少需要查询表中所有行,通常只会根据 特定的需要提取表中的一部分数据。这个时候需要指定查询条件,即过滤条 件。
在 select 语句中,数据库根据 where 子句中指定的查询条件进行过滤。where 子句位于表名之后。
格
>[danger] #### 条件语法-where
`select * from 表 where 条件;`
<br>
* * * * *
>[danger] #### 条件的操作符号- between
| 符号 |含义 |
| --- | --- |
| = | 等于 |
| != | 不等于|
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| > = | 大于等于 |
| is null | 是否为空 |
| Between....and... | 在两者之间 |
**用法:**
```
1.select * from 列 where 列=1
2.select * from 列 where 列 between 值 and 值
3.select * from 列 where 列 is null
```
**注**:
1.between and 是包含临界值的查询
2.NULL 表示无值,它与字段包含 0、空字符串或空格是不同的。
<br>
* * * * *
>[danger] #### 条件操作符-AND/OR
`select * from 表 where 条件 and 条件 ;`
`select * from 表 where 条件 or 条件 ;`
**注:**
AND 的优先级高于 OR,当 AND/OR 中有多个条件的时候,需要使用()把 各个条件明确的分组,防止条件的错误组合导致返回的结果不正确。
**注明的例子讲解**:
```
查询1002或者1003 价格>=10的数据
1.SELECT prod_name,prod_price ,vend_id FROM products
WHERE (vend_id =1002 OR vend_id=1003) AND prod_price>=10;
查询1002 和 1003中价格大于等于10的,根据and的优先大于 or
2..SELECT prod_name,prod_price ,vend_id FROM products
WHERE vend_id =1002 OR vend_id=1003 AND prod_price>=10;
```
<br>
* * * * *
>[danger] #### 条件操作符-in
>IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN 取值包 含在圆括号中,以逗号分隔。
` select * from 表 where id in (11,22,33);`
`select * from 表 where id in (select nid from 表)`
**in 和 or 既然都表现其中一个满足,那优缺点?**
```
a) IN 操作符的语法清晰直观;
b) 计算次序容易管理;
c) IN 操作符一般比 OR 操作符执行速度更快;
d) IN 可以包含其他 select 语句,使得能够动态地建立 where 子句。
```
<br>
* * * * *
>[danger] #### 条件操作符-not
>Where 子句中的 NOT 操作符只有一个功能,即否定它之后所跟的任何条件。
使用 NOT 很容易找出与条件列表不匹配的行。
| 组合 |解释 |
| --- | --- |
| NOT IN |不在规定的范围的数据 |
| NOT BETWEEN AND |不在两者之间的数据 |
| IS NOT NULL |不为空 |
<br>
* * * * *
>[danger] #### 模糊查询-like 和通配符 %/_
` select * from 表 where name like 'w%' - %开头的所有(多个字符串)`
`select * from 表 where name like 'w_' - w开头的所有(一个字符)`
**注解:**
1.% 匹配多个字符 %a% 匹配内容中有a的字符,前后不限字符
2.% 匹配多个字符 %a 匹配开头任意字符,结尾a
3.% 匹配多个字符 a% 匹配开头a,结尾任意字符
4._ 下滑线只匹配一个字符,两个就双下滑下一次类推
**注意**:
```
使用通配符会比没有通配符更消耗数据库执行查询的时候
,应该在需 要使用通配符的地方才使用
```
<br>
* * * * *