互联网产品思考0岁的产品经理产品经理

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

2019-04-30  本文已影响1人  杨呀
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~

上一篇下一篇

猜你喜欢

热点阅读