数据库之左连接(left join )、右连接(right join)、内连接(inner join)


在我们开发中会经常用到数据库的左连接和右连接,他们的区别可以概括为一句话来表示:即左连接where只影响右表,右连接where只影响到左表

数据库中的左连接(left join)和右连接(right join)区别

一、左连接(Left Join)

select * from table1 Left Join table2 where table1.ID = table2.ID

左连接后的检索结果是显示table1的所有数据和table2中满足where 条件的数据,即 Left Join影响到的是右边的表

二、右连接(Right Join)

select * from table1 Right Join table2 where table1.ID = table2.ID

检索结果是table2的所有数据和table1中满足where 条件的数据,即 Right Join影响到的是左边的表。

三、内连接(inner join)

select * FROM table1 INNER JOIN table2 ON table1.ID = table2.ID

上面sql与下面sql功能一样:

 select * from table1,table2 where table1.id=table2.id

四、其他内容:

1、WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接)WHERE 和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。

2、无论怎么连接,都可以用join子句,但是连接同一个表的时候,注意要定义别名,否则产生错误

(1)inner join:理解为“有效连接”,两张表中都有的数据才会显示

(2)left join:理解为“以左为主”,比如on a.field=b.field,则显示a表中存在的全部数据及a\b中都有的数据,A中有、B没有的数据以null显示

(3) right join:理解为“以右为主”,比如on a.field=b.field,则显示B表中存在的全部数据及a\b中都有的数据,B中有、A没有的数据以null显示

(4)full join:理解为“全连接”,两张表中所有数据都显示,实际就是inner +(left-inner)+(right-inner)

3、一般要使得数据库查询语句性能好点遵循以下原则:

(1)在做表与表的连接查询时,以大表为主,小表为辅

(2)不使用表别名,通过字段前缀区分不同表中的字段

(3)查询条件中的限制条件要写在表连接条件前

(4)尽量使用索引的字段做为查询条件

完。

如果你看到了这里,觉得文章写得不错就给个赞,关注公众号,可订阅更多干货?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢!
公众号:学软件开发就这么简单

发布了19 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lixibang/article/details/83343886
今日推荐