`

练习——部门员工表

 
阅读更多


create table DEPT
(
  DEPTNO decimal(2) primary key,
  DNAME  VARCHAR(14),
  LOC    VARCHAR(13)
);
create table EMP
(
  EMPNO    decimal(4) primary key,
  ENAME    VARCHAR(10),
  JOB      VARCHAR(9),
  MGR      decimal(4),
  HIREDATE DATETIME,
  SAL      decimal(7,2),
  COMM     decimal(7,2),
  DEPTNO   decimal(2)
);
insert into DEPT (DEPTNO, DNAME, LOC) values (10, 'ACCOUNTING', 'NEW YORK');
insert into DEPT (DEPTNO, DNAME, LOC) values (20, 'RESEARCH', 'DALLAS');
insert into DEPT (DEPTNO, DNAME, LOC) values (30, 'SALES', 'CHICAGO');
insert into DEPT (DEPTNO, DNAME, LOC) values (40, 'OPERATIONS', 'BOSTON');
commit;

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-06-01', 2850, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 3260.95, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 6655, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1730.3, null, 10);
commit;

SELECT * FROM  dept;
select * from emp;


字段说明:
dept(部门表):depno,部门编号;dname,部门名称,loc,办公地点
emp(员工表):EMPNO,工号;ENAME,姓名;JOB,工种;
   MGR,上级编号; HIREDATE,雇佣日期;SAL,工资,COMM,奖金,
 DEPTNO,部门编号

简单查询(单表查询)
1、查询所有没有job的人员 (job为空)
select * from emp where job is null
2、查询姓名以“C”开头的人员,注意,不区别大小写
select * from emp
where ename like'c%' or ename like'C%'
3、查询所有工资在2000到3000到人员,两种写法
select * from emp
where sal between 2000 and 3000;
select * from emp
where sal in(2000,3000);
4、查询所有工资不在2000到3000到人员
select * from emp
where sal not between 2000 and 3000;
5、查询所有10,20,40部门的人员,两种写法
select * from emp
where deptno in(10,20,40);
SELECT 'The current time is: '+ CONVERT(char(30), CURRENT_TIMESTAMP)
select datetime
6、查询工资不为3000的,且在1980年雇佣的人员
select * from emp
where sal !=3000 and hiredate between '1980-1-1'and '1980-12-31';
7、插入2条在今年2.1号就业的人员记录,然后查询本年雇佣的所有人员
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7686, 'XIAOYONG', 'CLERK', 7782, '2010-2-1', 1730.3, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7709, 'SHANZHAN', 'CLERK', 7782, '2010-2-1', 1754.8, 300, 20);
SELECT * from emp
where HIREDATE between '2010-1-1'and '2010-12-31'
8、对比所有人的工资和上涨20%以后的工资
select SAL*1.2 as '涨价20%后'  from emp
union all
select SAL as '涨价前' from emp

select SAL*1.2 as '涨价20%后',SAL as '涨价前'  from emp
9、查询时用户需要看到一个固定的列:school,内容为“lovo”。
select deptno,ename,sal,HIREDATE ,max('lovo') 'school' from emp
group by deptno,ename,sal,HIREDATE;

select empno,ename,'lovo' school from emp;

 
10、查询:部门编号,员工名称,工资。人员按各部门分开,同一部分老员工排在前面。
select deptno,ename,sal,HIREDATE from emp

order by deptno,HIREDATE ;

 

------------------------------------------------------------------

1、查询各部门人数,字段:部门名称,人数。要求一是不显示没有人员的空部门,二是要显示这些空部门。

select d.deptno,d.dname,empno
from dept d,emp e where  d.deptno=e.deptno
order by d.deptno


select d.dname,count(*) as 人数
from dept d,emp e where  d.deptno=e.deptno
group by d.deptno,d.dname


select d.dname,count(*) as 人数
from dept d join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname

要求二
select d.dname,count(e.empno) as 人数
from dept d  left join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname


2、查询人数最多的部门名称,字段:同上
select d.dname,count(e.empno) as 人数
from dept d  left join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname
having count(e.empno)= (
 select max(x) from (
  select count(e.empno) as x
  from dept d  left join emp e on  d.deptno=e.deptno
  group by d.deptno,d.dname
 ) t
)
--方法2:使用视图(类似于内存中的一个表)
create view  v1
as
 select d.deptno,d.dname,count(e.empno) as x
 from dept d  left join emp e on  d.deptno=e.deptno
 group by d.deptno,d.dname

select * from v1
where x = (select max(x) from v1)
3、查询至少有3个人部门,字段:同上
SELECT * FROM  dept;
select * from emp;


4、查询各员工及其直接上级信息,字段:员工姓名,上级姓名
(提示:上级编号在mgr字段)

select e1.ename 员工姓名,e2.ename 上级姓名 from emp e1 join emp e2
on e1.mgr=e2.empno

5、查询比上级来得早的员工及上级信息,字段:员工姓名,上级姓名,雇佣日期
SELECT * FROM  dept;
select * from emp;

select e1.ename 员工姓名,e2.ename 上级姓名,e1.hiredate 雇佣日期  from emp e1 join emp e2
on e1.mgr=e2.empno
where e1.hiredate<e2.hiredate
6、需求同上,只是字段不同:员工姓名,上级姓名,员工雇佣日期,上级雇佣日期
select e1.ename 员工姓名,e2.ename 上级姓名,e1.hiredate 员工雇佣日期,e2.hiredate 上级雇佣日期 from emp e1 join emp e2
on e1.mgr=e2.empno
where e1.hiredate<e2.hiredate

7、查询没有员工的部门,分别使用not in和not exists方法
SELECT * FROM dept;
select * from emp;

select d.dname from dept d
where d.deptno not in (select e.deptno from emp e);

8、查询各部门工资最高的员工,要求使用2种方法
select
9、查询:部门名称,员工名称,工资。人员按各部门分开,同一部分老员工排在前面。
    要求2种方法,一种是使用多表连接,一种不能使用多表连接。
创建工资表t_sal(autoid,empno,salary,date_sal),autoid代表流水号,date_sal代表禽工资日期。并添加一些记录。如果员工没有领取过工资,则不会在表中记录。
10、查询所有人员领取工资的详细记录:部门名称,人员姓名,工资,领取日期。要求,有些员工没有领取工资,则该月领取的工资记为0(注意:这些人的工资记录在表中并不存在。
11、查询某个月领取过二次工资的人员名单:人员姓名,领取次数,月份

 

1、查询各部门人数,字段:部门名称,人数。
要求一是不显示没有人员的空部门,二是要显示这些空部门。
要求一:使用传统写法和join写法
select d.deptno,d.dname,empno
from dept d,emp e where  d.deptno=e.deptno
order by d.deptno


select d.dname,count(*) as 人数
from dept d,emp e where  d.deptno=e.deptno
group by d.deptno,d.dname


select d.dname,count(*) as 人数
from dept d join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname

要求二
select d.dname,count(e.empno) as 人数
from dept d  left join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname

 

2、查询人数最多的部门名称,字段:同上

 

select d.dname,count(e.empno) as 人数
from dept d  left join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname
having count(e.empno)= (
 select max(x) from (
  select count(e.empno) as x
  from dept d  left join emp e on  d.deptno=e.deptno
  group by d.deptno,d.dname
 ) t
)

--效率较低,但简单的方法:相关子查询

--方法2:使用视图(类似于内存中的一个表)
create view  v1
as
 select d.deptno,d.dname,count(e.empno) as x
 from dept d  left join emp e on  d.deptno=e.deptno
 group by d.deptno,d.dname

select * from v1
where x = (select max(x) from v1)

 


3、查询至少有3个人部门,字段:同上
select d.deptno,d.dname,count(e.empno) as x
from dept d  left join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname
having count(e.empno)>=3

 

4、查询各员工及其直接上级信息,字段:员工姓名,上级姓名
(提示:上级编号在mgr字段)

select yg.ename as 员工姓名,sj.ename as 上级姓名
from emp yg,emp sj
where yg.mgr=sj.empno

一个自己连接自己,叫“自连接”!

5、查询比上级来得到的员工及上级信息,字段:员工姓名,上级姓名,雇佣日期


6、需求同上,只是字段不同:员工姓名,上级姓名,员工雇佣日期,上级雇佣日期
7、查询没有员工的部门,分别使用not in和not exists方法
8、查询各部门工资最高的员工,要求使用2种方法
9、查询:部门名称,员工名称,工资。人员按各部门分开,同一部分老员工排在前面。
    要求2种方法,一种是使用多表连接,一种不能使用多表连接。
创建工资表t_sal(autoid,empno,salary,date_sal),autoid代表流水号,date_sal代表禽工资日期。并添加一些记录。
如果员工没有领取过工资,则不会在表中记录。
10、查询所有人员领取工资的详细记录:部门名称,人员姓名,工资,领取日期。
要求,有些员工没有领取工资,则该月领取的工资记为0(注意:这些人的工资记录在表中并不存在。
11、查询某个月领取过二次工资的人员名单:人员姓名,领取次数,月份
1、查询各部门人数,字段:部门名称,人数。
要求一是不显示没有人员的空部门,二是要显示这些空部门。
要求一:使用传统写法和join写法
select d.deptno,d.dname,empno
from dept d,emp e where  d.deptno=e.deptno
order by d.deptno


select d.dname,count(*) as 人数
from dept d,emp e where  d.deptno=e.deptno
group by d.deptno,d.dname


select d.dname,count(*) as 人数
from dept d join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname

要求二
select d.dname,count(e.empno) as 人数
from dept d  left join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname

 

2、查询人数最多的部门名称,字段:同上

select *
from deptno;
group by depno

select d.dname,count(e.empno) as 人数
from dept d  left join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname
having count(e.empno)= (
 select max(x) from (
  select count(e.empno) as x
  from dept d  left join emp e on  d.deptno=e.deptno
  group by d.deptno,d.dname
 ) t
)

--效率较低,但简单的方法:相关子查询

--方法2:使用视图(类似于内存中的一个表)
create view  v1
as
 select d.deptno,d.dname,count(e.empno) as x
 from dept d  left join emp e on  d.deptno=e.deptno
 group by d.deptno,d.dname

select * from v1
where x = (select max(x) from v1)

 


3、查询至少有3个人部门,字段:同上
select d.deptno,d.dname,count(e.empno) as x
from dept d  left join emp e on  d.deptno=e.deptno
group by d.deptno,d.dname
having count(e.empno)>=3

 

4、查询各员工及其直接上级信息,字段:员工姓名,上级姓名
(提示:上级编号在mgr字段)

select yg.ename as 员工姓名,sj.ename as 上级姓名
from emp yg,emp sj
where yg.mgr=sj.empno

一个自己连接自己,叫“自连接”!但是两次的身份是不一样的:员工和上级!


5、查询比上级来得早的员工及上级信息,字段:员工姓名,上级姓名,雇佣日期
select yg.ename as 员工姓名,sj.ename as 上级姓名,yg.hiredate 员工日期,sj.hiredate 上级日期
from emp yg,emp sj
where yg.mgr=sj.empno
and yg.hiredate<sj.hiredate


6、需求同上,只是字段不同:员工姓名,上级姓名,员工雇佣日期,上级雇佣日期


7、查询没有员工的部门,分别使用not in和not exists方法

select * from dept where deptno not in (select distinct deptno from emp)

select * from dept where not exists (select * from emp where dept.deptno=emp.deptno)


8、查询各部门工资最高的员工,要求使用2种方法
select * from dept;
select * from emp order by deptno,sal desc

select ename,sal
from emp a
where sal = (select max(sal) from emp b where  b.deptno=a.deptno)

select ename,sal
from emp e, (select deptno,max(sal) x from emp group by deptno) a
where e.deptno=a.deptno
and e.sal=a.x


9、查询:部门名称,员工名称,工资。人员按各部门分开,同一部门老员工排在前面。
    要求2种方法,一种是使用多表连接,一种不能使用多表连接。
select dept.dname,emp.ename,emp.sal,emp.hiredate
from emp,dept where emp.deptno=dept.deptno
order by dept.dname,hiredate


创建工发放表t_sal(autoid,empno,salary,date_sal),
autoid代表流水号,date_sal代表工资日期。并添加一些记录。

如果员工没有领取过工资,则不会在表中记录。

10、查询所有人员领取工资的详细记录:部门名称,人员姓名,工资,领取日期。
要求,有些员工没有领取工资,则该月领取的工资记为0(注意:这些人的工资记录在表中并不存在。
11、查询某个月领取过二次工资的人员名单:人员姓名,领取次数,月份

分享到:
评论

相关推荐

    Mysql练习1:识别员工晋级业务实体.zip

    在本Mysql练习中,我们将聚焦于识别员工的晋级业务实体。这涉及到数据库设计、SQL查询和数据分析等关键技能。数据库是任何企业信息化系统的核心,MySQL作为一款流行的开源关系型数据库管理系统,对于处理员工信息、...

    oracle经典sql语句练习题和答案

    本资源“oracle经典sql语句练习题和答案”提供了在scott用户下的两个典型表格——emp(员工表)和dept(部门表)的实践操作题目,旨在帮助用户提升SQL技能。 首先,让我们来了解这两个核心表格。`emp`表通常包含...

    信息系统开发与管理——数据库练习题.doc

    在这个案例中,部门与员工之间是一对多关系,一个部门包含多个员工,而一个员工只能属于一个部门。部门与项目之间也是多对多关系,一个部门可以参与多个项目,一个项目也可以被多个部门接手。员工与项目之间同样为多...

    Oracle练习的三个表emp,dept,salgrade

    总的来说,`emp`,`dept`,和`salgrade`这三个表构成了一个简单的Oracle数据库实例,它们涵盖了员工信息、部门信息和薪资等级等核心元素,是学习和练习Oracle数据库操作的理想起点。通过深入研究和实践,可以建立起...

    orcale 初学 到 精通 各种 demo 包含 练习 中使用的表 数据脚本

    Scott实例包含了几个表,如EMP(员工)、DEPT(部门)等,通过这些表,你可以实践插入、更新、删除和查询数据的基本操作,理解关系数据库的设计和管理。 "oracleDemo.sql" 文件则可能包含了各种Oracle SQL语句的...

    oracle 练习题目2

    例如,“查询员工表所有数据”这一练习要求掌握如何使用`SELECT * FROM table_name;`语句,但同时也指出了使用`*`的缺点——即可能读取大量不必要的数据,降低查询效率。 ### 运算符与函数 这部分涵盖了SQL中的...

    100多份品管试卷及答案——资料包(151个DOC)ISO9000内审员考试练习.doc

    3. 外部质量审核是评估企业是否符合ISO9001标准的重要手段,包括确定审核的目标、范围和依据,编制检查表,指定合适的审核团队,并通知被审核部门。在审核过程中,发现的不符合项应得到被审核方的确认,并根据严重...

    U8-HR基础模块上机练习题.doc

    - **人员档案**:录入员工的个人信息,包括编码、出生日期、性别、部门、岗位、职务、到职日期和身高。 3. **人员子集——教育经历**: - 记录员工的教育背景,包括入学日期、毕业日期、学校、专业、学历和学位,...

    Oracle学习笔记——day05

    在例子中,我们看到如何使用子查询来找出工资高于所在部门平均工资的员工。这通常涉及比较单个行的值与从另一个查询中获得的计算结果。 此外,集合操作如UNION、INTERSECT和MINUS用于合并或对比多个查询的结果。...

    计算机应用 (课后练习)Excel基本应用_公司年会报表设计.docx

    在“员工工资”工作表中,操作可能包括输入员工的基本信息,如姓名、部门、职位等,以及对应的薪资数据。学生可能需要使用Excel的公式功能来计算员工的总薪资,比如基础工资加上各种补贴或扣除项。同时,可能需要...

    Oracle Scott帐号下的三张表数据

    这个表与EMP表通过DEPTNO字段关联,形成了部门与员工的一对多关系,使得我们可以查询每个员工所在的部门信息,或者了解每个部门的员工构成。 最后,`SALGRADE`表是用于管理薪水等级的表。它可能包括字段如等级ID ...

    2021欧美大气新员工入职培训PPT模板.pptx

    此外,还会详细介绍各个部门的职责,帮助新员工理解他们在组织中的位置以及如何与其他团队协同工作。 【我们要做什么?——岗位职责与业务理解】 新员工入职培训的第二个重点是明确每个职位的职责和期望的工作成果...

    数据库及其应用—数据库

    描述中提到的两个表——"部门"和"职工",是数据库中的关键实体,它们反映了组织内部的结构和人员配置。 首先,让我们深入理解这两个表的设计。"部门"表包括"部门编号"和"部门名称"两个字段。"部门编号"作为主键,是...

    练习场各岗位职责要求及工作流程细节.docx

    以下是主要三个岗位——练习场主管、练习场领班和练习场职员的主要职责及工作细节: 1. **练习场主管**: - **安全管理**:主管需要熟悉球会运作,具备高尔夫专业知识和强烈的安全意识,确保设施设备正常运行。 -...

    08805 员工培训档案.zip

    《员工培训档案》是关于企业人力资源管理中一个关键环节——员工培训的重要文档集合。这个压缩包文件"08805 员工培训档案.zip"包含了一个名为"员工培训档案.doc"的文档,该文档可能详尽记录了公司内部的培训体系、...

    基于开源技术的企业培训e-learning课程构建——以Android应用开发为例.pdf

    8. **题库建设**:课程中可以设置系统题库,部分题目源自学习模块的练习题,其余由部门主管出题。在线考试功能允许集中进行综合考核,客观题自动批改,主观题手动批改。 9. **目标与效果**:通过这种e-learning模式...

    编号 W-6 CP——控制计划(1天).rar

    标题中的“编号 W-6 CP——控制计划(1天).rar”暗示了这是一个关于质量管理和制造过程控制的文档,通常在IT行业中,控制计划是制造业中用来确保产品或服务质量和一致性的重要工具。控制计划是六西格玛、精益生产和...

    企业新员工培训手册英文版.pptx

    员工还可以从公司获取视频和导师指南,以便进行自我学习和小组练习。在实际工作中,与经验丰富的同事交流和个人经验分享也是获取知识和技能的重要途径。 麦肯锡的使命是为客户带来持久且实质性的影响,这需要在策略...

    VB毕业设计——VB人才管理系统(源代码+论文).zip

    在人才管理系统中,可以创建类来表示不同实体,如员工、职位、部门等,通过这些类的实例化和方法调用来实现系统功能。 2. **用户界面设计**:VB提供了一套强大的控件库,使得设计直观、友好的图形用户界面(GUI)变...

Global site tag (gtag.js) - Google Analytics