上接:
零基础学习数据库SQL教程(一)
写在前面的话:本文章内容是自己在LintCode网站SQL教程学习过程中做的学习总结,以便自己复习和大家学习,如果去刷此网站的题,也可以把此文作为参考答案来使用。例题的答案是本人所写,并且已经运行成功,大家可以放心学习。
目录
一. 比较运算符
二.逻辑运算符
1. 使用 AND 连接多条件
2.使用 OR 连接多个条件
3.使用 NOT 过滤不满足条件的数据
三.特殊条件
1. 使用 IN 查询多条件
2. 使用 NOT IN 排除
3. 使用 BETWEEN AND 查询两值间的数据范围
4. 使用 IS NULL 查询空数据
5. 使用 LIKE 模糊查询
四.ORDER BY与LIMIT
1. 使用 ORDER BY 对数据进行排序
2. 使用 LIMIT 限制输出行数
一. 比较运算符
比较运算符用于比较运算,判断逻辑是否成立。
比较运算符的使用方式如下:
A operator B
其中 operator 是比较运算符,用于对 A
和 B
进行比较运算。
常用的比较运算符有 =
(等于) 、!=
(不等于)、 <>
(不等于)、<
(小于)、<=
(小于等于)、>
(大于)、>=
(大于等于),其中 !=
和 <>
在特殊情况下用法是不同的,这里暂时不提。
比较运算符常常与 WHERE 在一起使用。WHERE 用于逻辑判断,WHERE 后面写判断的条件,满足条件的语句会被筛选出来。
WHERE 比较运算符的使用方式如下:
WHERE A operator B
例题1:请编写 SQL 语句,查询教师表 teachers
中教师年龄大于 20 岁的所有教师信息。
答案:
select *
from teachers
where age>20
例题2:请编写 SQL 语句,查询教师表 teachers
中教师国籍 country
为中国 (CN) 的所有教师姓名,并返回满足查询条件的全部教师姓名
答案:
select name
from teachers
where country='CN'
二.逻辑运算符
1. 使用 AND 连接多条件
使用 SQL 中的逻辑运算符 AND 可以将 WHERE 子句中将两个或两个以上的条件结合起来,其结果是满足 AND 连接的所有条件的数据。
语法:
SELECT `column_name`
FROM `table_name`
WHERE condition1 AND condition2;
其中: condition
为设置的条件,最后返回的结果应为满足 condition1
和 condition2
的数据。
例题1:请编写 SQL 语句,查询课程表 courses
中课程创建时间 created_at
在 '2020-01-01'
(包括) 到 '2020-05-01'
(不包括) 之间的所有课程名称和课程创建时间
答案:
select name,created_at
from courses
where created_at>='2020-01-01' and created_at< '2020-05-01'
例题2:请编写 SQL 语句,查询课程表 courses
中教师 id 为 4,且上课人数在 500 以上(不包括 500 人)的所有课程信息。
答案:
select *
from courses
where teacher_id='4' and student_count>'500'
2.使用 OR 连接多个条件
使用 SQL 中的逻辑运算符 OR 与 AND 关键字不同,OR 关键字,只要记录满足任意一个条件,就会被查询出来。
语法:
SELECT `column_name`
FROM `table_name`
WHERE condition1 or condition2;
其中: condition1
和 condition2
为设置的条件,最后返回的结果应满足 condition1
或 condition2
的数据。
例题:请编写 SQL 语句,从 courses
表中,选取课程名为 'Web' 或者 'Big Data' 的课程信息,如果这两门课程同时存在,请将这两门课程的信息全部返回。
答案:
select *
from courses
where name='Web' or name='Big Data'
3.使用 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)
三.特殊条件
1. 使用 IN 查询多条件
当我们需要查询单个表条件过多时,就会用多个 'OR' 连接或者嵌套,这会比较麻烦,现在我们有 'IN' 能更方便的解决这一问题。
IN 用法:
SELECT *
FROM `table_name`
WHERE `column_name` IN `value`;
例题:请编写 SQL 语句,查询课程表 courses
中开课日期为 2021-01-01 或者 2021-01-03 的所有课程信息。
表定义: courses (课程表
答案:
select *
from courses
where created_at in('2021-01-01','2021-01-03')
2. 使用 NOT IN 排除
前面我们已经学习了逻辑运算符,这里的 'IN' 也可以与逻辑运算符 'NOT' 并用,组成 'NOT IN',表示不在集合中的所有结果。
NOT IN 用法:
SELECT *
FROM `table_name`
WHERE `column_name` NOT IN value;
例题:请编写 SQL 语句,查询课程表 courses
中所有教师 id teacher_id
不为 1 或 3 的所有课程,并返回满足查询条件的课程名称。
答案:
select name
from courses
where teacher_id not in ('1','3')
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`;
例题:请编写 SQL 语句,查询课程表 courses
中学生数量在 50 到 55 之间的所有课程信息。
答案:
select *
from courses
where student_count between 50 and 55
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;
例题:请编写 SQL 语句,查询教师表 teachers
中,国籍为 'CN' 或 'JP' 且 email
信息不为空的所有教师信息。
答案:
select *
from teachers
where (country in ('CN','JP'))and (email is not null)
5. 使用 LIKE 模糊查询
前面我们学习 BETWEEN AND 和比较运算符时,和文本操作类似,比如前面课程名称首字母的范围,这种方案虽然可行但是不稳定,不是直接对文本的操作。在这里我们学习使用 LIKE 更准确规范得解决文本比较问题。
LIKE 比较类似我们平时用到的搜索。
示例代码
LIKE 用法:
SELECT *
FROM `table_name`
WHERE `column_name` LIKE `value`;
对于SQL 中的通配符有以下类型:
通配符 | 描述 |
---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
或 [!charlist] | 不在字符列中的任何单一字符 |
例题:请编写 SQL 语句,查询教师表 teachers
中,所有使用 qq 邮箱的教师名字和邮箱
答案:
select name,email
from teachers
where email like '%@qq.com'
四.ORDER BY与LIMIT
1. 使用 ORDER BY 对数据进行排序
在前面的学习中,我们学习了如何对表中的数据进行简单的查询,仔细观察后可以发现,检索出的数据并不是以纯粹的随机顺序显示的,在没有对其进行排序时,数据以它在表中出现的顺序显示,一般为数据最初添加到表中的顺序。
当我们想要查询具有明确排序的数据时,ORDER BY 关键字就可以帮助到我们。
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序,其具有 ASC(升序)和 DESC(降序)两个关键字,且默认按照升序排列。
基本语法
SELECT `column_name`, `column_name`
FROM `table_name`
ORDER BY `column_name`, `column_name` ASC|DESC;
例题1:请编写 SQL 语句,查询教师表 teachers
中教师年龄 age 的唯一值,并将结果进行升序排序。
答案:
select distinct age
from teachers
order by age
例题2:请编写 SQL 语句,查询教师表 teachers
中的中国教师,并按照年龄降序排序。
答案:
select *
from teachers
where country='CN'
order by age desc
2. 使用 LIMIT 限制输出行数
在前面的学习中我们知道 SELECT 语句返回所有匹配的行。可是当我们数据非常多时,如果只希望返回有限个数的数据的时候我们该怎么办呢?这时候 LIMIT 子句就能帮助到我们。
LIMIT 子句用于 SELECT 中,对输出结果集的行数进行约束,LIMIT 接收2个参数 offset 和 count,两个参数都是整型数字,但通常只用一个。
基本语法
SELECT `column_name`, `column_name`
FROM `table_name`
LIMIT `offset` , `count`;
注意:
LIMIT 关键字的位置,需要放在 ORDER BY 关键字的后面,否则会报错。
例题:请编写 SQL 语句,从教师表(teachers)中查询一条年龄最大的中国教师的信息。
答案:
select *
from teachers
where country='CN'
order by age desc
limit 1
下接:
零基础学习数据库SQL教程(三)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)