Oracle查询练习及答案范文

合集下载

Oracle查询练习及答案

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数据库查询练习任务

oracle数据库查询练习任务

简单查询1.查询customers表中的所有记录的c_name, c_truename, c_address,c_mobile列。

SELECT c_name, c_truename, c_address, c_mobile FROM Customers2.在会员信息表中查询年龄在20岁到30之间的会员信息。

SELECT*from Customers year(getdate())-year(birthdate)between 20 and303.查询会员所有的地址,即不重复的地址。

sELECT DISTINCT c_Address FROM Customers4.查询会员电话区号为0731的会员信息。

SELECT*FROM Customers WHERE c_Phone LIKE'0731%'5.查询VIP会员信息。

SELECT*FROM Customers where c_Type='VIP'6.统计商品类别数。

SELECT count(*)FROM Types7.在商品信息表中查询三星的产品信息。

SELECT*FROM Goods where g_Name like'三星_%'8.在商品信息表中查询价格在2000-3000区间的商品信息。

SELECT*FROM Goods WHERE g_Price between 2000 and 30009.在商品信息表以价格降序查询商品信息。

SELECT*FROM Goods ORDER BY g_Price DESC10.在商品信息表中查询商品类别为02的所有商品的商品名称,商品单价,并根据商品价格进行升序排序。

SELECT g_Name g_Price FROM Goods WHERE t_ID like'02%'ORDER BY g_Price ASC11.在商品信息表中查询三星和海尔品牌的商品的详细信息。

oracle数据库单表查询相关练习题及答案写法

oracle数据库单表查询相关练习题及答案写法

oracle数据库单表查询相关练习题及答案写法drop table PRODUCT cascade constraints;create table PRODUCT(id NUMBER not null, --主键pcode VARCHAR2(20) not null, --商品编号pname VARCHAR2(20), --商品名称inprice NUMBER(7,2), --进价outprice NUMBER(7,2), --售价toma VARCHAR2(20), --管理员名称lastcou NUMBER, --剩余库存数量ptype VARCHAR2(5), --商品类型mark NUMBER, --有效标志createtime DATE --⽣产⽇期);alter table PRODUCTADD CONSTRAINT pk_product primary key (ID);insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (1, 'f-qq45', '⾹蕉', 2.8, 4, '张三', 12, 'a', 1, to_date('05-06-2017', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (2, 'f-56tt', '苹果', 3.4, 5, '张三', 33, 'a', 1, to_date('16-06-2016', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (3, 'f-332', '梨', 2.7, 4, '张三', 76, 'a', 1, to_date('23-09-2016', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (4, 'f-20', '猪⾁', 14, 16, '张三', 56, 'b', 1, to_date('31-12-2013', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (5, 'f-qq46', '圆珠笔', 3, 5, '王五', 55, 'e', 1, to_date('14-09-2016', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (6, 'f-57tt', '樱桃', 8, null, '王五', 12, 'a', 1, to_date('22-05-2006', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (7, 'f-292', '三⽂鱼', 5, 8, '王五', 23, 'b', 1, to_date('31-07-2001', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (8, 'f-604', '螺丝⼑', 12, 15, '王五', 72, 'c', 1, to_date('24-02-2013', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (9, 'f-qq47', '扳⼿', 14, 19, '王五', 90, 'c', 1, to_date('14-05-2015', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime)values (10, 'f-58tt', '钳⼦', 10, 13, '张三', 97, 'c', 1, to_date('28-03-2012', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (11, 'f-916', '矿泉⽔', 2.5, 3, '李四', 44, 'd', 1, to_date('21-07-2012', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (12, 'f-1228', '杏仁露', 4, 5, '李四', 38, 'd', 1, to_date('22-02-2013', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (13, 'f-59tt', '钢笔', null, 43, '李四', 22, 'e', 1, to_date('30-09-2013', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (14, 'f-1540', '铅笔', .5, .8, '赵六', 72, 'e', 1, to_date('14-05-2018', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (15, 'f-1852', '⼤马哈鱼', 1.5, 2, '赵六', 76, 'b', 1, to_date('17-05-2012', 'dd-mm-yyyy'));insert into PRODUCT (id, pcode, pname, inprice, outprice, toma, lastcou, ptype, mark, createtime) values (16, 'f-2164', '鸡蛋', 2.7, 4, '赵六', 56, 'b', 1, to_date('14-09-2010', 'dd-mm-yyyy'));commit;-- 使⽤insert into任意添加三条数据(数据信息⾃定)加到这个表中-- 删除'猪⾁'的那条记录-- 将扳⼿和钳⼦的商品名称分别改为'16号扳⼿'和'⼩号钳⼦', 并将这两个商品的管理⼈员都改为'赵六'-- 查询商品类型为'a'的所有商品-- 查询王五负责的c类商品-- 查询剩余数量⼩于50的所有商品-- 查询剩余数量在60-80之间的-- 查询商品名称带'笔'的和带'鱼'的记录-- 查询商品编号中带'tt'的记录-- 查询商品类型为a, d, c的所有商品-- 查询所有'e'类型商品, 并按照剩余库存数量排序-- 查询管理商品数少于4的管理员名称和管理的商品数量-- 查询所有的管理员名称和其⼿上所管理的所有商品数量-- 查询所有的管理员名称和其⼿上所管理的所有'a'类商品名称的数量-- 查询所有商品中剩余数量最少的⼀个-- 查询⽣产⽇期在2015/5/31之前的数据-- 假设所有商品的有效期是⼀年, 以当前系统时间为标准, 查询所有商品的信息, 并且加⼀列标注是否过期-- 查询每个管理员所管理的商品的平均进价价格和售价价格-- 查询每个管理员⼿上的商品的利润的平均值-- 查询假设每个管理员把所有商品售完后各⾃的利润总和答案:--SELECT * FROM product/*INSERT INTO productVALUES(50,'qqwweerr','⾖腐',2.5, 3, '张三', 30, 'b', 1, SYSDATE);COMMIT;*//*DELETE product p WHERE p.pname='猪⾁';COMMIT;*//*UPDATE product p SET p.pname='16号扳⼿', p.toma='赵六' WHERE p.pname='扳⼿';UPDATE product p SET p.pname='⼩号钳⼦', p.toma='赵六'WHERE p.pname='钳⼦';COMMIT;*/--SELECT * FROM product p WHERE p.ptype='a';--SELECT * FROM product p WHERE p.ptype='c' AND p.toma='王五';--SELECT * FROM product p WHERE stcou<50;--SELECT * FROM product p WHERE stcou <80 AND stcou > 60; --SELECT * FROM product p WHERE stcou BETWEEN 60 AND 80;/*SELECT * FROM product pWHERE p.pname LIKE '%笔%' OR p.pname LIKE '%鱼%';*/--SELECT * FROM product p WHERE p.pcode LIKE '%tt%';/*SELECT * FROM product p WHERE p.ptype IN ('a','c','d');SELECT * FROM product p WHERE p.ptype = 'a'OR p.ptype = 'c'OR p.ptype = 'd'*/--SELECT * FROM product p--WHERE p.ptype='e' ORDER BY stcou ASC或者desc/*SELECT p.toma, COUNT(p.pname) 管理的商品数FROM product p GROUP BY p.tomaHAVING COUNT(p.pname) < 4*//*SELECT p.toma, COUNT(p.pname) 管理的商品数FROM product p GROUP BY p.toma*//*SELECT p.toma, SUM(DECODE(p.ptype, 'a', 1, 0))FROM product p GROUP BY p.tomaSELECT p.toma, COUNT(p.ptype) FROM product pWHERE p.ptype='a' GROUP BY p.toma*//*SELECT * FROM product pWHERE stcou<=ALL(SELECT lastcou FROM product)*//*SELECT * FROM product pWHERE stcou=(SELECT MIN(lastcou) FROM product)*//*SELECT * FROM product pWHERE p.createtime < to_date('20150531','yyyymmdd')*//*SELECT p.pname, CASE WHEN (SYSDATE-p.createtime) > 365 THEN '过期' ELSE '正常' END 是否过期FROM product p*//*SELECT p.toma, AVG(p.inprice), round(AVG(p.outprice), 2) FROM product pGROUP BY p.toma*//*SELECT p.toma, AVG(p.outprice-p.inprice)FROM product p GROUP BY p.toma*/SELECT p.toma, SUM((p.outprice-p.inprice)* stcou) 利润总和FROM product p GROUP BY p.toma。

oracle简单查询练习

oracle简单查询练习

单表查询练习:针对雇员表进行练习雇员表中记录的是一个个的雇员的基本信息。

雇员表(EMP)No. 字段类型描述1 EMPNO NUMBER(4) 表示雇员编号,是唯一编号2 ENAME V ARCHAR2(10) 表示雇员姓名3 JOB V ARCHAR2(9) 表示工作职位4 MGR NUMBER(4) 表示一个雇员的领导编号5 HIREDA TE DA TE 表示雇佣日期6 SAL NUMBER(7,2) 表示月薪,工资7 COMM NUMBER(7,2) 表示奖金,或者称为佣金8 DEPTNO NUMBER(2) 部门编号1、选择部门30中的所有员工。

Select * from emp where DEPTNO=30;2、列出所有办事员(CLERK)的姓名,编号和部门编号。

Select ename,empno,deptno from emp where job=’CLERK’;3、找出佣金高于薪金的员工。

Select * from emp where comm>sal;4、找出佣金高于薪金的60%的员工。

Select * from emp where comm>sal*0.6;5、找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。

Select * from emp where deptno=10 and job=’MANAGER’or deptno=20 and job=’CLERK’;6、找出部门10中所有经理(MANAGER),部门20中的办事员(CLERK),既不是经理又不是办事员但其薪水大于或者等于2000的所有员工的详细资料。

Select * from emp where deptno=10 and job= ‘MANAGER’or deptno=20 and job=’CLERK’or job!=’ CLERK’and job!=’ MANAGER’and sal>=2000;7、找出收取佣金的员工的不同工作。

Oracle练习day04(附答案及多种解法)

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练习题附答案

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;select a.ename 员工,b.ename 经理from emp a left join emp b on a.mgr=b.empnowhere a.sal>=2000;练习10、在表EMP中查询所有工资高于JONES的所有雇员姓名、工作和工资。

Oracle基础练习题及答案(多表查询1)(共5篇)

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 有关emp表的简单查询练习题

oracle 有关emp表的简单查询练习题

SQL练习训练一1、查询dept表的结构在命令窗口输入:desc dept;2、检索dept表中的所有列信息select * from dept3、检索emp表中的员工姓名、月收入及部门编号select ename "员工姓名",sal "月收入",empno "部门编号" from emp注意查询字段用分号隔开。

4、检索emp表中员工姓名、及雇佣时间日期数据的默认显示格式为“DD-MM-YY",如果希望使用其他显示格式(YYYY-MM-DD),那么必须使用TO_CHAR函数进行转换。

select ename "员工姓名", hiredate "雇用时间1",to_char(hiredate,'YYYY-MM-DD') "雇用时间2" from emp注意:第一个时间是日期类型的,在Oracle的查询界面它的旁边带有一个日历。

第二个时间是字符型的。

易错点:不要将YYYY-MM-DD使用双引号5、使用distinct去掉重复行。

检索emp表中的部门编号及工种,并去掉重复行。

select distinct deptno "部门编号",job "工种" from emp order by deptno注意distinct放的位置为什么不放在from的前面?翻译成汉语就明白了应该是:选择不重复的部门编号和工种从emp表。

而不是:选择部门编号和工种不重复地从emp表。

这还是人话么O(∩_∩)O哈哈~6、使用表达式来显示列检索emp表中的员工姓名及全年的月收入select ename "员工姓名", (sal+nvl(comm,0))*12 "全年收入" from emp 注意:防止提成comm为空的操作,使用nvl函数7、使用列别名用姓名显示员工姓名,用年收入显示全年月收入。

oracle上机试题及答案

oracle上机试题及答案

oracle上机试题及答案Oracle上机试题及答案1. 查询当前数据库版本- 请写出SQL语句来查询当前数据库的版本。

答案:```sqlSELECT * FROM V$INSTANCE;```2. 创建表- 编写SQL语句创建一个名为`employees`的表,包含字段`id`(主键,自动增长),`name`(姓名),`department`(部门),`salary`(薪资)。

答案:```sqlCREATE TABLE employees (id NUMBER GENERATED ALWAYS AS IDENTITY,name VARCHAR2(100),department VARCHAR2(50),salary NUMBER(10, 2),PRIMARY KEY (id));```3. 插入数据- 向`employees`表中插入一行数据,姓名为"John Doe",部门为"IT",薪资为5000。

答案:```sqlINSERT INTO employees (name, department, salary) VALUES('John Doe', 'IT', 5000);```4. 更新数据- 更新`employees`表中姓名为"John Doe"的员工的薪资为6000。

答案:```sqlUPDATE employees SET salary = 6000 WHERE name = 'John Doe'; ```5. 删除数据- 删除`employees`表中所有薪资低于3000的员工记录。

答案:```sqlDELETE FROM employees WHERE salary < 3000;```6. 查询数据- 查询`employees`表中所有员工的姓名和薪资,并按薪资从高到低排序。

Oraclep324查询练习及答案

Oraclep324查询练习及答案

Oraclep324查询练习及答案(1) 查询20号部门的所有员工信息;(2) 查询所有工种为CLERK 的员工的员工号、员工名和部门号;(3) 查询奖金COMM 高于工资SAL 的员工信息;(4) 查询奖金高于工资的20%的员工信息;(5) 查询10号部门中工种为MANAGER 和20号部门中工种为CLERK 的员工的信息;(6) 查询所有公众不是MANAGER 和CLERK ,且工资大于或等于2000的员工的详细信息;(7) 查询有奖金的员工的不同工种;(8) 查询所有员工工作与奖金的和;(9) 查询没有奖金或奖金低于100的员工信息;(10)查询各月倒数第二天入职的员工信息;(11)查询工龄大于或等于10年的员工信息;(12)查询员工信息,要求以首字母大写的方式显示所有员工的姓名;(13)查询员工名正好为6个字母的员工信息;(14)查询员工名字中不包含字母S 的员工;(15)查询员工姓名的第二个字母为M 的员工信息;(16)查询所有员工姓名的前三个字符;(17)查询所有员工的姓名,如果包含字母s ,则用S 替换;(18)查询员工的姓名和入职日期,并按入职日期从先到后进行排序;(19)显示所有员工的姓名、工种、工资和京津,按工种降序排序,若工种相同则按工资升序排序;(20)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,若月份相同则按入职的年份排序;(21)查询在2月份入职的所有员工信息;(22)查询所有员工入职以来的工作期限,用“**年**月**日”的形式表示;(23)查询至少有一个员工的部门信息;(24)查询工资比SMITH 员工工资高的所有员工信息;(25)查询所有员工的姓名及其直接上级的姓名;(26)查询入职日期早于其上级领导的所有员工信息;(27)查询所有部门及其员工信息,包括那些没有员工的部门;(28)查询所有员工及其部门信息,包括那些还不属于任何部门的员工;(29)查询所有工种为CLERK 的员工的姓名及其部门名称;(30)查询最低工资大于2500的各种工作;(31)查询平均工资低于2000的部门及其员工信息;(32)查询在SALES 部门工作的员工的姓名信息;(33)查询工资高于公司平均工资的所有员工信息;(34)查询与SMITH 员工从事相同工作的所有员工信息;(35)列出工资等于30号部门中某个员工工资的所有员工的姓名和工资;(36)查询工资高于30号部门中工作的所有员工的工资的员工姓名和工资;(37)查询每个部门中的员工数量、平均工资和平均工作年限;(38)查询不同部门的同一种工作;(39)查询各个部门的详细信息以及部门人数、部门平均工资;(40)查询各种工作的最低工资;(41)查询各个部门中不同工种的最高工资;(42)查询10号部门员工及其领导的信息;(43)查询各个部门的人数及平均工资;(44)查询工资为某个部门平均工资的员工信息;(45)查询工资高于本部门平均工资的员工信息;(46)查询工资高于本部门平均工资的员工信息及其部门的平均工资;(47)查询工资高于20号部门某个员工工资的员工的信息;(48)统计各个工种的员工人数与平均工资;(49)统计每个部门中各工种的人数与平均工资;(50)查询工资、奖金与10号部门某员工工资、奖金都相同的员工信息;(51)查询部门人数大于5的部门的员工信息;(52)查询所有员工工资都大于2000的部门的信息;(53)查询所有员工工资都大于2000的部门的信息及其员工的信息;(54)查询所有员工工资都在2000~3000之间的部门的信息;(55)查询所有工资在2000~3000之间的员工所在的部门的员工信息;(56)查询每个员工的领导所在部门的信息;(57)查询人数最多的部门信息;(58)查询30号部门中工资排序前3名的员工信息;(59)查询所有员工中工资排序在5~10名之间的员工信息;(60)查询SMITH 员工及其所有直接、间接下属员工的信息;(61)查询SCOTT 员工及其直接、间接上级员工的信息;(62)以树状结构查询所有员工与领导之间的层次关系;(63)向emp 表中插入一条记录,员工号为1357,名字为oracle ,工资为2050,部门号为20,入职日期为2002年5月10日;(64)向emp 表中插入一条记录,员工名为FAN,号为8000,其他信息与SMITH员工的信息相同;(65)将各个部门员工的工资修改为该员工所在部门平均工资加1000;1、select * from emp where deptno=20;2、select empno,ename,deptno from emp where job=‘CLERK’3、select * from emp where comm>sal;4、select * from emp where comm.>sal*0.25、select * from emp where job=’MANAGER’and deptno=10 or job=’CLERK’and deptno=206、select * from emp where sal>=2000minusselect * from emp where job=’MANAGER’ or job=’CLERK’select * from mep where job!=’MANAGER’ and job!=’CLERK’ and sal>=20007、select distinct job from emp where comm is not null8、select ename,empno sal+nvl(comm.,0) from emp;9、select * from emp where comm is null or comm<100;10、select * from emp where hiredate in (select last_day(hiredate)-1 from emp);11、select empno,ename,hiredate from emp where (sysdate-hiredate)/365>=10;12、select initcap(ename),empno,sal from emp;13、select * from emp where length(ename)=6;14、select * from emp where ename not like ‘%S%’;15、select * from emp where ename like ‘_M%’;16、select substr(ename,1,3) from mep;17、select replace(ename,’s’,’S’) from emp;18、select ename,hiredate from emp order by hiredate19、select ename,job,sal,comm. From emp order by job desc,sal20、select ename,extract(month from hiredate) month,extract(year from hiredate) year from emp order by month,year;select ename,to_char(hiredate,'yyyy') year,to_char(hiredate,'mm') month from emp order by month,year21.select * from emp where extract(month from hiredate)=’2’;22. select floor((sysdate-hiredate)/365)||'年'||floor(mod(sysdate-hiredate,365)/30)||'月'||floor(mod(mod(sysdate-hiredate,365),30))||'日' worktimefrom emp23.select dname,deptno,loc from dept where deptno in (select deptno from emp group by deptno having count(*)>1);24.select * from emp where sal>(select sal form emp where ename=’SMITH’);25. select a.ename,b.ename from emp a,emp bwhere a.mgr=b.empno26. select a.ename,a.hiredate from emp awhere hiredate<(select hiredate from emp b whereb.empno=a.mgr)27.select dept.deptno,dname,ename,empno,sal from dept left join emp on dept.deptno=emp.deptno;28.select empno,ename,sal,emp.deptno,dname from dept right join emp on dept.deptno=emp.deptno;29.select ename,dname fro m emp,dept where job=’CLERK’ and emp.deptno=dept.deptno;30.select job from emp group by job having min(sal)>2500;31.select deptno,empno,ename,sal from emp where deptno in (select deptno from emp group by deptno having avg(sal)<2000);32.select ename from emp,dept where dname=’SALES’ and dept.deptno=emp.deptno;33.select * from emp where sal>(select avg(sal) from emp);34.select * from emp where job=(select job from emp where ename=’SMITH’);35.select ename,sal from emp where sal in (select sal from emp where deptno=30);36.select ename,sal from emp where sal>all(select sal from emp where deptno=30);37.select count(*),avg(sal),avg((sysdate-hiredate)/365) from emp group by deptno;38.select distinct job,deptno from emp;查询同部门同工种员工信息select ename,emp.job,emp.deptno from emp,(select deptno,job from emp group by (deptno,job) having count(*)>1) awhere emp.deptno=a.deptno and emp.job=a.joborder by ename39.select dept.deptno,dname,d.amount,d.avgsal from dept,(select deptno,count(*)amount,avg(sal) avgsal from emp group by deptno) d where dept.deptno=d.deptno;40.select job,min(sal) from emp group by job;41. select deptno,job,max(sal) from emp group by deptno,job42. select a.ename,b.ename from emp a,emp bwhere a.mgr=b.empno and a.deptno=10;43.select deptno,count(empno),avg(sal) from emp group by deptno;44.select * from emp where sal in (select avg(sal) from emp group by deptno);45.select * from emp e where sal>(select avg(sal) from emp where deptno=e.deptno);46.select ename,empno,sal d.avgsal from emp e,(select empno,avg(sal) avgsal from emp) d where sal>(select avg(sal) from emp where deptno=e.deptno) and d.deptno=e.deptno47.select * from emp where sal>any(select sal from empwhere deptno=20);48.select job,count(empno),avg(sal) from emp group by job;49. select deptno, job,count(empno), avg(sal) from emp group by deptno,job;50. select * from emp where (sal,comm) in (select sal,comm from emp where deptno=10);51. select * from emp where deptno in (select deptno from emp group by deptno having count(empno)>5);52. select deptno,dname,loc from dept where deptno in (select deptno from emp group by deptno having min(sal)>2000);53.select emp.deptno,dname,ename,empno,sal from emp,dept where emp.deptno in(select deptno from emp group by deptno having min(sal)>2000)and emp.deptno=dept.deptno;54. select dname,deptno,loc from deptwhere deptno not in (select deptno from emp where sal<2000 OR SAL>3000)55. select *from emp where deptno in (select deptno from emp where saL BETWEEN 2000 AND 3000)56.select a.deptno,dname,loc from dept a,emp b,emp c where a.deptno=b.deptno andb.mgr=c.empno57.select deptno,dname,loc from dept where deptno in(select deptno from emp group by deptno having count(empno)>=all(select max(count(*))from emp group by deptno));58.select *from emp where deptno=30 and rownum<=3 order by sal;58.select rownum,a.empno,a.sal from (select * from emp order by sal desc) aWhere rownum<=3 and deptno=3059. select rownum,a.empno,a.sal from(select * from emp order by sal desc) a where rownum<=10minusselect rownum,a.empno,a.sal from (select * from emp order by sal desc) awhere rownum<563.insert into emp (empno,ename,sal,deptno,hiredate) values (1357,’oracle’,2050,20,to_date(‘2002-5-10’,’YYYY-MM-DD’));64.insert into emp select8000,’FAN’,job,mgr,hire date,sal,comm.,deptno from emp where ename=’SMITH’;65.update emp set sal=1000+(select avg(sal) from emp e where emp.deptno=e.deptnogroup by deptno);SQL> SELECT EXTRACT(DAY FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) DAY,2 EXTRACT(HOUR FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) HOUR,3 EXTRACT(MINUTE FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) MINUTE,4 NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’) DETAIL5 FROM EMP;原意是给出两个日期,获取两个日期之间的间隔数值,返回形如格式:x年x月x日,类似倒计时工具计时器。

ORACLE经典查询答案

ORACLE经典查询答案

select * from dept;select * from emp;--1.列出至少有一个员工的所有部门。

select dname from dept where deptno in(select deptno from emp);select dname from dept where deptno in(select deptno from emp group by deptno having count(deptno)&gt;=1);--2.列出薪金比“SMITH”多的所有员工。

select ename from emp where sal&gt;(select sal from emp where ename='SMITH');--3.列出所有员工的姓名及其直接上级的姓名。

select a.ename,(select ename from emp b where b.empno=a.mgr) as boss_name from empa;--4.列出受雇日期早于其直接上级的所有员工。

select a.ename from emp a where a.hiredate&lt;(select hiredate from emp b whereb.empno=a.mgr);--5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门select a.dname,b.empno,b.ename,b.job,b.mgr,b.hiredate,b.sal,b.deptno;from dept a left join emp b on a.deptno=b.deptno;--6.列出所有“CLERK”(办事员)的姓名及其部门名称。

select ename,dname from emp join dept on emp.deptno=dept.deptno where job='CLERK'; select a.ename,b.dname from emp a join dept b on a.deptno=b.deptno and a.job='CLERK';--7.列出最低薪金大于1500的各种工作。

oracle数据库增删改查练习50例-答案(精)

oracle数据库增删改查练习50例-答案(精)

oracle 数据库增删改查练习50例-答案一、建表--学生表drop table student;create table student (sno varchar2(10,sname varchar2(10,sage date,ssex varchar2(10;insert into student values('01','赵雷',to_date('1990/01/01','yyyy/mm/dd','男';insert into student values('02','钱电',to_date('1990/12/21','yyyy/mm/dd','男';insert into student values('03','孙风',to_date('1990/05/20','yyyy/mm/dd','男';insert into student values('04','李云',to_date('1990/08/06','yyyy/mm/dd','男';insert into student values('05','周梅',to_date('1991/12/01','yyyy/mm/dd','女';insert into student values('06','吴兰',to_date('1992/03/01','yyyy/mm/dd','女';insert into student values('07','郑竹',to_date('1989/07/01','yyyy/mm/dd','女';insert into student values('08','王菊',to_date('1990/01/20','yyyy/mm/dd','女';--课程表drop table course;create table course (cno varchar2(10,cname varchar2(10,tno varchar2(10;insert into course values ('01','语文','02';insert into course values ('02','数学','01';insert into course values ('03','英语','03';--教师表drop table teacher;create table teacher (tno varchar2(10,tnamevarchar2(10;insert into teacher values('01','张三';insert into teacher values('02','李四';insert into teacher values('03','王五';--成绩表drop table sc;create table sc (sno varchar2(10,cno varchar2(10,score number(18,1;insert into sc values('01','01',80.0;insert into sc values('01','02',90.0;insert into sc values('01','03',99.0;insert into sc values('02','01',70.0;insert into scvalues('02','02',60.0;insert into sc values('02','03',80.0;insert into scvalues('03','01',80.0;insert into sc values('03','02',80.0;insert into scvalues('03','03',80.0;insert into sc values('04','01',50.0;insert into scvalues('04','02',30.0;insert into sc values('04','03',20.0;insert into scvalues('05','01',76.0;insert into sc values('05','02',87.0;insert into scvalues('06','01',31.0;insert into sc values('06','03',34.0;insert into scvalues('07','02',89.0;insert into sc values('07','03',98.0;commit;二、查询1.1、查询同时存在"01"课程和"02"课程的情况select s.sno, s.sname, s.sage, s.ssex, sc1.score, sc2.score from student s, sc sc1, sc sc2 where s.sno = sc1.sno and s.sno = sc2.sno and o = '01' and o = '02';1.2、查询必须存在"01"课程,"02"课程可以没有的情况select t.*, s.score_01, s.score_02 from student t inner join (select a.sno, a.score score_01, b.score score_02 from sc a left join (select * from sc where cno = '02' b on (a.sno = b.sno where o = '01' s on (t.sno = s.sno;2.1、查询同时'01'课程比'02'课程分数低的数据select s.sno, s.sname, s.sage, s.ssex, sc1.score, sc2.score from student s, sc sc1, sc sc2 where s.sno = sc1.sno and s.sno = sc2.sno and o = '01' and o = '02' and sc1.score < sc2.score;2.2、查询同时'01'课程比'02'课程分数低或'01'缺考的数据select s.sno, s.sname, s.sage, s.ssex, t.score_01, t.score_02 from student s, (select b.sno, a.score score_01,b.score score_02 from (select * from sc where cno = '01' a, (select * from sc where cno = '02' b where a.sno(+ = b.sno t where s.sno = t.sno and (t.score_01 < t.score_02 ort.score_01 is null;3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩select s.sno, s.sname, t.avg_score avg_score from student s, (select sno, round(avg(score, 2 avg_score from sc group by sno having avg(score >= 60 order by sno t where s.sno = t.sno;4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩4.1、有考试成绩,且小于60分select s.sno, s.sname, t.avg_score avg_score from student s,(select sno, round(avg(score, 2 avg_score from sc group by sno having avg(score < 60 order by sno t where s.sno = t.sno;4.2、包括没有考试成绩的数据select g.* from (select s.sno, s.sname,nvl(t.avg_score, 0 avg_score from student s, (select sno, round(avg(score, 2 avg_score from sc group by sno order by sno t where s.sno = t.sno(+ g where g.avg_score < 60;5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩5.1、查询所有成绩的(不含缺考的)。

oracle查询练习题

oracle查询练习题

oracle查询练习题1. 编写一个查询,显示员工表中所有员工的姓名和工资。

```sqlSELECT 姓名, 工资FROM 员工表;```2. 编写一个查询,显示员工表中所有员工的编号、姓名以及入职日期。

```sqlSELECT 编号, 姓名, 入职日期FROM 员工表;```3. 编写一个查询,显示员工表中工资大于5000的员工的编号、姓名和工资。

```sqlSELECT 编号, 姓名, 工资FROM 员工表WHERE 工资 > 5000;```4. 编写一个查询,显示员工表中工资在4000到6000之间的员工的编号、姓名和工资。

```sqlSELECT 编号, 姓名, 工资FROM 员工表WHERE 工资 BETWEEN 4000 AND 6000;```5. 编写一个查询,显示员工表中工资为最低工资的员工的编号、姓名和工资。

```sqlSELECT 编号, 姓名, 工资FROM 员工表WHERE 工资 = (SELECT MIN(工资) FROM 员工表);```6. 编写一个查询,显示员工表中每个部门的员工数量。

```sqlSELECT 部门, COUNT(*) AS 员工数量FROM 员工表GROUP BY 部门;```7. 编写一个查询,显示员工表中月薪大于平均月薪的员工的编号、姓名和工资。

```sqlSELECT 编号, 姓名, 工资FROM 员工表WHERE 工资 > (SELECT AVG(工资) FROM 员工表);```8. 编写一个查询,显示员工表中按照工资降序排列的所有员工的编号、姓名和工资。

```sqlSELECT 编号, 姓名, 工资FROM 员工表ORDER BY 工资 DESC;```9. 编写一个查询,显示员工表中每个部门的平均工资。

```sqlSELECT 部门, AVG(工资) AS 平均工资FROM 员工表GROUP BY 部门;```10. 编写一个查询,显示员工表中每个部门的最高工资和最低工资。

Oracle数据库查询练习及答案

Oracle数据库查询练习及答案

O r a c l e数据库查询练习及答案(共6页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--1 找出佣金高于薪金60%的雇员。

SELECT * FROM emp WHERE comm>sal*;2 找出部门10中所有经理和部门20中所有办事员的详细资料。

SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK';3 找出部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等2000的所有雇员的详细资料。

SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR JOB NOT IN('MANAGER','CLERK') AND SAL>=2000;SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR (JOB<>'MANAGER' AND JOB<>'MANAGER' AND SAL>=2000);4 找出收取佣金的雇员的不同工作。

SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL;5 找出不收取佣金或收取的佣金低于300的雇员。

SELECT * FROM EMP WHERE COMM IS NULL OR COMM<300;6 找出各月最后一天受雇的所有雇员。

oracle 练习有答案

oracle 练习有答案
insert into SC values('02' , '02' , 60)
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数据库的理解和应用能力,下面将提供一些常见的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练习题及答案

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两表查询练习附答案

oracle两表查询练习附答案

Sutdent表的定义字段名字段描述数据类型主键外键非空唯一自增Id学号INT(10)是否是是是Name姓名VARCHAR(20)否否是否否Sex性别VARCHAR(4)否否否否否Birth出生年份YEAR否否否否否Department院系VARCHAR(20)否否是否否Address家庭住址VARCHAR(50)否否否否否Score表的定义字段名字段描述数据类型主键外键非空唯一自增Id编号INT(10)是否是是是Stu_id学号INT(10)否否是否否C_name课程名VARCHAR(20)否否否否否Grade分数INT(10)否否否否否1.创建student和score表create table student(id number(10)not null primary key,name varchar2(20)not null,sex varchar2(4),birth number,department varchar2(20)not null,address varchar2(50));create table score(id number(10)not null primary key,stu_id number(10)not null,c_name varchar2(20),grade number(10));2.为student表和score表增加记录向student表插入记录的INSERT语句如下:Insert into student values(100101,'张三','男',23,'计算机系','北京市朝阳区');Insert into student values(100102,'李四','男',21,'英语系','北京市海淀区');Insert into student values(100103,'王五','女',19,'建工系','北京市昌平区');Insert into student values(100104,'孙六','女',21,'化学系','北京市苏州桥');Insert into student values(100105,'齐七','男',23,'英语系','北京市海淀区');向score表插入记录的INSERT语句如下:Insert into score values(001,100101,'计算机基础',89);Insert into score values(002,100101,'英语',93);Insert into score values(003,100101,'数学',87);Insert into score values(004,100102,'计算机基础',83);Insert into score values(005,100102,'英语',81);Insert into score values(006,100102,'数学',77);Insert into score values(007,100103,'计算机基础',91);Insert into score values(008,100103,'英语',85);Insert into score values(009,100103,'数学',88);Insert into score values(010,100104,'计算机基础',84);Insert into score values(011,100104,'英语',71);Insert into score values(012,100104,'数学',83);3.查询student表的所有记录select*from student;4.查询student表的第2条到4条记录1.select *,rownum as con from student where rownum<=4 and rownum>=2;(select*from student where rownum<=4)minus(select*from student where rownum<=1);1、Minus:两个查询,MINUS是从第一个查询结果减去第二个查询结果,如果有相交部分就减去相交部分;否则和第一个查询结果没有区别. INTERSECT是两个查询结果的交集,UNION ALL是两个查询的并集;2、Rownum:对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum 不能以任何表的名称作为前缀。

Oracle数据库入门练习题参考答案范文

Oracle数据库入门练习题参考答案范文

《数据库入门》练习题参考答案1、查询所有药品的医疗项目编码、名称和单价,按照单价的降序排序。

select ylxmbm,ylxmmc,djfrom dw.medi_itemwhere ylxmlb='1'order by dj desc;运行结果:2、查询与’安娜’医师在同一个科室工作的医师姓名。

select b.xmfrom dw.doctor a,dw.doctor bwhere a.ksbm=b.ksbm and a.xm='安娜' and b.xm<>’安娜’;运行结果:3、查询未结算的FYID及其总费用、报销费用和自付费用。

select fyid,zje,bxje,zfjefrom dw.patient_script_genlwhere jshid is null;运算结果:4、查询使用过’阿莫西林’药品的病人个人编码和姓名。

select grbm,xmfrom dw.per_natlwhere grbm in (select grbmfrom dw.medi_item a,dw.patient_script_detl b,dw.patient_script_genl cwhere ylxmmc='阿莫西林'and a.ylxmbm=b.ylxmbm andb.fyid=c.fyid);运行结果:5、查询2012年的平均报销金额。

select avg(bxje)from dw.patient_script_genlwhere to_char(fyfsrq,'YYYY.MM.DD') between '2012.01.01'and '2012.12.31';运行结果:6、查询GRBM是’’的病人的姓名、出生日期、家庭住址和性别(其中性别为’1’表示男性,性别为’2’表示女性,请将数据库中的’1’和’2’转换为’男’和’女’;CDRQ 以’YYYY.MM.DD’的形式显示)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 找出佣金高于薪金60%的雇员。

SELECT * FROM emp WHERE comm>sal*0.6;2 找出部门10中所有经理和部门20中所有办事员的详细资料。

SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK';3 找出部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等2000的所有雇员的详细资料。

SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR JOB NOT IN('MANAGER','CLERK') AND SAL>=2000;SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR (JOB<>'MANAGER' AND JOB<>'MANAGER' AND SAL>=2000);4 找出收取佣金的雇员的不同工作。

SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL;5 找出不收取佣金或收取的佣金低于300的雇员。

SELECT * FROM EMP WHERE COMM IS NULL OR COMM<300;6 找出各月最后一天受雇的所有雇员。

SELECT * FROM EMP WHERE HIREDA TE=LAST_DAY(HIREDATE);--找出各月最后受雇的所有雇员SELECT * FROM emp WHERE hiredate IN (SELECT maxh FROM (SELECT MAX(HIREDATE) maxh,EXTRACT(MONTH FROM hiredate)FROM EMP GROUP BY EXTRACT(MONTH FROM hiredate)));7 找出晚于26年之前受雇的雇员。

SELECT * FROM emp WHERE months_between(SYSDATE,hiredate)<=26*12;8 显示只有首字母大写的的所有雇员的姓名。

SELECT * FROM emp WHERE ename=initcap(ename);9 显示正好为5个字符的雇员的姓名。

SELECT * FROM emp WHERE length(ename)=5;10显示不带有“R”的雇员姓名。

SELECT * FROM emp WHERE instr(ename,'R')=0;SELECT * FROM emp WHERE ename NOT LIKE '%R%';11显示所有雇员的姓名的前三个字符。

SELECT substr(ename,1,3) AS en3 FROM emp;12显所有雇员的姓名,用a替换所有“A”。

SELECT REPLACE(ename,'A','a') FROM emp;13显示所有雇员的姓名以及满10年服务年限的日期。

SELECT ENAME,HIREDA TE,ADD_MONTHS(HIREDA TE,120) AS H_10Y FROM EMP;14显示雇员的详细资料,按姓名排序。

SELECT * FROM EMP ORDER BY ENAME;15显示雇员姓名,根据其服务年限,将最老的雇员排在最前面。

SELECT ENAME,HIREDA TE FROM EMP ORDER BY HIREDATE;16显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序顺序排序,而工作按薪金排序。

SELECT ENAME,JOB,SAL FROM EMP ORDER BY JOB DESC,SAL;17显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最早年份的项目排在最前面。

SELECT ENAME,TO_CHAR(HIREDA TE,'YYYY-MM') AS Y_M FROM EMP ORDER BY TO_CHAR(HIREDATE,'MM'),TO_CHAR(HIREDA TE,'YYYY');18显示在一个月为30天的情况下所有雇员的日薪金,取整。

SELECT ROUND(SAL/30) AS SAL FROM EMP;19找出在(任何年份的)2月受聘的所有雇员。

SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'MM')='02';20对于每个雇员,显示其加入公司的天数。

SELECT CEIL(SYSDA TE-HIREDA TE) AS DY FROM EMP;21显示姓名字段的任何位置,包含“A”的所有雇员的姓名。

SELECT ENAME FROM EMP WHERE ENAME LIKE '%A%';SELECT ENAME FROM EMP WHERE INSTR(ENAME,'A')>0;22以年、月和日显示所有雇员的服务年限。

SELECT HIREDATE,FLOOR(MONTHS_BETWEEN(SYSDA TE,HIREDATE)/12) AS Y,MOD(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDA TE)),12) AS M,MOD(FLOOR(SYSDATE-HIREDATE),30) AS D FROM EMP;23列出至少有一个雇员的所有部门。

SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP);24列出薪金比“SMITH”多的所有雇员。

SELECT * FROM EMP WHERE SAL>(SELECT SAL FROM EMP WHEREENAME='SMITH');25列出所有雇员的姓名及其上级的姓名。

SELECT ygb.ename AS empnm,sjb.ename AS mgrnm FROM emp ygb,emp sjb WHERE ygb.mgr=sjb.empno;26列出入职日期早于其直接上级的所有雇员。

SELECT * FROM emp ygb WHERE hiredate<(SELECT hiredate FROM emp sjb WHERE sjb.empno=ygb.mgr);27列出部门和这些部门的雇员,同时列出那些没有雇员的部门。

SELECT * FROM dept WHERE deptno IN (SELECT DISTINCT deptno FROM emp)UNIONSELECT * FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)SELECT dname,ename FROM dept a LEFT JOIN emp b ON a.deptno=b.deptno;28列出所有“CLERK”(办事员)的姓名及其部门名称。

SELECT ename,dname FROM dept a,emp b WHERE a.deptno=b.deptno AND job='CLERK';29列出各种类型的最低薪金,并使最低薪金大于1500。

SELECT job,MIN(sal) FROM emp GROUP BY job HA VING MIN(sal)>1500;30列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。

SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES');31列出薪金高于公司平均水平的所有雇员。

SELECT * FROM EMP WHERE SAL>(SELECT A VG(SAL) FROM EMP);32列出与“SCOTT”从事相同工作的所有雇员。

SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='SCOTT') AND ENAME<>'SCOTT';33列出薪金等于在部门30工作的所有雇员的姓名和薪金。

SELECT * FROM EMP WHERE SAL IN(SELECT SAL FROM EMP WHERE DEPTNO=30);34列出薪金高于在部门30工作的所有雇员的姓名和薪金。

SELECT * FROM EMP WHERE SAL >ALL(SELECT SAL FROM EMP WHERE DEPTNO=30);35列出在每个部门工作的雇员的经理以及其他信息。

SELECT A.*,B.* FROM DEPT A,EMP B WHERE A.DEPTNO=B.DEPTNO AND JOB='MANAGER';SELECT A.*,B.* FROM (SELECT * FROM EMP WHERE JOB<>'MANAGER') A,(SELECT * FROM EMP WHERE JOB='MANAGER') B WHERE A.DEPTNO=B.DEPTNO AND B.JOB='MANAGER'ORDER BY A.DEPTNO;36列出所有雇员的雇员名称、部门名称和薪金。

SELECT ENAME,DNAME,SAL FROM DEPT A,EMP B WHERE A.DEPTNO=B.DEPTNO;37列出从事同一种工作但属于不同部门的雇员的不同组合。

SELECT * FROM emp ORDER BY job,deptno;38列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员。

SELECT * FROM dept WHERE deptno IN (SELECT DISTINCT deptno FROM emp)UNIONSELECT * FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)39列出各种类型工作的最低工资。

相关文档
最新文档