• 35648

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

SQL语句性能比较

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/ITjs/2019/0611/799.html   前两天在逛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语句,竟然有这么多中写法?!是不是眼花缭乱啊?!是不是有”有时候,我们痛苦的不是没有选择,而是选择太多”的感慨啊?!哈哈

  不过,有一个问题,相信也是很多人的问题:这么多种写法,哪种写法的效率最高呢?欲知后文如何,请听下回分解。



相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!