各位用户为了找寻关于MySQL之where使用详解的资料费劲了很多周折。这里教程网为您整理了关于MySQL之where使用详解的相关资料,仅供查阅,以下为您介绍关于MySQL之where使用详解的详细内容
目录
1、简介 2、正文 2.1 where子句位置 2.2 操作符 2.3 空值null
1、简介
当我们需要获取数据库表数据的特定子集时,可以使用where子句指定搜索条件进行过滤。where子句的使用场景非常丰富,它是MySQL语句中需要重点掌握的一个知识点。where实现的所有功能都可以在MySQL之外实现,但是直接在MySQL中过滤查询速度更快,也能节省网络传输开销。
2、正文
首先准备一张User表,DDL和表数据如下所示,可以直接复制使用。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27SET
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;
数据的初始顺序如下所示:
? 1 2 3 4 5 6 7 8 9 10 11 12 13mysql>
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之后,比如:
? 1 2 3 4 5 6 7 8 9mysql>
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之前,比如:
? 1 2 3 4 5 6 7 8 9mysql>
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个操作符,它们分别如下所示:
接下来使用表中操作符一个个的进行where子查询。
2.2.1 操作符 =
操作符=可以用于查询完全匹配的数据,注意MySQL默认不区分英文大小写.
需求: 查询name等于李子捌的数据 语句:
? 1select
*
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不等于李子捌的数据 语句:
? 1 2select
*
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也能执行只是返回的结果可能并不是你预期的数据(理论上没人会这么玩,但确实不报错!)
需求: 查询年龄小于等于20的所有用户 语句:
? 1select
*
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 用于查询两个数值范围之间的值,这个范围是两个闭区间,因此包含起始值和结束值。比如BETWEEN 1 AND 100,包含1和100的数据。
需求: 查询年龄大于等于20小于等于50的用户 语句:
? 1select
*
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为空值的数据 语句:
? 1select
*
from
user
where
name
is
null
;
结果:
Empty set (0.00 sec)
因为user表中不存在name值为空值的数据,所以没有数据返回。如果我们需要查询name列不为空的数据,该怎么查询呢?
这个时候我们可以使用is not null
? 1 2 3 4 5 6 7 8 9 10 11 12 13mysql>
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使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://blog.csdn.net/qq_41125219/article/details/121261259