`
wataxi
  • 浏览: 207989 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle部门员工表查询(转)

阅读更多

使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下

emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)

dept部门表(deptno部门编号/dname部门名称/loc地点)

工资 = 薪金 + 佣金


------1.列出至少有一个员工的所有部门


select * from dept
where deptno in
(select deptno from emp group by deptno having count(*)>1);


------2.列出薪金比“SMITH”多的所有员工。
select * from emp
where sal>(select sal from emp where ename='SMITH');

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

select ename,(select ename from emp where empno=a.mgr) from emp a;

 select ename, (select ename from emp where empno=a.mgr) as mgrname from emp a;


自连接
select a.ename,b.ename from emp a,emp b
where a.mgr=b.empno(+);外连接

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

select ename from emp a
where hiredate>(select hiredate from emp where empno=a.mgr);

列出受雇日期早于其直接上级的所有员工。
select ename from emp a where
hiredate<(select hiredate from emp where empno=a.mgr);


------5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

select dname,ename from dept left outer join emp
on dept.deptno=emp.deptno;

select dname,ename from dept a,emp b
where a.deptno = b.deptno(+);

------6.列出所有“CLERK”(办事员)的姓名及其部门名称。
select dname,ename from dept a,emp b
where a.deptno=b.deptno and job='CLERK';

select (select dname from dept where deptno=a.deptno) as dname ,ename
from emp a
where job='CLERK';


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

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

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

select ename from emp where deptno=(select deptno from dept where dname='SALES');

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

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

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

select * from emp where job=(select job from emp where ename='SCOTT');

------11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。
select * from emp where sal in
(select sal from emp where deptno=30);

select * from emp where sal = any
(select sal from emp where deptno=30);

 

------12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
--最大值>all
select * from emp where sal>all
(select sal from emp where deptno=30);

--最小值<all
select * from emp where sal < all
(select sal from emp where deptno=30);


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

select deptno,count(*),
trunc(avg(sal+nvl(comm,0))) avgsal,
to_char(to_date('0001-01-01','yyyy-mm-dd') + avg(sysdate-hiredate)
-366-31,'yy"年"mm"月"dd') avgday
from emp group by deptno;

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

select ename,dname,sal+nvl(comm,0) from emp,dept where emp.deptno=dept.deptno;


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

select emp.ename,emp.job,emp.deptno from emp ,
(select distinct a.job,a.deptno from emp a,emp b
where (a.job=b.job)and(a.deptno!=b.deptno) order by a.job) c
where empno = (select max(empno) from
emp where job = c.job and deptno = c.deptno)
and emp.job=c.job and emp.deptno= c.deptno

select emp.ename,emp.job,emp.deptno from emp ,
(select distinct a.job,a.deptno from emp a,emp b
where (a.job=b.job)and(a.deptno!=b.deptno) order by a.job) c
where empno = (select min(empno) from
emp where job = c.job and deptno = c.deptno)
and emp.job=c.job and emp.deptno= c.deptno

 

select * from (select distinct a.* from emp a,emp b
where a.deptno <> b.deptno and
a.job = b.job) c
where empno in (select min(empno)
from (select distinct a.* from emp a,emp b
where a.deptno <> b.deptno and
a.job = b.job) group by deptno,job );

------16.列出所有部门的详细信息和部门人数。
select a.*,(select count(*) from emp where deptno=a.deptno) tot
from dept a ;

------17.列出各种工作的最低工资。

select job,min(sal+nvl(comm,0)) from emp group by job;

这样写有问题
select job,min(nvl(sal+comm,0)) from emp group by job;


------18.列出MANAGER(经理)的最低薪金。

select min(sal) from emp where job='MANAGER' ;

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

select ename,(sal+nvl(comm,0))*12 tot from emp order by tot;

-----orcle的等连接
SELECT d.* FROM EMP E ,DEPT D WHERE E.DEPTNO=D.DEPTNO;
-----orcla的外连接
SELECT d.* FROM EMP E ,DEPT D WHERE E.DEPTNO(+)=D.DEPTNO;
+放在没有匹配行的表一侧,所以dept表的记录完全显示

--标准等联结
select dept.* from emp join dept
on emp.deptno = dept.deptno;

--标准的右外联结
select dept.* from emp right outer join dept
on emp.deptno = dept.deptno;

select dept.* from dept left outer join emp
on emp.deptno = dept.deptno;

分享到:
评论

相关推荐

    oracle中emp员工表与dept部门的查询

    数据库 oracle查询 摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节...

    oracle4的表查询和基本函数.docx

    本文将深入探讨Oracle4中的表查询和基本函数。 首先,我们关注的是基本查询。在Oracle中,查询多表通常涉及到联接操作。以示例中的雇员表(EMP)和部门表(DEPT)为例,我们可以使用JOIN语句来获取雇员及其所在部门...

    oracle 多表联接查询

    ### Oracle多表联接查询详解 #### 一、概述 在数据库操作中,经常会遇到需要从多个表中获取数据的情况,这时就需要用到联接查询(Join Query)。Oracle数据库提供了丰富的联接查询功能,能够有效地从不同的表中...

    Oracle基础查询关联查询练习题.docx

    Oracle 基础查询关联查询练习题中第一个练习题是查询职员表中,在 20 和 30 号部门工作的员工姓名和部门号。该查询使用了 IN 运算符来检索部门号在 20 和 30 之间的员工信息。 知识点:IN 运算符的使用、基础查询...

    Oracle基础练习题及答案(多表查询1)

    1. 该查询通过JOIN连接`emp`和`dept`表,找出至少有一个员工的部门。`GROUP BY`和`HAVING COUNT(*)&gt;=1`确保只列出有员工的部门。 2. 此查询找出薪金高于员工'SMITH'的所有员工。使用子查询`(select sal from emp ...

    oracle多表查询PPT课件.pptx

    Oracle数据库的多表查询是数据库操作中的核心技能之一,它涉及到如何从两个或更多个相关表中检索数据。本章的PPT课件主要讲解了如何进行多表查询,包括等值连接、非等值连接、外连接以及自连接等多种连接类型。 1. ...

    Oracle 经典查询练手

    为了找出至少有一个员工的所有部门,我们需要连接`emp`表和`dept`表,并且确保只选择那些在`emp`表中有记录的部门。可以使用内连接(INNER JOIN)来实现这一目标。 **SQL语句:** ```sql SELECT d.DEPTNO, d.DNAME ...

    Oracle多表连接练习

    Oracle数据库中的多表连接是数据库查询中的核心技巧,它允许我们从多个相关的表中获取信息。在本实验中,我们将通过一系列练习题来深入理解Oracle的多表连接操作。 1. 第一个练习展示了如何通过内连接(INNER JOIN...

    ORACLE-select-query.rar_oracle_多表查询

    集合比较子查询允许我们基于一组值进行比较,而关联子查询则涉及主查询和子查询之间的关系,比如查找某个部门所有薪水高于平均薪水的员工。 此外,可能还会涉及到分组(GROUP BY)、聚合函数(如COUNT, SUM, AVG, ...

    Oracle行转列之pivot

    例如,如果有一个员工表(emp),其中包含部门号(deptno)、职位(job)和薪水(sal),行转列操作可以通过聚合函数(如SUM)对每个部门和职位的薪水进行求和,并将每个部门的求和结果转换为独立的列。 PIVOT操作...

    oracleErp薪酬主要表关系(图)

    oracleErp薪酬主要表关系(图) 可以做个查询的参考

    oracle表连接和子查询实例

    以上实例展示了Oracle中表连接和子查询的各种应用方法,包括但不限于最大薪资部门员工信息、部门平均薪资等级、非经理员工姓名等。这些知识点对于理解和掌握Oracle数据库中的高级查询技术非常重要,对于数据库开发者...

    Oracle作业查询报告

    2. 查询特定部门员工信息:使用WHERE子句查询与自己同部门的所有员工,如:`SELECT * FROM emp WHERE deptno = 10;` 3. 查找最低工资员工:使用子查询找到每个部门的最低工资员工,例如:`SELECT * FROM emp WHERE ...

    员工管理系统(Oracle员工管理系统,附脚本)

    例如,可以按部门、职位、入职时间等条件筛选员工,或进行多条件组合查询,满足不同场景下的信息需求。此外,系统还支持自定义查询模板,以适应企业的个性化需求。 四、统计分析 统计分析模块通过对员工数据进行多...

    Oracle中多表关联批量插入批量更新与批量删除操作

    此操作会删除`dept`表中名为'ACCOUNTING'的部门及其在`emp`表中的所有关联员工。 批量操作的优势在于减少网络传输和数据库操作次数,从而提高性能。同时,多表关联可以在单个SQL语句中完成数据过滤和更新,减少了多...

    oracle经典sql多表查询,sql统计

    例如,如果你有两个表,一个是员工表(Employees),一个是部门表(Departments),你可以通过内连接查询出每个员工所在的部门信息。 ```sql SELECT e.EmployeeName, d.DepartmentName FROM Employees e INNER JOIN...

    Oracle SQL经典查询练手

    根据提供的文档信息,我们可以归纳总结出一系列关于Oracle SQL的经典查询案例及解析,这些案例主要围绕着`scott.emp`(员工表)与`scott.dept`(部门表)两个表进行。以下将详细介绍文档中提到的部分经典查询知识点...

    Oracle SQL:经典查询.doc

    `scott.emp` 表记录了员工的基本信息,包括员工号(EMPNO)、员工姓名(ENAME)、工作(JOB)、上级编号(MGR)、雇佣日期(HIREDATE)、薪金(SAL)、佣金(COMM)以及部门编号(DEPTNO)。`scott.dept` 表则包含了...

    关于oracle自带的表

    通过以上介绍,我们可以看到 Oracle 数据库中的这些内置表和函数非常实用,能够帮助用户更好地理解和掌握 SQL 查询的基础知识和技巧。在实际开发和管理过程中,熟练运用这些功能可以极大地提高工作效率和准确性。

    oracle中emp表习题

    **解析**: 该查询使用JOIN连接员工表和部门表,并通过WHERE子句筛选出职位为“CLERK”的员工。 #### 6. 列出最低薪金大于1500的各种工作 - **知识点**: 使用DISTINCT去除重复记录。 ```sql SELECT DISTINCT job ...

Global site tag (gtag.js) - Google Analytics