一、多表连接查询
1、内连接:(inner join)
返回符合查询条件以及连接条件的结果集
select e.empno as 员工编号,e.ename as 员工名称,d.dname as 部门
from emp e [inner] join dept d
on e.deptno=d.deptno;
注意:一旦制定别名,整个句子就只能使用别名
2、左外连接:(left join on)
除了返回查询条件以及连接条件的结果集,还会返回左表中不符合连接条件的行,右侧表dept用null填充
select e.empno as 员工编号,e.ename as 员工名称,d.dname as 部门
from emp e left join dept d
on e.deptno=d.deptno;
3、右外连接:(right join on)
除了返回查询条件以及连接条件的结果集,还会返回右表中不符合连接条件的行,左侧表emp用null填充
select e.empno as 员工编号,e.ename as 员工名称,d.dname as 部门
from emp e right join dept d
on e.deptno=d.deptno;
4、全外连接:(full join)
在内连接的基础上,将左右两表不符合条件的记录加入结果集
select e.empno as 员工编号,e.ename as 员工名称,d.dname as 部门
from emp e right join dept d
on e.deptno=d.deptno;
5、自然连接(natural join)
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。
select emp.ename,dept.dname
from emp natural join dept;
相当于
select emp.ename,dept.dname
from emp join dept on emp.deptno = dept.deptno;
因为这两张表的这两个字段deptno的类型个名称完全相同。所以使用natural join时被自然的连接在一起了。
6、交叉连接
笛卡尔儿积
方式一
select emp.ename,dept.dname
from emp,deptno;
方式二
select emp.ename,dept.dname
from emp cross join deptno;