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

