【Java EE 学习 28 下】【Oracle面试题2道】【Oracle练习题3道】
一、已知程序和数据
create table test1
(id int primary key,
name varchar(20),
money int); insert into test1 values(1,'Tom',1000);
insert into test1 values(2,'Mary',2000);
insert into test1 values(3,'Mike',3000);
insert into test1 values(4,'Jeff',4000);
要求根据下图写出相应的sql语句。

分析:该题使用自连接和左外连接可以解决
select t1.id id,t1.name name,t1.money money,t2.money money1 from test1 t1,test1 t2 where t1.id-1=t2.id(+) order by id
或者
select id,name,money,(select money from test1 where id=t.id-1 ) money1
from test1 t;
二.已知程序和数据
create table pm_ci
(ci_id varchar(20) primary key,
stu_ids varchar(100)); insert into pm_ci values('','1,2,3,4');
insert into pm_ci values('','1,4'); create table pm_stu
(stu_id varchar(20) primary key,
stu_name varchar(20));
insert into pm_stu values('','张三');
insert into pm_stu values('','李四');
insert into pm_stu values('','王五');
insert into pm_stu values('','赵六');
要求根据下图得到相应的sql查询:

答案:
select ci_id,wm_concat(stu_name) names
from (select ci_id,stu_name
from pm_ci c,pm_stu s
where instr(c.stu_ids,s.stu_id)>0)
group by ci_id;
分析:
(1)wm_contat:列合并函数,能将查询到的结果合并到一起,并默认使用,隔开。
(2)instr函数:字符串查找函数,instr(c.stu_ids,s.stu)的意思就是在c.stu_ids中寻找字符串s.stu,如果找到了就返回大于零的一个数,代表该字串所在的位置,如果没有找到,则返回0。
练习题1:找到员工表中工资最高的前三名,如下格式:

分析:这道题使用子查询就能解决,实际上是Oracle分页的知识点。一个重要的伪列:rownum,该伪列代表了行号。
使用rownum行号的重要注意事项:
(1)行号永远按照默认的顺序生成,什么叫做默认的顺序?也就是说如果使用order by进行了排序,不会改变原来的行号。
(2)rownum只能使用rownum<或者rownu<=的形式,不能使用rownum>或者rownum>=的形式,原因是rownum只能从1开始依次递增。
答案:
select rownum,empno,ename,sal from (select empno,ename,sal from emp order by sal desc) where rownum<=3
这个问题是的核心思想和Oracle分页的核心思想并没有什么不同,那么Oracle中没有limit语法,该怎么分页呢?关键还是在于rownum的使用上。
虽然不能直接对rownum进行>=的操作,但是可以在主查询中对子查询的rownum进行该操作。
查找员工表中工资为5-8名的员工信息:
select * from (select rownum r,empno,ename,sal from (select empno,ename,sal from emp order by sal desc) where rownum<=8) where r>=5
注意子查询中rownum起别名是为了防止和主查询中使用的rownum起冲突。
练习题2:找到员工表中薪水大于本部门平均薪水的员工。
效果图如下:

答案:使用子查询解决该问题
select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal from emp e where sal> (select avg(sal) from emp where deptno=e.deptno)
练习题3:统计每年入职的员工个数。
效果图如下:

使用
select distinct to_char(hiredate,'yyyy') from emp ;
可以得到实际上只有四个入职年份,所以只需要针对这四个入职年份进行选择就可以了,这里使用decode函数进行选择。
答案:
select count(*) Total ,sum(decode(to_char(hiredate,'yyyy'),'',1,0)) "1980",sum(decode(to_char(hiredate,'yyyy'),'',1,0)) "1981",sum(decode(to_char(hiredate,'yyyy'),'',1,0)) "1982",sum(decode(to_char(hiredate,'yyyy'),'',1,0)) "1987" from emp
该道题关键就在于函数的使用:decode、sum、to_char。
【Java EE 学习 28 下】【Oracle面试题2道】【Oracle练习题3道】的更多相关文章
- 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】
疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...
- 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】
一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...
- 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】
一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...
- 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...
- 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】
之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】
一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...
- 【Java EE 学习 82 下】【MAVEN整合Eclipse】【MAVEN的一些高级概念】
一.MAVEN整合Eclipse MAVEN是非常优秀,但是总是要开命令行敲命令是比较不爽的,我们已经习惯了使用IDE,所以还有一种将MAVEN整合到Eclipse的方法. 详情查看:http://w ...
- 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...
随机推荐
- Dirac Delta Function
也称为Degenerate pdf, 退化概率密度函数. 未经考证的解释是: 当正态分布的\(\sigma \to 0\)时, 正态分布就退化为这个分布了. 定义 \[ \delta(x) = \be ...
- ORB-SLAM(四)追踪
最近在读ORB-SLAM的代码,虽然代码注释算比较多了,但各种类和变量互相引用,看起来有点痛苦.索性总结了一下Tracking部分的代码结构,希望能抓住主要思路,不掉坑里. 追踪 追踪部分的主要思路是 ...
- IIS如何配置可以下载APK、IPA文件
解决步骤: 1).打开IIS服务管理器,找到服务器,右键-属性,打开IIS服务属性: 2.单击MIME类型下的“MIME类型”按钮,打开MIME类型设置窗口: 3).单击“新建”,建立新的MIME类型 ...
- mysql关联表的复制
1. 复制被参照的表: CREATE TABLE clone_product_1 LIKE product_1; INSERT INTO clone_product_1 SELECT * FROM p ...
- linux 安装后
docker https://cr.console.aliyun.com/#/accelerator pecl install xdebug xdebug.remote_enable = on php ...
- php多进程总结
本文部分来自网络参考,部分自己总结,由于一直保存在笔记中,并没有记录参考文章地址,如有侵权请通知删除.最近快被业务整疯了,这个等抽时间还需要好好的整理一番. 多进程--fork 场景:日常任务中, ...
- Bash 为何要发明 shopt 命令
在 Bash 中,有两个内置命令用来控制 Bash 的各种可配置行为的开关(打开或关闭),这些开关称之为选项(option).其中一个命令是 set,set 命令有三种功能:显示所有的变量和函数:修改 ...
- Tomcat SSL的安装及配置中遇到问题
配置tomcat服务器利用SSL进行加密. 一.生成密钥库 具体生成方式就不讲了,tomcat支持的keystore的格式有JKS,PKCS11和PKCS12 JKS是jdk /bin目录下keyto ...
- loopback文档翻译
最近在学习loopback,期间在strongloop的官网翻译了部分文章. 见:https://docs.strongloop.com/pages/viewpage.action?pageId=60 ...
- Coursera系列-R Programming第三周-词法作用域
完成R Programming第三周 这周作业有点绕,更多地是通过一个缓存逆矩阵的案例,向我们示范[词法作用域 Lexical Scopping]的功效.但是作业里给出的函数有点绕口,花费了我们蛮多心 ...