习题二
Northwind商贸公司,业务日益发展,公司OA系统正不断推出新版本以紧跟公司的发展.
在OA系统中,有一员工角色表,情况如下:
create table roles(
emp_name varchar2(20) not null,
emp_role char(1) not null,
constraint pk_roles primary key(emp_name,emp_role)
);
数据:
EMP_NAME EMP_ROLE
-------------------- --------
陈城 W
刘海 D
刘海 O
田亮 O
王晓刚 D
张玲 S
张天明 D
张天明 O
其中: W – 搬运工人 D – 主任 O – 高级职员 S – 秘书
OA开发组的SQL程序员张明得到了上级的一个任务:
领导要求得到的高级职员信息表如下:
EMP_NAME COMBINE_ROLE
-------------------- ------------
刘海 B
田亮 O
王晓刚 D
张天明 B
要求:
1)只列出主任和高级职员的信息
2)如果即是高级职员又是主任,用B表示其角色, 其它信息不用再显示 (只一条记录)。
你能不能用单条SQL语句帮助张明实现这个查询?
建表和数据录入:
create table roles(
emp_name varchar2(20) not null,
emp_role char(1) not null,
constraint PK_ROLES PRIMARY KEY (emp_name,emp_role)
);
insert into roles values('mary','W');
insert into roles values('david','D');
insert into roles values('david','O');
insert into roles values('henry','O');
insert into roles values('cherry','D');
insert into roles values('sally','S');
insert into roles values('tom','D');
insert into roles values('tom','O');
解题思路:
方法1:
先找出角色为主任和高级职员的员工,然后按员工姓名进行分组,得出有的组有2条记录,而有的组只有1条记录,接着把有2条记录的组,角色一律设置为B,对于只有一条记录,则按照其原有设置显示,但由于emp_role不是排序字段,所以增加个聚合函数max, 以保证兼容性,最后把两次查询得到的结果用union合成。
select emp_name,'B'
from roles
where emp_role in ('D','O')
group by emp_name
having count(emp_role)=2
union
select emp_name,max(emp_role)
from roles
where emp_role in ('D','O')
group by emp_name
having count(emp_role)=1;
方法二:
使用case函数。
select emp_name,
case when count(*)=1
then max(emp_role)
else 'B'
end
as combind_role--别名
from roles
where emp_role in ('D','O')
group by emp_name;
分享到:
相关推荐
这个“适合新手的Oracle练习题集合”旨在帮助初学者巩固理论知识,提高实践技能,同时通过解决实际问题,如安全认证和转账问题,加深对Oracle数据库的理解。 1. **SQL基础**:在Oracle中,SQL(结构化查询语言)是...
首先,我们可以从“Oracle习题”这个文件名推测,这些文档可能包含了各种类型的题目,如选择题、填空题、简答题和案例分析题等,涵盖了Oracle的基础知识和实际操作。以下是可能涉及的一些关键知识点: 1. **Oracle...
这些练习题涵盖了Oracle数据库的基本查询技巧,包括子查询、连接操作、聚合函数、条件判断以及各种内置函数的使用。通过解决这些问题,可以深入理解Oracle SQL和PL/SQL的用法,并提升在实际数据库管理中的技能。
根据提供的信息,我们可以总结出以下Oracle数据库练习题及其解析,主要涵盖了SQL查询、子查询、聚合函数等知识点。 ### 1. 查询所有员工的姓名和部门编号 ```sql SELECT ename, deptno FROM emp; ``` 这个查询非常...
Oracle数据库是世界上最流行的数据库管理系统...通过解决这个"oracle练习题关于触发器的作业",你将深化对Oracle触发器的理解,并提升数据库管理技能。请仔细研究每个题目,逐步解答,不断实践,相信你会从中受益匪浅。
根据提供的Oracle数据库练习题及其描述,我们可以逐一解析并总结出其中涉及的重要知识点: ### 一、多表查询 1. **子查询与多表连接**: - 练习题目中涉及到了`emp`表与`dept`表的关联查询。 - 例如:“获取在同...
1. **基本查询操作**:练习题中包含了查询员工表(emp)和部门表(dept)的基础信息,例如查询所有员工的详细信息。这涉及到SELECT语句的基本用法,包括选择列(如`SELECT * FROM emp`)和指定表(如`FROM emp`)。 ...
Oracle 存储过程练习题 本文档包含五个 Oracle 存储过程练习题,涵盖了创建用户和分配权限、编写函数实现报表统计、统计成绩分布、数据导出和删除重复数据等多个方面。 1. 创建用户和分配权限 在 Oracle 中,创建...
Oracle 基础查询关联查询练习题中第二部分是分组查询。分组查询是指将数据分组,并对每个组进行聚合操作。 1. 分组查询 第一个练习题是查询每个部门中每个职位的最高薪水。该查询使用了 GROUP BY 子句来分组,并...
根据提供的Oracle练习题答案及其描述,我们可以逐一解析并总结出其中涉及的重要知识点: ### 1. 查询所有学生信息以及所有课程信息 ```sql select * from student; select * from course; ``` - **知识点**: `...
根据提供的Oracle上机练习题的信息,我们可以从中提炼出多个重要的知识点。这些知识点涵盖了数据库的基本操作,包括表的创建、数据的插入以及基本的数据查询等。接下来将对这些知识点进行详细的阐述。 ### 1. 创建...
oracle数据库sql练习题(含答案)用于练习增删改查操作。
本资料包含“Oracle数据库基础练习题”,旨在帮助初学者和进阶者巩固对Oracle基础知识的理解,同时也适合正在准备Oracle相关认证考试的人群。 练习题可能涵盖了以下几个核心领域: 1. **SQL语言基础**:这部分可能...
这个"oracle练习题.zip"压缩包包含了一些关于Oracle数据库操作的练习资料,主要关注查询语句和基本的数据操作。 首先,"table.sql"文件很可能是创建数据库表的SQL脚本。在Oracle中,创建表是数据库设计的基础,它...
6. **SCOTT/TIGER示例数据库**:这些练习题是在Oracle的SCOTT/TIGER示例数据库上进行的,这是一个经典的用于学习Oracle SQL的数据库。`EMP`表是SCOTT用户下的一个标准示例表,包含了员工的基本信息,如员工号、姓名...
### Oracle 认证介绍 Oracle认证是Oracle公司推出的一系列技术认证项目,旨在评估和确认IT专业人士在...以上是对Oracle认证介绍及其相关练习题的详细解释,希望能帮助到正在备考或有兴趣深入了解Oracle认证的读者。
本资源"Oracle 入门及提高练习题"旨在帮助用户从基础开始,逐步深入到高级实践,提升在Oracle领域的技能。 一、Oracle基础 1. 数据库概念:了解数据库是什么,它的作用以及Oracle数据库的特点,如ACID属性(原子性...
首先,这些练习题可能包括了以下几个核心知识点: 1. **SQL基础**:SQL是与Oracle交互的语言,学习者需要掌握SELECT语句、JOIN操作、子查询、聚合函数如COUNT、SUM、AVG等,以及DML语句(INSERT、UPDATE、DELETE)...
oracle数据库练习题,对新手有帮助,看看没有害处。