数据库实验

💬前言

常见语句查询-多种方式实现
如果对您有帮助的话还请动动小手 点赞👍,收藏⭐️,关注❤️

🌲实验一

创建表

CREATE TABLE 学生表 
(学号 char(10) PRIMARY KEY,
姓名 char(20),
性别 char(2),
专业课程 char(10),
出生日期 date,
电话号码 nchar(10)
);
create table 课程表
(课程号 char(10) PRIMARY KEY,
课程名 char(40),
学分数 float,
学时数 int,
任课教师 char(10)
);

create table 学生作业表
(课程号 char(10),
学号 char(10),
作业1成绩 int,
作业2成绩 int,
作业3成绩 int,
PRIMARY KEY(课程号,学号),
foreign key(课程号)references 课程表(课程号),
foreign key(学号)references 学生表(学号),
);

英文建表 - 插入

create table S(
  SNO char(10) constraint S_Prim primary key,
  SName char(10),
  sex char(2),
  class char(10),
  birth date,
  phoneNo char(20) 
)

create table C(
  CNO char(10) constraint C_Prim primary key,
  CN char(20),
  CS numeric(4,1),
  CT int,
  Teacher char(10)
)

create table W(
 CNO char(10) constraint CNO_For foreign key references C(CNO),
 SNO char(10) constraint SNO_For foreign key references S(SNO),
 W1S int,
 W2S int,
 W3S int,
 constraint SC_Prim primary key(SNO,CNO)
)
insert into S(SNO,SName,sex,class,birth) values ('0433','张艳','女','生物04','1986-9-13')
insert into S(SNO,SName,sex,class,birth,phoneNo) values ('0496','李越','男','电子04','1984-2-23','13812901234')
insert into S(SNO,SName,sex,class,birth,phoneNo) values ('0529','赵欣','男','会计05','1984-1-27','13502221234')
insert into S(SNO,SName,sex,class,birth,phoneNo) values ('0531','张志国','男','生物05','1986-9-10','13312561234')
insert into S(SNO,SName,sex,class,birth,phoneNo) values ('0538','于兰兰','女','生物05','1984-2-20','13312001234')
insert into S(SNO,SName,sex,class,birth,phoneNo) values ('0591','王丽丽','女','电子05','1984-3-20','13320801234')
insert into S(SNO,SName,sex,class,birth) values ('0592','王海强','男','电子05','1986-11-1')



insert into C(CNO,CN,CS,CT,Teacher) values('K001','计算机图形学',2.5,40,'胡晶晶')
insert into C(CNO,CN,CS,CT,Teacher) values('K002','计算机应用基础',3,48,'任泉')
insert into C(CNO,CN,CS,CT,Teacher) values('K006','数据结构',4,64,'马跃先')
insert into C(CNO,CN,CS,CT,Teacher) values('M001','政治经济学',4,64,'孔繁新')
insert into C(CNO,CN,CS,CT,Teacher) values('S001','高等数学',3,48,'赵晓尘')

insert into W(CNO,SNO,W1S,W2S,W3S) values('K001','0433',60,75,75)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K001','0529',70,70,60)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K001','0531',70,80,80)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K001','0591',80,90,90)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K002','0496',80,80,90)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K002','0529',70,70,85)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K002','0531',80,80,80)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K002','0538',65,75,85)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K002','0592',75,85,85)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K006','0531',80,80,90)
insert into W(CNO,SNO,W1S,W2S,W3S) values('K006','0591',80,80,80)
insert into W(CNO,SNO,W1S,W2S,W3S) values('M001','0496',70,70,80)
insert into W(CNO,SNO,W1S,W2S,W3S) values('M001','0591',65,75,75)
insert into W(CNO,SNO,W1S,W2S,W3S) values('S001','0531',80,80,80)
insert into W(CNO,SNO,W1S,W3S) values('S001','0538',60,80)

查询表

【不规范哈】

--查询各位学生的学号、班级和姓名。
select 学号,姓名,出生日期
from 学生表;

--(2)查询课程的全部信息
select *
from 课程表;

--查询数据库中有哪些专业班级
select distinct 专业班级
from 学生表;

--(4)查询学时数大于60的课程信息
select *
from 课程表
where 学时数 >= 60;

--(5)查询在1986年出生的学生的学号、姓名和出生日期
select 学号,姓名,出生日期
from 学生表
where 出生日期 like '1986%';

--(6)查询三次作业的成绩都在80分以上的学号、课程号
select 学号,课程号
from 学生作业表
where 作业1成绩 >= 80 and 作业2成绩 >= 80 and 作业3成绩 >= 80;

--(7)查询姓张的学生的学号、姓名和专业班级
select 学号,姓名,专业班级
from 学生表
where 姓名 like'张%';

--(8)查询05级的男生信息
select *
from 学生表
where 性别='男' and 专业班级 like'%05%';

--(9)查询没有作业成绩的学号和课程号
select 学号,课程号
from 学生作业表
where 作业1成绩 is null or 作业2成绩 is null or 作业3成绩 is null 

--(10)查询学号为0538的学生的作业1总分
select sum(作业1成绩)
from 学生作业表
where 学号='0538'

--(11)查询选修了K001课程的学生人数
select count(学号) '选修了K001课程的学生人数'
from 学生作业表
where 课程号='K001'

--(12)查询数据库中共有多少个班级
select count(distinct 专业班级) '班级数'
from 学生表;

--(13)查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分
select 学号,avg(作业1成绩),avg(作业2成绩),avg(作业3成绩) 
from 学生作业表
group by 学号
having count(学号)>=3

--(14)查询于兰兰的选课信息,列出学号、姓名、课程名(使用两种连接查询的方式)

select 学生表.学号,姓名,课程名
from 课程表,学生表,学生作业表
where 学生表.学号=学生作业表.学号 and 课程表.课程号=学生作业表.课程号 and 姓名='于兰兰';



🌲实验二

多种查询方式 + 视图(增删改)

--对象名无效,Ctrl + shift + R 更新本地缓存即可




--1.使用查询语句完成以下任务(每一个查询都要给出SQL语句,并且列出查询结果)。
--(1)查询与“张志国”同一班级的学生信息(使用连接查询和子查询方式)。

select B.* 
from S as A, S as B  
where A.class = B.class and A.Sname = '张志国'

select * 
from S
where class in (
				select class
				from S
				where Sname = '张志国'
				);


--(2)查询比“计算机应用基础”学时多的课程信息(使用连接查询和子查询方式)。

select x1.*
from C x1, C x2
where x1.CT > x2.CT and x2.CN = '计算机应用基础';

select * 
from C
where C.CT > any (
				select CT
				from C
				where CN = '计算机应用基础'
				);
--(3)查询选修课程号为K002的学生的学号、姓名(使用连接查询、普通子查询、相关子查询、使用exists关键字的相关子查询)。

--连接查询
select  S.SName , S.SNO 
from W , S
where S.SNO = W.SNO  and  W.CNO = 'K002';

--普通子查询
select  S.SName , S.SNO 
from  S
where S.SNO = any (
			select distinct W.SNO 
			from W
			where W.CNO = 'K002'
);


--相关子查询
select  S.SName , S.SNO 
from S
where S.SNO in (
			select distinct W.SNO 
			from W
			where W.CNO = 'K002'
);

--使用exists关键字的相关子查询
select  S.SName , S.SNO 
from S 
where exists(
	select CNO
	from W 
	where SNO = S.SNO  and  CNO = 'K002'
	);
--(4)查询没有选修K001和M001课程的学号、课程号和三次成绩(使用子查询)。

select  W1S,W2S,W3S
from W
where SNO in (
			select SNO
			from  S
			where class != 'K001' and class != 'M001'
);



--2.使用数据操纵完成以下任务(每一个任务都要给出SQL语句,并且列出查询结果)。

--(1)在学生表中添加一条学生记录,其中,学号为0593,姓名为张乐,性别为男,专业班级为电子05。
insert into S
values ('0593','张乐','男','电子05', NULL,NULL)

select * from S;
--(2)将所有课程的学分数变为原来的两倍。
update C
set CS = 2 * CS;


select * from C;
--(3)删除张乐的信息。
delete from S where SName = '张乐';

select * from S;
--3.根据学生作业管理数据库以及其中的学生表、课程表和学生作业表,进行以下操作。

--(1)创建一个电子05的学生视图(包括学号、姓名、性别、专业班级、出生日期)。         (不能批处理,此查询不能有其他命令,注释掉即可)
create view 电子05
as
select SNO,SName , sex,class,birth
from S
where class = '电子05';


select * from 电子05;



--(2)创建一个生物05的学生作业情况视图(包括学号、姓名、课程名、作业1成绩、作业2成绩、作业3成绩)。


create view 生物05 
as
select W.Sno,Sname,C.CN,W1S,W2S,W3S
from W,S,C
where class = '生物05' and W.Sno=S.Sno and W.CNO=C.CNO

select * from 生物05;



--(3)创建一个学生作业平均成绩视图(包括学号、作业1平均成绩、作业2平均成绩、作业3平均成绩)。
create view 平均成绩 
as
select SNO,AVG(W1S) as AVG_S1,AVG(W2S) as AVG_S2,AVG(W3S) as AVG_S3
from W
group by SNO

select * from 平均成绩;

--ALTER是修改视图的定义,UPDATE是修改表中的数据
--(4)修改第2题中生物05的学生作业情况视图,将作业2成绩和作业3成绩去掉。  
alter view 平均成绩
as
select SNO,AVG(W1S)   AVG_S1
from W
GROUP BY SNO

select * from 平均成绩;
--(5)向电子05的学生视图中添加一条记录,其中学号为0596,姓名为赵亦,性别为男,专业班级为电子05,出生日期为1986-6-8(除了电子05的学生视图发生变化之外,看看学生表中发生了什么变化?)。
insert into 电子05(SNO,SName,sex,class,birth) 
values(0596,'赵亦','男','电子05','1986-6-8');

select * from 电子05;
select * from S;
--(6)将电子05的学生视图中赵亦的性别改为“女”(除了电子05的学生视图发生变化之外,看看学生表中发生了什么变化?)。
update 电子05
set sex = '女'
where SName = '赵亦';
--(7)删除电子05的学生视图中赵亦的记录。
delete from 电子05
where SName = '赵亦';
--(8)删除电子05的学生视图(给出SQL语句即可)。
drop view 电子05
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值