多表查询连接方式有:内连接和外连接
内连接:两个表中只有符合条件的记录才显示
例:查询scott.emp和scott.dept 表中,
部门编号,员工的编号,姓名,部门名称,工作地点和工资
外连接:不管有没有匹配到,所有的记录都要显示出来
外连接的方式有:左外连接、右外连接、全外连接
多表查询时要避免产生笛卡尔集
笛卡尔集怎么产生的呢?
省略了表的连接条件或者连接条件无效
内连接:
SQL> select e.deptno,empno,ename,dname,loc from emp e,dept d
2 where e.deptno=d.deptno order by deptno;
作内连接查询时,from 后跟多个表(别最好起别名)
where 后要有表的关联条件
字段如果同时出现在两个表中,字段前要加表前辍
新的语法:
select ...
from ... join .. on ()
where ...
外连接
左外连接
例:显示每个部门的员工情况,没有员工的部门也显示
SQL> select d.deptno,dname,loc,empno,ename
2 from emp e,dept d where d.deptno=e.deptno(+) order by deptno;
SQL> select d.deptno,dname,loc,empno,ename
2 from dept d left outer join emp e on (d.deptno=e.deptno)
3 order by deptno;
左边表的记录完全显示
右外连接
例:显示每个部门的员工情况,没有员工的部门也显示
SQL> select d.deptno,dname,loc,empno,ename
2 from emp e,dept d where d.deptnof=e.deptno(+) order by deptno;
SQL> select d.deptno,dname,loc,empno,ename
2 from emp e right outer join dept d on (d.deptno=e.deptno)
3 order by deptno;
右边表的记录完全显示
全(满)外连接
SQL> select d.deptno,dname,loc,empno,ename
2 from emp e full outer join dept d on (d.deptno=e.deptno)
3 order by deptno;
自然连接
如果两个表有相同的字段时,自然连接自动把两个相同的字段作等值的内连接
SQL> select deptno,dname,loc,empno,ename
2 from emp e natural join dept d;
隐含的等于 from emp e,dept d where e.deptno=d.deptno
自连接
自连接把自身表的一个镜象当另一个表
例:查询emp表工资高于其经理的记录
SQL> select * from scott.emp e where sal>(select sal from scott.emp where empno=e.mgr);
内连接:两个表中只有符合条件的记录才显示
例:查询scott.emp和scott.dept 表中,
部门编号,员工的编号,姓名,部门名称,工作地点和工资
外连接:不管有没有匹配到,所有的记录都要显示出来
外连接的方式有:左外连接、右外连接、全外连接
多表查询时要避免产生笛卡尔集
笛卡尔集怎么产生的呢?
省略了表的连接条件或者连接条件无效
内连接:
SQL> select e.deptno,empno,ename,dname,loc from emp e,dept d
2 where e.deptno=d.deptno order by deptno;
作内连接查询时,from 后跟多个表(别最好起别名)
where 后要有表的关联条件
字段如果同时出现在两个表中,字段前要加表前辍
新的语法:
select ...
from ... join .. on ()
where ...
外连接
左外连接
例:显示每个部门的员工情况,没有员工的部门也显示
SQL> select d.deptno,dname,loc,empno,ename
2 from emp e,dept d where d.deptno=e.deptno(+) order by deptno;
SQL> select d.deptno,dname,loc,empno,ename
2 from dept d left outer join emp e on (d.deptno=e.deptno)
3 order by deptno;
左边表的记录完全显示
右外连接
例:显示每个部门的员工情况,没有员工的部门也显示
SQL> select d.deptno,dname,loc,empno,ename
2 from emp e,dept d where d.deptnof=e.deptno(+) order by deptno;
SQL> select d.deptno,dname,loc,empno,ename
2 from emp e right outer join dept d on (d.deptno=e.deptno)
3 order by deptno;
右边表的记录完全显示
全(满)外连接
SQL> select d.deptno,dname,loc,empno,ename
2 from emp e full outer join dept d on (d.deptno=e.deptno)
3 order by deptno;
自然连接
如果两个表有相同的字段时,自然连接自动把两个相同的字段作等值的内连接
SQL> select deptno,dname,loc,empno,ename
2 from emp e natural join dept d;
隐含的等于 from emp e,dept d where e.deptno=d.deptno
自连接
自连接把自身表的一个镜象当另一个表
例:查询emp表工资高于其经理的记录
SQL> select * from scott.emp e where sal>(select sal from scott.emp where empno=e.mgr);
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21175589/viewspace-755564/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21175589/viewspace-755564/