多表连接
内连接
a.相等连接(inner join)
1)等值连接:通过相同的字段值连接起来的查询,不去除重复【列】,注意连接依据为null,null不与任何值匹配,包括null本身(即null != null)无比较性
select * from emp inner join dept on emp.deptno= dept.deptno;
select * from emp,dept where emp.deptno = dept.deptno
2)不等连接: 使用比较运算符作为连接依据
select * from emp inner join dept on emp.age >23;
select * from emp,dept where emp.age >23;
b.自然连接(natrual join):将两表【所有】列名相同的字段的进行比较,只保留一列属性列
select * from emp natrual join dept;
外连接(outer join)
a.左外连接(left outer join):以关键字左边表为主,查询右表无记录则null,左表数据为总数
select * from emp left join dept on emp.deptno = dept.deptno;
b.右外连接(right outer join):以关键字右表为主,查询左表无记录则为null,右表数据为总数
select * from emp right join dept on emp.deptno = dept.deptno;
c.全外连接(full outer join):左外连接和右外连接的并集
select * from emp full join dept on emp.deptno = dept.deptno;
笛卡儿积(cross join):也称交叉连接,两表行记录一一匹配查询
select * from dept cross join emp;
select * from dept,emp;
自连接:既可以使用内连接也可以使用外连接
select * from emp e1 left join emp e2 on e1.empno = e2.mrg
连接符(union/union all):将所有列名一致的所有表进行合并
两者的区别只在于是否去除重复【行】
select * from emp left join dept on dept.deptno = emp.deptno union (select * from emp rgint join dept on dept.deptno = emp.deptno);