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

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在进行统计前过滤掉了不符合条件的记录,可以减少中间操作要处理的数据,所以按理说速度应该是最快的。

相关内容

热门资讯

金花创建房间/微信金花房卡怎么... 1.微信渠道:(荣耀联盟)大厅介绍:咨询房/卡添加微信:88355042 2.微信游戏中心:打开微...
金花房间卡/金花房卡如何购买/... 金花房间卡/金花房卡如何购买/新超圣金花房卡正版如何购买新超圣是一款非常受欢迎的游戏,咨询房/卡添加...
牛牛创建房间/金花房卡批发/神... 微信游戏中心:神牛大厅房卡在哪里买打开微信,添加客服【88355042】,进入游戏中心或相关小程序,...
链接牛牛/牛牛房卡游戏代理/鸿... 鸿运大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
科技实测!牛牛房卡怎么获得/乐... 微信游戏中心:乐酷大厅房卡在哪里买打开微信,添加客服【88355042】,进入游戏中心或相关小程序,...