关于鸠合的观点,中学都应该学过,就不多说了.这三个关键字主假如对数据库的查询效果举行操纵,正如其中文寄义一样:两个查询,MINUS是从第一个查询效果减去第二个查询效果,假如有订交部份就减去订交部份;不然和第一个查询效果没有区分. INTERSECT是两个查询效果的交集,UNION ALL是两个查询的并集;
虽然一样的功用能够用简朴SQL语句来完成,然则机能差异非常大,有人做过试验: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 ) 耗时:18.19 sec
机能相差15.956倍!因此在碰到这类题目的时刻,照样用MINUS,INTERSECT和UNION ALL来解决题目,不然面临营业中随处可见的上百万数据量的查询,数据库服务器还不被咱玩的死翘翘?
PS:运用两个鸠合的相减,订交和相加时,是有严格要求的:1.两个鸠合的字段必需明白(用*就不可,报错);2.字段范例和递次雷同(称号能够差别),如:鸠合1的字段1是NUMBER,字段2是VARCHAR,那末鸠合2的字段1必需也是NUMBER,字段2必需是VARCHAR;3.不能排序,假如要对效果排序,能够在鸠合运算后,表面再套一个查询,然后排序,如前面的例子能够改成:
SELECT * FROM (SELECT order_id FROM made_order MINUS SELECT order_id FROM charge_detail) ORDER BY ORDER_ID ASC
以上就是SQL语句的MINUS,INTERSECT和UNION ALL的剖析的细致内容,更多请关注ki4网别的相干文章!