数据库期末总结——查询语句SQL

下面是一些简单的SQL,涉及到的表在文末也都附有建表代码和数据。(运行环境:Oracle)

--0327
--1、查询“学生基本信息”表中学生的学号、姓名、性别及政治面貌。
select 学号,姓名,性别,政治面貌 from 学生基本信息; 

--2、将"课程"表中的各课程学分均增加2分,并显示结果。(此处请不要使用update)
select 课程号,学分+2 学分 from 课程;

--3、查询“学生基本信息”表中所有学生所属的班号。
select 学号,班号 from 学生基本信息;

--4、查询“学生基本信息”表中性别为“男”的学生的学号、姓名和出生日期。
select 学号,姓名,出生日期,性别 from 学生基本信息 where 性别='男';

--5、查询“选课”表中所有成绩大于80分的学生的学号、课程号和成绩。
select 学号,课程号,成绩 from 选课 where 成绩>80;

--6、查询“学生基本信息”表中家住南京的男生的学号、姓名、性别、籍贯和家庭住址。
--南京后面要加个%
select 学号,姓名,性别,籍贯,家庭住址 from 学生基本信息 where 家庭住址 like '南京%' and 性别='男';

--7、查询“选课”表中成绩在70-90分之间的学生的学号、课程号和成绩。
select 学号,课程号,成绩 from 选课 where 成绩>=70 and 成绩<=90;
select 学号,课程号,成绩 from 选课 where 成绩 between 70 and 90; 

--8、查询“选课”表中选修了0310和0311课程的学生的学号、课程号和成绩。
--只要选修了一门就算
select 学号,课程号,成绩 from 选课 where 课程号=0310 or 课程号=0311;

--9、查询“选课”表中课程号既不为0310,也不为0311的所有记录的学号、课程号、成绩。
--<>也表示不等于
select 学号,课程号,成绩 from 选课 where 课程号!=0310 or 课程号<>0311;

--10、查询“学生基本信息”表中所有姓“李”的且姓名为3个字的学生的学号、性别和班号。
select 学号,姓名,性别,班号 from 学生基本信息 where 姓名 like '李__';

--11、查询“学生基本信息”表中“政治面貌”为空的所有学生的学号、姓名。
select 学号,姓名 from 学生基本信息 where 政治面貌 is null;

--12、查询“学生基本信息”表中的学号、姓名、性别、政治面貌,并按照姓名的降序排列。
select 学号,姓名,性别,政治面貌 from 学生基本信息 order by 姓名 desc;

--13、查询“选课”表中的信息,在显示结果时首先按照课程号的升序排列,当课程号相同时,再按照成绩的降序排列。

select * from 选课 order by 课程号,成绩 desc;


--0403
--以scott用户中的emp表为例,完成下列简单查询。

--?显示每个部门的工作
--distinct 去重复
select distinct deptno,job from emp;

--?显示每个雇员的年工资
select empno,(sal+nvl(comm,0))*12 年薪 from emp;

--?显示第三个字符为大写0的所有员工的姓名和工资
--注意是大写O
select ename,sal from emp where ename like '__O%';

--?如何显示empno为123,456,800……的雇员情况
select * from emp where empno in(123,456,800);

--?如何显示没有上级的雇员的情况
select * from emp where mgr is null;

--?查询工资高于500或是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J
--注意或 or
select ename from emp where (sal>500 or job='manager') and ename like 'J%';

--?如何按照工资从低到高的顺序显示雇员的信息
select * from emp order by sal;

--?按照部门号升序而雇员的工资降序排列
select * from emp order by deptno,sal desc;

--?按照年薪升序显示雇员的年薪情况
select ename,(sal+nvl(comm,0))*12 年薪 from emp order by 年薪;


--0410
--1.统计“学生基本信息”表中籍贯为“南京”的学生人数。
select count(学号) from 学生基本信息 where 籍贯= '南京';

--2.在“学生基本信息”表中找出最大和最小的“出生日期”。
select max(出生日期),min(出生日期) from 学生基本信息;

--3.计算出“选课”表中所有课程的总成绩和总平均成绩。
select sum(成绩),avg(成绩) from 选课;

--4.在“选课”表中按课程号进行分组,并汇总每一组课程的平均成绩。
--group by 分组
select 课程号,avg(成绩) from 选课 group by 课程号;

--5.在“学生基本信息”表中统计男、女学生各自的总人数。
--人数和性别位置不能换,count后接人数
select count(学号) 人数,性别 from 学生基本信息 group by 性别;

--6.统计“学生基本信息”表中各班级的总人数,显示统计结果中大于等于2的班级学生总数。
select 班号,count(学号) 人数 from 学生基本信息 group by 班号 having count(学号)>=2;

--0410
select * from 教学计划;
select * from 课程;
select * from 选课;

--1.查询教学计划及开设课程的详细情况。
select * from 教学计划,课程 where 教学计划.课程号=课程.课程号;

--2.查找不同课程成绩相同的学生的学号、课程号和成绩。
select aa.学号,aa.课程号,aa.成绩
from 选课 aa,选课 bb
where aa.课程号!=bb.课程号 and aa.成绩=bb.成绩;

--3.查找选修了“电子商务”课程且成绩在60分以上的学生学号、姓名、课程名及成绩。
select 选课.学号,姓名,课程.课程名,成绩 from 课程,选课,学生基本信息
where 课程.课程号=选课.课程号 and 选课.学号=学生基本信息.学号 and 成绩>60;

--以scott用户中的表为例,完成下列查询。

select * from emp;
select * from dept;


--?显示雇员名、雇员工资及所在部门的名字
select ename,sal,dname from emp,dept where emp.deptno=dept.deptno;

--?如何显示部门号为10的部门名、员工名和工资
select ename,sal,dname from emp,dept where emp.deptno=dept.deptno and emp.deptno=10;

--?显示各个员工的姓名,工资及其工资的级别
select emp.ename,emp.sal,grade
from emp,salgrade
where sal between losal and hisal;

--?显示雇员名,雇员工资及其所在部门的名字,并按部门排序
select ename,sal,dname 
from emp,dept 
where emp.deptno=dept.deptno
order by emp.deptno;

--?如何显示某个员工(如,FORD)的上级领导的姓名。
select worker.ename,boss.ename
from emp boss,emp worker
where boss.empno=worker.mgr;

--以scott用户中的表为例,完成下列查询。

---数据分组:max、min、avg、sum、count

--?如何显示所有员工中最高工资和最低工资
select max(sal),min(sal) from emp;

--?显示所有员工的平均工资和工资总和
select sum(sal),avg(sal) from emp;

--?计算共有多少员工
select count(empno) from emp;

--扩展:

--?请显示工资最高的员工的姓名,工作岗位
select ename,job from emp where sal=(select max(sal) from emp);

--?请显示工资高于平均工资的员工信息
select * from emp where sal>(select avg(sal) from emp);

---group by和having
--?如何显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from emp group by deptno;

--?显示每个部门的每种岗位的平均工资和最低工资
select deptno,job,avg(sal),min(sal) from emp group by deptno,job;

--?显示平均工资低于2000的部门号和它的平均工资
select deptno,avg(sal) from emp group by deptno having avg(sal)<2000;

--?显示平均工资低于2000的部门号和它的平均工资,并按升序排序
select deptno,avg(sal) from emp group by deptno having avg(sal)<2000 order by avg(sal);


--0424 子查询
--1、列出没有选修“西方经济学”课程的学生信息
select * from 学生基本信息
where 学号 not in (select 学号 from 选课 where 选课.课程号=(select 课程.课程号 from 课程 where 课程名='西方经济学'));

--2、在“教师”表与“系部”表中查询其他系中比“航海系”任一教师年龄都小的教师基本信息
select * from 教师
where 出生日期>(select min(出生日期) from 教师 where 系部代码=(select 系部代码 from 系部 where 系部名称='航海系')) 
and 系部代码!=(select 系部代码 from 系部 where 系部名称='航海系');

--3、列出比所有590102班的学生年龄都大的学生
select * from 学生基本信息
where 出生日期<(select max(出生日期) from 学生基本信息 where 班号=590102);

--!!!4、将“学生基本信息”表中所有是“共青团员”的学生基本信息找出,并插入到新创建的XS_ZZMM表中。
create table XS_ZZMM as select * from 学生基本信息 where 政治面貌='共青团员';

--以scott用户中的表为例,完成下列查询。

select * from emp;

--如何显示与SMITH同一部门的所有员工
select deptno,ename from emp 
where deptno=(select deptno from emp where ename='SMITH');

--如何查询和部门10的工作相同的雇员的名字、岗位,工资、部门号
--用 in
select ename,job,sal,deptno from emp
where job in (select job from emp where deptno=10);

-- 如何显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
select ename,sal,deptno from emp 
where sal>(select max(sal) from emp where deptno=30);

select ename,sal,deptno from emp 
where sal>all(select sal from emp where deptno=30);

--如何显示工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号
select ename,sal,deptno from emp 
where sal>(select min(sal) from emp where deptno=30);

select ename,sal,deptno from emp 
where sal>any(select sal from emp where deptno=30);

--!!!如何查询与smith的部门和岗位完全相同的所有雇员
--两两对应
select ename,deptno,job from emp 
where (deptno,job)=(select deptno,job from emp where ename='SMITH');

--如何显示高于自己部门平均工资的员工的信息
select emp.deptno,ename,sal
from emp,(select deptno,avg(sal) mysal from emp group by deptno) aa
where emp.deptno=aa.deptno and emp.sal>aa.mysal;

SELECT * FROM SS;

SELECT * FROM SC;

SELECT * FROM C;

--1、查询选修课程名称为’税收基础’的学员学号和姓名
select SS.SNO,SN from SS,SC,C
where C.CNO=SC.CNO and SS.SNO=SC.SNO and CN='税收基础';

--2、查询选修课程编号为’C2’的学员姓名和所属单位
select SN,SD from SS,SC
where SS.SNO=SC.SNO and CNO='C2';

--3、查询不选修课程编号为’C5’的学员姓名和所属单位
select distinct SN,SD from SS,SC 
where SS.SNO not in(select SS.SNO from SS,SC where SS.SNO=SC.SNO and CNO='C5');

--4、查询选修了课程的学员人数
--select distinct SNO from SC 虚表,得出选修了的学员
select count(SNO) from (select distinct SNO from SC);

--5、查询选修课程超过5门的学员学号和所属单位
select SS.SNO,SD from SS where SNO=(select SC.SNO from SC group by SNO having count(SNO)>5);

注意:

1、本文章涉及到的scott用户的emp、dept、bonus、salgrade表以及表数据的建表源码参考我的另一篇博客:https://mp.csdn.net/postedit/80795670

2、涉及到的其余表的建表代码及数据参考以下代码:

/*表1 学生基本信息*/
create table 学生基本信息
(学号 char(9)NOT null,
姓名 char(10),
性别 char(4),
出生日期 date,
政治面貌 char(20),
入学时间 date,
系部代码 char(2),
班号 char(6),
籍贯 char(10),
家庭住址 varchar2(100)
);
commit;
insert into 学生基本信息 values('125204001','王一枚','男',to_date('1993-03-02','yyyy-mm-dd'),'共青团员',to_date('2012-09-14','yyyy-mm-dd'),'01','520401','南通','如皋市长江镇二案村');
insert into 学生基本信息 values('125204002','李碧玉','女',to_date('1993-08-06','yyyy-mm-dd'),'共青团员',to_date('2012-09-14','yyyy-mm-dd'),'01','520402','南通','南通市开发区小海镇定海村');
insert into 学生基本信息 values('125901001','张玉桥','男',to_date('1992-09-12','yyyy-mm-dd'),'共产党员',to_date('2012-09-14','yyyy-mm-dd'),'04','590102','南京','南京市高淳县东贝镇贝乡');
insert into 学生基本信息 values('126601002','赵思男','男',to_date('1993-01-03','yyyy-mm-dd'),'共青团员',to_date('2012-09-14','yyyy-mm-dd'),'07','660108','南京','南京市栖霞区龙潭街道兴隆社区');
insert into 学生基本信息 values('126202001','陈晗韵','女',to_date('1993-05-06','yyyy-mm-dd'),'共青团员',to_date('2012-09-14','yyyy-mm-dd'),'06','620203','南京','南京市第八十七高级中学');
insert into 学生基本信息 values('115204001','李绿杨','女',to_date('1991-12-07','yyyy-mm-dd'),'共青团员',to_date('2011-09-16','yyyy-mm-dd'),'01','520402','南通','南通市崇川区观音山镇海洪');
insert into 学生基本信息 values('116202001','胡静怡','男',to_date('1992-06-16','yyyy-mm-dd'),'共青团员',to_date('2011-09-16','yyyy-mm-dd'),'06','620201','南通','海安县李堡镇新庄村');
insert into 学生基本信息 values('116202002','宛如缺','女',to_date('1991-02-28','yyyy-mm-dd'),'共青团员',to_date('2011-09-16','yyyy-mm-dd'),'06','620201','徐州','丰县欢口中学');
insert into 学生基本信息 values('106701001','于归','男',to_date('1990-01-02','yyyy-mm-dd'),'共产党员',to_date('2010-09-16','yyyy-mm-dd'),'07','670101','扬州','扬州市瘦西湖百花园25-120室');
insert into 学生基本信息 values('106701002','江风','女',to_date('1991-10-25','yyyy-mm-dd'),'共青团员',to_date('2010-09-16','yyyy-mm-dd'),'07','670101','南京','南京市鼓楼区新花苑123-302室');
insert into 学生基本信息 values('126601001','功勋','男',null,null,null,null,null,null,null);

/*表5-9 课程*/
create table 课程
(课程号 char(4)  not null ,
课程名 varchar2(30),
课程性质 char(1),
学分 number
);
commit;
insert  into 课程 values('0001','高等数学','A',6);
insert  into 课程 values('0002','大学英语','A',6);
insert  into 课程 values('0003','大学物理','A',5);
insert  into 课程 values('0110','值班与避碰','A',5);
insert  into 课程 values('0111','GMDSS通信','A',6);
insert  into 课程 values('0301','办公室应用','A',4);
insert  into 课程 values('0302','关系数据库','A',5);
insert  into 课程 values('0306','会计基础','A',5);
insert  into 课程 values('0307','西方经济学','B',3);
insert  into 课程 values('0310','操作系统基础','A',3);
insert  into 课程 values('0311','电子商务','B',4);
insert  into 课程 values('0706','材料力学','A',4);


/*表3 选课*/
create table 选课
(学号 char(9)  not null,
课程号 char(4) not null,
成绩 number,
补考成绩 number
);
insert  into 选课 values('125204001','0110',75,null);
insert  into 选课 values('125204002','0110',80,null);
insert  into 选课 values('125204001','0111',65,null);
insert  into 选课 values('125901001','0706',45,null);
insert  into 选课 values('126601002','0706',70,null);
insert  into 选课 values('126202001','0001',80,null);
insert  into 选课 values('125204002','0002',76,null);
insert  into 选课 values('125901001','0311',85,null);
insert  into 选课 values('115204001','0307',90,null);
insert  into 选课 values('106701001','0310',45,null);
insert  into 选课 values('106701002','0310',82,null);
insert  into 选课 values('116202001','0302',70,null);
insert  into 选课 values('115204001','0302',50,null);
insert  into 选课 values('126601002','0002',78,null);


/*表4 系部*/
create table 系部
(系部代码 char(2) not null,
系部名称 varchar2(20),
系主任 char(10),
联系电话 char(11),
备注 varchar2(50)
);
insert into 系部 values('01','航海系','王寅虎','15698023',null);
insert into 系部 values('02','交通工程系','陈国军','82459871',null);
insert into 系部 values('03','机电系','成功','85124789',null);
insert into 系部 values('04','计算机系','丁灿','15666666',null);
insert into 系部 values('05','通信系','飞越','39547888',null);
insert into 系部 values('06','管理系','龙海生','32489702',null);
insert into 系部 values('07','人文艺术','赵炯','65888888',null);


/*表5  专业*/
create table 专业 
(专业代码 char(4) not null,
专业名称 varchar2(20),
系部代码 char(2)
);
insert into 专业  values('5204','航海技术','01');
insert into 专业  values('5206','港口运输','02');
insert into 专业  values('5503','电力技术','03');
insert into 专业  values('5703','水利水电设备','03');
insert into 专业  values('5901','计算机','04');
insert into 专业  values('5903','通信','05');
insert into 专业  values('6202','财务会计','06');
insert into 专业  values('6601','语言文化','07');
insert into 专业  values('6701','艺术设计','07');

/*表6  班级*/
create table 班级
(班号 char(6)  not null,
班级名称 varchar(20),
学生数 int,
专业代码 char(4),
系部代码 char(2),
班主任 char(20),
班长 char(10),
教室 varchar2(15)
);
insert into 班级 values('520401','航海技术',40,'5204','01','乔成喜','胡琛','J501');
insert into 班级 values('520402','水运管理',42,'5204','01','王坚','周刊','J302');
insert into 班级 values('520405','轮机工程技术',40,'5204','01','张圣','李琳琳','J401');
insert into 班级 values('520601','港口业务管理',50,'5206','02','白玉华','陈苑','J5302');
insert into 班级 values('550307','电网监控技术',45,'5503','03','赵悦','张锁烟','J403');
insert into 班级 values('570302','机电设备',50,'5703','03','吟露','胡萍萍','J404');
insert into 班级 values('590101','计算机应用',40,'5901','04','雨荷','陈香儿','J201');
insert into 班级 values('590102','网络技术',35,'5901','04','千笑怡子','梁亮','J202');
insert into 班级 values('590103','多媒体技术',40,'5901','04','陈竹韵','萧哥','J203');
insert into 班级 values('620201','财务管理',45,'6202','06','顾晓明','王聪','J204');
insert into 班级 values('620203','会计',40,'6202','06','晶银银','朱晓宏','J205');
insert into 班级 values('670101','艺术设计',35,'6701','07','陈设','申梅','J201');
insert into 班级 values('660108','商务英语',40,'6601','07','攻关','周旋','J101');


/*表7 教师*/
create table 教师
(教师编号 char(7) not null,
姓名 char(15),
性别 char(4),
出生日期 date,
政治面貌 char(20),
参加工作时间 date,
学历 char(20),
职务 char(10),
职称 char(10),
系部代码 char(2),
专业代码 char(4),
备注 varchar2(20)
);
insert into 教师 values('0108001','乔红军','男',to_date('1971-08-02','yyyy-mm-dd'),null,to_date('1995-08-01','yyyy-mm-dd'),'大学本科','教师','副教授','01','5204',null);
insert into 教师 values('0108002','王坚垒','男',to_date('1973-08-06','yyyy-mm-dd'),'共产党员',to_date('1997-08-02','yyyy-mm-dd'),'大学本科','教师','讲师','01','5204',null);
insert into 教师 values('0305001','赵安','女',to_date('1962-09-12','yyyy-mm-dd'),'共产党员',to_date('1986-08-03','yyyy-mm-dd'),'大普','教师','教授','03','5305',null);
insert into 教师 values('0306001','王果然','男',to_date('1964-01-03','yyyy-mm-dd'),'共产党员',to_date('1988-08-04','yyyy-mm-dd'),'大学本科','教师','教授','03','5503',null);
insert into 教师 values('0407002','赵庆','男',to_date('1983-05-06','yyyy-mm-dd'),'共青团员',to_date('2006-08-01','yyyy-mm-dd'),'大学本科','教师','助讲','04','5703',null);
insert into 教师 values('0612005','旭升阳','女',to_date('1985-06-07','yyyy-mm-dd'),'共产党员',to_date('2006-08-02','yyyy-mm-dd'),'研究生','教师','助讲','06','5901',null);
insert into 教师 values('0613003','晗笑之子','女',to_date('1980-06-16','yyyy-mm-dd'),null,to_date('1998-08-01','yyyy-mm-dd'),'大学本科','教师','讲师','06','6202',null);
insert into 教师 values('0710004','烛影','女',to_date('1982-03-08','yyyy-mm-dd'),'共产党员',to_date('2006-08-02','yyyy-mm-dd'),'研究生','教师','讲师','07','6202',null);
insert into 教师 values('0710005','方草','男',to_date('1975-01-02','yyyy-mm-dd'),'共产党员',to_date('1992-08-01','yyyy-mm-dd'),'大学本科','教师','副教授','07','6601',null);
insert into 教师 values('0711001','宋竹梅','女',to_date('1960-06-08','yyyy-mm-dd'),'共产党员',to_date('1992-08-01','yyyy-mm-dd'),'研究生','教师','副教授','07','6701',null);

/*表8 教师任课*/
create table 教师任课
(教师编号 char(7)  not null,
课程号 char(4)  not null,
系部代码 char(2),
专业代码 char(4),   
班号 char(6),
开课学期 number,
学生数 number,
备注 varchar2(20)
);
insert into 教师任课 values('0108001','0110','01','5204','520401',4,40,null);
insert into 教师任课 values('0108001','0706','02','5206','520402',2,42,null);
insert into 教师任课 values('0108002','0111','01','5204','520401',4,40,null);
insert into 教师任课 values('0305001','0311','04','5901','590102',3,35,null);
insert into 教师任课 values('0306001','0301','06','6202','620201',2,45,null);
insert into 教师任课 values('0407002','0310','07','6701','620201',2,45,null);
insert into 教师任课 values('0612005','0001','04','5901','590102',1,35,null);
insert into 教师任课 values('0612005','0002','04','5901','590102',1,35,null);
insert into 教师任课 values('0711001','0307','06','6202','660108',2,40,null);

/*表9 教学计划*/
create table 教学计划
(课程号 char(4) not null,
专业代码 char(4), 
课程类型 char(1),
开课学期 number,
学时数 number,
班号 char(6)
);
insert into 教学计划 values('0110','5204','A',4,60,null);
insert into 教学计划 values('0111','5204','A',4,75,null);
insert into 教学计划 values('0306','6202','A',1,80,null);
insert into 教学计划 values('0706','5206','A',2,72,null);
insert into 教学计划 values('0001','5901','A',1,90,null);
insert into 教学计划 values('0002','5901','A',1,90,null);
insert into 教学计划 values('0311','5901','B',3,60,null);
insert into 教学计划 values('0307','6202','B',3,50,null);
insert into 教学计划 values('0310','6701','A',2,45,null);
insert into 教学计划 values('0301','6202','A',2,60,null);
 


 

猜你喜欢

转载自blog.csdn.net/weixin_37590454/article/details/81227763
今日推荐