mysql+where+且,MySQL WHERE
在使用 MySQL SELECT語(yǔ)句時(shí),可以使用 WHERE 子句來(lái)指定查詢條件,從 FROM 子句的中間結(jié)果中選取適當(dāng)?shù)臄?shù)據(jù)行,達(dá)到數(shù)據(jù)過(guò)濾的效果。
語(yǔ)法格式如下:
WHERE {,,…}
其中,判定運(yùn)算其結(jié)果取值為 TRUE、FALSE 和 UNKNOWN。
判定運(yùn)算的語(yǔ)法分類(lèi)如下:
1、{=||>=|<=>|<>|!=}
2、[NOT]LIKE
3、[NOT][REGEXP|RLIKE]
4、[NOT]BETWEENAND
5、IS[NOT]NULL
單一條件的查詢語(yǔ)句
【實(shí)例 1】在表 測(cè)試表 中查詢身高為 170cm 的學(xué)生的姓名,輸入的 SQL 語(yǔ)句和行結(jié)果如下所示。
mysql> use 測(cè)試庫(kù)
Database changed
mysql> SELECT name,height FROM 測(cè)試表 WHERE height=170;
+-------+--------+
| name? | height |
+-------+--------+
| Susan |? ? 170 |
+-------+--------+
1 row in set (0.17 sec)
該語(yǔ)句采用了簡(jiǎn)單的相等過(guò)濾,查詢一個(gè)指定列 height 的具體值 170。
【實(shí)例 2】查詢年齡小于 22 的學(xué)生的姓名,輸入的 SQL 語(yǔ)句和執(zhí)行結(jié)果如下所示。
mysql> SELECT name,age FROM 測(cè)試表 WHERE age<22;
+------+------+
| name | age? |
+------+------+
| John |? ?21 |
+------+------+
1 row in set (0.05 sec)
可以看到,查詢結(jié)果中所有記錄的 age 字段的值均小于 22 歲,而大于或等于 22 歲的記錄沒(méi)有被返回。
多條件的查詢語(yǔ)句
使用 SELECT 查詢時(shí),可以增加查詢的限制條件,這樣可以使查詢的結(jié)果更加精確。MySQL 在 WHERE 子句中使用 AND 操作符限定只有滿足所有查詢條件的記錄才會(huì)被返回。
可以使用 AND 連接兩個(gè)甚至多個(gè)查詢條件,多個(gè)條件表達(dá)式之間用 AND 分開(kāi)。
【實(shí)例 3】在 測(cè)試表 表中查詢 age 大于 21,并且 height 大于等于 175 的學(xué)生的信息,輸入的 SQL 語(yǔ)句和執(zhí)行結(jié)果如下所示。
mysql> SELECT * FROM 測(cè)試表 WHERE age>21 AND height>=175;
+----+--------+---------+------+------+--------+------------+
| id | name? ?| dept_id | age? | sex? | height | login_date |
+----+--------+---------+------+------+--------+------------+
|? 3 | Henry? |? ? ? ?2 |? ?23 | M? ? |? ? 185 | 2015-05-31 |
|? 5 | Jim? ? |? ? ? ?1 |? ?24 | M? ? |? ? 175 | 2016-01-15 |
|? 9 | Thomas |? ? ? ?3 |? ?22 | M? ? |? ? 178 | 2016-06-07 |
+----+--------+---------+------+------+--------+------------+
3 rows in set (0.06 sec)
注意:上例的 WHERE 子句中只包含一個(gè) AND 語(yǔ)句,把兩個(gè)過(guò)濾條件組合在一起,實(shí)際上可以添加多個(gè) AND 過(guò)濾條件,增加條件的同時(shí)增加一個(gè) AND 關(guān)鍵字。
使用 LIKE 的模糊查詢
字符串匹配的語(yǔ)法格式如下:
[NOT] LIKE
字符串匹配是一種模式匹配,使用運(yùn)算符 LIKE 設(shè)置過(guò)濾條件,過(guò)濾條件使用通配符進(jìn)行匹配運(yùn)算,而不是判斷是否相等進(jìn)行比較。
相互間進(jìn)行匹配運(yùn)算的對(duì)象可以是 CHAR、VARCHAR、TEXT、DATETIME 等數(shù)據(jù)類(lèi)型。運(yùn)算返回的結(jié)果是 TRUE 或 FALSE。
利用通配符可以在不完全確定比較值的情形下創(chuàng)建一個(gè)比較特定數(shù)據(jù)的搜索模式,并置于關(guān)鍵字 LIKE 之后。可以在搜索模式的任意位置使用通配符,并且可以使用多個(gè)通配符。MySQL 支持的通配符有以下兩種:
一、百分號(hào)(%)
百分號(hào)是 MySQL 中常用的一種通配符,在過(guò)濾條件中,百分號(hào)可以表示任何字符串,并且該字符串可以出現(xiàn)任意次。
使用百分號(hào)通配符要注意以下幾點(diǎn):
1、MySQL 默認(rèn)是不區(qū)分大小寫(xiě)的,若要區(qū)分大小寫(xiě),則需要更換字符集的校對(duì)規(guī)則。
2、百分號(hào)不匹配空值。
3、百分號(hào)可以代表搜索模式中給定位置的 0 個(gè)、1 個(gè)或多個(gè)字符。
4、尾空格可能會(huì)干擾通配符的匹配,一般可以在搜索模式的最后附加一個(gè)百分號(hào)。
二、下劃線(_)
下劃線通配符和百分號(hào)通配符的用途一樣,下劃線只匹配單個(gè)字符,而不是多個(gè)字符,也不是 0 個(gè)字符。
注意:不要過(guò)度使用通配符,對(duì)通配符檢索的處理一般會(huì)比其他檢索方式花費(fèi)更長(zhǎng)的時(shí)間。
【實(shí)例 4】在 測(cè)試表 表中,查找所有以“T”字母開(kāi)頭的學(xué)生姓名,輸入的 SQL 的語(yǔ)句和執(zhí)行結(jié)果如下所示。
mysql> SELECT name FROM 測(cè)試表 WHERE name LIKE 'T%';
+--------+
| name? ?|
+--------+
| Thomas |
| Tom? ? |
+--------+
2 rows in set (0.12 sec)
注意:在搜索匹配時(shí),通配符“%”可以放在不同位置。
【實(shí)例 5】在 測(cè)試表 表中,查找所有包含“e”字母的學(xué)生姓名,輸入的 SQL 的語(yǔ)句和執(zhí)行結(jié)果如下所示。
mysql> SELECT name FROM 測(cè)試表 WHERE name LIKE '%e%';
+-------+
| name? |
+-------+
| Green |
| Henry |
| Jane? |
+-------+
3 rows in set (0.00 sec)
由執(zhí)行結(jié)果可以看出,該語(yǔ)句查詢字符串中包含字母 e 的學(xué)生的姓名,只要名字中有字母 e,其前面或后面無(wú)論有多少個(gè)字符,都滿足查詢的條件。
【實(shí)例 6】在 測(cè)試表 表中,查找所有以字母“y”結(jié)尾,且“y”前面只有 4 個(gè)字母的學(xué)生的姓名,輸入的 SQL 語(yǔ)句和執(zhí)行結(jié)果如下所示。
mysql> SELECT name FROM 測(cè)試表 WHERE name LIKE '____y';
+-------+
| name? |
+-------+
| Henry |
+-------+
1 row in set (0.00 sec)
日期字段作為條件的查詢語(yǔ)句
以日期字段作為條件,可以使用比較運(yùn)算符設(shè)置查詢條件,也可以使用 BETWEEN AND 運(yùn)算符查詢某個(gè)范圍內(nèi)的值。
BETWEEN AND 用來(lái)查詢某個(gè)范圍內(nèi)的值,該操作符需要兩個(gè)參數(shù),即范圍的開(kāi)始值和結(jié)束值,若字段值滿足指定的范圍查詢條件,則這些記錄被返回。
【實(shí)例 7】在表 測(cè)試表 中查詢注冊(cè)日期在 2016-01-01 之前的學(xué)生的信息,輸入的 SQL 語(yǔ)句和執(zhí)行結(jié)果如下所示。
mysql> SELECT * FROM 測(cè)試表 WHERE login_date
+----+-------+---------+------+------+--------+------------+
| id | name? |dept_id | age? | sex? | height | login_date |
+----+-------+---------+------+------+--------+------------+
|? 1 | Dany? |? ? ? ?1 |? ?25 | F? ? |? ? 160 | 2015-09-10 |
|? 3 | Henry |? ? ? ?2 |? ?23 | M? ? |? ? 185 | 2015-05-31 |
|? 6 | John? |? ? ? ?2 |? ?21 | M? ? |? ? 172 | 2015-11-11 |
|? 8 | Susan |? ? ? ?4 |? ?23 | F? ? |? ? 170 | 2015-10-01 |
+----+-------+---------+------+------+--------+------------+
4 rows in set (0.04 sec)
【實(shí)例 8】在表 測(cè)試表 中查詢注冊(cè)日期在 2015-10-01 和 2016-05-01 之間的學(xué)生的信息,輸入的 SQL 語(yǔ)句和執(zhí)行結(jié)果如下所示。
mysql> SELECT * FROM 測(cè)試表 WHERE login_date BETWEEN '2015-10-01' AND '2016-05-01';
+----+-------+---------+------+------+--------+------------+
| id | name? |dept_id | age? | sex? | height | login_date |
+----+-------+---------+------+------+--------+------------+
|? 5 | Jim? ?|? ? ? ?1 |? ?24 | M? ? |? ? 175 | 2016-01-15 |
|? 6 | John? |? ? ? ?2 |? ?21 | M? ? |? ? 172 | 2015-11-11 |
|? 7 | Lily? |? ? ? ?6 |? ?22 | F? ? |? ? 165 | 2016-02-26 |
|? 8 | Susan |? ? ? ?4 |? ?23 | F? ? |? ? 170 | 2015-10-01 |
+----+-------+---------+------+------+--------+------------+
4 rows in set (0.02 sec)
注意:查詢?nèi)掌跀?shù)據(jù)的時(shí)候注意一下字段類(lèi)型,最好是弄成時(shí)間日期型的字段。如果是文本型字段的話數(shù)據(jù)格式是國(guó)際通用型的話也能查詢的到數(shù)據(jù),如果不是國(guó)際通用型的日期格式的話查詢的時(shí)候能查詢到數(shù)據(jù),但是會(huì)出錯(cuò)。具體的話大家可以自己去測(cè)試一下。
如有疑問(wèn)可以聯(lián)系本人:
總結(jié)
以上是生活随笔為你收集整理的mysql+where+且,MySQL WHERE的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php图书信息浏览器,使PHP即时输出结
- 下一篇: mysql主从数据库怎么还口令,mysq