比较运算符

常用的比较运算符有 =(等于) 、!=(不等于)、 <>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于),其中 != 和 <> 在特殊情况下用法是不同的,这里暂时不提。

比较运算符常常与 WHERE 在一起使用。WHERE 用于逻辑判断,WHERE 后面写判断的条件,满足条件的语句会被筛选出来。

WHERE 比较运算符的使用方式如下:

WHERE A operator B

假如我们要查询学生人数超过 800 的所有课程信息,我们可以使用下面的 SQL 语句:

SELECT * 
FROM `courses`
WHERE `student_count` > 800;

查询中国老师的姓名

SELECT name
FROM teachers
WHERE country = "CN";

1. 使用 AND 连接多条件

SELECT `column_name` 
FROM `table_name` 
WHERE condition1 AND condition2;
SELECT name,created_at
FROM courses
WHERE created_at >='2020-01-01' AND created_at < '2020-05-01'

 

2. 使用 OR 连接多个条件

语法

SELECT `column_name` 
FROM `table_name` 
WHERE condition1 or condition2;

3. 使用 NOT 过滤不满足条件的数据


使用 SQL 中的逻辑运算符 NOT 可以过滤掉 WHERE 子句中不满足条件的结果集。

语法

SELECT `column_name` 
FROM `table_name` 
WHERE NOT `condition`;

1. 使用 IN 查询多条件

当我们需要查询单个表条件过多时,就会用多个 'OR' 连接或者嵌套,这会比较麻烦,现在我们有 'IN' 能更方便的解决这一问题。

示例代码

IN 用法:

SELECT *
FROM `table_name`
WHERE `column_name` IN `value`;

👇 我们可以通过下面的实例来感受一下 IN 的用法。

假如我们想查询教师表 teachers 中教师国籍为中国 (CN) 或英国 (UK) 的所有教师信息,我们可以使用下面的 SQL 语句:

SELECT *
FROM `teachers`
WHERE `country` IN ('CN', 'UK');

2. 使用 NOT IN 排除


前面我们已经学习了逻辑运算符,这里的 'IN' 也可以与逻辑运算符 'NOT' 并用,组成 'NOT IN',表示不在集合中的所有结果。

示例代码

NOT IN 用法:

SELECT *
FROM `table_name`
WHERE `column_name` NOT IN value;

👇 我们可以通过下面的实例来感受一下 NOT IN 的用法。

假如我们想查询在教师表 teachers 中,国籍 "country" 不为日本 (JP) 和美国 (USA) 的所有教师信息,我们可以使用下面的 SQL 语句:

SELECT *
FROM `teachers`
WHERE `country` NOT IN ('JP', 'USA');

3. 使用 BETWEEN AND 查询两值间的数据范围


BETWEEN AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

请注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!

在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。

在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。

在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。

因此,请检查您的数据库是如何处理 BETWEEN 操作符!

我们这里选用的是 MySQL 的支持,BETWEEN 选取介于两个值之间且包括两个测试值的字段,即

BETWEEN 200 AND 250 选取结果会包括 200 和 250

示例代码

BETWEEN AND 用法:

SELECT *
FROM `table_name`
WHERE `column_name` BETWEEN `value` AND `value`;

4. 使用 IS NULL 查询空数据


NULL 值代表遗漏的未知数据。默认的,表的列可以存放 NULL 值。
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。

NULL 用作未知的或不适用的值的占位符。

注释:无法比较 NULL 和 0;它们是不等价的。

无法使用比较运算符来测试 NULL 值,比如 =、!= 或 <>。

我们必须使用 IS NULL 和 IS NOT NULL操作符。

示例代码

IS NULL 用法:

SELECT *
FROM `table_name`
WHERE `column_name` IS NULL;

👇 我们可以通过下面的实例来感受一下 IS NULL 的用法。

假如我们想从教师表 teachers 中查询邮箱 email 为空的所有教师信息,我们可以使用下面的 SQL 语句:

SELECT *
FROM `teachers`
WHERE `email` IS NULL;

5. 使用 LIKE 模糊查询


前面我们学习 BETWEEN AND 和比较运算符时,和文本操作类似,比如前面课程名称首字母的范围,这种方案虽然可行但是不稳定,不是直接对文本的操作。在这里我们学习使用 LIKE 更准确规范得解决文本比较问题。

LIKE 比较类似我们平时用到的搜索。

示例代码

LIKE 用法:

SELECT *
FROM `table_name`
WHERE `column_name` LIKE  `value`;

👇 我们可以通过下面的实例来感受一下 LIKE 的用法。

假如我们想查询课程表 courses 中以字母 'D' 开头的所有课程,我们可以使用下面的 SQL 语句:

SELECT *
FROM `courses`
WHERE `name` LIKE 'D%';

其中 'D%' 表示以 D 开头的所有单词,% 表示为通配符,可以替代 0 个或多个字符

对于SQL 中的通配符有以下类型:

通配符

描述

%

替代 0 个或多个字符

_

替代一个字符

[charlist]

字符列中的任何单一字符

或 [!charlist]

不在字符列中的任何单一字符

以qq.com结尾'%@qq.com'

 

1. 使用 ORDER BY 对数据进行排序

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序,其具有 ASC(升序)和 DESC(降序)两个关键字,且默认按照升序排列。

  • ASC :按升序排列,ORDER BY 默认按照升序对记录进行排序,因此升序的关键字 ASC 可以省去不写。
  • DESC:按降序排列,如果需要按照降序对记录进行排序,可以使用 DESC 关键字。

基本语法

SELECT `column_name`, `column_name`
FROM `table_name`
ORDER BY `column_name`, `column_name` ASC|DESC;

SELECT DISTINCT age

FROM teachers

ORDER BY age;

可以用DISTINCT去重

1.2 对多列进行排序

在对多列进行排序时,ORDER BY 关键字后面列的顺序就是排序的顺序,先按照第一个 column_name 排序,再按照第二个 column_name 排序,依次类推。

👇我们可以通过下面的实例来学习一下 ORDER BY column_name, column_name 的用法。

假如我们想查询课程表 courses 中的课程信息中 teacher_id 为 1、2 或 3 的课程的名称、教师 id 和创建时间,并使结果按照教师 id 排序,如果教师 id 相同,则按照创建课程时间排序。

我们可以使用下面的 SQL 语句:

SELECT `name`,`teacher_id`,`created_at`
FROM `courses`
WHERE `teacher_id` in (1,2,3)
ORDER BY `teacher_id`,`created_at`;

2. 使用 LIMIT 限制输出行数

LIMIT 子句用于 SELECT 中,对输出结果集的行数进行约束,LIMIT 接收2个参数 offset 和 count,两个参数都是整型数字,但通常只用一个。

基本语法

SELECT `column_name`, `column_name`
FROM `table_name`
LIMIT `offset` , `count`;
  • offset :是返回集的初始标注,起始点是0,不是1哦
  • count :制定返回的数量

👇我们可以通过下面的实例来感受一下 LIMIT 的用法。

假如我们想查询课程表 course 中学生人数 student_count 最少的三门课程信息。

我们可以使用下面的 SQL 语句:

SELECT *
FROM `courses`
ORDER BY `student_count`
LIMIT 3;

注意

这里 LIMIT 关键字的位置,需要放在 ORDER BY 关键字的后面,否则会报错。