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 的意思不是在这里的子查询条件内。
时间: 2024-10-05 21:04:39