複雜條件的查詢

2021-05-24 00:20:53 字數 1834 閱讀 6701

1、主要內容:where子句中幾種複雜的搜尋條件,包括組合的搜尋條件(and,or),in 運算子,not運算子,like運算子和相關的萬用字元。

2、例項表: 簡單查詢一文中的teacher表,和下面的course表

teacher表:

course表:

3、and 和or

eg:使用teacher表,查詢計算機或者生物系的,並且工資高於1000的教師資訊 ,如果採用下列查詢**:

查詢 結果為:

工資為空,或者工資低於1000的也出現在結果中,查詢的結果實際是計算機系所有教師資訊,以及生物系工資高於1000的教師資訊,不是我們期望的結果。

原因:當and 和or一起出現在where中時候,and的優先順序高於or的優先順序。

因此上面的查詢正確的寫法應該是:

查詢結果:

4、in,not in,not

eg1:in或者not in運算子的用法

從teacher表查詢計算機系,生物系,機械工程系的所有教師姓名,系,年齡,性別資訊。

等價於比較上述兩者,前者(in)運算子顯得簡單,執行效率也較or運算子高。此外,使用in運算子後面可以是乙個子查詢。

eg2:not運算子的用法

查詢teacher表中工資不高於1500的教師資訊

查詢結果:

由結果可以知道:sal的值為null的行並不包括在結果中

not 和<>運算子的比較

eg3:not 和between結合使用

從teacher表中查詢年齡不在40到50歲之間的所有教師姓名,所在系,年齡,性別

當然上述查詢可以用or運算子來替代

5、使用like進行模糊查詢

like運算子需要和萬用字元進行結合使用。sql提供的萬用字元有%,_,,*四個

(1)%萬用字元

該萬用字元表示任意個(0個或者0個以上),任意字元。

eg1:where dname like'計算機' 等價於 where dname = '計算機'

eg2:where dname not  like'計算機' 等價於 where dname <> '計算機'

eg3:開頭/結尾匹配

查詢結果:

eg4:中間匹配

查詢結果:

eg5:兩端匹配

查詢結果:

(2)「_」萬用字元

「_」這個萬用字元表示0個或者1個字元。

eg:在course表中查詢所有課程表名為6個字的課程名,人數,考試時間資訊。

查詢結果為:

由結果可以發現此時查詢結果中不僅包含6個字元的課程,也包含小雨6個字元的課程。這一點一定要引起注意。因為『_』萬用字元表示0個或者1個字元。即如果記錄中有乙個課程名為「計算機」的課程,也將在查詢的結果中。

(3)「」萬用字元

表示取「」萬用字元中的字串中的某乙個字元

另外在萬用字元「」中的萬用字元自動退化成普通字元

例如:eg:在course表中查詢所有以「計」或者「生」開頭的課程名稱,上課人數,考試時間

查詢結果:

如果要查詢課程名稱不以「計」或者「生」開頭的課程名稱,上課人數和考試時間,

則查詢語句為:

即在萬用字元裡面的第乙個字元是尖角符號^,表示不包含裡面的任何乙個字元。

當然也可以等價於:

6、使用escape定義轉義字元

轉義字元的引入是為了表示出字串中包含「%」,「*」,「_」,「」這些字元的情況

例子:

這裡使用escape定義了乙個轉義字元「m」**義字元的名稱並不重要,隨便什麼都可以),那麼轉義字元m後面的萬用字元「%」退化為普通字元(不再時候轉義字元)。當然前面那個「%」還是轉義字元

eg:

表示以「ab_」開頭的所有字串

Yii複雜條件查詢

obj this find obj where array and array or 要新增的開始時間在已存在的活動裡 array and start time param starttime end time param starttime 要新增的結束時間在已存在的活動裡 array and s...

條件複雜的sql語句查詢

有三張表 分別為 會員表 member 銷售表 sale 退貨表 regoods 會員表有字段 memberid 會員id,主鍵 credits 積分 銷售表有字段 memberid 會員id 外來鍵 購買金額 mnaccount 退貨表中有字段memberid 會員id 外來鍵 退貨金額 rmna...

條件查詢 後台查詢條件

將要查詢的條件放到乙個物件裡,然後查詢的字段放到物件中 下面上 布局部分 要查詢的表單部分 重 置查詢按鈕 查 詢c that.getlist 邏輯 部分查詢然後,因為會涉及到獲取時間的列表,這裡做了處理,上一節也有說過,然後賦值給查詢物件。獲取員工資料 getlist else that.axio...