什么是;; 哪里;; 刻薄?(复杂SQL查询的关键)
admin
2023-09-26 22:06:40
0

SQL查询是数据库人用凌波微步都逃不过的坎。

无独有偶,就在几天前,边肖的一位朋友在面试时遇到了一个SQL查询问题。"请解释一下SQL中where和having的区别,最好能举例说明。"他支吾道,“quot选择having一般是在不能用where的时候。"其实除了where和are,where和on也是面试官经常喜欢问的问题。

那么这三者有什么区别呢?借此机会,边肖学习并整理了一些材料,与大家分享。

放大镜在灰色背景上显示sql单词。

一、where和having

“其中& quot在结果返回之前生效,并且& quot聚合函数& quot不能在where后使用;"拥有& quot在结果返回后生效。有了之后,就可以使用sum()、maximum max()、minimum min()和average avg()等常用的聚合函数了。

下面的例子说明了这一点:

食物表,表字段名称(name),价格(price),类别(category)和数量(quantity)。

1.where和having都可以用的场景

比如查询价格大于50的食物和价格。

说明: having是从以前筛选的字段中重新筛选出来的,而where是直接从数据表中的字段中筛选出来的。selectprice已经过筛选,所以此时where和Having的效果是一样的。

2.只可以用having,不可以用where情况

比如查询每个食品类别的均价,得到均价在200以上的食品。

说明:你只能在这里使用having,因为跟在where后面的必须是表中的一个字段。改成avg(价格)也不对,having这个时候有优势。它根据前一个查询的内容进行筛选,而不管表中是否有该字段。

3.只可以用where,不可以用having的情况

比如查询价格大于100的食物和数量。

说明:这里不能用having的原因是having是根据上一篇文章的查询结果筛选出来的,上一篇文章没有告诉它价格是多少,所以报错了。

二、where和on

当两个或多个表连接返回记录时,数据库将生成一个临时表。使用leftjoin时,where和on有以下区别:

"哪里& quot是在生成临时表后对其进行过滤。"在& quot是生成临时表时使用的条件。无论on中的条件是否为真,它都将返回左侧表中的记录。两条查询语句:

1.select * formaleftjoinbon(a . id=b . id)其中b.name=' aa' 2和select * formaleftjoinbon(a . id=b . id andb . name=' aa ')第一条的实现过程如下:

第二条的实施过程如下:

从上面的例子可以看出,无论on上的条件是否为真,on子句都将返回左表或右表中的记录;Where子句是生成临时表后过滤临时表的一个条件,此时没有leftjoin的意义(必须返回左表中的记录),所以所有条件不为真的都被过滤掉。

最后

where、having和on都可以是条件子句,它们的执行顺序是on where to have。有时候如果这个顺序不影响中间结果,最终结果也是一样的。

关于三者的查询速度,由于on在进行统计前过滤掉了不符合条件的记录,可以减少中间操作要处理的数据,所以按理说速度应该是最快的。

相关内容

热门资讯

(辅助挂实测)聚闲麻将外挂辅助... 亲,您好聚闲麻将这款游戏可以开挂,确实是有挂的,非常多玩家都在用呢。很多玩家在这款游戏中打牌都会发现...
川渝两地为何能以“侨”为桥赋能... 中新网重庆7月10日电 题:川渝两地为何能以“侨”为桥赋能开放合作? 作者 梁钦卿 首届“一带一路”...
第二个攻略!牌缘南通长牌原来真... 您好:牌缘南通长牌游戏可以开挂,确实是有挂的,很多玩家在雀友游戏中打牌都会发现很多用户的牌特别好,总...
(辅助挂实测)襄阳卡五星原来真... 亲,襄阳卡五星这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,襄阳卡五星的开挂软件...
第八个攻略!相约十三水究竞有没... 亲,相约十三水这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,相约十三水的开挂软件...