6、多表查询语句

六、多表查询语句

连接类型:
自然连接: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
增加条件使多个表可以连接


 

猜你喜欢

转载自blog.csdn.net/weixin_43403578/article/details/89279451