1.找出每个员工的薪资等级,要求显示员工名,薪资,薪资等级
这道题是内连接中的非等值连接(join前的inner是可以省略的)
将emp表记作e,salgrade表记作s;
连接条件:e表的薪资(sal)在 s表的薪资等级对应的范围内
e.sal between s.losal and hisal
select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
2.查询员工的上级领导,要求显示员工名和对应的领导名
empno是对应人的编号,ename是每个人的名字,mgr表示该员工对应的领导的编号。
内连接一张表看作两张表。
emp a表看作员工表,emp b 表看作领导表 ,
用员工表(a)的 对应领导编号(mgr) 找领导表(b)中找对应的编号(empno) 所对应的人名(ename)
连接条件:a.mgr=b.empno
select a.ename as '员工名' ,b.empno as '领导名' from emp a join emp b on a.mgr=b.empno ;
打印结果:
外连接的引入
在这里我们发现少了一个员工KING(KING所对应的领导是NULL),也就是说内连接只能找出匹配条件的信息(没有主次关系),但是我们有时候是需要全部信息。
所以我们就可以引入外连接【left (outer) join / right (outer) join ,outer一般就省略了 】,left join 就表示左边是主表(左连接和右连接是可以相互转换的),无论是否与辅表内容匹配都得打印。
eg:现在主查a表中的员工名,捎带b表中的领导名,就 a left join b,
查询员工的上级领导,要求显示所有员工名和对应的领导名
子查询可参考http://t.csdn.cn/3yCnd
五月
这个月51假玩了五天,这周期中考试,还没考完(😭),打算这周内复习完数据库基础并且完成操作系统中进程,线程等知识的总结,复习一下常见的排序方法,强化写代码的能力(再练几个题)。时间太快了,俩月都过去了,不能再分心了......
版权归原作者 sqyaa. 所有, 如有侵权,请联系我们删除。