数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

熟练Oracle的Sql语句必做18道


发布日期:2023年01月11日
 
熟练Oracle的Sql语句必做18道

使用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)

yymmdd) 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;

上一篇:Oracle的操作系统身份认证

下一篇:.NET框架下从Oracle到SQL Server的迁移