MINUS(减去),INTERSECT(交集)和UNION ALL(并集)

参考文章

下图很明确的表达了三个关键字的意思:
MINUS(减去),INTERSECT(交集)和UNION ALL(并集)_第1张图片

注意:上图minus对应SQL语句是

select * from SQL1 minus select * from SQL2;

如果想得到右边的结果,则sql应是

select * from SQL2 minus select * from SQL1;

用MINUS,INTERSECT和UNION ALL来解决问题,面对业务中随处可见的上百万数据量的查询跟更有效率。

made_order共23万笔记录,charge_detail共17万笔记录:

SELECT order_id FROM made_order
MINUS
SELECT order_id FROM charge_detail

耗时:1.14 sec

SELECT a.order_id FROM made_order a
   WHERE a.order_id NOT exists (
     SELECT order_id
     FROM charge_detail
     WHERE order_id = a.order_id
   )

简单SQL语句,耗时:18.19 sec

注意:

除非两张表字段完全一致,不然得指明字段名,不能用*;
字段的类型也得一样;
不能排序,像排序只能外层在嵌套一层:

SELECT * FROM 
   (SELECT order_id FROM made_order
   MINUS
  SELECT order_id FROM charge_detail)
ORDER BY ORDER_ID ASC

你可能感兴趣的:(MINUS(减去),INTERSECT(交集)和UNION ALL(并集))