[TOC]
## 表达式查询
>[info] 1. where('字段名','表达式','查询条件');
>2. whereOr('字段名','表达式','查询条件');
#### 后面全部以 where方法来举例
>[warning] 因表达式条件各不相同,有的结果是一个集合,我们只给出生成的SQL语句,不再给出运行结果,请上机测试!相信大家对运行结果都有预测能力
#### 1、相等 (' eq ' 或 ' = ')
* 实例:查询think\_user表中,id等于3的记录,由于id为主键,所以只有一条返回记录
~~~
//1、字符串:eq
$result = Db::table('tp5_staff') -> where('id','eq',1010) -> select();
//2、操作符号:=
$result = Db::table('tp5_staff') -> where('id','=',1010) -> select();
//3、默认为相等,所以中间操作符可省略
$result = Db::table('tp5_staff') -> where('id',1010) -> select();
//输出查询结果
dump($result);
~~~
* 以上三种方式,查询结果完全相同
* 对应SQL语句:
~~~
SELECT * FROM tp5_staff WHERE id = 1010 ;
~~~
* * * * *
#### 2、不相等 ('neq' 或 ' <> ')
* 实例:查询tp5_staff表中,id 不等 1020 的所有记录(除id=1020之外)
~~~
//1、字符串:neq
$result = Db::table('tp5_staff') -> where('id','neq',1020) -> select();
//2、操作符号:<>
$result = Db::table('tp5_staff') -> where('id','<>',1020) -> select();
//输出查询结果
dump($result);
~~~
* 对应SQL语句:
~~~
SELECT * FROM `tp5_staff` WHERE `id` <> 1020 ;
~~~
* * * * *
#### 3、大于 (' gt ', ' > ')
* 实例:查询tp5_staff表中,id 大于1020的记录,返回一个数组
~~~
//1、字符串:gt
$result = Db::table('tp5_staff') -> where('id','gt',1020) -> select();
//2、操作符号:>
$result = Db::table('tp5_staff') -> where('id','>',1020) -> select();
//输出查询结果
dump($result);
~~~
* 生成的SQL语句:
~~~
SELECT * FROM `tp5_staff` WHERE `id` > 1020 ;
~~~
* * * * *
#### 4、大于等于 (' egt ',' >= ')
~~~
//1、字符串:egt
$result = Db::table('tp5_staff') -> where('id','egt',1020) -> select();
//2、操作符号:>=
$result = Db::table('tp5_staff') -> where('id','>=',1020) -> select();
//输出查询结果
dump($result);
~~~
* 生成的SQL语句:
~~~
SELECT * FROM `tp5_staff` WHERE `id` >= 1020 ;
~~~
* * * * *
#### 5、小于 (' lt ',' < ')
* 实例:查询tp5_staff表中,id 小于1020的记录,返回一个数组
~~~
//1、字符串:lt
$result = Db::table('tp5_staff') -> where('id','lt',1020) -> select();
//2、操作符号:<
$result = Db::table('tp5_staff') -> where('id','<',1020) -> select();
//输出查询结果
dump($result);
~~~
* 生成的SQL语句:
~~~
SELECT * FROM `tp5_staff` WHERE `id` < 1020 ;
~~~
* * * * *
#### 6、小于等于 (' elt ',' <= ')
~~~
//1、字符串:elt
$result = Db::table('tp5_staff') -> where('id','elt',1020) -> select();
//2、操作符号:<=
$result = Db::table('tp5_staff') -> where('id','<=',1020) -> select();
//输出查询结果
dump($result);
~~~
* 生成的SQL语句:
~~~
SELECT * FROM `tp5_staff` WHERE `id` <= 1020 ;
~~~
* * * * *
#### 7、模糊查询 (' like ')
* 实例:查询name字段包括”张”字符的记录
~~~
//模糊查询:like
$result = Db::table('tp5_staff') -> where('name','like','%张%') -> select();
//输出查询结果
dump($result);
~~~
* 生成的SQL语句:
~~~
SELECT * FROM `tp5_staff` WHERE `name` LIKE '%合肥%' ;
~~~
* * * * *
#### 8、区间查询 (between)
* 语法:where(字段,’between’,’区间’); 区间字符串,第一个是最小值,第二个是最大值
* 例如:where(‘id’,’betweet’,’5,20’);表示id取值范围从5到20,很直观。
* 注:区间字符串,也可以用数组替代,推荐用数组,显示更专业,规范。
~~~
where(‘id’,’between’,[5,20]);
~~~
* 实例:查询id在1010到1020之间的记录信息
~~~
//区间用字符串表示
$result = Db::table('tp5_staff') -> where('id','between','1010,1020') -> select();
//区间用数组表示
$result = Db::table('tp5_staff') -> where('id','between',[1010,1020]) -> select();
//输出查询结果
dump($result);
~~~
* 生成的SQL语句:
~~~
SELECT * FROM `tp5_staff` WHERE `id` BETWEEN 1010 AND 1020 ;
~~~
* * * * *
#### 9、集合查询 (' in ' , ' not in ')
* 说明:查询字段的值,必须在或者不在某一个集合内,集合是一个个离散的枚举字面量
* 例如:` where(‘id’,’in’,’9,11,21’);` 或者 `where(‘id’,’not in’,’9,10,20’);`同上,第三个字符串可用数组代替
* 实例:查询id 等于 1003,1005,1020 的数据,返回一个数组
~~~
//集合用字符串表示
$result = Db::table('tp5_staff') -> where('id','in','1003,1005,1020') -> select();
// 取反,即不在某个集合内 not in
$result = Db::table('tp5_staff') -> where('id','not in','1003,1005,1020') -> select();
//集合用数组表示
$result = Db::table('tp5_staff') -> where('id','in',[1003,1005,1020]) -> select();
// 取反,即不在某个集合内 not in
$result = Db::table('tp5_staff') -> where('id','not in',[1003,1005,1020]) -> select();
~~~
* 返回是三个元素的数组,即id=1003、id=1005和id = 1020的三条记录
* 生成SQL语句:
~~~
SELECT * FROM `tp5_staff` WHERE `id` IN (1003,1005,1020) ;
~~~
* * * * *
#### 10、是否为空 (null, not null)
* 如果判断某字段是否存在值,只需要二个参数,要注意
~~~
//判断sex字段是否存在值 null
$result = Db::table('tp5_staff') -> where('sex','null')-> select();
//条件取反:不为空 not null
$result = Db::table('tp5_staff') -> where('sex','not null')-> select();
//如果要判断一个字段值是否为空,要三个参数,中间为'='
$result = Db::table('tp5_staff') -> where('sex','=','null')-> select();
//条件取反:不为空 not null
$result = Db::table('tp5_staff') -> where('sex','=','not null')-> select();
~~~
* 生成的SQL语句(仅以字段是否不为空举例)
~~~
SELECT * FROM `tp5_staff` WHERE `sex` IS NOT NULL
~~~
### 总结:
>[success] 本节课以理论为主,具体实例也很简单,请同学们亲自上机做一下,举一反三
- 前言[随时更新]
- ThinkPHP 5数据库重构
- 开发环境
- 1.ThinkPHP5开发环境(Mac版)
- 2.ThinkPHP5开发环境(Win版)
- MySQL快速复习
- 1.数据库操作
- 2.数据表操作
- 1.创建数据表 (重点)
- 2.添加数据表记录
- 3.查询数据表(重点)
- 4.更新数据表
- 5.编辑数据表结构(重点)
- 6_复制数据表
- 7.删除数据和表
- 连接数据库
- 1.数据库配置文件database.php
- 2.Db类静态方法connect()
- 3.模块中的配置文件config.php
- MySQL原生查询
- 1.读操作query
- 2.写操作execute
- 选择数据表
- 1.table与setTable方法
- 2.name方法
- 3.db助手函数
- 4.alias方法
- 结果集查询
- 1.find方法
- 2.select方法
- 3.fetchSql方法
- 4.value方法
- 5.column方法
- 6.field方法
- 新增数据
- 1.insert_单条添加
- 2.insertAll_批量添加
- 3_db_助手函数添加
- 更新数据
- 1.update方法
- 2.setField更新字段
- 3_自增自减与延时更新
- 删除数据
- 1.delete方法
- 查询方法
- 1.getTableInfo方法
- 2.where方法
- 3.whereOr方法
- 4.混合查询(闭包实现)
- 表达式查询
- 1.表达式查询(重点)
- 2.exp通用查询
- 分组查询
- 1.group方法
- 2.having方法
- 排序分页查询
- 1.order方法
- 2.limit方法
- 3.page方法
- 聚合查询
- 时间查询
- 1.where方法
- 2.whereTime方法
- 高级查询
- 1.快捷查询
- 2.区间查询
- 3.批量查询
- 4.Query对象查询
- 5.混合查询
- 视图查询
- view方法
- 子查询
- 1.select方法
- 2.fetchSql方法
- 3.buildSql方法
- 4.闭包子查询
- 总结/参考
- 1.方法参数类型总结
- 2.查询/子查询/连接查询