使用scott/tiger用户下的emp表和dept表完成下列练习表的结构说明如下
emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)
dept部门表(deptno部门编号/dname部门名称/loc地点)
工资 = 薪金 + 佣金
.列出至少有一个员工的所有部门
.列出薪金比SMITH多的所有员工
.列出所有员工的姓名及其直接上级的姓名
.列出受雇日期晚于其直接上级的所有员工
.列出部门名称和这些部门的员工信息同时列出那些没有员工的部门
.列出所有CLERK(办事员)的姓名及其部门名称
.列出最低薪金大于的各种工作
.列出在部门SALES(销售部)工作的员工的姓名假定不知道销售部的部门编号
.列出薪金高于公司平均薪金的所有员工
.列出与SCOTT从事相同工作的所有员工
.列出薪金等于部门中员工的薪金的所有员工的姓名和薪金
.列出薪金高于在部门工作的所有员工的薪金的员工姓名和薪金
.列出在每个部门工作的员工数量平均工资和平均服务期限
.列出所有员工的姓名部门名称和工资
.列出所有部门的详细信息和部门人数
.列出各种工作的最低工资
.列出MANAGER(经理)的最低薪金
.列出所有员工的年工资按年薪从低到高排序
===============================================
使用scott/tiger用户下的emp表和dept表完成下列练习表的结构说明如下
emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)
dept部门表(deptno部门编号/dname部门名称/loc地点)
工资 = 薪金 + 佣金
.列出至少有一个员工的所有部门
select * from dept
where deptno in
(select deptno from emp group by deptno having count(*)>);
.列出薪金比SMITH多的所有员工
select * from emp
where sal>(select sal from emp where ename=SMITH);
.列出所有员工的姓名及其直接上级的姓名
select ename(select ename from emp where empno=amgr) from emp a;
或
select ename (select ename from emp where empno=amgr) as mgrname from emp a;
自连接
select aenamebename from emp aemp b
where amgr=bempno(+);外连接
.列出受雇日期晚于其直接上级的所有员工
select ename from emp a
where hiredate>(select hiredate from emp where empno=amgr);
列出受雇日期早于其直接上级的所有员工
select ename from emp a where
hiredate<(select hiredate from emp where empno=amgr);
.列出部门名称和这些部门的员工信息同时列出那些没有员工的部门
select dnameename from dept left outer join emp
on deptdeptno=empdeptno;
select dnameename from dept aemp b
where adeptno = bdeptno(+);
.列出所有CLERK(办事员)的姓名及其部门名称
select dnameename from dept aemp b
where adeptno=bdeptno and job=CLERK;
select (select dname from dept where deptno=adeptno) as dname ename
from emp a
where job=CLERK;
.列出最低薪金大于的各种工作
select jobmin(sal) msal from emp
group by job having min(sal)>;
.列出在部门SALES(销售部)工作的员工的姓名假定不知道销售部的部门编号
select ename from emp where deptno=(select deptno from dept where dname=SALES);
.列出薪金高于公司平均薪金的所有员工
select ename from emp where sal>(select avg(sal) from emp);
.列出与SCOTT从事相同工作的所有员工
select * from emp where job=(select job from emp where ename=SCOTT);
.列出薪金等于部门中员工的薪金的所有员工的姓名和薪金
select * from emp where sal in
(select sal from emp where deptno=);
或
select * from emp where sal = any
(select sal from emp where deptno=);
.列出薪金高于在部门工作的所有员工的薪金的员工姓名和薪金
最大值>all
select * from emp where sal>all
(select sal from emp where deptno=);
最小值<all
select * from emp where sal < all
(select sal from emp where deptno=);
.列出在每个部门工作的员工数量平均工资和平均服务期限
select deptnocount(*)
trunc(avg(sal+nvl(comm))) avgsal
to_char(to_date(yyyymmdd) + avg(sysdatehiredate)
yy年mm月dd) avgday
from emp group by deptno;
.列出所有员工的姓名部门名称和工资
select enamednamesal+nvl(comm) from empdept where empdeptno=deptdeptno;
.列出所有部门的详细信息和部门人数
select a*(select count(*) from emp where deptno=adeptno) tot
from dept a ;
.列出各种工作的最低工资
select jobmin(sal+nvl(comm)) from emp group by job;
这样写有问题
select jobmin(nvl(sal+comm)) from emp group by job;
.列出MANAGER(经理)的最低薪金
select min(sal) from emp where job=MANAGER ;
.列出所有员工的年工资按年薪从低到高排序
select ename(sal+nvl(comm))* tot from emp order by tot;
orcle的等连接
SELECT d* FROM EMP E DEPT D WHERE EDEPTNO=DDEPTNO;
orcla的外连接
SELECT d* FROM EMP E DEPT D WHERE EDEPTNO(+)=DDEPTNO;
+放在没有匹配行的表一侧所以dept表的记录完全显示
标准等联结
select dept* from emp inner join dept
on empdeptno = deptdeptno;
标准的右外联结
select dept* from emp right outer join dept
on empdeptno = deptdeptno;
select dept* from dept left outer join emp
on empdeptno = deptdeptno;