多表查询语法:
SELECT {DISTINCT} * |查询列1 别名1,查询列2 别名2,……
FROM 表名称1 别名1,表名称2 别名2,……
{WHERE 条件(s)}
{ORDER BY 排序字段 ASC|DESC,排序字段 ASC|DESC……}
eg:查询员工的编号,员工的姓名,部门的编号,部门名称及部门位置
SQL> select e.empno 工号,e.ename 姓名,d.deptno 部门号,d.dname 部门,
d.loc 地点 from emp e,dept d where e.deptno=d.deptno;
eg:查询每个员工的姓名,工作,所属部门名称,员工的直接上级领导的姓名
SQL>select e.ename 姓名,e.job 工作,ee.ename 经理,d.dname 部门
from emp e,emp ee,dept d where e.mgr=ee.empno and e.deptno=d.deptno;
eg:查询出每个雇员的姓名、工资、部门名称、工资等级及领导姓名和领导工资等级
方法一,(1)查询出领导的编号、姓名和工资做为一张表:
SQL>select e.ename 姓名,m.ename 经理,msal.grade 经理工资等级 from
emp e,emp m,salgrade msal where e.mgr=m.empno and m.sal between
msal.losal and msal.hisal ;
--(2)查出自己的姓名 部门 工资及工资等级
SQL>select e.ename 姓名,d.dname 部门,e.sal 工资, sal.grade 等级 from
emp e,dept d,salgrade sal where e.deptno=d.deptno and e.sal between
sal.losal and sal.hisal;
--(3)合并2长表
SQL>select e.ename 姓名,d.dname 部门,e.sal 工资, sal.grade 等级 ,
manager.经理,manager.经理工资等级 from (select m.empno 编号,
m.ename 经理,msal.grade 经理工资等级 from emp m,salgrade msal
where m.sal between msal.losal and msal.hisal) manager , emp e,
dept d,salgrade sal where e.deptno=d.deptno and e.mgr=manager.编号
and e.sal between sal.losal and sal.hisal;
方法二,一气呵成
SQL>select e.ename,m.ename,d.dname,e.sal,es.grade,ms.grade
from emp e,emp m,dept d,salgrade es,salgrade ms
where e.deptno=d.deptno and e.sal between es.losal and es.hisal
and e.mgr=m.empno and m.sal between ms.losal
and ms.hisal;
eg:使用decode()函数
select e.ename,m.ename,d.dname,e.sal,decode(e.sal,1,'五等',2,'四等',3,'三等',4,'二等',5,'一等'),
decode(ms.grade,1,'五等',2,'四等',3,'三等',4,'二等',5,'一等') from emp e,emp m,dept d,salgrade es,
salgrade ms where e.deptno=d.deptno and e.sal between es.losal and es.hisal and
e.mgr=m.empno and m.sal between ms.losal and ms.hisal;