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

语法:select * from 表名 where 查询表达式 IN(子查询)

--查询购买了“宝马小帅哥20寸”的用户信息

【1】根据商品名称查询商品编号

select commodityid from commodityinfo where commodityname ='宝马小帅哥20寸'

【2】根据商品编号查询用户编号

select userid from orderinfo 

where commodityid=

(select commodityid from commodityinfo where commodityname ='宝马小帅20寸‘)

【3】根据用户编号查询用户信息

select * from userinfo

where userid in

(

select userid from orderinfo 

where commodityid=

(select commodityid from commodityinfo where commodityname ='宝马小帅20寸‘))

--当子查询返回的列的值为多个时,就不能使用比较运算符‘=’了,要使用关键字in

 --not in 子查询

--查询从未网购过商品的用户信息

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

使用关键字distinct去掉重复数据

select distinct userid from orderinfo  --只要在订单表中存在的userid就是购买过商品的用户

【2】将用户表中购买过商品的用户去除,剩下的就是没有购买过的

select * from userinfo 

where userid not in 

(select distinct userid from orderinfo)