MySQL-02
比较运算符
比较运算符用于比较运算,判断逻辑是否成立。
比较运算符的使用方式如下:
A operator B
其中 operator 是比较运算符,用于对 A 和 B 进行比较运算。
常用的比较运算符有 =(等于) 、!=(不等于)、 <>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于),其中 != 和 <> 在特殊情况下用法是不同的,这里暂时不提。
比较运算符常常与 WHERE 在一起使用。WHERE 用于逻辑判断,WHERE 后面写判断的条件,满足条件的语句会被筛选出来。
逻辑运算符
使用 AND 连接多条件
使用 SQL 中的逻辑运算符 AND 可以将 WHERE 子句中将两个或两个以上的条件结合起来,其结果是满足 AND 连接的所有条件的数据。
语法
SELECT column_name
FROM table_name
WHERE condition1 AND condition2;
其中:
condition 为设置的条件,最后返回的结果应为满足 condition1 和 condition2 的数据。
使用 OR 连接多个条件
使用 SQL 中的逻辑运算符 OR 与 AND 关键字不同,OR 关键字,只要记录满足任意一个条件,就会被查询出来。
语法
SELECT column_name
FROM table_name
WHERE condition1 or condition2;
其中:
condition1 和 condition2 为设置的条件,最后返回的结果应满足 condition1 或 condition2 的数据
使用 NOT 过滤不满足条件的数据(理解题意,看题意确定逻辑)
使用 SQL 中的逻辑运算符 NOT 可以过滤掉 WHERE 子句中不满足条件的结果集。
语法
SELECT column_name
FROM table_name
WHERE NOT condition
;
其中:
condition 为设置的条件,最后返回的结果应不满足 condition 。
假设我们要查询教师表 teachers 中除了年龄 age 在 20 岁以上(不包括 20 岁)且来自于中国(CN)的以外所有教师信息,我们可以使用下面的 SQL 语句
SELECT * FROM
teachers
WHERE NOT (age
> 20 ANDcountry
= ‘CN’);
SELECT * FROM teachers WHERE age <20 or country != ‘CN’;
题目要求查询课程表 courses 中,教师 id teacher_id 不为 3,且学生人数 student_count 超过 800 的所有课程,最后返回满足条件的课程的所有信息。
select * from courses where not (teacher_id = 3 or student_count<=800);
select * from courses where teacher_id <>3 and student_count>800;
特殊条件
使用 IN 查询多条件
当我们需要查询单个表条件过多时,就会用多个 ‘OR’ 连接或者嵌套,这会比较麻烦,现在我们有 ‘IN’ 能更方便的解决这一问题。
IN 用法:
SELECT *
FROM table_name
WHERE column_name
IN value
;
👇 我们可以通过下面的实例来感受一下 IN 的用法。
假如我们想查询教师表 teachers 中教师国籍为中国 (CN) 或英国 (UK) 的所有教师信息,我们可以使用下面的 SQL 语句:
SELECT *
FROMteachers
WHEREcountry
IN (‘CN’, ‘UK’);
使用 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 *
FROMteachers
WHEREcountry
NOT IN (‘JP’, ‘USA’);
使用 BETWEEN AND 查询两值间的数据范围
ETWEEN 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
;
👇 我们可以通过下面的实例来感受一下 BETWEEN AND 的用法。
下面的 SQL 语句从 teachers 表中查询年龄在 20 到 25 岁之间( 包括 20 和 25 岁 ),但是国籍不为中国和英国的教师信息,注意,BETWEEN AND 包括选取的两个值:
SELECT *
FROMteachers
WHERE (age
BETWEEN 20 AND 25) AND (country
NOT IN (‘CN’,‘UK’));
注意这里我们 AND 左右的条件语句加入了括号(),是为了让括号()内的子语句优先计算,得到逻辑值真 (True) 或假 (False),再通过 AND 比较获得结果。
使用 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 *
FROMteachers
WHERE
使用 LIKE 模糊查询
在这里我们学习使用 LIKE 更准确规范得解决文本比较问题。
LIKE 比较类似我们平时用到的搜索。\
SELECT *
FROM table_name
WHERE column_name
LIKE value
;
👇 我们可以通过下面的实例来感受一下 LIKE 的用法。
假如我们想查询课程表 courses 中以字母 ‘D’ 开头的所有课程,我们可以使用下面的 SQL 语句:
SELECT *
FROMcourses
WHEREname
LIKE ‘D%’;
其中 ‘D%’ 表示以 D 开头的所有单词,% 表示为通配符,可以替代 0 个或多个字符
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
或 [!charlist] | 不在字符列中的任何单一字符 |
使用 ORDER BY(order by) 对数据进行排序
当我们想要查询具有明确排序的数据时,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;
对多列进行排序
在对多列进行排序时,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
;
这里 ORDER BY 关键字要写在 WHERE 关键字后面,先条件后排序,不然会报错。
使用 LIMIT 限制输出行数
是当我们数据非常多时,如果只希望返回有限个数的数据的时候我们该怎么办呢?这时候 LIMIT 子句就能帮助到我们。
LIMIT 子句用于 SELECT 中,对输出结果集的行数进行约束,LIMIT 接收2个参数 offset 和 count,两个参数都是整型数字,但通常只用一个。
基本语法
SELECT column_name
, column_name
FROM table_name
LIMIT offset
, count
;
offset :是返回集的初始标注,起始点是0,不是1哦
count :制定返回的数量
请编写 SQL 语句,从教师表(teachers)中查询一条年龄最大的中国教师的信息。
select * from teachers where country =‘CN’ order by age desc limit 0,1;
DISTINCT(distinct) 返回唯一不同的值。
DISTINCT 关键词用于返回唯一不同的值。
语法:
SELECT DISTINCT column_name,column_name
FROM table_name
如有错误,欢迎评论指正~~
参考文献:
LinkCode.
百度百科