MySql——使用where子句過濾數據


示例使用的數據表在上一個博客中創建的https://www.cnblogs.com/lbhym/p/11895968.html

參考資料:《Mysql必知必會》

1.使用where子句

示例如下:查詢價格等於10.5的行

select * from commodity where price=10.5

輸出:

1 1001 牙刷 10.5

2.where的操作符

上個示例中,我們使用到了‘=’這個操作符,下面列出所有條件操作符

where操作符
= 等於
<> 不等於
!= 不等於
< 小於
> 大於
<= 小於等於
>= 大於等於
between 在指定的兩個值之間

 

 

 

 

 

 

 

 

 

 

3.檢查單個值

在Mysql中,檢查字段是不區分大小寫的

比如:where name=‘ys’的結果和where name='YS'是一樣的。我的數據當中沒有字母,所以不做演示了。

4.不匹配檢查

如下,查詢typeid不等於1001的所有行

select * from commodity where typeid<>1001

其輸出結果和!=是一樣的:

select * from commodity where typeid!=1001

都是輸出:

3 1002 茶幾 999.9
4 1003 電視 3199
5 1003 冰箱 2999
6 1004 1 手機 1999
7 1004 2 手機 7699
8 1004 .3 手機 699.9
9 1005 T恤 21.5
10 1005 牛仔褲 99

5.范圍值檢查

如下,查詢typeid在1002和1004之間的所有行,包括1002和1004

select * from commodity where typeid between 1002 and 1004

輸出:

3 1002 茶幾 999.9
4 1003 電視 3199
5 1003 冰箱 2999
6 1004 1 手機 1999
7 1004 2 手機 7699
8 1004 .3 手機 699.9

必須指定兩個值,一個低端值和一個高端值,中間必須用and連接。

6.空值檢查

如下,檢查name為NULL的行,注意需要用is null。不是用=

select * from commodity where name is null

會輸出所有name字段為null的行

7.組合where子句

上面的所有示例都是單個查詢條件,但是實際中肯定會出現不止一個查詢條件,這時候就可以用andor來組合where子句

示例1,查詢價格大於20的1001型商品

select * from commodity where price>20 and typeid=1001

輸出:

2 1001 毛巾 21.5

示例2,查詢價格大於3000的1003型商品或1004型商品

select * from commodity where typeid=1003 or typeid=1004 and price>3000

大家仔細看看上面的代碼,似乎沒什么問題,類型等於1003或類型等於1004並且價格大於3000

輸出結果:

4 1003 電視 3199
5 1003 冰箱 2999
7 1004 2 手機 7699

但是從結果看是錯誤的,這是由於計算次序的問題。在mysql中and擁有更高的優先級,所以看似沒問題的組合被mysql錯誤的組合了,where后面的條件可以看成

(price>3000 and typeid=1003) or typeid=1004

可以用小括號來組合where后面的條件,小括號具有比and和or更高的優先級

所以,正確的寫法如下:

select * from commodity where (typeid=1003 or typeid=1004) and price>3000

輸出:

4 1003 電視 3199
7 1004 2 手機 7699

8.not和in操作符

in用來指定條件范圍


如下,查詢商品類型等於1001,1002的所有行

select * from commodity where typeid in (1001,1002)

輸出:

1 1001 牙刷 10.5
2 1001 毛巾 21.5
3 1002 茶幾 999.9

需要注意的是,大家不要當成between的另外一種寫法,小括號中可以有N個值,用逗號隔開,最后會返回指定字段出現在小括號中的所有行。

in和or的功能其實有些相同,但是in在遇到更多條件時會顯得更加簡潔。而且in的執行效率更快,最大的優點是可以包含select語句。比如小括號里面你不確定是哪些值,需用實時的查詢,那么select語句就可以寫在小括號里面。

not用來否定后面跟着的條件。


如下,查詢商品類型不等於1001,1002的所有行

select * from commodity where typeid not in (1001,1002)

輸出:

4 1003 電視 3199
5 1003 冰箱 2999
6 1004 1 手機 1999
7 1004 2 手機 7699
8 1004 .3 手機 699.9
9 1005 T恤 21.5
10 1005 牛仔褲 99

not支持對between、in、exists的取反。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM