1.比较运算符:比较运算符用于比较运算,判断逻辑是否成立。
比较运算符的使用方式如下:
A operator B
其中 operator 是比较运算符,用于对 A 和 B 进行比较运算。
常用的比较运算符有 =(等于) 、!=(不等于)、 <>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于),其中 != 和 <> 在特殊情况下用法是不同的。
比较运算符常常与 WHERE 在一起使用。WHERE 用于逻辑判断,WHERE 后面写判断的条件,满足条件的语句会被筛选出来。
WHERE 比较运算符的使用方式如下:
WHERE A operator B
练习:查询超过 20 岁的教师。select * from teachers where age > 20;
2.逻辑运算符:AND、OR、NOT
① 使用AND连接多条件:
使用 SQL 中的逻辑运算符 AND 可以将 WHERE 子句中将两个或两个以上的条件结合起来,其结果是满足 AND 连接的所有条件的数据。
语法:
SELECT `column_name`
FROM `table_name`
WHERE condition1 AND condition2;
其中:condition 为设置的条件,最后返回的结果应为满足 condition1 和 condition2 的数据。
练习题:查询课程表 courses 中课程创建时间 created_at 在 '2020-01-01' (包括) 到 '2020-05-01' (不包括) 之间的所有课程名称和课程创建时间。
② 使用OR连接多条件:
使用 SQL 中的逻辑运算符 OR只要记录满足任意一个条件,就会被查询出来。
语法:
SELECT `column_name`
FROM `table_name`
WHERE condition1 or condition2;
其中:condition1 和 condition2 为设置的条件,最后返回的结果应满足 condition1 或 condition2 的数据。
练习题:从 courses 表中,选取课程名为 'Web' 或者 'Big Data' 的课程信息。
③ 使用 NOT 过滤不满足条件的数据
使用 SQL 中的逻辑运算符 NOT 可以过滤掉 WHERE 子句中不满足条件的结果集。
语法:
SELECT `column_name`
FROM `table_name`
WHERE NOT `condition`;
其中:condition 为设置的条件,最后返回的结果应不满足 condition 。
练习题:查询课程表 courses 中,教师 id teacher_id 不为 3,且学生人数 student_count 超过 800 的所有课程。
select * from courses where not (teacher_id = 3 or student_count <= 800)
3.特殊条件
使用 IN 查询多条件
当需要查询单个表条件过多时,就会用多个 'OR' 连接或者嵌套,这会比较麻烦,可以用 'IN' 更方便的解决这一问题。
示例代码:
SELECT *
FROM `table_name`
WHERE `column_name` IN `value`;
练习题:查询课程表 courses 中开课日期为 2021-01-01 或者 2021-01-03 的所有课程信息。
select * from courses where created_at in ('2021-01-01','2021-01-03')
使用 NOT IN 排除:
示例代码:
SELECT *
FROM `table_name`
WHERE `column_name` NOT IN value;
练习题:查询课程表 courses
中所有教师 id teacher_id
不为 1 或 3 的所有课程。
select name from courses where teacher_id not in (1,3)
使用 BETWEEN AND 查询两值间的数据范围
BETWEEN AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
注:在不同的数据库中,BETWEEN 操作符会产生不同的结果!
在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。
因此,需检查数据库是如何处理 BETWEEN 操作符!
示例代码:
SELECT *
FROM `table_name`
WHERE `column_name` BETWEEN `value` AND `value`;
练习题:查询课程表 courses 中学生数量在 50 到 55 之间的所有课程信息。
select * from courses where student_count between '50' and '55'
使用 IS NULL 查询空数据
NULL 值代表遗漏的未知数据。默认的,表的列可以存放 NULL 值。
如果表中的某个列是可选的,那么可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
NULL 用作未知的或不适用的值的占位符。
注:无法比较 NULL 和 0;它们是不等价的。
无法使用比较运算符来测试 NULL 值,比如 =、!= 或 <>。
必须使用 IS NULL 和 IS NOT NULL操作符。
示例代码:
SELECT *
FROM `table_name`
WHERE `column_name` IS NULL;
练习题:查询教师表 teachers 中,国籍为 'CN' 或 'JP' 且 email 信息不为空的所有教师信息。
select *from teachers where country in ('CN','JP') and email is not null
使用 LIKE 模糊查询
BETWEEN AND 和比较运算符时不是直接对文本的操作,使用 LIKE 更准确规范得解决文本比较问题。
LIKE 比较类似我们平时用到的模糊搜索。
示例代码
SELECT *
FROM `table_name`
WHERE `column_name` LIKE `value`;
对于SQL 中的通配符有以下类型:
通配符 |
描述 |
% |
替代 0 个或多个字符 |
- |
替代一个字符 |
[charlist] |
字符列中的任何单一字符 |
[!charlist] |
不在字符列中的任何单一字符 |
练习题:查询教师表 teachers 中,所有使用 qq 邮箱的教师名字和邮箱。
select name,email from teachers where email like '%@qq.com'
4.ORDER BY 与LIMIT
使用 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;
练习题:查询教师表 teachers 中教师年龄 age 的唯一值,并将结果进行升序排序。
select distinct age from teachers order by age
//需要取age的不重复数据
使用 LIMIT 限制输出行数
LIMIT 子句用于 SELECT 中,对输出结果集的行数进行约束,LIMIT 接收2个参数 offset 和 count,两个参数都是整型数字,但通常只用一个。
基本语法
SELECT `column_name`, `column_name`
FROM `table_name`
LIMIT `offset` , `count`;
注:offset :是返回集的初始标注,起始点是0,不是1哦
count :制定返回的数量
练习题:查询课程表 course 中学生人数 student_count 最少的三门课程信息。
select * from courses order by student_count limit 3