SQL表连接查询inner join left join right join full join ...
一、最常见的连接查询
select s.name,m.mark from student s,mark m where s.id=m.studentid.
二、内连接-inner join
select s.name,m.mark from student s inner join mark m on s.id=m.studentid.
上面两种都是把student.id=mark.studentid条件的元素选出来
三、左连接-left join
左连接就是把左边的元素全部选出来
select s.name,m.mark from student s left join mark m on s.id=m.studentid.
上面的语句就是把左边的表,即student表中的元素全部选出,尽管有些分数表是没数据的,也选出来
四、右连接-right join
右连接就是把右边的元素全部选出来
select s.name,m.mark from student s right join mark m on s.id=m.studentid.
上面的语句就是把左边的表,即mark表中的元素全部选出,尽管有些学生表是没数据的,也选出来
五、全连接-full join
全连接就是把左右两把的表数据都取出来,不管是否能匹配到数据:
select s.name,m.mark from student s full join mark m on s.id=m.studentid.
上面的语句就是把,学生表和成绩表的数据都取了出来。
注:最常用的是第一种 内链接。
六、自然连接-natural join
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。
例子:
select emp.ename,dept dname from emp natural join dept.
这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将,emp中的deptno和dept中的deptno做了连接。
也就是实际上相当于
select emp.ename,dept.dname From emp join dept on emp.deptno=dept.deptno.
因为这两张表的这两个字段deptno的类型个名称完全相同。所以使用naturaljoin时被自然的连接在一起了。
另外:
1.如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为自然连接的条件。
2.如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。
3.由于oracle中可以进行这种非常简单的naturaljoin,我们在设计表时,应该尽量在不同表中具有相同含义的字段使用相同的名字和数据类型。以方便以后使用naturaljoin
4.等值连接不把重复的属性除去;而自然连接要把重复的属性除去。