17/12/5多表连接

2017-12-13  本文已影响0人  金春国_Roy

17/12/5多表连接

join on 语句
select * from emp
join dept on emp.deptno = dept.deptno

1.on将连接条件和其他检索条件分割开,其它检索条件写在WHERE字句。
2.提高代码的可读性。

外连接

-右外连接:以右边的表为主,右表内容全部保留。

select emp.ename, dept.deptno
from emp right join dept on emp.deptno = dept.deptno

-左外连接同理。

-全外连接(full join): 左右两个表都为主,两表内容全部显示出来。

自身连接

列:查询所有员工的上级。

select worker.ename|'的上级是'| manager.ename
from emp worker
join emp manager on woker.mgr = manager.empno

扩展:多表连接可以在2个表或者多个表之间进行。

练习:
1.使用ON子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点。

SELECT EMP.ENAME, DEPT.DNAME, DEPT.LOC, SALGRADE.GRADE
FROM EMP
join DEPT on EMP.DEPTNO = DEPT.DEPTNO
join SALGRADE on EMP.sal BETWEEN losal AND hisal
WHERE DEPT.LOC in ('CHICAGO')

2.使用左连接,查询每个员工的姓名,经理姓名,没有经理的KING也要显示出来。

select woker.ename, manager.ename  
from emp woker
left join emp manager on woker.mgr = manager.empno

3.使用右连接,查询每个员工的姓名,经理姓名,没有经理的KING也要显示出来。
     同理(略)
4.显示员工SMITH的姓名,部门名称,直接上级名称。

SELECT WOKER.ename, DEPT.DNAME, manager.ename
FROM emp woker
join dept ON woker.deptno = dept.deptno 
join emp manager ON woker.mgr = manager.empno
WHERE woker.ename in ('SMITH')

5.显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4.

SELECT EMP.ENAME, DEPT.DNAME, EMP.SAL, SALGRADE.GRADE
FROM EMP 
join SALGRADE ON EMP.SAL BETWEEN LOSAL and HISAL
join DEPT ON DEPT.deptno = EMP.deptno
WHERE SALGRADE.GRADE > 4

6.显示员工KING和FORD管理的员工姓名及其经理姓名。

SELECT emp.ENAME, MANAGER.ENAME, woker.ename
FROM EMP
LEFT JOIN EMP manager ON MANAGER.empno = EMP.mgr
LEFT JOIN EMP woker ON woker.mgr = EMP.empno 
WHERE EMP.ENAME in ('KING', 'FORD')

7.显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加工作时间比经理早。

select woker.ename, woker.hiredate, manager.ename, manager.hiredate
from emp woker 
join emp manager on woker.mgr = manager.empno
where woker.hiredate < manager.hiredate

上一篇下一篇

猜你喜欢

热点阅读