Java访问Oracle服务器--orcl数据库---emp表
private static String driver =
"oracle.jdbc.driver.OracleDriver";//访问oracle服务器的驱动名称
private static String url =
"jdbc:oracle:thin:@127.0.0.1:1521:orcl";//访问oracle服务器的连接字串
private static String username = "scott";//访问orcl数据库的用户名
private static String password = "tiger";//访问orcl数据库的密码
连接类型:在oracle中,用怎样的方式连接服务器,有二种方式连接oracle服务器,分别是thin和oci
1)thin:通过oracle公司提供的jar包
连接简单,但速度相对慢
将该目录下的E:\oracleDB\product\11.2.0\dbhome_1\jdbc\lib\ojdbc5.jar包导入到
你项目的/WEB-INF/lib目录下
2)oci:安装oracle公司提供的客户端安装程序,类似于QQ客户端,得事先安装
连接复杂,但速度相对高
且将该目录下的E:\oracleDB\product\11.2.0\dbhome_1\jdbc\lib\ojdbc5.jar包导入到
你项目的/WEB-INF/lib目录下,与客户端一起使用,速度较快
程序员使用thin方式即可
(01)select to_char(sysdate,'yyyy"年"mm"月"dd"日"day') from dual是什么意思?
(02)decode()函数有什么作用?max(hiredate)和min(hiredate)函数能用于数值型,还能用于什么类型? decode()能够进行分支选择;日期 (03)select deptno,avg(sal) from emp group by deptno是什么意思? 查看每个部门的平均工资 (04)where和having的哪个先执行?非等值连接只能使用<>或!=吗? where先执行;非等值连接可以用between..and... (05)外连接能解决什么问题? 不符合某些条件的数据 (06)子查询能解决什么问题? 分页 (07)select * from emp where sal < any/all (800,1200,1500,2200,3000,5000)是什么意思? 小于任意/所有 (08)自连接有什么特点? (09)A集合 union B集合时,最终结果的列名由A集合还是B集合决定? A (10)rownum=1 和 rownum <=4 和rownum >= 4 哪个能查询出记录?
|
(01)找到员工表中工资最高的前三名 ROWNUM EMPNO ENAME SAL ------ ----- ---------- ------- 1 7839 KING 5000 2 7788 SCOTT 3000 3 7902 FORD 3000 select rownum ,empno,ename,sal from (select * from emp order by sal desc) where rownum<=3; (02)找到员工表中薪水大于【本】部门平均薪水的员工 EMPNO ENAME SAL AVGSAL ----- ---------- ------- ---------- 7499 ALLEN 1600 1566 7566 JONES 2975 2175 7698 BLAKE 2850 1566 7788 SCOTT 3000 2175 7839 KING 5000 2916 7902 FORD 3000 2175 我的方法: select empno,ename,trunc(sal,0) "sal", trunc((select avg(e1.sal) from emp e1 where e1.deptno=e2.deptno),0) "avgsal" from emp e2 where sal>(select avg(e1.sal) from emp e1 where e1.deptno=e2.deptno); 老师的方法: select e.ename "姓名",xx.deptno "部门号",round(xx.avgsal,0) "部门平薪",e.sal "员工薪水",e.deptno "员工所在部门号" from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) xx where (e.deptno=xx.deptno) and (e.sal>xx.avgsal); (03)有一个员工表empinfo结构如下 create table empinfo( fempno varchar2(10) not null primary key, fempname varchar2(20) not null, fage number(2) not null, fsalary number(10,2) not null ); insert into empinfo(fempno,fempname,fage,fsalary) values('1','AA',30,7000); insert into empinfo(fempno,fempname,fage,fsalary) values('2','BB',31,8000); insert into empinfo(fempno,fempname,fage,fsalary) values('3','CC',32,9000); insert into empinfo(fempno,fempname,fage,fsalary) values('4','DD',33,10000); insert into empinfo(fempno,fempname,fage,fsalary) values('5','EE',34,11000); insert into empinfo(fempno,fempname,fage,fsalary) values('6','FF',35,12000); insert into empinfo(fempno,fempname,fage,fsalary) values('7','GG',36,13000); insert into empinfo(fempno,fempname,fage,fsalary) values('8','FF',37,14000); 假如该表有大约1000万条记录,写一条最高效的SQL语句,计算以下4种人中每种员工的数量 第1种人:fsalary>9999 and fage>35 第2种人:fsalary>9999 and fage<35 第3种人:fsalary<9999 and fage>35 第4种人:fsalary<9999 and fage<35
提示:只用一条SQL搞定 第1种人 第2种人 第3种人 第4种人 2 2 0 3 我的方法 select (select count(fempno) from empinfo where fsalary>9999 and fage>35) "第1种人", (select count(fempno) from empinfo where fsalary>9999 and fage<35) "第2种人", (select count(fempno) from empinfo where fsalary<9999 and fage>35) "第3种人", (select count(fempno) from empinfo where fsalary<9999 and fage<35) "第4种人" from dual; 老师的方法: select sum(case when e.fsalary>9999 and e.fage>35 then 1 else 0 end) "第1种人", sum(case when e.fsalary>9999 and e.fage<35 then 1 else 0 end) "第2种人", sum(case when e.fsalary<9999 and e.fage>35 then 1 else 0 end) "第3种人", sum(case when e.fsalary<9999 and e.fage<35 then 1 else 0 end) "第4种人" from empinfo e; |