1月阅读周·MySQL数据库入门:单表查询之带关系运算符和带IN关键字的查询篇

举报
叶一一 发表于 2025/01/20 18:41:42 2025/01/20
【摘要】 背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十二个月。已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScr...

背景

去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。

没有计划的阅读,收效甚微。

新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。

这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十二个月。

已读完书籍《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》、《JavaScript权威指南》、《JavaScript异步编程设计快速响应的网络应用》、《编写可测试的JavaScript代码

当前阅读周书籍MySQL数据库入门

带关系运算符的查询

在SELECT语句中,最常见的是使用WHERE子句指定查询条件对数据进行过滤,其语法格式如下:

SELECT 字段名1,字段名2,…
FROM 表名
WHERE 条件表达式

在上面的语法格式中,“条件表达式”是指SELECT语句的查询条件。在MySQL中,提供了一系列的关系运算符,在WHERE子句中可以使用关系运算符连接操作数作为查询条件对数据进行过滤,常见的关系运算符如表1-1所示。

表1-1 关系运算符

1-1.jpg

表1-1中的关系运算符读者都比较熟悉,需要说明的是“<>”运算符和“!=”等价,都表示不等于。接下来以表1-1中的“=”、“>”关系运算符为例,将它们作为查询条件对数据进行过滤。

【例1-1】查询student表中id为4的学生姓名,SQL语句如下所示:

SELECT id,name FROM student WHERE id=4;

在SELECT语句中使用“=”运算符获取id值为4的数据,执行SELECT语句,结果如下所示:

mysql>SELECT id,name FROM student  WHERE id=4;
  +----+------------+
  | id | name         |
  +----+------------+
  |  4  | husanniang |
  +----+------------+
  1 row in set (0.00 sec)

从查询结果可以看到,id为4的学生姓名为“husanniang”,其他均不满足查询条件。

【例1-2】 使用SELECT语句查询name为“wusong”的学生性别,执行结果如下所示:

mysql>SELECT name,gender FROM student  WHERE name='wusong';
  +--------+--------+
  | name    | gender |
  +--------+--------+
  | wusong |   男     |
  +--------+--------+
  1 row in set (0.01 sec)

从查询结果可以看到,姓名为“wusong”的记录只有一条,其性别为“男”。

【例1-3】 查询student表中grade大于80的学生姓名,SQL语句如下所示:

SELECT name,grade FROM student WHERE grade>80;

在SELECT语句中使用>运算符获取grade值大于80的数据,执行SELECT语句,结果如下所示:

mysql>SELECT name,grade FROM student  WHERE grade>80;
  +------------+-------+
  | name         | grade |
  +------------+-------+
  | wuyong      |  100  |
  | qinming     |      90  |
  | husanniang |      88  |
  | wusong     |  86  |
  | linchong    |      92 |
  | yanqing     |      90 |
  +------------+-------+
  6 rows in set (0.00 sec)

从查询结果可以看到,所有记录的grade字段值均大于80,而小于或等于80的记录不会被显示。

通过以上三个实例可以看出,在查询条件中,如果字段的类型为整型,直接书写内容,如果字段类型为字符串,需要在字符串上使用单引号,例如“wusong”。

带IN关键字的查询

IN关键字用于判断某个字段的值是否在指定集合中,如果字段的值在集合中,则满足条件,该字段所在的记录将被查询出来。其语法格式如下所示:

SELECT *|字段名1,字段名2,…
FROM 表名
WHERE 字段名 [NOT] IN (元素1,元素2,…)

在上面的语法格式中,“元素1,元素2,…”表示集合中的元素,即指定的条件范围。NOT是可选参数,使用NOT表示查询不在IN关键字指定集合范围中的记录。

【例1-4】 查询student表中id值为1、2、3的记录,SQL语句如下所示:

SELECT id,grade,name,gender FROM student WHERE id IN(1,2,3);

执行结果如下所示:

mysql>SELECT id,grade,name,gender FROM student WHERE id IN(1,2,3);
  +----+-------+-----------+--------+
  | id | grade | name      | gender |
  +----+-------+-----------+--------+
  |  1 |     40 | songjiang | 男     |
  |  2 |   100 | wuyong    | 男     |
  |  3 |      90 | qinming   | 男     |
  +----+-------+-----------+--------+
  3 rows in set (0.00 sec)

相反,在关键字IN之前使用NOT关键字可以查询不在指定集合范围内的记录。

【例1-5】 查询student表中id值不为1、2、3的记录,SQL语句如下所示:

SELECT id,grade,name,gender FROM student WHERE id NOT IN(1,2,3);

执行结果如下所示:

mysql>SELECT id,grade,name,gender  FROM student  WHERE id NOT IN(1,2,3);
  +----+-------+------------+--------+
  | id | grade | name        | gender |
  +----+-------+------------+--------+
  |  4 |      88  | husanniang | 女       |
  |  5 |      66  | sunerniang | 女       |
  |  6 |      86  | wusong      | 男       |
  |  7 |      92  | linchong    | 男      |
  |  8 |      90  | yanqing     | NULL    |
  +----+-------+------------+--------+
  5 rows in set (0.00 sec)

从查询结果可以看到,在IN关键字前使用了NOT关键字,查询的结果与例4-7中的查询结果正好相反,查出了id字段值不为1、2、3的所有记录。

总结

数据库中包含大量的数据,很多时候需要根据需求获取指定的数据,或者对查询的数据重新进行排列组合,这时就要在SELECT语句中指定查询条件对查询结果进行过滤。

而在SELECT语句中,最常见的是使用WHERE子句指定查询条件对数据进行过滤。

IN关键字用于判断某个字段的值是否在指定集合中,如果字段的值在集合中,则满足条件,该字段所在的记录将被查询出来。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。