MySQL之where使用詳解
1、簡(jiǎn)介
當(dāng)我們需要獲取數(shù)據(jù)庫(kù)表數(shù)據(jù)的特定子集時(shí),可以使用where子句指定搜索條件進(jìn)行過(guò)濾。where子句的使用場(chǎng)景非常豐富,它是MySQL語(yǔ)句中需要重點(diǎn)掌握的一個(gè)知識(shí)點(diǎn)。where實(shí)現(xiàn)的所有功能都可以在MySQL之外實(shí)現(xiàn),但是直接在MySQL中過(guò)濾查詢(xún)速度更快,也能節(jié)省網(wǎng)絡(luò)傳輸開(kāi)銷(xiāo)。
2、正文
首先準(zhǔn)備一張User表,DDL和表數(shù)據(jù)如下所示,可以直接復(fù)制使用。
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用戶名', `age` int(11) NOT NULL COMMENT '年齡', `sex` smallint(6) NOT NULL COMMENT '性別', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, '李子捌', 18, 1); INSERT INTO `user` VALUES (2, '張三', 22, 1); INSERT INTO `user` VALUES (3, '李四', 38, 1); INSERT INTO `user` VALUES (4, '王五', 25, 1); INSERT INTO `user` VALUES (5, '六麻子', 13, 0); INSERT INTO `user` VALUES (6, '田七', 37, 1); INSERT INTO `user` VALUES (7, '謝禮', 18, 1); SET FOREIGN_KEY_CHECKS = 1;
數(shù)據(jù)的初始順序如下所示:
mysql> select * from user; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 2 | 張三 | 22 | 1 | | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | | 7 | 謝禮 | 18 | 1 | +----+--------+-----+-----+ 7 rows in set (0.00 sec)
2.1 where子句位置
where子句位于from之后,比如:
mysql> select * from user where age=18; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 7 | 謝禮 | 18 | 1 | | 8 | 李子柒 | 18 | 1 | +----+--------+-----+-----+ 3 rows in set (0.00 sec)
如果使用order by,where子句位于order by之前,比如:
mysql> select * from user where age = 18 order by name; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 8 | 李子柒 | 18 | 1 | | 7 | 謝禮 | 18 | 1 | +----+--------+-----+-----+ 3 rows in set (0.00 sec)
2.2 操作符
where子句支持8個(gè)操作符,它們分別如下所示:
| 操作符 | 操作符說(shuō)明 |
|---|---|
| = | 等于 |
| <> | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
| BETWEEN AND | 兩個(gè)值之間的區(qū)間 比如 BETWEEN 1 AND 100 |
接下來(lái)使用表中操作符一個(gè)個(gè)的進(jìn)行where子查詢(xún)。
2.2.1 操作符 =
操作符=可以用于查詢(xún)完全匹配的數(shù)據(jù),注意MySQL默認(rèn)不區(qū)分英文大小寫(xiě).
需求:
查詢(xún)name等于李子捌的數(shù)據(jù)
語(yǔ)句:
select * from user where name = '李子捌';
結(jié)果:
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | 李子捌 | 18 | 1 |
+----+--------+-----+-----+
1 row in set (0.00 sec)
操作符=如果存在多條匹配數(shù)據(jù),那么符合where字句條件的數(shù)據(jù)均會(huì)返回,如果需要指定排序方式,可以結(jié)合order by對(duì)數(shù)據(jù)進(jìn)行排序。
2.2.2 操作符 <> 和 !=
這兩個(gè)操作符實(shí)現(xiàn)的效果相同,均是匹配不相等的數(shù)據(jù)。
需求:
查詢(xún)name不等于李子捌的數(shù)據(jù)
語(yǔ)句:
select * from user where name <> '李子捌'; select * from user where name != '李子捌';
結(jié)果:
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 2 | 張三 | 22 | 1 |
| 3 | 李四 | 38 | 1 |
| 4 | 王五 | 25 | 1 |
| 5 | 六麻子 | 13 | 0 |
| 6 | 田七 | 37 | 1 |
| 7 | 謝禮 | 18 | 1 |
| 8 | 李子柒 | 18 | 1 |
+----+--------+-----+-----+
7 rows in set (0.00 sec)
2.2.3 操作符<= 、 <、>=、>
這四個(gè)操作符用于數(shù)值類(lèi)型的列數(shù)據(jù)比較,但是如果作用于文本字段,MySQL也能執(zhí)行只是返回的結(jié)果可能并不是你預(yù)期的數(shù)據(jù)(理論上沒(méi)人會(huì)這么玩,但確實(shí)不報(bào)錯(cuò)?。?br />
需求:
查詢(xún)年齡小于等于20的所有用戶
語(yǔ)句:
select * from user where age <= 20;
結(jié)果:
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | 李子捌 | 18 | 1 |
| 5 | 六麻子 | 13 | 0 |
| 7 | 謝禮 | 18 | 1 |
| 8 | 李子柒 | 18 | 1 |
+----+--------+-----+-----+
4 rows in set (0.00 sec)
2.2.4 BETWEEN AND
BETWEEN AND 用于查詢(xún)兩個(gè)數(shù)值范圍之間的值,這個(gè)范圍是兩個(gè)閉區(qū)間,因此包含起始值和結(jié)束值。比如BETWEEN 1 AND 100,包含1和100的數(shù)據(jù)。
需求:
查詢(xún)年齡大于等于20小于等于50的用戶
語(yǔ)句:
select * from user where age between 20 and 50;
+----+------+-----+-----+
| id | name | age | sex |
+----+------+-----+-----+
| 2 | 張三 | 22 | 1 |
| 3 | 李四 | 38 | 1 |
| 4 | 王五 | 25 | 1 |
| 6 | 田七 | 37 | 1 |
+----+------+-----+-----+
4 rows in set (0.00 sec)
2.3 空值null
空值null指的是不包含數(shù)據(jù),它可以在建表的時(shí)候指定其中的列是否可以包含空值。需要注意null和數(shù)據(jù)值類(lèi)型的0,字符類(lèi)型的空格不一樣,空值null指的是沒(méi)有值。
關(guān)于空值null的查詢(xún),MySQL提供了專(zhuān)門(mén)的where子句is null。
需求:
查詢(xún)name為空值的數(shù)據(jù)
語(yǔ)句:
select * from user where name is null;
結(jié)果:
Empty set (0.00 sec)
因?yàn)閡ser表中不存在name值為空值的數(shù)據(jù),所以沒(méi)有數(shù)據(jù)返回。如果我們需要查詢(xún)name列不為空的數(shù)據(jù),該怎么查詢(xún)呢?
這個(gè)時(shí)候我們可以使用is not null
mysql> select * from user where name is not null; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 2 | 張三 | 22 | 1 | | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | | 7 | 謝禮 | 18 | 1 | | 8 | 李子柒 | 18 | 1 | +----+--------+-----+-----+
到此這篇關(guān)于MySQL之where使用詳解的文章就介紹到這了,更多相關(guān)MySQL where使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows MySQL修改配置文件my.ini不生效問(wèn)題
在Windows Server 2019上修改MySQL 5.6的安裝目錄下my.ini文件后,需要通過(guò)修改注冊(cè)表中的ImagePath值來(lái)確保MySQL讀取新的配置文件,修改時(shí)應(yīng)確保配置文件路徑正確,并且新配置不會(huì)覆蓋原有配置,以保證修改生效2025-01-01
MybatisPlus攔截器如何實(shí)現(xiàn)數(shù)據(jù)表分表
為了解決MySQL中大數(shù)據(jù)量的查詢(xún)效率問(wèn)題,采用水平拆分策略,通過(guò)取模運(yùn)算確定表后綴,實(shí)現(xiàn)數(shù)據(jù)的有效管理,設(shè)計(jì)分表時(shí),需利用線程變量存取請(qǐng)求參數(shù),并通過(guò)攔截器確定操作的具體表名,從而優(yōu)化數(shù)據(jù)處理性能,此方法適用于業(yè)務(wù)表數(shù)據(jù)量大或快速增長(zhǎng)的場(chǎng)景2024-11-11
MySQL窗口函數(shù)實(shí)現(xiàn)榜單排名
相信大家在日常的開(kāi)發(fā)中經(jīng)常會(huì)碰到榜單類(lèi)的活動(dòng)需求,本文主要介紹了MySQL窗口函數(shù)實(shí)現(xiàn)榜單排名,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
MySQL正則表達(dá)式regexp_replace函數(shù)的用法實(shí)例
regexp_replace的使用非常靈活,且容易忘記,故做此筆記,下面這篇文章主要給大家介紹了關(guān)于MySQL正則表達(dá)式regexp_replace函數(shù)的用法實(shí)例,需要的朋友可以參考下2022-09-09
mysql workbench 設(shè)置外鍵的方法實(shí)現(xiàn)
在MySQL Workbench中設(shè)置外鍵屬性是非常方便的,本文就來(lái)介紹一下mysql workbench 設(shè)置外鍵的方法實(shí)現(xiàn),具有一定能的參考價(jià)值,感興趣的可以了解一下2024-01-01

