【译】MySQL基础教程-09-MySQL IN运算符

[广告:最高 ¥2000 红包]阿里云服务器、主机等产品通用,可叠加官网常规优惠使用 | 限时领取

MySQL IN运算符简介

IN  运营商允许你确定一个指定的值在一组值匹配的任何值或返回的子查询

以下说明了IN  运算符的语法。

让我们更详细地检查查询:

  • 您可以在 子句中使用a  column或expression(expr)与IN运算符WHERE
  • 列表中的值用逗号(,)分隔。
  • IN操作者也可以在所用WHERE的其它语句,如条款  UPDATE,和DELETE

IN运算符返回1,如果的值  column_1或结果expr  表达式等于列表中的任何值,否则,它返回0。

当列表中的值都是常量时,MySQL执行以下步骤:

  • 首先,根据  表达式的类型column_1或结果来评估值。  expr
  • 其次,对值进行排序。
  • 第三,使用二进制搜索算法搜索值。因此,使用IN  带有常量列表的运算符的查询执行速度很快。

请注意,如果expr列表中的任何值NULL,则IN  运算符返回NULL

您可以将IN运算符与NOT运算符组合以确定值是否与列表或子查询中的任何值都不匹配。

MySQL IN示例

让我们练习一些使用IN运算符的例子。

办公室表

如果要查找位于美国和法国的办事处,可以使用IN运算符作为以下查询:

试试看

MySQL IN国家/地区列表示例
您可以使用OR以下查询获得与运算符相同的结果:

试试看

如果列表有许多值,则需要使用多个OR 运算符构造一个非常长的语句。因此,IN运算符允许您缩短查询并使其更具可读性。

要获得不在美国和法国的办事处,请NOT IN  在下面的WHERE条款中使用:

试试看

MySQL NOT IN办公室示例

带有子查询的MySQL IN

IN操作通常与使用子查询。子查询不是提供文字值列表,而是从一个或多个表中获取值列表,并将它们用作IN运算符的输入值。

我们来看看示例数据库中的ordersorderDetails表:

订单ORDERDETAILS桌

例如,如果你想找到的顺序小号,其总价值是大于60,000,使用IN操作符如下面的查询所示:

试试看

带有子查询示例的MySQL IN

上面的整个查询可以分解为两个单独的查询。

首先,子查询返回一个订单号列表,其值大于60,000使用GROUP BY 和HAVING 子句:

试试看

MySQL IN子查询

其次,外部查询使用子句中的IN运算符WHEREorders表中获取数据:

试试看

码中人 微信公众号

关注微信公众号

码中人 微信公众号