-- 多表查询
-- 查询每个员工的姓名,部门编号,工作地点
SELECT e.ename,e.deptno,d.loc
FROM scott.emp e,scott.dept d
WHERE e.deptno=d.deptno;
-- 查询每个员工的姓名,领导姓名
SELECT 员工表.ename 员工姓名, 领导表.ename 领导姓名
FROM scott.emp 员工表,scott.emp 领导表
WHERE 员工表.mgr=领导表.empno;
-- 查询每个员工的姓名,领导姓名,部门名称,部门地址,员工工资/领导工资
SELECT a.ename,b.ename,d.dname,d.loc,a.sal/b.sal
FROM scott.emp a,scott.emp b,scott.dept d
WHERE a.deptno=d.deptno and a.mgr=b.empno;
-- 查询每个部门中,工资比部门平均工资高的员工,要求显示员工编号,员工姓名,工资,部门平均工资,部门编号
SELECT e.empno,e.ename,e.sal,t.asal,e.deptno
FROM scott.emp e,(SELECT QQ.deptno,avg(QQ.sal) asal FROM scott.emp QQ GROUP BY QQ.deptno) t
WHERE e.deptno=t.deptno
AND e.sal>t.asal;
-- 连接查询
-- 查询每个员工的姓名,部门编号,工作地点
-- 内连接,同多表查询一样,只会显示满足关联条件的数据
SELECT e.*,d.* FROM scott.emp e INNER JOIN scott.dept d ON e.deptno=d.deptno;
SELECT e.*,d.* FROM scott.emp e,scott.dept d WHERE e.deptno=d.deptno;
-- 左连接,显示左边表所有的数据,和右边表满足关联条件的数据
SELECT e.*,d.* FROM scott.emp e LEFT JOIN scott.dept d ON e.deptno=d.deptno;
-- 右连接,显示右边表所有的数据,左边表满足关联条件的数据
SELECT e.*,d.* FROM scott.emp e RIGHT JOIN scott.dept d ON e.deptno=d.deptno;
-- 查询员工编号,员工姓名,领导编号,领导姓名,部门名称。
SELECT a.empno,a.ename,b.empno,b.ename,d.dname
FROM scott.emp a
LEFT JOIN scott.emp b ON a.mgr=b.empno
LEFT JOIN scott.dept d ON a.deptno=d.deptno;