内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。
右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。
全外连接:左外连接 union 右外连接。
首先创建两个表分别为e1和department
e1如下 department如下
首先进行内连接查询 select * from e1,department where department=dep_id;结果如下
我们发现只有在e1表中的department与department表中dep_Id相同的列会被显示,其它的不会显示出来
然后使用左外连接进行查询 select * from e1 left join department on department=dep_id;结果如下
我们发现,除了e1表中department和department表中dep_id相同的列被显示出来,e1表中其它的列也显示出来,但是dep_id和dep_name为NULL
因为左外连接的作用是把连接的左表,即left左边的表,也就是e1中的所有列显示出来,满足条件的正常显示,不满足的用NULL代替。
如果再加上附加条件,比如:select * from e1 left join department on department=dep_id where department=111;结果如下
它将只会显示department为111的列,因为要先满足where条件,再进行外连接条件判断。还有:select * from e1 left join department on department=dep_id where department=777;
我们发现还是只显示department为777的一列,尽管右表属性都为NULL
同理,我们看一下右外连接:select * from e1 right join department on department=dep_id;
我们发现,首先将department=dep_id的列显示出来,然后显示了右表的其它内容,与右表不匹配的用NULL代替。
也就是说,使用右外连接,会先将右表所有内容显示出来,与条件匹配的左表内容也显示出来,不匹配的用NULL代替,和左外连接一样,如果又
使用了where,那么先使用where判断,如果只有一列数据,那么只显示一列。
因为mysql不支持全外连接,所以就不进行演示了。