我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ORACLE百例试炼五

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ORACLE百例试炼五

Oracle系列《五》:SQL综合练习


【1】列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数

select  job,count(*) from emp group by job having min(sal)>1500


【2】列出在部门'SALES'工作的员工姓名

<1>先查询SALES的部门编号 

SQL> SELECT deptno FROM dept WHERE dname='SALES'; 

<2>SELECT ename FROM emp 

WHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES');


【3】列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级 

<1>求出公司平均薪金 

SQL> SELECT AVG(sal) FROM emp;

 

<2>列出薪金高于平均薪金的所有员工 

SQL> SELECT * FROM emp  

WHERE sal>(SELECT AVG(sal) FROM emp); 


<3>查询所在部门信息 

SQL> SELECT e.*,d.dname,d.loc FROM emp e,dept d 

WHERE sal>(SELECT AVG(sal) FROM emp) AND e.deptno=d.deptno; 


<4>查询上级领导 

SQL> 

SQL>SELECT e.empno,e.ename,m.empno,m.ename,d.deptno,d.dname,d.loc  

FROM emp e,dept d,emp m 

WHERE e.sal>(SELECT AVG(sal) FROM emp) AND e.deptno=d.deptno AND e.mgr = m.empno(+); 


<5>求出工资的工资等级 

SQL> SELECT 

e.empno,e.ename,s.grade,m.empno,m.ename,d.deptno,d.dname,d.loc

FROM emp e,dept d,emp m,salgrade s 

WHERE e.sal>(SELECT AVG(sal) FROM emp) AND e.deptno=d.deptno AND e.mgr=m.empno(+) 

AND e.sal BETWEEN s.losal AND s.hisal;


【4】列出与"SCOTT"从事相同工作的所有员工及部门名称 

<1>找出与SCOTT相同工作的雇员,但不能包括自己 

SQL> SELECT empno,ename,job FROM emp 

WHERE job=(SELECT job FROM emp WHERE ename='SCOTT') AND ename!='SCOTT'; 


<2>与部门表关联,查询部门名称 

SQL> SELECT e.empno,e.ename,e.job,d.dname FROM emp e,dept d 

WHERE job=(SELECT job FROM emp WHERE ename='SCOTT') AND ename!='SCOTT'; 

AND e.deptno=d.deptno;


【5】列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金 (本题无结果,薪金都和30号部门不一样)

<1>列出部门30员工的薪金 

SQL> SELECT sal FROM emp WHERE deptno=30; 


<2>上述条件作为子查询,这里注意上述结果是返回多条记录的,所以要用IN 

SQL> SELECT ename,sal FROM emp 

WHERE sal IN(SELECT sal FROM emp WHERE deptno=30) AND deptno!=30;


【6】列出在每个部门工作的员工数量、平均工资和平均服务期限 

<1>每个部门的员工数量:可求出部门名称 

SQL> SELECT d.dname,COUNT(e.empno) 

FROM emp e,dept d 

WHERE e.deptno=d.deptno  GROUP BY d.dname;

 

<2>求平均工资和服务年限 

SQL> SELECT d.dname,COUNT(e.empno),AVG(e.sal),AVG(MONTH_BETWEENS(sysdate,hiredate)/12) year

FROM emp e,dept d 

WHERE e.deptno=d.deptno GROUP BY d.dname;


【7】列出所有部门的详细信息和部门人数 

<1>列出所有部门人数 

SQL> SELECT deptno,COUNT(empno) FROM emp GROUP BY deptno;

 

<2>将以上查询当做一张临时表 

SQL> SELECT d.*,ed.cou 

FROM dept d,(SELECT deptno,COUNT(empno) cou   from emp GROUP BY deptno) ed 

WHERE d.deptno = ed.deptno; 

 

但是以上没有40部门的信息,则应该使用NVL和左连接操作 

SQL> SELECT d.*,NVL(ed.cou,0) 

FROM dept d,(SELECT deptno,COUNT(empno) cou FROM emp   GROUP BY deptno) ed 

WHERE d.deptno = ed.deptno(+);

【8】列出各种工作的最低工资及从事该工作的雇员姓名 

<1>按照工作分组,使用MIN函数求出最低工资 

SQL> SELECT job,MIN(sal) FROM emp GROUP BY job;

 

<2>按照工资查询雇员信息 

SQL> SELECT * FROM emp 

WHERE sal IN (SELECT MIN(sal) FROM emp   GROUP BY job);



【9】列出各个部门 MANAGER的最低薪金 

SQL> SELECT deptno,MIN(sal) FROM emp 

WHERE job='MANAGER' GROUP BY deptno;



【10】列出所有员工的年工资,按年薪从低到高排序 

SQL> SELECT ename,(sal+NVL(comm,0))*12 income 

FROM emp ORDERY BY income; 


【11】求出部门名称中,带'S'字符的部门员工,工资合计,部门人数 

<1>使用模糊查询,获得部门编号 

SQL> SELECT deptno FROM dept WHERE dname LIKE '%S%'; 


<2>上面作为子查询 

SQL> SELECT deptno,SUM(sal),COUNT(empno) FROM emp 

WHERE deptno IN(SELECT deptno FROM dept WHERE dname LIKE '%S%') GROUP BY deptno;


【12】给任职10年以上的人加薪10%

SQL> UPDATE emp SET sal=sal+(sal*0.1) 

WHERE MONTH_BETWEENS(sysdate,hiredate)/12>10;


【综合题】有个学生运动会比赛信息的数据库,需要建立如下的表,结构如下 运动员sporter: (运动员编号 sporterid,运动员姓名 name,运动员性别 sex,所属系号 department) 

项目item: (项目编号itemid,项目名称itemname,项目比赛地点 location) 

成绩grade: (运动员编号 sporterid,项目编号itemid,积分mark)  


1、建表要求 

<1>定义各个表的主外键约束 

<2>运动员姓名和所属系别不能为空 

<3>积分要么控制,要么为6,4,2,0, 

 

CREATE TABLE sporter( 

 sporterid  NUMBER(4) PRIMARY KEY,  

 name    VARCHAR2(20) NOT NULL,  

 sex    VARCHAR2(2) NOT NULL,

 department VARCHAR2(20) NOT NULL, 

 CONSTRAINT sporter_sex_CK CHECK(sex IN('M','F')) 

);


CREATE TABLE item( 

 itemid VARCHAR2(4)PRIMARY KEY,  

itemname VARCHAR2(20) NOT NULL,  

location VARCHAR2(20) NOT NULL );

 

CREATE TABLE grade(  

  sporterid NUMBER(4),  

  itemid VARCHAR2(20),  

  mark NUMBER(2), 

 CONSTRAINT sporter_grade_fk FOREIGN KEY(sporterid) REFERENCES sporter(sporterid) ON DELETE CASCADE, 

 CONSTRAINT item_grade_fk FOREIGN KEY(itemid) REFERENCES item(itemid) ON DELETE CASCADE, 

 CONSTRAINT grade_mark_CK CHECK(mark IN(6,4,2,0)) 

);  


记录可自己视情况插入,完成以上的查询语句 


1、求出目前总积分最高的系名,及其积分 

SQL> SELECT s.department,SUM(g.mark) sum FROM sporter s,grade g 

WHERE s.sporterid=g.sporterid GROUP BY s.department ORDER BY sum DESC;

  

当然上述查出来的结果是排序的多条记录,使用ROWNUM最为简便 

SQL> SELECT * FROM ( 

 SELECT s.department,SUM(g.mark) sum  FROM sporter s,grade g 

 where s.sporterid = g.sporterid  GROUP BY s.department  ORDER BY sum DESC) 

WHERE ROWNUM=1; 

 

2、找出场地为'S1',进行比赛的各项目名称及其冠军的姓名 

<1>首先确定一操场中的全部项目和每个项目的最高成绩

SQL> SELECT i.itemname,s.name,g.mark FROM item i,grade g,sporter s 

WHERE i.location='S1' AND i.itemid = g.itemid AND s.sporterid = g.sporterid;  

<2>根据上述结果求出最高分 

SQL> SELECT i.item,s.name,g.mark FROM item i,grade g,sporter s 

WHERE i.location='S1' AND i.itemid = g.itemid AND s.sporterid AND g.mark=6;


3、找出参加了wilson所参加过的项目的其他同学的姓名 

<1>找到wilson参加过的项目编号 

SQL> SELECT g.itemid FROM sporter s,grade g 

WHERE s.sporterid=g.sporterid AND s.name='wislon'; 

 

<2>SELECT DISTINCT s.name FROM sporter s, grade g 

WHERE s.sporterid=g.sporterid AND s.name<>'wilson'; 

AND g.itemid IN

(SELECT g.itemid FROM sporter s,grade g WHERE s.sporterid=g.sporterid AND s.name='wilson');  


4、wilson使用了违禁药物,成绩记为0 

SQL> UPDATE grade SET makr=0 

WHERE sporterid=(SELECT sporterid FROM sporter WHERE name='wilson');  


5、删除S2项目 

SQL> DELETE FROM item WHERE itemid='S2'



  到此ORACLE基础语法等训练结束了,后续我们还将进行ORACLE体系结构的学习

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ORACLE百例试炼五

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2022年信息系统项目管理师案例分析考试知识点(五)

  很多考生在备考2022年信息系统项目管理师考试,编程学习网小编为大家整理了2022年信息系统项目管理师案例分析考试知识点(五),供大家备考学习。  为帮助考生备考软考信息系统项目管理师考试,编程学习网小编为大家整理了2022年信息系统项目管理师案例分析考试知识点(五),希望对大家备考有帮助。  41. 发生成本失控的原因主
2022年信息系统项目管理师案例分析考试知识点(五)
2024-04-19

编程热搜

目录