7-13IN和NOT IN 子查询

Posted gcm_walker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-13IN和NOT IN 子查询相关的知识,希望对你有一定的参考价值。

IN后面的子查询可以返回多条记录。

SELECT ...FROM  WHERE 查询表达式 IN(子查询)

常用IN替换等于(=)的比较子查询。

用法:

(1)使用 :IN关键字可以使父查询匹配子查询返回的多个单列值。

(2) NOT IN:将父查询条件中的表达式与子查询返回的结果进行比较把不匹配的信息显示出来。

举例:查询购买了自行车的用户信息:

根据商品的名称查询商品的编号:

SELECT  ID FROM CommidInfo WHERE Name=‘自行车’

使用商品的编号去查询购买用户的商品编号:

SELECT UserId FROM  OrderInfo  WHERE    ID=
{
SELECT   ID FROM  CommidInfo WHRER  Name=\'自行车\'
}

使用用户编号去查询用户信息:

SELECT *FROM UserInfo  WHERE  UserId=
{
SELECT UserId FROM  OrderInfo  WHERE    ID=
{
SELECT   ID FROM  CommidInfo WHRER  Name=\'自行车\'
}
}

但是在这里会报错:

当子查询返回的列为多个时,就不能用等于号了,把=换成IN就可以解决问题了。

SELECT *FROM UserInfo  WHERE  UserId  IN
{
SELECT UserId FROM  OrderInfo  WHERE    ID=
{
SELECT   ID FROM  CommidInfo WHRER  Name=\'自行车\'
}
}

查询从未网购过的用户信息:

查询订单表中购买过商品的用户编号:

使用关键字DISTINCT去掉重复数据:

SELECT DISTINCT  UserId FROM OrderInfo  

把用户表中购买过商品的用户去掉,剩下的就是从未网购过的用户信息:

SELECT *FROM  UserInfo  WHERE  NOT IN 
{
SELECT  DISTINT    UserId FROM  OrderInfo
}

NOT IN 的意思不是在这里的子查询条件内。

 

以上是关于7-13IN和NOT IN 子查询的主要内容,如果未能解决你的问题,请参考以下文章

Elastic 7.13.0 版重磅发布:在 Elastic 上搜索和存储更多数据

校内测试2020-7-13校内测试

linux安装MySQL5.7.13(二进制|源码)

2020.7.13

将模块安装到 2.7.10 而不是 2.7.13 导致默认 python2.7.13 无法在 MAC 终端窗口上导入这些模块

linux机器升级python版本至2.7.13