[Mysql]WHERE条件查询
2022-08-12 本文已影响0人
RamboL
数据库中如果包含大量的数据,很少需要检索表中所有的行信息,通常只会根据特定的需要提取对应的数据子集。只检索所需要数据的制定搜索条件。搜索条件也称为过滤条件。
使用Where子句
select * from data_test where id = 1;
#
+----+--------+------+
| id | name | sex |
+----+--------+------+
| 1 | 王武 | 男 |
+----+--------+------+
1 row in set (0.01 sec)
#
使用操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
Between | 两者之间-between...and... |
注意:在同时使用where和order by 子句时,请务必保证order by子句位于where之后,否则将会产生错误
select * from data_test;#先用update语句将sex字段的值进行一下修改,以便后面的演示
+----+--------+-------+
| id | name | sex |
+----+--------+-------+
| 1 | 王武 | Women |
| 2 | 张三 | man |
| 3 | 李四 | Man |
+----+--------+-------+
3 rows in set (0.00 sec)
检查单个值
select * from data_test where sex = "man";
#
+----+--------+------+
| id | name | sex |
+----+--------+------+
| 2 | 张三 | man |
| 3 | 李四 | Man |
+----+--------+------+
2 rows in set (0.00 sec)
#
注意:如上所示,mysql在执行匹配时,默认不区分大小写
不匹配检查
select * from data_test where sex <> "man";
#
+----+--------+-------+
| id | name | sex |
+----+--------+-------+
| 1 | 王武 | Women |
+----+--------+-------+
1 row in set (0.00 sec)
#
select * from data_test where sex != "man";
#
+----+--------+-------+
| id | name | sex |
+----+--------+-------+
| 1 | 王武 | Women |
+----+--------+-------+
1 row in set (0.00 sec)
#
注意:以上两个语句分别使用了!=和<>,返回的结果一致
范围检查
select * from data_test;
#
+----+--------+-------+-------+
| id | name | sex | score |
+----+--------+-------+-------+
| 1 | 王武 | Women | 11 |
| 2 | 张三 | man | 21 |
| 3 | 李四 | Man | 31 |
| 4 | 马六 | man | 33 |
| 5 | 李七 | women | 53 |
| 6 | 周八 | women | 43 |
+----+--------+-------+-------+
6 rows in set (0.00 sec)
#
#为了使操作更加清晰,在data_test基础上新增一列score,作为范围查询的依据
-------------------------------------------------------------------------------------
select * from data_test where score between 10 and 50;
#
+----+--------+-------+-------+
| id | name | sex | score |
+----+--------+-------+-------+
| 1 | 王武 | Women | 11 |
| 2 | 张三 | man | 21 |
| 3 | 李四 | Man | 31 |
| 4 | 马六 | man | 33 |
| 6 | 周八 | women | 43 |
+----+--------+-------+-------+
5 rows in set (0.00 sec)
#
空值检查
#为了演示时能够清晰的看到效果,我们把其中一项值设置为空
select * from data_test;
#
+----+--------+-------+-------+
| id | name | sex | score |
+----+--------+-------+-------+
| 1 | 王武 | Women | 11 |
| 2 | 张三 | man | 21 |
| 3 | 李四 | NULL | 31 |
| 4 | 马六 | man | 33 |
| 5 | 李七 | women | 53 |
| 6 | 周八 | women | 43 |
+----+--------+-------+-------+
6 rows in set (0.00 sec)
#
select * from data_test where sex IS NULL;
#
+----+--------+------+-------+
| id | name | sex | score |
+----+--------+------+-------+
| 3 | 李四 | NULL | 31 |
+----+--------+------+-------+
1 row in set (0.00 sec)
#
注意:NULL与不匹配,在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行,因为在未知具有特殊的含义,数据库不知道他们是否匹配,所以在匹配过滤或者不匹配过滤时不返回他们。所以在过滤数据时,一定要验证返回的数据中确实给出了被过滤列具有NULL的行。