如上图所示,现有两个表,一张客户表(Customers)和一张订单表(Order1),要求找出从未下过订单的客户姓名(CustomerName)。
方法一:使用where型子查询
第一步:查询订单表(Order1)中下过订单的客户Id(CustomerId)。
selectdistinctCustomerIdfromOrder1
得到下过订单的客户Id如下:
第二步:使用notin找出客户表(Customers)中没有在订单表(Order1)表中customerId列出现过的Id。
最终结果如下:
方法二:使用Exists子查询
首先找到下过订单的客户Id,然后使用notexists得到未下过订单的客户,不存在c.Id=o.CustomerId的结果集也就是从未下过订单的客户。
方法三:使用左连接
第一步:使用leftjoin将客户表(Customers)和订单表(Order1)关联。
得到如下结果:
第二步:筛选o.CustomerId为空的结果集也就是从未下过订单的客户。
最终结果如下