mysql笔试左链接_数据库面试题 左连接和右连接 where和having的区别

其实上面的定义都是非常简单的,然而天啊撸,我居然全部记错了或者记反了,也不知道面试小哥哥对我是怎么想的,我是感觉自己真的是久一点没看就啥都忘了。所以在这里进行一次重新记忆。

左连接是指包含左边表中的记录甚至是右边表中没有和他匹配的记录。比如说表A左连接表B,然后显示字段id和字段name,然后当时面试时我回答的是比如表A有id字段和name字段,表B有id字段,然后表A左连接表B时会显示出字段id和name,而表B左连接表A时只显示id字段。天啊,我究竟说了个啥子勒。几个月前写过相关文章的:数据库的左连接和右连接 java 面试 内连接和外连接 然后面试就记不清了,实际上跟字段的多少没关系,而是跟条件和记录数有关系,比如表A这边的id有10个,表B这边的id有8个,然后有5个和表A的id相同。当表A左连接表B时(条件是id相等)会显示出10个id,不相等的5个id放在后面。而表B左连接表A时只显示8个id,不想等的3个id放在后面。天亡我也。

然后是having和where的区别:这次我是记反了,我的天。having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行过滤。我都不记得当时自己有没有说反了。注意这里的聚合是指聚合操作,比如sum,count,max,min之类的。我的理解是having是利用聚合后的结果进行过滤,而where是在聚合前先根据条件去掉一部分数据,然后再进行聚合。

嗯,基础的东西还是得有机会多接触接触。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值