SQL 运算符
比较运算符
常用的比较运算符有 =
(等于) 、!=
(不等于)、 <>
(不等于)、<
(小于)、<=
(小于等于)、>
(大于)、>=
(大于等于),其中 !=
和 <>
在特殊情况下用法是不同的,这里暂时不提。
比较运算符常常与 WHERE 在一起使用。WHERE 用于逻辑判断,WHERE 后面写判断的条件,满足条件的语句会被筛选出来。
WHERE 比较运算符的使用方式如下:
WHERE A operator B
假如我们要查询学生人数超过 800 的所有课程信息,我们可以使用下面的 SQL 语句:
SELECT *
FROM `courses`
WHERE `student_count` > 800;
1. 使用 AND 连接多条件
SELECT `column_name`
FROM `table_name`
WHERE condition1 AND condition2;
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;
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 关键字的后面,否则会报错。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)