在数据库中表里面一般有大量的数据,我们很少需要获取表里面的所有行,通常只会根据特定条件获取部分数据。这个时候,我们就需要用到 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;
运行结果如下
查询年龄不是 18 岁的学生信息
-- 嗨客网(www.haicoer.net) SELECT id,stu_name,age FROM student WHERE age != 18;
运行结果如下
查询年龄在 18 - 20 岁的学生
-- 嗨客网(www.haicoer.net) SELECT id,stu_name,age FROM student WHERE age BETWEEN 18 AND 20;
运行结果如下
可以看到
between 值1 and 值2
这个语句将条件中符合值>= 值1
和<= 值2
的信息都查询了出来。查询空
-- 嗨客网(www.haicoer.net) SELECT id,stu_name,age FROM student WHERE age is NULL;
运行结果如下
需要我们特意了解的是 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 ;
运行结果如下
我们将学生表里面年龄不是 19 岁的学生信息都获取出来。
总结
通过 where 子句,我们可以将查询到的结果进行筛选,查询出自己需要用到的语句,而不是查询所有的语句。
NOT 是用来否定跟在其后面的任何条件,它将与条件相反的信息获取出来。
我们之前学过 排序 的子句,那么排序的字句遇到 where 子句会是什么样的情况呢?order by 要放在 where 后面。不然 sql 语句会报错。