5、关联查询

1.左右连接

关于左右连接指的是查询判断条件的参考方向,

1:下面有如下查询:

Sql>Select * from emp e,dept d where e.deptno=d.deptno;

如上查询emp与dept的所有信息,这是可以看到信息里没有40部门的信息,原因就在于上述查询语句是以emp表为参考的,而在emp中没有员工在40部门,那么我们想要显示40部门的信息,就必须应用左右连接来做。

语句修改为:select * from emp e, dept d where e.deptno(+)=d.deptno;

 

“(+)”就用于左、右连接的更改

(+)=:放在等号的左边,表示的是右链接

=(+):放在右边,表示的是左连接

这种符号是oracle数据库自已所独有的,其他数据库不能使用。

Select e.ename,e.job,m.ename from emp e,emp m where e.mgr=m.empno(+);

 

除了以上的表连接操作之外,在sql语法中,也提供了另外一套用于表连接的操作sql,格式如下:

Select  table.column,table2.column from table [cross join table2] [natural join table2]|[join table2 using(column_name)] [join table2 on(table1.column_name=table2.column_name)]|[left|right|full outer]

2.交叉连接(cross join):用于产生笛卡尔积

Sql>Select * from emp cross join dept;

笛卡尔积本身并不是属于无用的内容,在某些情况下还是需要使用的

3.自然连接(natural join):自动找到匹配的关联字段,消除笛卡尔积

Sql>Select * from emp natural join dept;

但是并不是所有的字段都是关联字段,设置字段需要通过约束指定;

4.join…using子句:用于自已指定一个消除字段需要通过约束指定;

Sql>Select * from emp  join dept using (deptno);

5.join…on子句:用户自已指定一个可以消除笛卡尔积的无关条件

Sql>Select * from emp join dept on(emp.deptno=dept.deptno);

6.连接方向的改变:

左(外)连接:left  outer   join….on;

右(外)连接:right outer   join…on;

全(外)连接:full   outer   join…on;---------->把两张表中没有的数据都表示

原文地址:https://www.cnblogs.com/quyong/p/6688214.html