其实上面的定义都是非常简单的,然而天啊撸,我居然全部记错了或者记反了,也不知道面试小哥哥对我是怎么想的,我是感觉自己真的是久一点没看就啥都忘了。所以在这里进行一次重新记忆。
左连接是指包含左边表中的记录甚至是右边表中没有和他匹配的记录。比如说表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是在聚合前先根据条件去掉一部分数据,然后再进行聚合。
嗯,基础的东西还是得有机会多接触接触。