[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> * * * * *