SQL语言 (Oracle实验)

1)实验目的

通过实验,使学生能够熟练进行数据查询。

2)实验要求

熟悉实验室实验环境,阅读本次实验预备知识,熟悉查询语句的基本语法。实验中根据实验步骤要求书写相应的SQL代码并运行,记录和分析运行结果,并独立完成实验报告。

3)实验环境

Oracle 10gwindows 2003

4)实验内容和步骤

本次实验采用项目信息管理关系数据库,实验前请执行附录中项目信息管理关系数据库的DDL代码和“项目信息管理关系数据库初始化数据代码”建立基本表和插入初始化数据,后续实验也都采用项目信息管理关系数据库。

--1.查询系号为“d001”的所有教师的教工号、名称和工资;
select tno,tname,tsalary from teacher where dno='d001'; 
--2.查询工资在3000到5000之间的教师姓名、年龄(提示:可使用当前年份减去教师的出生年份,教师的出生年份可以使用函数extract(year from tbirthday)获取);
select tname,2018-extract(year from tbirthday)as tage from teacher where tsalary>=3000 and tsalary<=5000;
--3.查询参加了项目的教工的编号,排除相同的元素;
select distinct tno from myproject;
--4.查询名字中包含字“小”的教工姓名、出生日期;
select tname,tbirthday from teacher where tname like '%小%';
--5.查询名字中第二个字为“小”的教工姓名、出生日期;
select tname,tbirthday from teacher where tname like '_小%';
--6.查询所有不姓“李”、并且姓名为三个字的教工姓名、性别;
select tname,tsex from teacher where tname not like '李%' and tname like '___';
--7.查询Department表有系主任的系号、系名称;
select dno,dname from department where tno is not null;
--8.查询工资在4000以上或者性别为女的教师详细信息,按性别降序排列输出;
select * from teacher where tsalary>4000 or tsex='女' order by tsex desc;
--9.查询参与了项目的教工总人数;
select count(distinct tno) from tm;
--10.查询“张三”负责的项目数量; 
select count(*) from tm where tno in
(select tno from teacher where tname='张三');
--11.查询所有教师的平均工资、工资总和、最高工资、最低工资;
select avg(tsalary),sum(tsalary),max(tsalary),min(tsalary) from teacher;
--12.创建视图departmentSalary,查询各个系的教师的平均工资、工资总和、最高工资、最低工资;
create view departmentSalary as 
select avg(tsalary)平均工资,sum(tsalary)工资总和,max(tsalary)最高工资,min(tsalary)最低工资 from teacher group by dno;
--13.查询各个系的详细信息,包括各个系的教师的平均工资、工资总和、最高工资、最低工资(提示:可以使用department表与视图departmentSalary进行连接运算完成);
select * from departmentSalary;
--14.查询教师平均工资大于4500的系号、系名称、平均工资(提示:要求不能使用视图departmentSalary,可把department与teacher连接后再进行分组,然后使用having子句对分组进行筛选);
select department.dno,dname,avg(tsalary) 平均工资 
from department,teacher
where department.dno=teacher.dno
group by department.dno,dname
having avg(tsalary)>4500;
--15.查询教师参与项目的情况,列出教工号、姓名和项目名称,没有参与项目的教师也列出来(提示:用左外连接);
select teacher.tno,tname,pname from teacher left outer join myproject on (teacher.tno=myproject.tno);
--16.查询与“李小龙”工资相同的教师详细信息(要求分别使用自身连接、子查询两种查询方法完成);
--自身连接
select second.* from teacher first,teacher second 
where first.tsalary=second.tsalary and first.tname='李小龙' and second.tname!='李小龙';
--子查询
select * from teacher where tsalary in
(select tsalary from teacher where tname='李小龙') and tname!='李小龙';
--17.查询参与了“云计算研究”并且工资在4000以上的教师详细信息;
select * from teacher where tsalary>4000 and tno in(select tno from tm  where pno in
(select pno from myproject where pname='云计算研究'));
--18.查询小于或等于“同一系中教师平均工资”的教工号、姓名、年龄(提示:请参阅书本的“相关子查询”示例);
select tno,tname,2018-extract(year from tbirthday) from teacher x where tsalary<=
(select avg(tsalary) from teacher y where x.dno=y.dno);
--19.查询比“计算机科学系”教师工资都高、并且不是“网络工程系”的教师信息;
select * from teacher where tsalary>all(select tsalary from teacher where dno in
(select dno from department where dname='计算机科学系')) 
and dno in (select dno from department where dname!='网络工程系');
--20.查询没有参与项目“p0001”的教工号、姓名;
select tno,tname from teacher where tno !=all(select tno from tm where pno='p0001');
--21.查询参与了所有项目的教师姓名;
select tname from teacher where not exists
(select * from myproject where not exists
(select * from tm where tno=teacher.tno and pno=myproject.pno));
--22.查询工资大于3500或者在计算机科学系工作的教师详细信息(要求使用关键字UNION)(加法);
select * from teacher where tsalary>3500 union select * from teacher where dno in
(select dno from department where dno=teacher.dno and dname='计算机科学系');
--23.查询工资大于3500并且不在计算机科学系工作的教师详细信息(要求使用关键字MINUS)(减法);
select * from teacher where tsalary>3500 minus 
(select * from teacher where dno in
(select dno from department where dname='计算机科学系'));

 

    原文作者:Fushicho_XF
    原文地址: https://blog.csdn.net/weixin_41156591/article/details/81084595
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞