技术开发 频道

剖析MySQL左连接/右连接/等值连接异同

  测试总结

  编号SQL_1:表left_table真实参与测试的记录的ID值:1,2,3,4,5,6共计6条连续的记录;

  编号SQL_2、SQL_3:对于LEFT JOIN 连接操作,增加right_table的限制条件,不影响最后记录集的数量,但是影响right_table表中需要显示出来的列值,不符合限制条件的情况下,则用NULL值替代;

  编号SQL_4、SQL_5:对于等值连接操作,ON字句中增加对right_table的限制条件,会对最终的记录集数量产生影响;

  编号SQL_6、SQL_7:对于等值连接操作,WHERE字句中增加对right_table的限制条件,会对最终的记录集数量产生影响;

  编号(SQL_2、SQL_4)或(SQL_3、SQL_5):我们可以轻易发现编号:SQL_2、SQL_4 之间唯一的差别是连接的类型不同:SQL_2为左连接,而SQL_4为等值连接,其他所有的都一样,然后SQL执行后获得的记录集却截然不一样,并且SQL_2是对符合表left_table限制条件的记录都作为最后的记录集,而SQL_4则是对同时符合表left_table、表right_table限制条件的记录才作为最后的记录集;SQL_2与SQL_4之间对比获得的结论,同样适用于SQL_3与SQL_5之间,为此部再单独描述;

  编号(SQL_4、SQL_6)或(SQL_5、SQL_7):对于等值连接操作,不管对right_table的限制条件,放ON字句,还是WHERE子句中,对记录集影响都是一样的;

  编号SQL_3、SQL_5、SQL_8:SQL_5与SQL_3相比较我们可发现,用的连接关键字都是:左连接,但是ON子句中的表right_table限制条件被放到WHERE子句中,导致最后获得的记录集完全不一样,而是跟等值连接SQL_8的记录集一样,通过比较可以发现SQL_5的记录集不符合左连接的特性,而是符合等值连接的特性,所以此写法不是左连接语句,而是相当于等值连接的语句;

  编号SQL_2、SQL_3、SQL_9:SQl_9与SQL_2、SQL_3的连接关键字都是:左连接,其记录集相比较可以发现限制表left_table的记录条件:M.ID<=6没有起作用,限制表right_table的记录条件:N.SearchNum>300依然有效果,从左连接的特性角度分析,依然属于左连接,只是写法很混乱,容易误导SQL的读者。

0
相关文章