Oracle的sql语句上机练习和答案(一)

--1、选择部门30中的雇员

select * from empwhere deptno=30;

  --2、列出所有办事员的姓名、编号和部门

  selectename,empno,dname from emp e
inner join dept d on e.deptno = d.deptno wherejob=upper(‘clerk’);

  --3、找出佣金高于薪金的雇员

  select* from emp where comm>sal;

  --4、找出佣金高于薪金60%的雇员

  select* from emp where comm>sal*0.6

  --5、找出部门10中所有经理和部门20中的所有办事员的详细资料

  select* from emp where (deptno=10 and
job=upper(‘manager‘)) or (deptno=20 andjob=upper(‘clerk ‘));

  --6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料

  select* from emp where (deptno=10 and
job=upper(‘manager‘)) or (deptno=20 andjob=upper(‘clerk ‘)) or
(job<>upper(‘manager’)
andjob<>upper(‘clerk’)
and sal>=2000)

  --7、找出收取佣金的雇员的不同工作

  selectdistinct job from emp where
comm>0;

  --8、找出不收取佣金或收取的佣金低于100的雇员

  select* from emp where
nvl(comm,0)<100;

  --9、找出各月最后一天受雇的所有雇员

  select* from emp where hiredate=
last_day(hiredate);

  --10、找出早于25年之前受雇的雇员

  select* from emp where
months_between(sysdate,hiredate)/12>25;

  select* from emp where
hiredate<add_months(sysdate,-12*25);

  --11、显示只有首字母大写的所有雇员的姓名

  selectename from emp where
ename=initcap(ename);

  --12、显示正好为6个字符的雇员姓名

  selectename from emp where
length(ename)=6

  --13、显示不带有‘R‘的雇员姓名

  Selectename from emp where ename not
like ‘%R%’;

  Selectename from emp where instr(ename,’R’)=0;

  --14、显示所有雇员的姓名的前三个字符

  selectsubstr(ename,1,3) from emp

  --15、显示所有雇员的姓名,用a替换所有‘A‘

  Selectreplace(ename,’A’,’a’) from emp

  --16、显示所有雇员的姓名以及满10年服务年限的日期

  Selectename,add_months(hiredate,12*10) ‘服务年限的日期’ from emp

  --17、显示雇员的详细资料,按姓名排序

  Select* from emp order by ename

  --18、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面

  Selectename from emp order by hiredate

  --19、显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序

  Selectename,job,sal from emp order by
job desc ,sal asc

  --20、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面

  selectename,to_char(hiredate,‘yyyy‘),to_char(hiredate,‘mm‘)
from emp order byhiredate asc

  --21、显示在一个月为30天的情况下所有雇员的日薪金

  selectename,sal/30 from emp;

  --22、找出在(任何年份的)2月受聘的所有雇员

  select* from emp where
to_char(hiredate,‘mm‘)=‘02‘;

  --23、对于每个雇员,显示其加入公司的天数

  selectename,sysdate-hiredate from emp

  --24、显示姓名字段的任何位置,包含 "A" 的所有雇员的姓名

  selectename from emp where ename like
‘%A%‘;

  selectename from emp where instr(ename,’A’,1)>0;

  --25、以年、月和日显示所有雇员的服务年限

  Selectmonths_between(sysdate,hiredate)/12as“年”,months_between(sysdate,hiredate) as “月”,sysdate-hiredate
as “日” from emp

时间: 2024-10-13 11:51:24

Oracle的sql语句上机练习和答案(一)的相关文章

Oracle的sql语句上级练习和答案(二)

--1.列出至少有一个雇员的所有部门 select distinct dname from dept where deptno in (select distinct deptno from emp); --2.列出薪金比"SMITH"多的所有雇员 select ename,sal from emp where sal>(select sal from emp where ename=upper('smith')); --3.列出所有雇员的姓名及其直接上级的姓名 select e

Oracle 动态SQL语句

Oracle 动态SQL语句 (2012-06-18 16:36:12) 转载▼ 标签: oracle it   EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTEIMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTEIMMEDIATE,因为它获的收益在包

Oracle之sql语句优化

项目中虽然使用了orm映射,但Oracle系统的优化还是很有价值的,这里从sql语句的角度对常用的语句做下总结. 1.from字段中的优化: Oracle安照从右到左的顺序加载表数据,应该把可以排除数据最多的表放到后面(基础表). 比如,在关联查询中,把课程表放到后面,成绩表放到前面,因为课程表数据一般比较少,关联的时候可以快速的过滤掉一些成绩数据. 2.where中的优化: 对可以过滤数据最多的,放到后面,原理也是Oracle执行从下到上(从右到左)的顺序. 3.使用列名替代*: 省去从字典表

oracle常用SQL语句(汇总版)

Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要

ORACLE基本SQL语句-查询篇

一.普通查询 /*查询表数据*/select * from STU /*取出前3行数据*/select * from stu where ROWNUM<=3 /*模糊查询*/select * from stu where stu_id like 'stu001%' 说明:通配符“%”代表一个或者多个字符,通配符“_”代表一个字符. /*别名*/select STU_ID as 学号 from stu 二.联合查询/*普通联合查询*/SELECT STU.STU_NAME, STU.STU_AGE

ORACLE基本SQL语句-用户及建表篇

一.用户相关SQL语句 /*新建用户*/create user SA identified by 2013; 说明:SA用户名,2013密码 /*授权connect,resource给用户sa*/grant connect,resource to sa; 说明:CONNECT角色: --是授予最终用户的典型权利,最基本的 . ESOURCE 角色: --是授予开发人员的 /*查询所有的用户*/select * from all_users; /*将表STU查询权限授予SA*/GRANT SELE

ORACLE基本SQL语句-添加更新数据函数篇

一.添加数据 /*添加数据*/insert into STU values('stu0004','赵一',18,1,"kc0004");insert into STU(STU_ID,STU_NAME,STU_AGE,STU_SET ) values('stu0013','储十一',19,1); 说明:如果不指定将数据添加到那个字段,那么此时必须列出全部数据,如果列出字段,则一一对应,必须列出约束不为空的所有字段,否则报错. 二.更新数据 /*更新数据*/update STU SET S

ORACLE 中 SQL语句优化

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.    (2) WHERE子句中的连接顺序.:  ORACLE采用自下而上的顺序解

ORACLE数据库SQL语句的执行过程

首先是最简单链接数据库的过程,JDBC标准的链接的过程: 1. 载入JDBC驱动程序,一般来说载入驱动程序,采用的都是利用Class.forName()反射来加载驱动 Oracle: Class.forName("oracle.jdbc.driver.OracleDriver"); SQLServer: Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); MySql: Class.forNam