MySQL之where使用詳解
1、簡介
當我們需要獲取數(shù)據(jù)庫表數(shù)據(jù)的特定子集時,可以使用where子句指定搜索條件進行過濾。where子句的使用場景非常豐富,它是MySQL語句中需要重點掌握的一個知識點。where實現(xiàn)的所有功能都可以在MySQL之外實現(xiàn),但是直接在MySQL中過濾查詢速度更快,也能節(jié)省網(wǎng)絡(luò)傳輸開銷。
2、正文
首先準備一張User表,DDL和表數(shù)據(jù)如下所示,可以直接復制使用。
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個操作符,它們分別如下所示:
操作符 | 操作符說明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN AND | 兩個值之間的區(qū)間 比如 BETWEEN 1 AND 100 |
接下來使用表中操作符一個個的進行where子查詢。
2.2.1 操作符 =
操作符=可以用于查詢完全匹配的數(shù)據(jù),注意MySQL默認不區(qū)分英文大小寫.
需求:
查詢name等于李子捌的數(shù)據(jù)
語句:
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ù)均會返回,如果需要指定排序方式,可以結(jié)合order by對數(shù)據(jù)進行排序。
2.2.2 操作符 <> 和 !=
這兩個操作符實現(xiàn)的效果相同,均是匹配不相等的數(shù)據(jù)。
需求:
查詢name不等于李子捌的數(shù)據(jù)
語句:
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 操作符<= 、 <、>=、>
這四個操作符用于數(shù)值類型的列數(shù)據(jù)比較,但是如果作用于文本字段,MySQL也能執(zhí)行只是返回的結(jié)果可能并不是你預期的數(shù)據(jù)(理論上沒人會這么玩,但確實不報錯?。?br />
需求:
查詢年齡小于等于20的所有用戶
語句:
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 用于查詢兩個數(shù)值范圍之間的值,這個范圍是兩個閉區(qū)間,因此包含起始值和結(jié)束值。比如BETWEEN 1 AND 100,包含1和100的數(shù)據(jù)。
需求:
查詢年齡大于等于20小于等于50的用戶
語句:
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ù),它可以在建表的時候指定其中的列是否可以包含空值。需要注意null和數(shù)據(jù)值類型的0,字符類型的空格不一樣,空值null指的是沒有值。
關(guān)于空值null的查詢,MySQL提供了專門的where子句is null。
需求:
查詢name為空值的數(shù)據(jù)
語句:
select * from user where name is null;
結(jié)果:
Empty set (0.00 sec)
因為user表中不存在name值為空值的數(shù)據(jù),所以沒有數(shù)據(jù)返回。如果我們需要查詢name列不為空的數(shù)據(jù),該怎么查詢呢?
這個時候我們可以使用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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決MySQL8.0安裝第一次登陸修改密碼時出現(xiàn)的問題
這篇文章主要介紹了解決MySQL8.0安裝第一次登陸修改密碼時出現(xiàn)的問題,在文章開頭給大家介紹了mysql 8.0.16 初次登錄修改密碼的方法,需要的朋友可以參考下2019-06-06解決Access denied for user root @&nbs
這篇文章給大家介紹了解決:Access denied for user ‘root‘@‘192.168.120.1‘ (using password: YES)的問題,文中通過圖文和代碼給大家分析的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-01-01MySQL REVOKE實現(xiàn)刪除用戶權(quán)限
在 MySQL 中,可以使用 REVOKE 語句刪除某個用戶的某些權(quán)限,本文就詳細的來介紹一下REVOKE 的具體使用方法,感興趣的可以了解一下2021-06-06Mysql連接本地報錯:1130-host?...?is?not?allowed?to?connect?t
這篇文章主要給大家介紹了關(guān)于Mysql連接本地報錯:1130-host?...?is?not?allowed?to?connect?to?this?MySQL?server的解決方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-03-03MySql逗號分割的字段數(shù)據(jù)分解為多行代碼示例
逗號分割的字符串可以作為分組數(shù)據(jù)的標識符,用于對數(shù)據(jù)進行分組和聚合操作,下面這篇文章主要給大家介紹了關(guān)于MySql逗號分割的字段數(shù)據(jù)分解為多行的相關(guān)資料,需要的朋友可以參考下2023-12-12