产品操作MySQL第7篇 – 运算符 - IN

MYSQL


本资料为产品岗位作为日常工作参考,语言口语化

At 2019/4/26 By David.Yang


什么是IN查询

当你有一个多值的列表,想要确认指定的值是否在一个列表中,

在或者想确认一个值在一个子查询的结果集中能否匹配到,

这时候就是IN查询的使用场景了。


语法

SELECT

    column1, column2, ...

FROM

    table_name

WHERE

(expr | column_1) IN ('value1', 'value2', ...);


ϒ WHERE进行条件过滤时可以与IN配合使用,,可以使用列或表达式

ϒ 列表中的多值使用英文(,)进行分割

ϒ IN运算符可以在INSERT UPDATE DELETE的WHERE中使用


如果column_1的值等于IN的列表当中任何一个值,expr一样,则IN运算符返回TRUE,否则返回FALSE。


IN查询演示

IN的过滤查询

我们有学生表,学生有国籍,

desc students;

我们想通过国籍定位出南宋和西夏用户有哪些,

通过IN过滤来处理可以这么做。


SQL

SELECT

*

FROM

students

WHERE

nationality IN ("南宋", "西夏");


得到结果集如下


类比实现

我们之前学过OR运算符,他也可以达到我们想要的查询效果

SELECT

    *

FROM

    students

WHERE

    nationality = '南宋' OR nationality = '西夏';


得到结果集


NOT IN

当我们想查找不在列表值中的数据行时,可以使用NOT IN来实现,

比如我们想看看南宋和西夏之外的学生有哪些人呢,

我们可以这么做。


SQL

SELECT

*

FROM

students

WHERE

nationality NOT IN ("南宋", "西夏");


结果集


IN与子查询

IN与子查询的案例

周伯通!


老顽童自创左右互搏术,这个老头特别好玩,徒弟学的不好他就不认人家,


他倒想看看他的学生哪些左右互搏术成绩在90分以上的。


我们有两张表,学生表和测验表。

desc students;


desc tests;


两张表的关系:通过学生id关联


周伯通要知道左右互搏术考试90分以上的学生,

可以通过IN和子查询组合进行数据过滤,

这次他不用再不好意问一灯了


SQL

SELECT

       *

FROM

       students

WHERE

       number IN (

              SELECT

                     stuno

              FROM

                     tests

              WHERE

                     score >= 90

              AND

                     courseno = 1

       );



上面的语句执行完的到结果集


拆分需求讲解

以上的查询其实可以拆分成2个。

ϒ 子查询

查询测验表中【课程=左右互搏术】,并且【得分>=90分】,并且我们需要的是学生号列表


SQL

SELECT

stuno

FROM

tests

WHERE

score >= 90

AND

courseno = 1;


得到学生号列表


ϒ 主查询中

查询学生表,并且WHERE子句中应用IN,来确认学生号在指定的学生号列表中。

SQL

SELECT

*

FROM

students

WHERE

number IN (

2, 10, 16, 25

);


得到结果集为


验证一下是不是和上文的查询结果一样?


当然是一样的啦。


在本篇中解释了怎么应用IN查询来匹配指定列的数据是否在列表当中,

是学会了码?


Bye Bye~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容