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

作者: 杨呀 | 来源:发表于2019-04-30 12:52 被阅读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~

    相关文章

      网友评论

        本文标题:产品操作MySQL第7篇 – 运算符 - IN

        本文链接:https://www.haomeiwen.com/subject/uagmnqtx.html