inner join是内连接,显示符合连接条件的记录
natural join是对两张表中字段名和数据类型都相同的字段进行等值连接,并返回符合条件的结果 。
natural join是自然连接,自动对两个表按照同名的列进行内连接语法如下
join...using:用于两表有同名字段但数据类型不同,或者使用多个同名字段中的某一个做等值连接
join...on :最为灵活,可以指明连接的条件
一、CROSS JOIN 交叉连接
CROSS JOIN连接用于生成两张表的笛卡尔集。
1、返回的记录数为两个表的记录数乘积。比如,A表有n条记录,B表有m条记录,则返回n*m条记录。
2、将A表的所有行分别与B表的所有行进行连接。
OUTER JOIN 外连接
外连接,又分为:
1.LEFT OUTER JOIN/LEFT JOIN(左外连接)
2.RIGHT OUTER JOIN/RIGHT JOIN(右外连接)
3.FULL OUTER JOIN/FULL JOIN(全外连接)
1.LEFT OUTER JOIN/LEFT JOIN(左外连接)
左外连接就是关联的两张或多张表中,根据关联条件,显示匹配的记录,左表中有的记录,但是右表中没有匹配上的,以空(null)显示。
LEFT OUTER JOIN也可以简写成LEFT JOIN,效果是一样的。
左外连接有SQL标准写法,也有oracle特有的写法。
2.RIGHT OUTER JOIN/RIGHT JOIN(右外连接)
右外连接就是关联的两张或多张表中,根据关联条件,显示匹配的记录。右表中有的记录,但是左表中没有匹配上的,以空(null)显示。
RIGHT OUTER JOIN也可以简写成RIGHT JOIN,效果是一样的。
右外连接有SQL标准写法,也有oracle特有的写法。
3.FULL OUTER JOIN/FULL JOIN(全外连接)
全外连接就是关联的两张或多张表中,根据关联条件,显示所有匹配和不匹配的记录。
左表中有的记录,但是右表中没有匹配上的,以空(null)显示。右表中有的记录,但是左表中没有匹配上的,也以空(null)显示。
FULL OUTER JOIN也可以简写成FULL JOIN,效果是一样的。
全外连接只有SQL标准写法,没有oracle特有的写法。
四、SELF JOIN 自连接
在上面的emp2表中,每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的经理。现在需要将每一个员工自己的名字和经理的名字都找出来,应该怎么显示呢?
如果我们有两张这样的表分别教worker和mgr,那么我们就很好写SQL语句。
SELECT worker.name,Mgr.name
FROM worker,mgr
WHERE worker.id = mgr.id;
但现在我们只有一张表。你也许说我们现在在建一张表,把同样的数据拷贝过去不就可以了吗?是的,这样可以,但我们不会采用,因为这样就会很麻烦,而且数据严重冗余等等很多弊端。
这里有更好的方法,那就是自连接。
自连接,就是把一张表取两个别名,当做两张表来使用,自己和自己关联
五、总结
表连接分为:
1.CROSS JOIN:显示迪卡尔积。
2.INNERT JOIN:显示所有匹配的项。
3.OUTER JOIN
外连接又分为:
1) LEFT OUTER JOIN/LEFT JOIN:显示左表的所有项,右表没有匹配的项,则以null显示。
2) RIGHT OUTER JOIN/RIGHT JOIN:显示右表的所有项,左表没有匹配的项,则以null显示。
3) FULL OUTER JOIN/FULL JOIN:显示所有匹配和不匹配的项,左右两张表没有匹配的,都以null显示。
4.SELF JOIN:把一张表取两个别名,当做两张表来使用,自己和自己关联