SQL语句性能比较
前两天在逛CSDN的时候,无意间看到一篇帖子,觉得不错。今天整理一下,发布出来,和大家一起讨论讨论。
SQL的逻辑很简单:查询一张表中列A不是aValue或者列B不是bValue的记录。这样说可能不是太明白,我们直接用SQL来描述吧。SQL如下:
SELECT * FROM test WHERE id NOT IN (SELECT id FROM test WHERE columnA = 'aValue' AND columnB = 'bValue');
学过数理逻辑的童鞋们应该知道经过逻辑推理还可以又下面三种写法。如下:
SELECT * FROM test WHERE NOT (columnA = 'aValue' AND columnB = 'bValue');
还能这样写:
SELECT * FROM test WHERE (columnA <> 'aValue' OR columnB <> 'bValue');
还能这样写:
SELECT * FROM test WHERE ((columnA <> 'aValue' AND columnB <> 'bValue') OR (columnA <> 'aValue' AND columnB = 'bValue') OR (columnA = 'aValue' AND columnB <> 'bValue'));
配上EXISTS关键字,还能这样写:
SELECT * FROM test a WHERE NOT EXISTS (SELECT 1 FROM test b WHERE b.columnA = 'aValue' AND b.columnB = 'bValue' AND a.id = b.id);
在学“集合论”,或者在看关系型数据库入门知识时,应该还学过一个关系的减法操作。对应SQL中的关键字是EXCEPT(在Oracle是MINUS)。用上这个操作,还能这样写:
SELECT * FROM test MINUS SELECT * FROM test WHERE columnA = 'aValue' AND columnB = 'bValue';
另外,还可以使用关键字UNION。这时的SQL这样写:
SELECT * FROM test WHERE columnA <> 'aValue' UNION ALL SELECT * FROM test WHERE columnB <> 'bValue';
真是没想到,一条简单的SQL语句,竟然有这么多中写法?!是不是眼花缭乱啊?!是不是有”有时候,我们痛苦的不是没有选择,而是选择太多”的感慨啊?!哈哈
不过,有一个问题,相信也是很多人的问题:这么多种写法,哪种写法的效率最高呢?欲知后文如何,请听下回分解。
作 者: D瓜哥,https://www.diguage.com/
原文链接:https://wordpress.diguage.com/archives/21.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
原文链接:https://wordpress.diguage.com/archives/21.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
7的话 合并会不会有重复的记录啊,比如说既符合A条件的又符合B条件的
初步猜测,实例4的效率最高
SELECT *
FROM test
WHERE (columnA ‘aValue’ OR columnB ‘bValue’);
结果集合:当columnA’aVAlue’时和 columnB ‘bValue’会有重复记录吧,类比示例-2,非(A and B)
和 非A and 非B 应当是一类意思
——————————————————————————————————————–
SELECT * FROM test WHERE columnA ‘aValue’
UNION ALL
SELECT * FROM test WHERE columnB ‘bValue’; 同样这个也是会有重复记录,请查证我的理解是否正确。