六、多表查询语句
连接类型:
自然连接:natural joins
外连接:outer joins
交叉连接:cross joins
创建自然连接:
1、两个表中所有相同名字的列
2、选取匹配列的相同值
3、列的数据类型要一致
select e.ename,e.job,e.sal,d.dname
from emp e natural join dept d;
using语句:
1、如果个别列有相同名字但数据类型不同可以使用using语句指定等值连接列
2、有多列时using只能匹配一列
3、natural join 与 using 是互斥的(只可以用一个)
4、using使用的列不可以使用任何限定词
select ename,job,sal,dname
from emp join dept
using (deptno);
on语句:
1、自然连接的条件基本上是同列名的等值连接
2、为了指定任意条件
3、必须要有列的限定词
select e.ename,e.job,e.sal,d.dname
from emp e join dept d
on (e.deptno=d.deptno);
on语句更容易理解
不等连接:retrieving records with nonequijoins
SQL> select e.ename,e.sal,g.grade
2 from emp e join salgrade g
3 on e.sal between g.losal and g.hisal;
返回名字,薪水,薪水等级三列
不匹配用外连接:
1、两个表内连接加上左(右)不匹配的行,就是左(右)连接
2、全外连接就等于内连接加上左右连接不匹配的行
左外连接:left outer join
select e.ename,e.sal,d.dname
from emp e left outer join dept d
on (e.deptno=d.deptno);
右外连接:right outer join
select e.ename,e.sal,d.dname
from emp e right outer dept d
on (e.deptno=d.deptno);
全外连接:
selecet e.ename,e.sal,d.dname
from emp e full outer join dept d
on (e.deptno=d.deptno);
左外连接,以左边的为主表,显示左边不匹配行
右外连接,以右边的为主表,显示右边不匹配行
全外连接,显示全部不匹配行
笛卡尔乘积
两张表的行数相乘得到的新表
交叉连接:
select ename,deptno from emp
cross join dept;
三表连接:
select emp,loc,deptno
from emp e
join dept d
on d.deptno=e.deptno 条件1
join lications l
on d.loc=l.loc; 条件2
增加条件使多个表可以连接