多表查询

说明:多表查询时基于两个和两个以上的表或是视图的查询。在实际应用中,查询单个表可能不能满足实际需求,(如显示sales部门位置和其员工的姓名),这种情况下需要使用到dept表和emp表

?显示雇员名,雇员工资及所在部门的名字(笛卡尔集)
SQL> select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno;(其中a1和a2分别是emp,dept的别名)

为什么要where a1.deptno=a2.deptno?
因为:系统是将表一和表二进行匹配,如果不加判断条件,系统就会将所有的匹配情况都打印出来,这种情况叫做笛卡尔集

两张表就需要一个条件来使笛卡尔集消失
n张表就需要n-1个条件来使笛卡尔集消失

定:多表查询的条件是 至少不能少于 表的个数-1


?如何显示部门号为10的部门名、员工名和工资
SQL> select a2.dname,a1.ename,a1.sal from emp a1,dept a2 where a1.deptno=a2.deptno and a1.deptno = 10;


?显示各个员工的姓名、工资及其工资的级别
SQL> select a1.ename,a1.sal,a2.grade from emp a1,salgrade a2 where a1.sal between a2.losal and a2.hisal;

其意思就是排的时候也是笛卡尔集,但是后面的between就限制了只有在符合等级范围(即在最低工资和最高工资)的才输出



拓展要求:
?显示雇员名、雇员工资及所在部门的名字,并按部门排序
SQL> select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno order by a2.deptno;

 

自连接
自连接是指在同一张表的连接查询

?显示某个员工的上级领导的姓名

比如显示'FORD'的上级
SQL> select worker.ename,boss.ename 上级 from emp worker,emp boss where worker.mgr=boss.empno and worker.ename='FORD';

你可能感兴趣的:(oracle)