oracle常用函数习题及答案
Oracle经典练习题及标准答案
Oracle经典练习题及标准答案oracle经典练习sql/*1、选择在部门30中员工的所有信息*/select * from scott.emp where deptno = '30'/*2、列出职位为(MANAGER)的员工的编号,姓名*/select empno, ename from scott.emp where job = 'MANAGER'/*3、找出奖金高于工资的员工*/select * from scott.emp where comm > sal/*4、找出每个员工奖金和工资的总和*/select ename, sal + nvl(comm, 0) from scott.emp/*5、找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK) */select *from scott.empwhere deptno = '10'and job = 'MANAGER'unionselect *from scott.empwhere job = 'CLERK'and deptno = '20'/*6、找出部门10中既不是经理也不是普通员工,而且工资大于等于2000的员工*/ select *from scott.empwhere job != 'MANAGER'and job != 'CLERK'and sal > 2000/*7、找出有奖金的员工的不同工作*/select distinct(job) from scott.emp where comm is not null /*8、找出没有奖金或者奖金低于500的员工*/select *from scott.empwhere comm is not nulland comm > 500/*9、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面*/select enamefrom scott.emporder by (months_between(sysdate, hiredate) / 12) descselect ename,hiredate from scott.emp order by hiredate/*10、找出每个月倒数第三天受雇的员工*/select * from scott.emp where hiredate = last_day(hiredate) - 2/*11、分别用case和decode函数列出员工所在的部门,deptno=10显示'部门10',deptno=20显示'部门20'deptno=30显示'部门30'deptno=40显示'部门40'否则为'其他部门'*/select ename,case deptnowhen 10 then'部门10'when 20 then'部门20'when 30 then'部门30'when 40 then'部门40'else'其他部门'end 工资情况from scott.empselect ename,decode(deptno,10,'部门10',20,'部门20',30,'部门30',40,'部门40','其他部门') 工资情况from scott.emp/*12、分组统计各部门下工资>500的员工的平均工资*/select avg(sal) from scott.emp where sal > 500 group by deptno/*13、统计各部门下平均工资大于500的部门*/select deptno from scott.emp group by deptno having avg(sal) > 500 /*14、算出部门30中得到最多奖金的员工奖金*/ select max(comm) from scott.emp where deptno = 30/*15、算出部门30中得到最多奖金的员工姓名*/select enamefrom scott.empwhere deptno = 30and comm = (select max(comm) from scott.emp where deptno = 30) /*16、算出每个职位的员工数和最低工资*/select count(ename), min(sal), job from scott.emp group by job/*17、列出员工表中每个部门的员工数,和部门no */select count(ename), deptno from scott.emp group by deptno/*18、得到工资大于自己部门平均工资的员工信息*/select *from scott.emp ewhere sal > (select avg(sal) from scott.emp where e.deptno = deptno)select *from scott.emp e1,(select avg(sal) sals, deptno from scott.emp group by deptno) e2where sal > salsand e1.deptno = e2.deptno/*19、分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金) */select avg(nvl(comm,0)), sum(sal + nvl(comm, 0))from scott.empgroup by deptno,job/*20、笛卡尔集*/select * from scott.emp, scott.dept/*21、显示员工ID,名字,直属主管ID,名字*/select empno,ename,mgr,(select ename from scott.emp e1 where e1.empno = e2.mgr) 直属主管名字from scott.emp e2/*22、DEPT表按照部门跟EMP表左关联*/select *fromscott.dept, scott.empwherescott.dept.deptno = scott.emp.deptno(+)/*23、使用此语句重复的内容不再显示了*/select distinct (job) from scott.emp/*24、重复的内容依然显示*/select *from scott.empUNION ALLselect * from scott.emp/*23和24题和22题是一样的*//*25、只显示了两个表中彼此重复的记录。
Oracle查询练习及答案
Oracle查询练习及答案分类:技术文档2012-09-16 15:30 383人阅读评论(0) 收藏举报oracletableinsertdelete工作null--1 显示所有部门名select dnamefrom dept--2 显示所有雇员名及其全年收入(工资+补助),并指定列别名"年收入"select ename,nvl2(comm,sal+comm,sal) as 年收入from emp--3 显示存在雇员的所有部门号select distinct deptnofrom emp--4 显示工资超过2850的雇员名和工资select ename,salfrom empwhere sal > 2850--5 显示工资不在1500到2850之间的所有雇员名及工资select ename,salfrom empwhere sal not between 1500 and 2850--6 显示雇员代码为7566的雇员名及所在部门号select ename,deptnofrom empwhere empno = 7566--7 显示部门代码为10和30中工资超过1500的雇员名及工资select ename,salfrom empwhere sal > 1500 and deptno in (10,30)--8 显示无管理者的雇员名及岗位select ename,jobfrom empwhere mgr is null--9 显示所有雇员的平均工资、总计工资、最高工资、最低工资select avg(sal) as 平均工资,sum(sal) as 总计工资max(sal) as 最高工资min(sal) as 最低工资from emp--10 显示每种岗位的雇员总数、平均工资select job,count(*),avg(sal)from empgroup by job--11 显示雇员总数,以及获得补助的雇员数select count(*),count(comm)from emp--12 显示管理者的总人数select count(distinct mgr)from emp--13 显示雇员工资的最大差额select max(sal) - min(sal)from emp--14 显示部门代码为20的部门号,以及该部门的所有雇员名、雇员工资及岗位select ename,sal,jobfrom empwhere deptno = 20--15 显示获得补助的所有雇员名、补助额以及所在部门号select deptno,ename,commfrom empwhere comm is not null--16 显示所有雇员的姓名、部门编号、工资,并且列名要显示为中文select ename as 姓名,deptno as 部门编号,sal as 工资from emp--17 显示每个部门每个岗位的平均工资、每个部门的平均工资、每个岗位的平均工资select deptno,job,avg(sal)from empgroup by cube(deptno,job)--18 显示工资大于1500的雇员名和工资,并且按照工资的降序排列select ename,salfrom empwhere sal > 1500order by sal desc--19 显示雇员部门编号为10或20的信息(要求使用IN关键字)select *from empwhere deptno in (10,20)--20 显示雇员名的第二个字母为A的信息select enamefrom empwhere ename like '_A%'--21 显示没有发放补助的雇员信息select *from empwhere comm is null--22 显示雇员表中记录总数select count(*)from emp以scott/tiger登录数据库,完成以下题目--1 显示所有雇员名、雇员工资及所在部门名select d.dname,e.ename,e.salfrom dept d,emp ewhere d.deptno = e.deptno--2 显示部门代码为20的部门名,以及该部门的所有雇员名、雇员工资及岗位select d.dname,e.ename,e.salfrom dept d,emp ewhere d.deptno = e.deptnoand d.deptno = 20--3 显示所有雇员名、雇员工资及工资级别select e.ename,e.sal,s.gradefrom emp e,salgrade swhere e.sal >= s.losal and e.sal <= s.hisal--4 显示雇员"SCOTT"的管理者名select m.enamefrom emp e,emp mwhere e.mgr = m.empnoand e.ename = 'SCOTT'--5 显示获得补助的所有雇员名、补助额以及所在部门名select d.dname,e.ename,mfrom dept d,emp ewhere d.deptno = e.deptnoand m is not null--6 查询EMP表和SALGRADE表,显示部门代码为20的雇员名、工资及其工资级别select e.ename,e.sal,s.gradefrom emp e,salgrade swhere e.sal >= s.losal and e.sal <= s.hisaland e.deptno = 20--7 显示部门代码为10的所有雇员名、部门名,以及其他部门名select e.ename,d.dnamefrom dept d,emp ewhere d.deptno = e.deptno(+)and e.deptno(+) = 10--8 显示部门代码为10的所有雇员名、部门名,以及其他雇员名select e.ename,d.dnamefrom dept d,emp ewhere d.deptno(+) = e.deptnoand d.deptno(+) = 10--9 显示部门代码为10的所有雇员名、部门名,以及其他部门名和雇员名select e.ename,d.dnamefrom dept d full join emp eon d.deptno = e.deptnoand d.deptno = 10--10显示"BLAKE"同部门的所有雇员,但不显示"BLAKE"select e.ename,e.deptnofrom emp e,emp bwhere e.deptno = b.deptnoand e.ename <> 'BLAKE'and b.ename = 'BLAKE'--01 按以下格式显示下面的信息,条件是工资大于1500的。
Oracle 考试试题(带答案)
select seq.ROWNUM from dual; select seq.ROWID from dual; select seq.CURRVAL from dual; select seq.NEXTVAL from dual;
c
14) 在Oracle中,游标都具有下列属性,除了()。
a) b) c) d) e) 参考答案
(10) Dnnn:调度进程 (11) Snnn:共享服务器进程 (12) LMS:全局缓存服务进程
3在orders表上建立一个触发器,使得一旦订单成功不能修改下订单日期 答: create or replace trigger Refuse before update of orderdate on orders begin raise_application_error(-20001,'不能改变订单日期!'); END;
--显示结果(1000)条
session2 ---------------------------------------
T2 delete from t where rownum <=100;
T3
begin
delete from t where rownum <=100;
commit;
end;
/
T4 truncate table t;
where s.id=t.id); commit; 请问之后查询: select GRADE from student_grade where id = 3;结果为: C
A: 0 B: 70 C: null D: 以上都不对
19 根据以下的在不同会话与时间点的操作,判断结果是多少,
session1 -------------------------------------T1 select count(*) from t;
Oracle练习day04(附答案及多种解法)
Oracle练习day04(附答案及多种解法)day01(附答案)(由于内容太过于简单上传没有被百度文库通过,于是和day04一起上传上来)1.查询职员表中工资大于1600的员工姓名和工资。
select ename,sal from emp where sal>1600;2.查询职员表中员工号为7369的员工的姓名和部门号码。
select ename,deptno from emp where empno=7369;3.选择职员表中工资不在4000到5000的员工的姓名和工资。
select ename,sal from emp where sal not between 4000 and 5000;4.选择职员表中在20和30号部门工作的员工姓名和部门号。
select ename,deptno from emp where deptno in(20,30);5.选择职员表中员工姓名的第三个字母是A的员工姓名。
select ename from emp where ename like '__A%';6.列出部门表中的部门名字和所在城市。
select dname,loc from dept;7.显示出职员表中的不重复的岗位job。
select distinct job from emp;8连接职员表中的职员名字、职位、薪水,列之间用逗号连接,列头显示成OUT_PUT(提示:使用连接符||、别名)。
select '姓名:' || ename || ',职位' || job || ',薪水' || sal OUT_PUT from emp9查询职员表emp中员工号、姓名、工资,以及工资提高百分之20%后的结果。
select empno,ename,sal,sal*1.2 sals from emp;10列出除了ACCOUNT部门还有哪些部门。
Oracle基础练习题及答案(多表查询1)(共5篇)
Oracle基础练习题及答案(多表查询1)(共5篇)第一篇:Oracle基础练习题及答案(多表查询1)利用scott用户自带的四张表完成如下作业:1.列出至少有一个员工的所有部门select b.deptno,b.dname from emp a,dept b where a.deptno=b.deptno group by b.deptno,b.dname having count(*)>=1;2.列出薪金比SMITH高的所有员工select * from emp where sal>(select sal from emp where ename='SMITH');3.列出所有员工的姓名及其直接上级领导的姓名select a.ename,b.ename “leader” from emp a,emp b wherea.mgr=b.empno;4.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称select a.empno,a.ename,a.hiredate,c.dname from emp a,emp b,dept c where a.mgr=b.empno and a.deptno=c.deptno anda.hiredate5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门select b.dname,a.* from emp a,dept b wherea.deptno(+)=b.deptno;6.列出所有CLERK(办事员)的姓名,及其部门名称,部门人数select aa.ename,aa.job,bb.dname,(select count(a.deptno)from emp a,dept b where a.deptno=b.deptno and b.dname=bb.dname group by a.deptno)from emp aa,dept bb where aa.deptno(+)=bb.deptno and aa.job='CLERK';7.列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数select a.job,min(sal),count(ename)from emp a,dept b wherea.deptno=b.deptno having min(sal)>1500 group by a.job;8.列出在部门SALES(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
Oracle基础练习题及答案(聚合函数)
分组函数1.查询公司员工工资的最大值,最小值,平均值,总和select max(sal),min(sal),avg(sal),sum(sal) from emp;2.查询各job的员工工资的最大值,最小值,平均值,总和select job,max(sal),min(sal),avg(sal),sum(sal) from emp group by job;3.选择具有各个job的员工人数(提示:对job进行分组)select job,count(ename) from emp group by job;4.查询员工最高工资和最低工资的差距(DIFFERENCE)select max(sal)-min(sal) from emp;5.查询各个管理者手下员工的最低工资,其中最低工资不能低于800,没有管理者的员工不计算在内select a.mgr,min(a.sal) from emp a,emp b where a.mgr=b.empno group by a.mgr;6.查询所有部门的名字dname,所在位置loc,员工数量和平均工资select dname,loc,count(ename),avg(sal) from emp a,dept b where a.deptno(+)=b.deptno group by dname,loc;7.查询公司的人数,以及在1980-1987年之间,每年雇用的人数,结果类似下面的格式total 1980 1981 1982 198730 3 4 6 7select distinct(select count(ename) from emp) "total",(select count(ename) from emp where hiredate>=to_date('19800101','yyyymmdd') and hiredate<to_date('19810101','yyyymmdd')) "1980",(select count(ename) from emp where hiredate>=to_date('19810101','yyyymmdd') and hiredate<to_date('19820101','yyyymmdd')) "1981",(select count(ename) from emp where hiredate>=to_date('19820101','yyyymmdd') and hiredate<to_date('19830101','yyyymmdd')) "1982",(select count(ename) from emp where hiredate>=to_date('19870101','yyyymmdd') and hiredate<to_date('19880101','yyyymmdd')) "1987"from emp;。
Oracle试题(含答案)概要
_C++_CSD/ESD14051. 把工资大于1000的first_name,salary 显示出来,按工资排序,工资相同按first_name降序的SQL语句是?A.select first_name,salary from s_emp order by salary,first_nameB.select first_name,salary from s_emp order by salary,first_name ascC.select first_name,salary from s_emp order by salary desc,first_nameD. select first_name,salary from s_emp order by salary,first_name desc正确答案:D2. 已知数据库中有员工表s_emp和部门表s_dept,具体字段如下:员工表字段介绍:ID 员工编号LAST_NAME 员工姓FIRST_NAME 员工名USERID 用户编号START_DATE 入职日期COMMENTS 员工备注信息MANAGER_ID 员工的领导IDTITLE 员工的职位DEPT_ID 部门的编号SALARY 员工的月薪COMMISSION_PCT 提成部门表的字段介绍:ID 部门编号NAME 部门名REGION_ID 地区编号注:以下所有数据库相关题目,均使用这两个表把s_emp表中的每个人的全名和工资列出来的SQL语句是?A.select first_name|last_name ,salary from s_empB.select first_name||last_name ,salary from s_empC.select first_name|last_name ,salary from empD. select first_name||last_name ,salary from emp正确答案:B3. 如果想在代码中禁止使用goto,可以采用的是?A. #pragma GCC dependency gotoB. #pragma GCC poison gotoC. #pragma pack(2)D. #pragma GCC goto正确答案:B4.阅读如下代码:void* p = sbrk(0);int r = brk(p+4);brk(p+8);brk(p+4);请问目前占用的内存空间字节是?A. 16B. 8C. 4D. 0正确答案:C5. 查找和Smith一个title的所有员工的名字的SQL语句是?A. SELECT last_name from s_emp where title=(select title from s_emp wherelast_name=’Smith’)B. SELECT last_name from s_emp where title=(select title from s_emp wherelast_name=”Smith”)C. SELECT last_name from s_emp where title=(select last_name,title from s_emp where last_name=’Smith’)D. SELECT last_name from s_emp where title=(select title from s_emp last_name=’Smith’)正确答案:A6. 下列函数中不能处理错误的是?A. exitB. printfC. perrorD. strerror正确答案:A7. 关于信号,以下说法错误的是?A. 信号分为可靠信号和不可靠信号B. 信号的默认处理 ,80%的情况是退出进程C. 所有信号都可以忽略D. 当前用户只能给自己的进程发信号,不能给别的用户的进程发信号正确答案:C8. 下列关于进程描述符说法错误的是?A. getpid 获取进程ID。
Oracle基础(习题卷1)
Oracle基础(习题卷1)第1部分:单项选择题,共63题,每题只有一个正确答案,多选或少选均不得分。
1.[单选题]以下()用户默认拥有SYSDBA权限A)A-SYSTEMB)B-SYSC)C-SAD)D-DBADMIN答案:B解析:2.[单选题]你使用 IMMEDIATE 选项关闭数据库实例。
考虑打开数据库需要执行的步骤:1. 分配 SGA2. 读取控制文件3. 读取日志文件4. 开始实例恢复5. 启动后台进程6. 检查数据文件一致性7. 读取 spfile 或者 pfile哪个选项是正确的关于这些步骤()A)7, 1, 5, 2, 3, 6, 4B)1, 5, 7, 2, 3, 6; step 4 is not requiredC)7, 1, 5, 2, 3, 6 step 4 is not requiredD)1, 2, 3, 5, 6, 4; step 7 is not required答案:C解析:3.[单选题]执行下面的命令备份 USERS 表空间SQL> ALTER TABLESPACE users BEGIN BACKUP;ALTER TABLESPACE users BEGIN BACKUP*ERROR at line 1:ORA-01123: cannot start online backup;media recovery not enabled什么原因导致整个错误()A)MTTR Advisor 禁用B)数据库处于 NOARCHIVELOG 模式C)表空间已经处于备份模式D)Flash Recovery Area 没有配置答案:B解析:4.[单选题]当执行介质数据库恢复时,有个归档日志文件丢失或者损坏,那么此时只能执行哪种操作?什么A)Until SCNB)Until timeC)Recover using backup control file.D)Until cancel答案:D解析:5.[单选题]oracle逻辑存储结构正确的是( )A)tablespace--segment--osblock--blockB)tablespace--segment--extent--blockC)tablespace--extent--segment--blockD)tablespace--extent--block -segment答案:B解析:6.[单选题]如何将变量v_row 定义为emp表的记录类型( )A)v_row emp%type;B)v_row emp%record;C)v_row emp%tabletype;D)v_row emp%rowtype;答案:D解析:7.[单选题]The schema SALES exists in two databases, ORCL1 and ORCL2, and has the same password,SALES123. User SALES has CREATE DATABASE LINK and CREATE SESSION privileges on bothDatabases.Eaxmine these command:Conn SALES/SALES123CREATE DATABASE LINK orcl2 USING ‘orcl12’;What is the outcome of executing these commands in the ORCL1 database?A)ORCL2 is created as a shared database link to connect multiple sessions to the SALES schema in the ORCL2 databaseB)ORCL2 database link creation failsC)ORCL2 is created as a private database link to connect to only the SALES schema in the ORCL2 databaseD)ORCL2 is created as a public link to connect a single session to the SALES schema in the ORCL2 database答案:C解析:8.[单选题]分析以下的SQL 命令:SELECT manufacturer_idFROM inventoryWHERE manufacturer_id LIKE '%N\%P\%O%' ESCAPE '\';命令执行的返回结果是( )。
ORACLE数据库习题(有答案)
--1.列出至少有一个雇员的所有部门。
SELECT * FROM DEPTWHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP);--2.列出薪金比“SMITH”多的所有雇员。
SELECT * FROM EMP WHERE SAL>(SELECT SAL FROM EMP WHERE ENAME='SMITH');--3.列出所有雇员的姓名及其上级的姓名。
SELECT AS empName, AS mgrNameFROM emp ygb,emp sjbWHERE =;--4.列出入职日期早于其直接上级的所有雇员。
【SELECT * FROM emp ygbWHERE hiredate<(SELECT hiredate FROM emp sjb WHERE =;--5.列出所有部门的名称和这些部门的雇员编号及姓名(没有雇员的部门包含在内)SELECT dname,enameFROM dept a LEFT JOIN emp b ON =; --6.列出所有JOB为“CLERK”(办事员)的员工姓名及其部门名称SELECT ename,dnameFROM dept a,emp bWHERE = AND job='CLERK';--7.列出各种类型的最低薪金,并使最低薪金大于。
SELECT job,MIN(sal)—FROM empGROUP BY jobHAVING MIN(sal)>1500;--8.列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。
SELECT ename FROM empWHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES'); --9.列出薪金高于公司平均水平的所有雇员。
SELECT * FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP);--10.列出与“SCOTT”从事相同工作的所有雇员。
oracle中常用的函数
oracle中常用的函数
1. (,,):从指定位置开始向后截取指定长度的子串。
2. (,):返回子串在字符串中首次出现的位置。
如果子串未找到返回0。
3. ():返回字符串长度。
4. ([ _] ):去除字符串头尾部分的空格或其他字符。
5. (,[,]):用指定的填充字符填充字符串在指定长度时不足部分。
6. (,[,]):用指定的填充字符填充字符串在指定长度时不足部分。
7. ([,]):四舍五入指定数字。
8. ([,]):截断指定小数位数的数字。
9. (,):求余函数。
10. (_,):求幂函数。
11. ():求平方根。
12. _([,]):数字转字符串。
13. _(_[,],[_]):字符串转日期。
14. :返回当前系统日期时间。
15. _(1,2):计算两个日期之间的月份数。
oracle 练习有答案
insert into SC values('02' , '03' , 80)
insert into SC values('03' , '01' , 80)
insert into SC values('03' , '02' , 80)
--3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
select Student.S#,Student.Sname,avg(Score)
from Student,SC
where Student.S#=SC.S#
group by Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S#
group by Student.S#,Student.Sname
having avg(score)<60;
--5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
select Student.S#,Student.Sname,count(SC.C#),sum(score)
insert into Teacher values('01' , N'张三')
insert into Teacher values('02' , N'李四')
insert into Teacher values('03' , N'王五')
oracle练习题及答案
oracle练习题及答案Oracle练习题及答案Oracle数据库是全球最受欢迎的关系型数据库管理系统之一,广泛应用于企业级应用程序开发和数据管理。
为了提高对Oracle数据库的理解和应用能力,下面将提供一些常见的Oracle练习题及其答案。
1. 查询表中的所有数据答案:使用SELECT语句可以查询表中的所有数据,例如:SELECT * FROM 表名;2. 查询表中的特定列数据答案:使用SELECT语句并指定需要查询的列名,例如:SELECT 列名1, 列名2 FROM 表名;3. 查询表中满足特定条件的数据答案:使用SELECT语句并使用WHERE子句来指定条件,例如:SELECT * FROM 表名 WHERE 列名 = 值;4. 对查询结果进行排序答案:使用SELECT语句并使用ORDER BY子句来指定排序的列和排序方式,例如:SELECT * FROM 表名 ORDER BY 列名 ASC/DESC;5. 对查询结果进行分组答案:使用SELECT语句并使用GROUP BY子句来指定分组的列,例如:SELECT 列名1, 列名2 FROM 表名 GROUP BY 列名1;6. 查询表中的唯一数据答案:使用SELECT DISTINCT语句可以查询表中的唯一数据,例如:SELECT DISTINCT 列名 FROM 表名;7. 查询表中的前N条数据答案:使用SELECT语句并使用ROWNUM关键字来限制查询结果的行数,例如:SELECT * FROM 表名 WHERE ROWNUM <= N;8. 使用聚合函数进行数据统计答案:使用聚合函数如SUM、AVG、COUNT等可以对数据进行统计,例如:SELECT COUNT(*) FROM 表名;9. 进行多表查询答案:使用SELECT语句并使用JOIN关键字来连接多个表,例如:SELECT * FROM 表名1 JOIN 表名2 ON 表名1.列名 = 表名2.列名;10. 更新表中的数据答案:使用UPDATE语句可以更新表中的数据,例如:UPDATE 表名 SET 列名 = 值 WHERE 条件;11. 删除表中的数据答案:使用DELETE语句可以删除表中的数据,例如:DELETE FROM 表名 WHERE 条件;12. 创建新表答案:使用CREATE TABLE语句可以创建新表,例如:CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型, ...);13. 修改表结构答案:使用ALTER TABLE语句可以修改表的结构,例如:ALTER TABLE 表名 ADD 列名数据类型;14. 删除表答案:使用DROP TABLE语句可以删除表,例如:DROP TABLE 表名;以上是一些常见的Oracle练习题及其答案,希望能够帮助读者更好地理解和应用Oracle数据库。
oracle练习及答案
实验一练习1、请查询表DEPT中所有部门的情况。
select * from dept;练习2、查询表DEPT中的部门号、部门名称两个字段的所有信息。
select deptno,dname from dept;练习3、请从表EMP中查询10号部门工作的雇员姓名和工资。
select ename,sal from emp where deptno=10;练习4、请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。
select ename,sal from emp where job='CLERK' or job='MANAGER';练习5、请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、工资、工作。
select ename,deptno,sal,job from emp where deptno between 10 and 30;练习6、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。
select ename,sal,job from emp where ename like 'J%';练习7、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。
select ename,job,sal from emp where sal<=2000 order by sal desc;练习8、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。
select ename,sal,emp.deptno,dname,loc from emp,dept where emp.deptno=dept.deptno and job=‟CLERK‟;练习9、查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。
select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+) and a.sal>=2000;练习10、在表EMP中查询所有工资高于JONES的所有雇员姓名、工作和工资。
oracle练习题及答案
oracle练习题及答案Oracle练习题及答案Oracle是一种广泛使用的关系型数据库管理系统,它具有强大的数据处理和管理能力。
对于想要提升自己的数据库技能的人来说,练习题是一个非常有效的学习方法。
通过解答一系列的练习题,可以帮助我们更好地理解Oracle的使用和原理。
下面是一些常见的Oracle练习题及其答案,供大家参考。
1. 查询一个表中所有的数据答案:可以使用SELECT语句来查询一个表中的所有数据。
例如,假设我们有一个名为"employees"的表,可以使用以下语句来查询所有的数据:SELECT * FROM employees;2. 查询一个表中特定列的数据答案:如果我们只想查询一个表中特定列的数据,可以使用SELECT语句,并在其中指定要查询的列名。
例如,如果我们只想查询"employees"表中的"first_name"和"last_name"列,可以使用以下语句:SELECT first_name, last_name FROM employees;3. 查询满足特定条件的数据答案:如果我们只想查询满足特定条件的数据,可以在SELECT语句中使用WHERE子句来指定条件。
例如,如果我们只想查询"employees"表中工资大于5000的员工,可以使用以下语句:SELECT * FROM employees WHERE salary > 5000;4. 对查询结果进行排序答案:如果我们想对查询结果进行排序,可以在SELECT语句中使用ORDER BY子句,并指定要排序的列名。
例如,如果我们想按照"employees"表中的"last_name"列进行升序排序,可以使用以下语句:SELECT * FROM employees ORDER BY last_name ASC;5. 对查询结果进行分组答案:如果我们想对查询结果进行分组,可以在SELECT语句中使用GROUP BY 子句,并指定要分组的列名。
oracle习题及答案
1.查询工资大于12000的员工姓名和工资Select last_name||' '||first_name,salary from employees where salary >12000;2.查询员工号为176的员工的姓名和部门号Select last_name||' '||first_name,department_id from employees where employee_id=176;3.选择工资不在5000到12000的员工的姓名和工资Select last_name||' '||first_name,salary from employees where salary not between 5000 and 12000;4.选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id和雇用时间Select last_name||' '||first_name,job_id,hire_date from employees where hire_date between '1-2月-98' and '1-5月-98';5.选择在20或50号部门工作的员工姓名和部门号Select last_name||' '||first_name,department_id from employees where department_id in (20,50);6.选择在1994年雇用的员工的姓名和雇用时间Select last_name||' '||first_name,hire_date from employees where hire_date like '%94';7.选择公司中没有管理者的员工姓名及job_idSelect last_name||' '||first_name,job_id from employees where Manger_id is null;8.选择公司中有奖金的员工姓名,工资和奖金Select last_name||' '||first_name,salary,commission_pct from employees where commission_pct is not null;9.选择员工姓名的第三个字母是a的员工姓名Select last_name||' '||first_name from employees where last_name||' '||first_name like '___a%';10.选择姓名中有字母a和e的员工姓名Select last_name||' '||first_name from employees where last_name||first_name like '%a%e%' or last_name||first_name like '%e%a%';多表查询11.显示所有员工的姓名,部门号和部门名称。
oracle课后习题答案
oracle课后习题答案Oracle课后习题答案在学习Oracle数据库时,完成课后习题是巩固知识的重要方式。
本文将为大家提供一些常见Oracle课后习题的答案,帮助读者更好地理解和应用数据库知识。
一、基本概念题1. 什么是数据库?答:数据库是一个组织和存储数据的系统。
它是一个结构化的集合,用于存储、管理和操纵数据,并提供对数据的安全性和完整性的保证。
2. 什么是表?答:表是数据库中的一个基本组成部分,用于存储数据。
它由行和列组成,行表示记录,列表示记录中的字段。
3. 什么是SQL?答:SQL(Structured Query Language)是一种用于访问和管理关系型数据库的语言。
它可以用于查询、插入、更新和删除数据,以及创建和管理数据库对象。
二、SQL查询题1. 查询员工表中所有员工的姓名和工资。
答:SELECT 姓名, 工资 FROM 员工表;2. 查询订单表中订单金额大于1000的订单号和金额。
答:SELECT 订单号, 订单金额 FROM 订单表 WHERE 订单金额 > 1000;3. 查询客户表中所有客户的姓名和地址,按照地址降序排列。
答:SELECT 姓名, 地址 FROM 客户表 ORDER BY 地址 DESC;三、SQL插入题1. 向员工表中插入一条记录,姓名为"张三",工资为5000。
答:INSERT INTO 员工表 (姓名, 工资) VALUES ('张三', 5000);2. 向订单表中插入一条记录,订单号为"2021001",金额为2000。
答:INSERT INTO 订单表 (订单号, 订单金额) VALUES ('2021001', 2000);四、SQL更新题1. 将员工表中工资低于3000的员工工资增加1000。
答:UPDATE 员工表 SET 工资 = 工资 + 1000 WHERE 工资 < 3000;2. 将客户表中地址为"北京市"的客户地址改为"上海市"。
oracle_sql单行函数练习(含答案)
oracle_sql单行函数练习(含答案)整理 2012-12-3Oracle单行函数的实例练习,基于Oracle自带数据库,用户名分别为hr(主要)和scott。
基本上都做出来了,但还有一道关于人民币转数字的还没有做出来,有知道的留言下哦,其他地方有错误的请指正。
Sql代码1./*1、将字符串'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)2.2、将字符串' abc ewr 3245 4 '去除两头空格输出3.3、将字符串'abc 234 abc abc def abc' 中'abc' 替换为'###' 输出4.4、将数字7433453.52638263 四舍五入后输出5.5、将数字743583.345234 中十位数之后数字全部忽略输出6.*/7.8.--1、将字符串'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)9.SELECT lpad('abc',10,'#') FROM dual;10.SELECT rpad('abc',10,'#') FROM dual;11.--2、将字符串' abc ewr 3245 4 '去除两头空格输出12.SELECT trim(' abc ewr 3245 4 ') FROM dual;13.--3、将字符串'abc 234 abc abc def abc' 中'abc' 替换为'###' 输出14.SELECT replace('abc 234 abc abc def abc','abc','###') FROM dual;15.--4、将数字7433453.52638263 四舍五入后输出16.SELECT ROUND(7433453.52638263) FROM dual;17.--5、将数字743583.345234 中十位数之后数字全部忽略输出18.SELECT round(743583.345234,-1) from DUAL;19.20./*21.6、查询hr方案中employees表,将所有员工工资上涨11.173% 后,四舍五入到十位输出22.7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出23.8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示24.9、将当前时间加一年后格式化输出显示25.10、两个时间相减后输出26.*/27.28.--6、查询hr方案中employees表,将所有员工工资上涨11.173% 后,四舍五入到十位输出29.SELECT round(salary*(1+0.11173),-1)30.FROM employees;31.32.--7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出33.SELECT to_char(sysdate,'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS')34.FROM dual;35.--8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示36.SELECT to_char(hire_date,'YYYY-MM-DD HH24:MI:SS')37.FROM employees;38.--9、将当前时间加一年后格式化输出显示39.SELECT to_char(add_months(sysdate,12),'YYYY-MM-DD')40.from dual;41.42.--10、两个时间相减后输出43.SELECT to_date(2011,'YYYY')-sysdate44.FROM dual;45.46./*47.11、查询hr下employees表中入职时间满10年的员工48.12、查询hr下employees表中2000年后入职的员工49.13、查询hr下employees表中所有98年3月入职的员工50.14、查询hr下employees表中所有在3月入职的人51.15、查询当前时间距离'1998-8-2' 的月数52.*/53.54.--11、查询hr下employees表中入职时间满10年的员工55.SELECT first_name56.FROM employees57.where months_between(sysdate,hire_date) > 10*12;58.59.--12、查询hr下employees表中2000年后入职的员工60.SELECT *61.FROM employees62.where to_char(hire_date,'YYYY') >= '2000' ;63.64.--13、查询hr下employees表中所有98年3月入职的员工65.--这里要注意用的是to_char 来进行日期比较66.SELECT *67.FROM employees68.WHERE to_char(hire_date,'YYYY-MM') = '1998-03';69.70.--14、查询hr下employees表中所有在3月入职的人71.SELECT *72.FROM employees73.WHERE to_char(hire_date,'MM') ='03';74.75.--15、查询当前时间距离'1998-8-2' 的月数76.SELECT MONTHS_BETWEEN(sysdate,to_date('1998-8-2','YYYY-MM-DD'))77.FROM dual;78.79./*80.16、将当前时间减12个月然后输出81.17、查询下一个星期一显示输出82.18、查询一个月的最后一天显示输出83.19、查询hr下employees表中入职时间在下半个月的员工84.20、查询hr下employees表中上半年入职的员工85.*/86.--16、将当前时间减12个月然后输出87.SELECT add_months(sysdate,-12)88.FROM dual;89.90.--17、查询下一个星期一显示输出91.SELECT next_day(sysdate,'星期一')92.FROM dual;93.--18、查询一个月的最后一天显示输出94.SELECT last_day(sysdate)95.FROM dual;96.97.--19、查询hr下employees表中入职时间在下半个月的员工98.SELECT *99.FROM employees100.WHERE to_char(hire_date,'DD') > '15' ;101.102.--20、查询hr下employees表中上半年入职的员工103.SELECT *104.FROM employees105.WHERE to_char(hire_date,'MM') <= '06';106.107.108./*109.21、将数字825398374.3762 格式化成字符串后输出110.22、字符串变数字'RMB825,398,374.38'111.23、查询hr下employees表将员工薪水以'$999,999,999.00' 格式显示112.24、第一个参数是null返回第三个参数,否则返回第二个参数113.SELECT nvl2(234, 42, 142) FROM dual114.25、两个参数相同返回null,否则返回第一个参数115.SELECT nullif('abc','abc') FROM dual116.*/117.--21、将数字825398374.3762 格式化成字符串后输出118.SELECT to_char(825398374.3762)119.from dual;120.121.--22、字符串变数字'RMB825,398,374.38'122.--没有写出来123.124.--23、查询hr下employees表将员工薪水以'$999,999,999.00' 格式显示125.SELECT to_char(salary,'$999,999,999.00')126.FROM employees;127.128.--24、第一个参数是null返回第三个参数,否则返回第二个参数129.SELECT nvl2(commission_pct,commission_pct,0)130.FROM employees;131.132.--25、两个参数相同返回null,否则返回第一个参数133.SELECT nullif('aaa','aaa')134.FROM dual;135.136.SELECT nullif('aaa','bbb')137.FROM dual;138.139./*140.26、查询hr下employees表中frist_name,last_name 长度相同的员工记录141.27、查询hr下employees表中first_name,last_name 首字母相同的员工记录142.29、employees表中如果员工职位是'IT_PROG'加薪10 % ,如果员工职位是'ST_CLEAK '加薪15 % ,如果是'SA_REP' 加薪20 % .143.30、查询hr下employees表中每月支出工资总额(多行函数不能和其他字段一起查询)144.*/145.146.--26、查询hr下employees表中frist_name,last_name 长度相同的员工记录147.SELECT *148.FROM employees149.WHERE length(first_name) = length(last_name);150.151.--27、查询hr下employees表中first_name,last_name 首字母相同的员工记录152.SELECT *153.FROM EMPLOYEES154.WHERE substr(first_name,1,1) = substr(last_name,1,1);155.156.--29、employees表中如果员工职位是'IT_PROG'加薪10 % ,如果员工职位是'ST_CLEAK '加薪15 % ,如果是'SA_REP' 加薪20 % .157.SELECT first_name, job_id,salary, case job_id when 'IT_PROG' then salary*(1+0.1)158.when 'ST_CLEAK' then salary*(1+0.15)159.when 'SA_REP' then salary*(1+0.2) else salary end bonus160.FROM employees ;161.162.--30、查询hr下employees表中每月支出工资总额(多行函数不能和其他字段一起查询)163.SELECT sum(salary) 工资总额164.FROM employees;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--1、选择部门30中的雇员select * from emp where deptno=30;--2、列出所有办事员的姓名、编号和部门select ename,empno,dname from emp e inner join dept d on e.deptno =d.deptno where job=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 and job=upper('clerk '));--6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')) or (job<>upper(‘manager’) andjob<>upper(‘clerk’) and sal>=2000)--7、找出收取佣金的雇员的不同工作select distinct 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);< P> --11、显示只有首字母大写的所有雇员的姓名select ename from emp where ename=initcap(ename);--12、显示正好为6个字符的雇员姓名select ename from emp where length(ename)=6--13、显示不带有'R'的雇员姓名Select ename from emp where ename not like ‘%R%’;Select ename from emp where instr(ename,’R’)=0;--14、显示所有雇员的姓名的前三个字符select substr(ename,1,3) from emp--15、显示所有雇员的姓名,用a替换所有'A'Select replace(ename,’A’,’a’) from emp--16、显示所有雇员的姓名以及满10年服务年限的日期Select ename,add_months(hiredate,12*10) ‘服务年限的日期’ from emp--17、显示雇员的详细资料,按姓名排序Select * from emp order by ename--18、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面Select ename from emp order by hiredate--19、显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序Select ename,job,sal from emp order by job desc ,sal asc--20、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面select ename,to_char(hiredate,'yyyy'),to_char(hiredate,'mm') from emp order by hiredate asc--21、显示在一个月为30天的情况下所有雇员的日薪金select ename,sal/30 from emp;--22、找出在(任何年份的)2月受聘的所有雇员select * from emp where to_char(hiredate,'mm')='02';--23、对于每个雇员,显示其加入公司的天数select ename,sysdate-hiredate from emp--24、显示姓名字段的任何位置,包含"A" 的所有雇员的姓名select ename from emp where ename like '%A%';select ename from emp where instr(ename,’A’,1)>0;--25、以年、月和日显示所有雇员的服务年限Select months_between(sysdate,hiredate)/12 as “年”,months_between(sysdate,hiredate) as “月”, sysdate-hiredate as “日” from emp--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 whereename=upper('smith'));--3、列出所有雇员的姓名及其直接上级的姓名select e.ename,m.ename from emp e,emp m where e.mgr=m.empno(+);--4、列出入职日期早于其直接上级的所有雇员select ename from emp e where hiredate<(select hiredate from emp where empno=e.mgr);--5、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门select dname,ename from dept d left join emp e on d.deptno=e.deptno;--6、列出所有“CLERK”(办事员)的姓名及其部门名称select ename,dname from emp e left join dept d on e.deptno=d.deptno where job=upper('clerk');--7、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录select job,min(sal) from emp group by job having min(sal)>1500;--8、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号select ename from emp where deptno = (select deptno from dept where dname=uppder('SALES'))--9、列出薪金高于公司平均水平的所有雇员select ename from emp where sal>(select avg(sal) from emp);--10、列出与“SCOTT”从事相同工作的所有雇员select ename from emp where job=(select job from emp whereename=upper('scott'));--11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金select ename,sal from emp where sal in (select sal from emp wheredeptno=30);--12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金select ename ,sal from emp where sal>(select max(sal) from emp where deptno=30);--13、列出每个部门的信息以及该部门中雇员的数量select d.deptno,dname,count(ename) from dept d left join emp e on (d.deptno=e.deptno)group by d.deptno,dname--14、列出所有雇员的雇员名称、部门名称和薪金Select e.ename,d.dname,e.sal from emp e left join dept d on(d.deptno=e.deptno)--15、列出从事同一种工作但属于不同部门的雇员的不同组合Select tba.ename,tbb.ename,tba.job,tbb.job,tba.deptno,tba.deptnoFrom emp tba,emp tbbWhere tba.job=tbb.job and tba.deptno<>tbb.deptno--16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员Select dept.deptno,dname,loc,count(empno)From dept,empWhere dept.deptno=emp.deptno(+)Group by dept.deptno,dname,loc--17、列出各种类别工作的最低工资Select min(sal) from emp group by job--18、列出各个部门的MANAGER(经理)的最低薪金Select deptno,min(sal) from emp where job=upper(‘manager’) group by deptno--19、列出按年薪排序的所有雇员的年薪select (sal+nvl(comm,0))*12 as avn from emp order by avn--20、列出薪金水平处于第四位的雇员Select * from (Select ename,sal, rank() over (order by sal desc) as grade from emp) where grade=4。