收藏 分销(赏)

专题1_数据库笔试模拟-answer.doc

上传人:xrp****65 文档编号:7593780 上传时间:2025-01-10 格式:DOC 页数:22 大小:181.50KB
下载 相关 举报
专题1_数据库笔试模拟-answer.doc_第1页
第1页 / 共22页
专题1_数据库笔试模拟-answer.doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述
CORE-E-001的综合练习: 1.用sqlplus连接数据库时,为什么会出Oracle not available错误? oracle server(即通常所说的数据库)是否启动,ORACLE_SID是否正确设置。 2.找出员工的姓中(last_name)第三个字母是a的员工名字 select last_name from s_emp where last_name like '__a%'; 3.找出员工名字中含有a和e的 select first_name from s_emp where first_name like '%a%' and first_name like '%e%'; 比较: select first_name from s_emp where first_name like '%a%e%'; 4.找出所有有提成的员工,列出名字、工资、提出,显示结果按工资从小到大,提成从小到大 select first_name , salary , commission_pct from s_emp where commission_pct is not null order by salary , commission_pct; 5.42部门有哪些职位 select distinct title from s_emp where dept_id = 42 6.除了Sales部门还有哪些部门 select id , name ,region_id from s_dept where name <> 'Sales' 7.显示工资不在1000到1550之间的员工信息:名字、工资,按工资从大到小排序。 select first_name , salary from s_emp where salary not between 1000 and 1550 order by salary desc 8.显示职位为Stock Clerk和Sales Representative,年薪在14400和17400之间的员工的信息:名字、职位、年薪。 select first_name , title , salary*12 ann_sal from s_emp where title in ('Stock Clerk', 'Sales Representative' ) and salary between 1200 and 1450 9.解释select id ,commission_pct from s_emp where commission_pct is null和select id , commission_pct from s_emp where commission_pct = null的输出结果。 is null判断是否为空,=null判断某个值是否等于null,null = null和null <> null都为null。 10.select语句的输出结果为 select * from s_dept; select * from s_emp; select * from s_region; select * from s_customer; …… 当前用户有多少张表,结果集有多少条记录。 select 'select * from '||table_name||';' from user_tables; 11.判断select first_name , dept_id from s_emp where salary > '1450'是否抱错,为什么? 隐式数据类型转换 CORE-E-002的综合练习: 1.改变NLS_LANG的值,让select to_char(salary*12,’L99,999.99’) from s_emp 输出结果的货币单位是¥和$ setenv NLS_LANG ' SIMPLIFIED CHINESE_CHINA.ZHS16GBK' setenv NLS_LANG ' AMERICAN_AMERICA.US7ASCII' 2.列出每个员工的名字,工资、涨薪后工资(涨幅为8%),元为单位进行四舍五入 select first_name , salary , round(salary*1.08) from s_emp; 3.找出谁是最高领导,将名字按大写形式显示 select upper(first_name) from s_emp where manager_id is null; 4.Ben的领导是谁(Ben向谁报告)。 select e1.first_name from s_emp e1 , s_emp e2 where e2.manager_id = e1.id and e2.first_name = 'Ben'; select e1.first_name from s_emp e1 join s_emp e2 on e2.manager_id = e1.id and e2.first_name = 'Ben'; 5.Ben领导谁。(谁向Ben报告)。 select e1.first_name from s_emp e1 , s_emp e2 where e1.manager_id = e2.id and e2.first_name = 'Ben'; select e1.first_name from s_emp e1 join s_emp e2 on e1.manager_id = e2.id and e2.first_name = 'Ben' 6.哪些员工的工资高于他直接上司的工资,列出员工的名字和工资,上司的名字和工资 select e.first_name , e.salary , m.first_name , m.salary from s_emp e , s_emp m where e.manager_id = m.id and e.salary > m.salary; select e.first_name , e.salary , m.first_name , m.salary from s_emp e join s_emp m on e.manager_id = m.id and e.salary > m.salary 7.哪些员工和Biri(last_name)同部门 select e1.first_name from s_emp e1 , s_emp e2 where e1.dept_id = e2.dept_id and e2.last_name = 'Biri' and e1.last_name <> 'Biri'; select e1.first_name from s_emp e1 join s_emp e2 on e1.dept_id = e2.dept_id and e2.last_name = 'Biri' where e1.last_name <> 'Biri' select e1.first_name from s_emp e1 join s_emp e2 on e1.dept_id = e2.dept_id and e2.last_name = 'Biri' and e1.last_name <> 'Biri' 8.哪些员工跟Smith(last_name)做一样职位 select e1.first_name from s_emp e1 , s_emp e2 where e1.title = e2.title and e2.last_name = 'Smith' and e1.last_name <> 'Smith'; select e1.first_name from s_emp e1 join s_emp e2 on e1.title = e2.title and e2.last_name = 'Smith' where e1.last_name <> 'Smith'; select e1.first_name from s_emp e1 join s_emp e2 on e1.title = e2.title and e2.last_name = 'Smith' and e1.last_name <> 'Smith'; 9.哪些员工跟Biri(last_name)不在同一个部门 select e1.first_name from s_emp e1 , s_emp e2 where e1.dept_id = e2.dept_id(+) and e2.last_name(+) = 'Biri' and e2.last_name is null; select e1.first_name from s_emp e1 left outer join s_emp e2 on e1.dept_id = e2.dept_id and e2.last_name = 'Biri' where e2.id is null 10.哪些员工跟Smith(last_name)做不一样的职位 select e1.first_name , e1.title from s_emp e1 , s_emp e2 where e1.title = e2.title(+) and e2.last_name(+) = 'Smith' and e2.id is null; select e1.first_name,e1.title from s_emp e1 left outer join s_emp e2 on e1.title = e2.title and e2.last_name = 'Smith' where e2.id is null 11.显示有提成的员工的信息:名字、提成、所在部门名称、所在地区的名称 select d.name dname , r.name rname , first_name , commission_pct from s_emp e , s_dept d , s_region r where e.dept_id = d.id and d.region_id = r.id and mission_pct is not null; select d.name dname , r.name rname , first_name , commission_pct from s_emp e join s_dept d on e.dept_id = d.id and mission_pct is not null join s_region r on d.region_id = r.id 12.显示Operations部门有哪些职位 select distinct e.title from s_emp e , s_dept d where e.dept_id = d.id and d.name = 'Operations'; select distinct e.title from s_emp e join s_dept d on e.dept_id = d.id and d.name = 'Operations' 13.整个公司中,最高工资和最低工资相差多少 select max(salary) – min(salary) from s_emp; 14.提成大于0的人数 select count(*) from s_emp where commission_pct > 0; 15.显示整个公司的最高工资、最低工资、工资总和、平均工资,保留到整数位。 select max(salary) , min(salary) , sum(salary) , round(avg(salary)) from s_emp; 16.整个公司有多少个领导 select count(distinct manager_id) from s_emp; 17.列出在同一部门入职日期晚但工资高于其他同事的员工:名字、工资、入职日期 select distinct e1.first_name , e1.start_date , e1.salary from s_emp e1 , s_emp e2 where e1.dept_id = e2.dept_id and e1.start_date > e2.start_date and e1.salary > e2.salary; select distinct e1.first_name , e1.start_date , e1.salary from s_emp e1 join s_emp e2 on e1.dept_id = e2.dept_id and e1.start_date > e2.start_date and e1.salary > e2.salary CORE-E-003的综合练习: 1.各个部门平均、最大、最小工资、人数,按照部门号升序排列 select dept_id , avg(salary) asal , max(salary) asal , min(salary) isal , count(*) cnt from s_emp group by dept_id order by dept_id; 2.各个部门中工资大于1500的员工人数 select dept_id , count(*) cnt from s_emp where salary > 1500 group by dept_id; 3.各个部门平均工资和人数,按照部门名字升序排列 select max(d.name) dname , max(r.name) rname , avg(e.salary) avgsal,count(*) cnt from s_emp e , s_dept d , s_region r where e.dept_id = d.id and d.region_id = r.id group by dept_id order by dname , rname; select max(d.name) dname , max(r.name) rname , avg(e.salary) avgsal , count(*) cnt from s_emp e join s_dept d on e.dept_id = d.id join s_region r on d.region_id = r.id group by e.dept_id order by dname,rname 4.列出每个部门中有同样工资的员工的统计信息,列出他们的部门号,工资,人数 select dept_id,salary,count(*) cnt from s_emp group by dept_id,salary having count(*) >= 2 5.该部门中工资高于1000的员工数量超过2人,列出符合条件的部门:显示部门名字、地区名称 select max(d.name) dname , max(r.name) rname , count(*) cnt from s_emp e , s_dept d , s_region r where e.dept_id = d.id and d.region_id = r.id and e.salary > 1000 group by dept_id having count(*) > 2; select max(d.name) dname , max(r.name) rname , avg(e.salary) avgsal , count(*) cnt from s_emp e join s_dept d on e.dept_id = d.id and e.salary > 1000 join s_region r on d.region_id = r.id group by e.dept_id having count(*) > 2 6.哪些员工的工资,高于整个公司的平均工资,列出员工的名字和工资(降序) select first_name , salary from s_emp where salary > (select avg(salary) from s_emp) order by salary desc; 7.哪些员工的工资,介于32和33部门(33高些)平均工资之间 select first_name , salary from s_emp where salary between (select avg(salary) from s_emp where dept_id = 32) and (select avg(salary) from s_emp where dept_id = 33); 8.所在部门平均工资高于1500的员工名字 select first_name , salary from s_emp where dept_id in (select dept_id from s_emp group by dpet_id having avg(salary) > 1500); 9.列出各个部门中工资最高的员工的信息:名字、部门号、工资 select first_name , salary , dept_id from s_emp where (dept_id , salary) in (select dept_id , max(salary) from s_emp group by dept_id); 10.最高的部门平均工资值的是多少 select max(avg(salary)) from s_emp group by dept_id; 11.哪个部门的平均工资是最高的,列出部门号、平均工资 select dept_id,avg(salary) from s_emp group by dept_id having avg(salary) = (select max(avg(salary)) from s_emp); 12.哪些部门的人数比32号部门的人数多 select dept_id , count(*) cnt from s_emp group by dept_id having count(*) > (select count(*) from s_emp where dept_id = 32); 13.Ben的领导是谁(非关联子查询) select first_name from s_emp where id in (select manager_id from s_emp where first_name = 'Ben'); 14.Ben领导谁(非关联子查询) select first_name from s_emp where manager_id = (select id from s_emp where first_name = 'Ben'); 15.Ben的领导是谁(关联子查询) select first_name from s_emp o where exists (select 1 from s_emp i where first_name = 'Ben' and i.manager_id = o.id); 16.Ben领导谁(关联子查询) select first_name from s_emp o where exists (select 1 from s_emp i where first_name = 'Ben' and i.id = o.manager_id); 17.列出在同一部门共事,入职日期晚但工资高于其他同事的员工:名字、工资、入职日期(关联子查询) select first_name from s_emp o where exists (select 1 from s_emp i where i.dept_id = o.dept_id and o.start_date > i.start_date and o.salary > i.salary); 18.哪些员工跟Biri(last_name)不在同一个部门(非关联子查询) select first_name from s_emp where dept_id not in (select dept_id from s_emp where last_name = 'Biri'); 19.哪些员工跟Biri(last_name)不在同一个部门(关联子查询) select last_name from s_emp o where not exists (select 1 from s_emp i where i.dept_id = o.dept_id and i.last_name = 'Biri'); 20.Operations部门有哪些职位(非关联子查询) select distinct title from s_emp where dept_id in (select id from s_dept where name = 'Operations'); 21.Operations部门有哪些职位(关联子查询) select distinct title from s_emp e where exists (select 1 from s_dept d where e.dept_id = d.id and name = 'Operations'; CORE-E-004综合练习 定义 CORE-F-012——CORE-F-017的综合练习: 1.工资在1500至3000之间的员工,各自工作的年限(四舍五入,降序)。 答:select first_name,start_date,round(months_between(sysdate,start_date)/12) years from s_emp where salary between 1500 and 3000 order by years desc 2.公司规定,每个员工在工作25年的第一个周五,可以申请退休,查询每个员工的这天显示格式:2010-01-01 答:select first_name,to_char(start_date,'yyyy-mm-dd'),to_char(next_day(add_months(start_date,12*25),'FRIDAY'),'yyyy-mm-dd') from s_emp 3.显示员工的名字、入职日期、周几入职(用英文全拼),显示顺序从周一至周日。 答: select first_name,start_date,to_char(start_date,'DAY') from s_emp order by to_char(start_date-1,'d') select first_name,start_date,to_char(start_date,'DAY') , next_day(start_date, 'MONDAY')-start_date diff from s_emp order by diff desc select first_name,start_date, to_char(start_date,'DAY'), decode(to_char(start_date,'d'),1,8, to_char(start_date,'d')) d1 from s_emp order by d1; 4.写一个sql脚本,实现多对多关系(暂时不实现约束):学生表、课程表、学生选课表,学生表包含如下信息:学号、姓名、性别、出生日期、政治面貌,课程表包含如下信息:课程号、课程名称、学分、学时、学期,学生选课表包含如下信息:学号、课程号、成绩并插入数据。 答:create table student( id char(10), name varchar2(20), gender char(2), birth date, party varchar(10)); create table course( id char(10), name varchar2(20), credit number(2,1), period number(3), term number(1)); create table st_c( sid char(10), cid char(10), grade number(3,1)); insert into student values('2006015001','Mary','F','15-MAY-1988','A'); insert into student values('2006015002','John','M','05-JAN-1988','A'); insert into student values('2006015003','Kitty','F','23-MAY-1987','B'); insert into student values('2006015004','Tony','M','18-MAY-1989','A'); insert into student values('2006015005','Elice','F','15-MAY-1989','B'); insert into course values('MUST200901','Data structure',4,72,2); insert into course values('MUST200902','Operating Systems',2,54,1); insert into course values('MUST200903','Design Pattern',4,72,2); insert into course values('MUST200904','Core Java',5,108,1); insert into st_c values('2006015001','MUST200901',85); insert into st_c values('2006015001','MUST200902',90); insert into st_c values('2006015001','MUST200903',85); insert into st_c values('2006015002','MUST200902',92); insert into st_c values('2006015002','MUST200903',78); insert into st_c values('2006015004','MUST200901',96); insert into st_c values('2006015004','MUST200902',86); insert into st_c values('2006015004','MUST200903',98); insert into st_c values('2006015004','MUST200904',70); insert into st_c values('2006015003','MUST200904',67); 5.在建好表的基础上完成查询:某个指定的学生(给出学生名字)选了哪些课程。 select s.name student_name,c.name course_name from student s ,course c,st_c sc where s.id=sc.sid and c.id = sc.cid and s.name = 'Mary' select s.name student_name,c.name course_name from student s join st_c sc on s.id = sc.sid and s.name = 'Mary' join course c on c.id = sc.cid Mary选了哪些课程 STUDENT_NAME COURSE_NAME -------------------- -------------------- Mary Data structure Mary Operating Systems Mary Design Pattern 6. 某个指定的学生(给出学号)没有选哪些课程。 select c.name from course c, stu_c sc where c.id = sc.cid(+) and sc.sid(+) = '2006015004' and sc.cid is null; select c.name from course c left outer join stu_c sc on c.id = sc.cid and sc.sid = '2006015004' where sc.cid is null (CORE-E-005)综合练习 定义 CORE-F-018——CORE-F-020的综合练习: 1.完善sql脚本中的建表语句,在三张表上增加约束:学生表、课程表、学生选课表,在数据处理上体现出事务的概念。 答: //student_course.sql drop table lm_student; drop table lm_course; drop table lm_sc; create table lm_student( id char(10) primary key, name varchar2(20) not null, gender char(2) default 'F' not null, birth date not null , party varchar2(10)); create table lm_course( id char(10) primary key, name varchar2(20) not null, credit number(2,1) , period number(3) , term number(1)); create table lm_sc( sid char(10) references lm_student(id) on delete cascade, cid char(10) references lm_course(id) on delete cascade, grade number(3,1), primary key (sid,cid) ); insert into lm_student values('2006015001','Mary','F','15-MAY-1988','A'); insert into lm_student values('2006015002','John','M','05-JAN-1988','A'); insert into lm_student values('2006015003','Kitty','F','23-MAY-1987','B'); insert into lm_student values('2006015004','Tony','M','18-MAY-1989','A'); insert into lm_student values('2006015005','Elice','F','15-MAY-1989','B'); insert into lm_course values('MUST200901','Data structure',4,72,2); insert into lm_course values('MUST200902','Operating Systems',2,54,1); insert into lm_course values('MUST200903','Design Pattern',4,72,2); insert into lm_course values('MUST200904','Core Java',5,108,1); insert into lm_sc values('2006015001','MUST200901',85); insert into lm_sc values('2006015001','MUST200902',55); insert into lm_sc values('2006015001','MUST200903',45); insert into lm_sc values('2006015002','MUST200902',92); insert into lm_sc values('2006015002','MUST200903',78); insert into lm_sc values('2006015004','MUST200901',96); insert into lm_sc values('2006015004','MUST200902',86); insert into lm_sc values('2006015004','MUST200903',98); insert into lm_sc values('2006015004','MUST200904',70); insert into lm_sc values('2006015003','MUST200904',67); insert into lm_sc values('2006015003','MUST200901',57); commit; 3.修改某个学生的出生日期。 答:update lm_student set birth=add_months(birth,2) where name='Tony'; 4.修改某门课程的学时。 答:update lm_course set period=80 where id = 'MUST200901'; 5.删除某名学生。 答:delete from lm_student where name='Tony'; lm_sc的sid 上的FK定义成了on delete cascade,oracle先删完成了 e delete from lm_sc where sid = (select sid from lm_student where name = 'Tony'); 所以
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服