Oracle 练习作业10.1-1-2

--一、现有学生表student,班级表classInfo,表结构如下:
--student表:sid学号,sname姓名,sex性别,birthday生日,age入学年龄,smoney缴费,cid班级ID
--classInfo表:班级编号cid,班级名称cname
--建表
drop table student cascade constraint;
drop table classinfo cascade constraint;

create table student(
sid number(6) constraint pk_stu_sid primary key,
sname varchar2(20),
sex varchar2(4),
birthday date,
age number(2),
smoney number(7,2),
cid number(4)
);

create table classinfo(
cid number(4) constraint pk_cls_cid primary key,
cname varchar2(20)
);

alter table student add constraint fk_stu_cls_cid foreign key(cid) references classinfo(cid);

insert into classinfo values(1101,'工商管理');
insert into classinfo values(1102,'计算机');
insert into classinfo values(1103,'会计');
insert into classinfo values(1104,'药品');

insert into student values(110001,'小明','男',to_date('1999-9-9','yyyy-mm-dd'),10,11220.50,1103);
insert into student values(110002,'小张','女',to_date('1991-6-9','yyyy-mm-dd'),19,10000.00,1102);
insert into student values(110003,'小红','女',to_date('1996-7-3','yyyy-mm-dd'),14,8800.00,1102);
insert into student values(110004,'张三','男',to_date('1996-2-1','yyyy-mm-dd'),14,6600.00,1102);
insert into student values(110005,'小花','女',to_date('1994-6-7','yyyy-mm-dd'),16,11440.50,1101);
insert into student values(110006,'王五',null,to_date('1991-12-5','yyyy-mm-dd'),20,11440.50,1101);
commit;

select * from student; 
select * from classinfo;

--1、 查询入学年龄在18-20的女生或者未输入性别的学生信息,且年龄小的排在后面。
select * from student where age between 18 and 20 and (sex='女' or sex is null);

--2、 查询班级名称、学生姓名、性别、缴费(要求显示单位:元),相同班级的要放在一起,再按姓名升序排列。
select c.cname,s.sname,s.sex,s.smoney||'元' smoney from student s
join classinfo c on s.cid=c.cid order by c.cname,s.sname;

--3、 查询各班名称和人数。
select cname,count(*) from classinfo c join student s on c.cid=s.cid group by cname;

--4、 查询各班名称和人数,但人数必须不少于2,且人数多的放在前面。
select cname,count(*) from classinfo c join student s on c.cid=s.cid 
group by cname having count(*)>=2 order by count(*) desc;

--5、 查询1980年出生的有哪些学生。
select * from student where to_char(birthday,'yyyy')='1980';
select * from student where to_char(birthday,'yyyy')='1991';

--6、 查询男生和女生人数,没有输入性别的当作男生计算。
select sex,count(*) from (select nvl(sex,'男') sex from student) group by sex;

--7、 查询没有人员的班级。
select * from classinfo where cid not in(select distinct cid from student);

--8、 查询入学年龄在20以上的学生信息。
select * from student where age>20;
select * from student where age>=20;

--9、 查询班级平均入学年龄在20及以上的班级名称和平均年龄。
select * from classinfo c join (select cid,avg(age) avg_age from student group by cid) t 
on c.cid=t.cid where avg_age>=20;
select * from classinfo c join (select cid,avg(age) avg_age from student group by cid) t 
on c.cid=t.cid where avg_age>=15;


--二、现有 
--部门表bm:bid部门编号,bname名称
--人员表ry:rid人员编号,rname名称,bid部门编号
--工资表gz:rid人员编号,sal工资金额,rq发放日期
--建表

drop table bm cascade constraint;
drop table ry cascade constraint;
drop table gz cascade constraint;

create table bm(
bid number(4) constraint pk_bm_bid primary key,
bname varchar2(10)
);
create table ry(
rid number(4) constraint pk_ry_rid primary key,
rname varchar2(20),
bid number(4)
);
create table gz(
rid number(4),
sal number(7,2),
rq date
);

alter table ry add constraint fk_ry_bm_bid foreign key(bid) references bm(bid);
alter table gz add constraint fk_gz_ry_rid foreign key(rid) references ry(rid);

insert into bm values(1001,'销售');
insert into bm values(1002,'后勤');

insert into ry values(1101,'tom',1001);
insert into ry values(1103,'barbie',1001);
insert into ry values(1102,'jim',1002);

insert into gz values(1101,1200.5,sysdate);
insert into gz values(1101,1200.5,sysdate);
insert into gz values(1102,2000,sysdate);
insert into gz values(1103,5000,sysdate);

select * from bm;
select * from ry;
select * from gz;

--1、 查询员工姓名、部门名称和个人总工资。
select r.rname,b.bname,g.sal from bm b join ry r on b.bid=r.bid
join (select rid,sum(sal) sal from gz group by rid) g on g.rid=r.rid;

--2、 查询本月发了2笔以上工资的员工信息。
select * from ry r join 
(select rid,to_char(rq,'yyyy-mm') rq,count(sal) sals from gz group by rid,rq) t
on r.rid=t.rid where t.rq=to_char(sysdate,'yyyy-mm') and sals=2;

--3、 查询各部门的总工资。ry.bid group by bm.bname;
select bname,sum(sal) from bm b join ry r on b.bid=r.bid join gz g on r.rid=g.rid group by bname;

--4、 查询2009年8月份各部门工资最高的员工信息,显示部门名称、员工姓名和员工工资。
select * from
(select b.bid,max(g.sal) sal from bm b join ry r on b.bid=r.bid
join (select rid,to_char(rq,'yyyy-mm') rq,sum(sal) sal from gz group by rid,rq) g on g.rid=r.rid 
group by b.bid,b.bname) t1
join 
(select b.bid,b.bname,r.rid,r.rname,g.sal from bm b join ry r on b.bid=r.bid
join (select rid,to_char(rq,'yyyy-mm') rq,sum(sal) sal from gz group by rid,rq) g on g.rid=r.rid) t2
on
t1.bid = t2.bid and t1.sal=t2.sal;


--一、现有学生表student,班级表classInfo,表结构如下:
--student表:sid学号,sname姓名,sex性别,birthday生日,age入学年龄,smoney缴费,cid班级ID
--classInfo表:班级编号cid,班级名称cname
--1、 把新进的学生Tom,其学号为x009,年龄19,分配到5班。
--insert into student values(009,'tom',null,null,19,null,5);
insert into student values(009,'tom',null,null,19,null,1103);

--2、 把1班的前5个人分到2班。
select * from student;
update student set cid = 1102 
where sid in (select * from (select sid from student where cid=1101 order by sid) where rownum<=5);
select * from student;

--3、 把学生需要的缴费降低5%。
select * from student;
update student set smoney = smoney*0.95;
select * from student;

--4、 删除年龄不满18岁的学生信息。
select * from student;
delete from student where age < 15;
select * from student;

--5、 查询1990年以前出生的有哪些学生。
select * from student where to_char(birthday,'yyyy')<1990;
select * from student where to_char(birthday,'yyyy')<2000;

--6、 查询班级平均入学年龄在20及以上的班级名称和平均年龄。
select * from classinfo c join
(select cid,avg(age) from student group by cid) t
on c.cid=t.cid;

--二、现有
--部门表bm:bid部门编号,bname名称
--人员表ry:rid人员编号,rname名称,bid部门编号
--工资表gz:rid人员编号,sal工资金额,rq发放日期
--要求:用显式事务实现给销售部中工资>5000的员工降薪5%,同时,工资<1000的员工涨薪10%。
--select * from gz;
--update gz set sal=sal*0.95 where rid in (select r.rid from bm b join ry r on b.bid=r.bid join gz g on g.rid=r.rid where sal >2000);
--update gz set sal=sal*1.1 where rid in (select r.rid from bm b join ry r on b.bid=r.bid join gz g on g.rid=r.rid where sal <2000);
--select * from gz;

declare
cursor c is
select b.bid, r.rid, g.sal
from bm b
join ry r on b.bid = r.bid
join gz g on g.rid = r.rid;
v_temp c%rowtype;
begin
open c;
loop
fetch c
into v_temp;
exit when(c%notfound);
if (v_temp.sal > 5000) then
update gz set sal = sal * 0.95 where rid = v_temp.rid;
commit;
dbms_output.put_line('工资大于5000降薪5%--' || v_temp.sal);
elsif (v_temp.sal < 1000) then
update gz set sal = sal * 1.1 where rid = v_temp.rid;
commit;
dbms_output.put_line('工资小于1000涨薪10%--' || v_temp.sal);
end if;
end loop;
close c;
end;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

math.sqrt_Math.SQRT1_2属性与JavaScript中的示例

math.sqrtJavaScript | Math.SQRT1_2属性 (JavaScript | Math.SQRT1_2 Property) Math.SQRT1_2 is a property in math library of JavaScript that is used to find the value of square root of . It is generally used to solve problems related to circular figures. Math…

微软职位内部推荐-Principal Group Program Manager

微软近期Open的职位:Standard job title: Principal Group Program ManagerDiscipline: Program ManagementProduct: BingDivision: Online Services DivisionGroup OverviewSearch Technology Center, Asia (STCA) is a world class engineering hub for Microsoft. We have t…

MySQL 事务的面试题总结

事务是什么&#xff1f; 事务是一系列的数据库操作&#xff0c;是数据库应用的基本单位。MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。 事务有哪些特性&#xff1f; 在 MySQL 中只有 InnDB 引擎支持事务&#xff0c;它的四个特性如下&#xff1a; 原子性&a…

数据结构pta选择判断复习

第一章绪论 1-3数据的逻辑结构是指数据的各数据项之间的逻辑关系。 错 是数据元素之间的逻辑关系 2-4以下属于逻辑结构的是&#xff08; &#xff09;。 (2分) 顺序表 散列表 有序表 单链表 有序表 2-12以下关于数据结构的说法中正确的是____。 (2分) A数据结构的逻辑结构独立于…

php删除数组中的空元素_PHP | 从数组中删除所有出现的元素

php删除数组中的空元素Given an array and we have to remove all occurrences of an element from it. 给定一个数组&#xff0c;我们必须从中删除所有出现的元素。 array_diff()函数 (array_diff() function) To remove all occurrences of an element or multiple elements…

粗略的看JFinal的基于AOP的拦截器的实现

2019独角兽企业重金招聘Python工程师标准>>> 简单的说一下AOP的实现&#xff0c;所谓AOP&#xff0c;即&#xff08;Aspect Oriented Programming&#xff09;的缩写&#xff0c;体现在程序中就是你可以通过配置在任意的代码块前后插入你想插入的执行代码。例如日志…

MySQL 索引的面试题总结

什么是索引? 索引是一种能帮助 MySQL 提高查询效率的数据结构。 索引分别有哪些优点和缺点? 索引的优点如下: 快速访问数据表中的特定信息,提高检索速度。创建唯一性索引,保证数据表中每一行数据的唯一性。加速表与表之间的连接。使用分组和排序进行数据检索时,可以显…

大二上数据结构复习

目录 第一章绪论练习 第二章线性表 第三章栈和队列 第四章串 第五章数组和广义表 第六章树和二叉树 第七章图 第九章查找 第十章排序 第一章绪论练习 1-8 数据结构的抽象操作的定义与具体实现有关。 (1分) T F 1-14 数据结构包括数据对象集以及它们的逻辑结构和物理结构&#…

MD5算法实现

什么是MD5&#xff1f;&#xff1f;&#xff1f;&#xff0d;&#xff0d;&#xff0d;MD5的全称是Message-Digest Algorithm 5 MD5的典型应用是对一段信息&#xff08;Message&#xff09;产生信息摘要&#xff08;Message-Digest&#xff09;&#xff0c;以防止被篡改。比如&…

Oracle plsqlI 练习 传值

--根据人名查个人薪水和本部门平均薪水--select语句实现select a.deptno "部门编号",a.dname "部门名称",a.ename "姓名",a.sal "薪水",b.avg_sal "部门平均薪水"from (select d.deptno, d.dname, e.ename, sal n…

Java StringBuilder codePointBefore()方法与示例

StringBuilder类codePointBefore()方法 (StringBuilder Class codePointBefore() method) codePointBefore() method is available in java.lang package. codePointBefore()方法在java.lang包中可用。 codePointBefore() method is used to represent the Unicode code point …

MySQL 中锁的面试题总结

什么是锁?MySQL 中提供了几类锁? 锁是实现数据库并发控制的重要手段,可以保证数据库在多人同时操作时能够正常运行。MySQL 提供了全局锁、行级锁、表级锁。其中 InnoDB 支持表级锁和行级锁,MyISAM 只支持表级锁。 什么是死锁? 是指两个或两个以上的进程在执行过程中,因…

Oracle-(if/case/以及模拟注册登录)练习-20131015

--作业--1、 输入部门编号&#xff0c;按照下列加薪比例执行&#xff08;用if-elsif 和case两种方法实现&#xff09;。--deptno raise(%)--10 5%--20 10%--30 15%--40 20%--加薪比例以现有的sal为标准--方法一select deptno,ename,sal,(case deptnowhen 10 then sal * 0…

大二上数据结构复习2

第二章线性表 综合 一、在什么情况下用顺序表比用链表好 表长度确定&#xff0c;很少进行插入删除操作且经常访问元素 二、2-4 顺序表的插入和删除要求仍然保持各个元素原来的次序。设在等概率情形下, 对有 127 个元素的顺序表进行插入, 平均需要移动多少个元素? 删除一个元素…

Java SimpleTimeZone inDaylightTime()方法及示例

SimpleTimeZone类inDaylightTime()方法 (SimpleTimeZone Class inDaylightTime() method) inDaylightTime() method is available in java.util package. inDaylightTime()方法在java.util包中可用。 inDaylightTime() method is used to check whether the given date (d) is …

MySQL 命令和内置函数

如何用命令行方式连接 MySQL 数据库? 使用 mysql -u用户名 -p密码; 输入用户名和密码就可以正常进入数据库连接了,实例如下: mysql -uroot -p123456; 其中,用户名为 root,密码为 123456。 关于命令 mysql -h 127.0.0.1 -uroot -P 3307 -p3307 以下说法错误的是? A.-h …

Oracle plsql 月历

declarev_year number : 2013;v_month number : &input_month;v_day number;v_lastday number;begindbms_output.put_line(v_year || 年 || v_month || 月的月历);--转换星期为数字&#xff0c;方便计算case substr(to_char(to_date(v_year || v_month,yyyymm),day),3,1)wh…

Java GregorianCalendar setTimeZone()方法与示例

GregorianCalendar类setTimeZone()方法 (GregorianCalendar Class setTimeZone() method) setTimeZone() method is available in java.util package. setTimeZone()方法在java.util包中可用。 setTimeZone() method is used to sets the time zone with the specified TimeZon…

操作系统(王道笔记第二章)

目录第二章 2.1_1进程的定义、组成、组成形式、特征 2.1_2进程的状态与转换 2.1_3进程的控制 2.1_4进程通信 2.1_5线程概念和多线程模型 2.2_1处理机调度的概念层次 2.2_2处理机调度的时机、切换与过程、方式 2.2_3调度算法的评价指标 2.2_4FCFS、SJF、HRRN调度算法 2.2_5时间片…

MySQL 中日志的面试题总结

MySQL 有哪些重要的日志文件? MySQL 中的重要日志分为以下几个: ① 错误日志:用来记录 MySQL 服务器运行过程中的错误信息,比如,无法加载 MySQL 数据库的数据文件,或权限不正确等都会被记录在此,还有复制环境下,从服务器进程的信息也会被记录进错误日志。默认情况下,…