Oracle_复杂查询综合

Oracle_复杂查询综合


-- 1、列出所有员工的年工资,按年薪从低到高排序。

select empno, ename, sal, nvl2(comm, (sal+comm)*12, sal*12) income from emp order by income;

-- 2、列出薪金比“SMITH”多的所有员工。

select *

from emp

where sal>(

select sal

from emp

where ename=‘SMITH‘

);

-- 3、列出所有员工的姓名及其直接上级的姓名。

select e1.ename, e2.ename

from emp e1

join emp e2

on e1.mgr=e2.empno(+);

-- 4、列出受雇日期早于其直接上级的所有员工。

select e1.ename, e1.hiredate, e2.ename, e2.hiredate

from emp e1, emp e2

where e1.mgr=e2.empno

and e1.hiredate<e2.hiredate;

-- 5、列出部门名称和这些部门的员工信息,包括那些没有员工的部门。

select d.deptno, d.dname, e.*

from emp e

right join dept d

on e.deptno=d.deptno;

-- 6、列出所有job为“CLERK”(办事员)的姓名及其部门名称。

select e.ename, e.job, d.dname

from emp e, dept d

where e.deptno=d.deptno

and e.job=‘CLERK‘;

-- 7、列出最低薪金大于1500的各种工作。

select job, min(sal) from emp group by job having min(sal)>1500;

-- 8、列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

select deptno, ename

from emp

where deptno=(

select deptno

from dept

where dname=‘SALES‘

);

-- 9、列出薪金高于公司平均薪金的所有员工。

select * from emp where sal>(select avg(sal) from emp);

-- 10、列出与“SCOTT”从事相同工作的所有员工。

select *

from emp

where job=(

select job

from emp

where ename=‘SCOTT‘

)

and ename<>‘SCOTT‘;

-- 11、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

select ename, sal

from emp

where sal>all(

select sal

from emp

where deptno=30

);

-- 12、列出在每个部门工作的员工数量、平均工资和平均服务期限。

select deptno, count(*), round(avg(sal)), round(avg(months_between(sysdate, hiredate)/12)) from emp group by deptno;

-- 13、列出所有员工的姓名、部门名称和工资。

select ename, dname, sal from emp natural join dept;

-- 14、列出从事同一种工作但属于不同部门的员工的一种组合。

select e1.ename, e1.job, e1.deptno, e2.ename, e2.job, e2.deptno

from emp e1, emp e2

where e1.job=e2.job

and e1.deptno<>e2.deptno

and e1.ename<e2.ename;

-- 15、列出所有部门的详细信息和部门人数。

select d.deptno, d.dname, d.loc, count(e.empno)

from emp e

right join dept d

on e.deptno=d.deptno

group by d.deptno, d.dname, d.loc

order by deptno;

-- 16、列出各种工作的最低工资。

select job, min(sal) from emp group by job;

-- 17、列出各个部门的MANAGER(经理)的最低薪金。

select deptno, min(sal)

from emp

where job=‘MANAGER‘

group by deptno;

-- 18、列出至少有一个员工的所有部门。

select d.*, count(e.empno)

from emp e, dept d

where e.deptno=d.deptno

group by d.deptno, d.dname, d.loc

having count(e.empno)>0;

时间: 2024-10-07 18:13:59

Oracle_复杂查询综合的相关文章

Oracle_基本函数查询综合

Oracle_基本函数查询综合 --[1]查询出每各月倒数第三天受雇的所有员工 select * from emp where hiredate = last_day(hiredate)-2; --[2]找出早于30年前受雇的员工 select * from emp where (sysdate - hiredate)/365>30; select * from emp where months_between(sysdate,hiredate)/12 > 30; select * from 

聚合函数,分组查询,连接查询综合例子

实例如下: update users set classes='1' where id in('u001','u002','u003','u004'); update users set classes='2' where id in('u005','u006','u007'); users表的内容如下: +------+-----------+------------+------+-------+---------+ | id | firstname | secondname | age |

Oracle基础知识笔记(11) 建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓名和所属系别不能为空: 积分要第为空值,要么为6,4

MSSQL 4表联查,子查询,函数统计,分组条件查询综合应用实例

1 SELECT 2 [UserName] 3 ,[Yhxm] 4 ,[Qx] 5 ,[Phone] 6 ,[Number] = COUNT([UserName]) 7 FROM 8 (SELECT 9 [UserName] = A.[username] 10 ,[Yhxm] = B.[xm] 11 ,[Qx] = D.[P_Power] 12 ,[Phone] = B.[dh] 13 ,[DayCount] = (SELECT COUNT(*) FROM [Caihuashun_FuJian_

Oracle笔记(十一) 建表、更新、查询综合练习

Oracle笔记(十一) 建表.更新.查询综合练习 有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓

建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名sportername,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.建表,并在相应字段上增加约束 2.向表中输入指定的数据 运动员( 1001,李明,男,计算机系 1002,张三,男

一个经典的数据库分段查询和分组查询综合运用的例子

记得以前面试时遇到的,感觉这个问题比较经典,所以后来整理了下. 题目描述是这样的(凭印象): 请用一条sql统计出每个班级中,20-50分.50-70分.70-100分的人数, 已知:表(exam),有如下字段:class(班级).name(姓名).score(分数): 查询显示格式: 这是个典型的分段又分组的查询案例,难点就是考虑到按班级分组的同时按成绩分段查询. 表数据如下: select count_abc.class 班级, sum(case when count_abc.a is nu

Oracle_关联查询

1. 等值连接(Equijoin).非等值连接(Non-Equijoin).外连接(Outer join):-->左外连接-->右外连接.自连接(Self join) 交叉连接(Cross join).自然连接(Natural join).使用Using子句建立连接.使用on子句建立连接.外连接(Outer join):-->左外连接-->右外连接-->全外连接 2. 等值连接(Equijoin) select empno,ename,sal,emp.deptno,dname

聚合函数,分组查询,连接查询综合样例

实比例如以下: update users set classes='1' where id in('u001','u002','u003','u004'); update users set classes='2' where id in('u005','u006','u007'); users表的内容例如以下: +------+-----------+------------+------+-------+---------+ | id | firstname | secondname | a