[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.查詢/子查詢/連接查詢