示例使用的數據表在上一個博客中創建的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的操作符
上個示例中,我們使用到了‘=’這個操作符,下面列出所有條件操作符
= | 等於 |
<> | 不等於 |
!= | 不等於 |
< | 小於 |
> | 大於 |
<= | 小於等於 |
>= | 大於等於 |
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子句
上面的所有示例都是單個查詢條件,但是實際中肯定會出現不止一個查詢條件,這時候就可以用and或or來組合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的取反。