Mysql过滤查询

Mysql过滤查询教程

在数据库中表里面一般有大量的数据,我们很少需要获取表里面的所有行,通常只会根据特定条件获取部分数据。这个时候,我们就需要用到 where 子句。

本章节,我们用 student 表来做例子。建表 sql 和插入的语句 sql 如下:

CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stu_no` int(11) DEFAULT NULL, `stu_name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 插入语句 INSERT INTO student (`id`,`stu_no`,`stu_name`,`age`) VALUES (1,1001,'小明',17), (2,1002,'小红',16), (3,1003,'小军',18), (4,1004,'小亮',19), (5,1005,'小亮',19), (6,1006,'小杰',16), (7,1007,'小亮',20), (8,1008,'无年龄',null);

where子句教程

语法

select 列名1,列名2... from 表名 where 条件语句;

描述

where 是条件判断的关键字,它的条件语句是判断一个列是否包含一个指定的值。条件判断操作有

操作符 描述
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
!< 不小于
> 大于
>= 大于等于
!> 不大于
BETWEEN 值1 AND 值2 在 值1 和 值2 之间的数据
IS NULL 指定的列的值是空

我们看到这些判断条件和数学里面的条件判断类似。

案例

查询年龄大于等于 18 的学生的信息

-- 嗨客网(www.haicoer.net) SELECT id,stu_name,age FROM student WHERE age >= 18;

运行结果如下

11 条件大于等于.png

查询年龄不是 18 岁的学生信息

-- 嗨客网(www.haicoer.net) SELECT id,stu_name,age FROM student WHERE age != 18;

运行结果如下

12 条件不等于.png

查询年龄在 18 - 20 岁的学生

-- 嗨客网(www.haicoer.net) SELECT id,stu_name,age FROM student WHERE age BETWEEN 18 AND 20;

运行结果如下

13 条件查询between.png

可以看到 between 值1 and 值2 这个语句将条件中符合值 >= 值1<= 值2 的信息都查询了出来。

查询空

-- 嗨客网(www.haicoer.net) SELECT id,stu_name,age FROM student WHERE age is NULL;

运行结果如下

14 条件查询 null.png

需要我们特意了解的是 null 表示这个列没有值,它和数字 0 还有字符串空字符串不是一个概念。那如果我们想获取不为空的结果集怎么办呢?

-- 嗨客网(www.haicoer.net) SELECT id,stu_name,age FROM student WHERE age is NOT NULL;

NOT

在 where 条件中 NOT 是用来否定跟在其后面的任何条件。它不能单独使用,它可以用在过滤的前面也可以在后面。

-- 嗨客网(www.haicoer.net) SELECT id,stu_no,stu_name,age FROM student WHERE NOT age = 19 ;

运行结果如下

20 NOT.png

我们将学生表里面年龄不是 19 岁的学生信息都获取出来。

总结

通过 where 子句,我们可以将查询到的结果进行筛选,查询出自己需要用到的语句,而不是查询所有的语句。

NOT 是用来否定跟在其后面的任何条件,它将与条件相反的信息获取出来。

我们之前学过 排序 的子句,那么排序的字句遇到 where 子句会是什么样的情况呢?order by 要放在 where 后面。不然 sql 语句会报错。