首页 > 代码库 > 5、关联查询
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;---------->把两张表中没有的数据都表示
5、关联查询