本节要点

使用WHERE条件获取子集
常用操作符
过滤单个值
过滤NULL值
过滤集合

使用WHERE条件获取子集

我们再回到前面课程中讲到的深圳市第一初级中学的所有学生这样一个集合。在数学的概念中,集合是有很多子集的。

比如,对于这样一个所有学生的集合,如果我们按性别来分,可以分为男生的集合和女生的集合;按照班级来分,可以分为初一的集合、初二的集合、初三的集合;按照年龄大小来分,可以分为年龄大的集合和年龄小的集合。

那么,我们如果想从所有学生中取出具有某种特征的一个子集,怎么去取呢?

如果学生只有几百个,那么人工来分就可以了。

但是实际情况,可能数据量并不是那么少。可能会有上万,上百万,甚至上亿。

比如,2017年天猫双11全球狂欢节,天猫的全天物流订单数有多少呢?

有8.12亿!

对于这么庞大的订单量,如果我们想找出卖书的订单,或者卖电脑的订单,那人工去挑,工作量就太大了。

所以,SQL语言支持子集的查询。使用WHERE关键字,配合一定的查询过滤条件,就能找到我们需要的子集。语法如下:

SELECT 字段列表 FROM 表名 WHERE 过滤条件;

这里的过滤条件一般由要过滤的字段、操作符、限定值三部分组成;如下SQL语句,查询出所有的男生的子集:

SELECT student_id,student_name
FROM student
WHERE gender = '男';

常用操作符

在过滤条件中,需要使用到操作符。常用的操作符如下表,这里列出了操作符的分类 、操作符、操作符的说明以及适用的范围。

过滤单个值

(1)、查询年龄不等于10岁的所有同学的学生编号

SELECT student_id FROM student WHERE age <> 10;

(2)、查看汪书乔同学的学生编号

SELECT student_id FROM student WHERE student_name = '汪书乔';

(3)、查询出生日期在2005年12月31之前的所有学生

SELECT * FROM student WHERE birth_day <= '2005-12-31';

过滤NULL值

前面的课程中,我们讲过,NULL值是一个很特殊的值,它不等于0,不等于空字段串,不等于空格,甚至不等于它自己。可以说,NULL值与任何值都不相等。

那么怎么判断一个字段的值为NULL值呢?

可以使用IS NULL来判断。

(1)、查询age不为NULL的所有学生

SELECT * FROM student WHERE age IS NOT NULL;

(2)、查询class_id为null的所有学生

SELECT * FROM student WHERE class_id IS NULL;

注意:下面这种写法是错误的!!!判断NULL值,不能使用等于号=操作符:

SELECT * FROM student WHERE class_id = NULL;(错误写法!)
SELECT * FROM student WHERE class_id <> NULL;(错误写法!)

过滤区间和列表

(1)、查询年龄在10至15岁的所有学生

SELECT * FROM student WHERE age BETWEEN 10 AND 15;

(2)、查询出生日期在2005年1月31日至2005年12月31日的所有学生

SELECT *
FROM student
WHERE birth_day BETWEEN '2005-01-31' AND '2005-12-31';

(3)、查询年龄为10岁、11岁、15岁的所有学生

SELECT * FROM student WHERE age IN (10,11,15);

(4)、查询姓名为叶冬星、李佳欣、汪如一的学生信息

SELECT *
FROM student
WHERE student_name IN ('叶冬星','李佳欣','汪如一');

(5)、查询学生编号不等于S20160001和S20160002的学生信息

SELECT *
FROM student
WHERE student_id NOT IN ('S20160001','S20160002');
picture loss