数据库系统原理 | 查询作业2

整理自博主本科《数据库系统原理》专业课自己完成的实验课查询作业,以便各位学习数据库系统概论的小伙伴们参考、学习。

*文中若存在书写不合理的地方,欢迎各位斧正。

专业课本:

————

本次实验使用到的图形化工具:Heidisql

上一篇:数据库系统原理 | 查询作业1-优快云博客


目录

使用EDUC数据库进行查询

1.查询课程总个数。 

2.计算学号为“200215121”的学生平均成绩。

3.查询被选修的课程的个数。 

4.查询学号为“200215121”的学生所考试的课程中的最高分数。

5.求每门课的平均分。要求输出课程号和平均分 

6.求每个选课的男学生的学号和 最低分和平均分

7.求每个选课的年龄大于20岁的学生的学号和平均分。要求只输出平均分小于60的。 

8.查询每一门课的间接先修课(即先修课的先修课),输出:课程号、先修课的课程号、先修课的先修课的课程号。 

9. 查询与“李勇”在同一个系学习的学生(输出结果中不包含李勇本人)。(使用自身连接)

10.查询至少选修了两门课的学生的学号。(使用自身连接和分组查询两种方法实现) 

使用spj数据库进行查询

1.在spj表中,如果供应数量qty是null。代表供应商给某项目供应的某零件的数量不确定。查询有那些供应商给哪些项目供应的哪些零件是不确定数量的。要求给出供应商名,项目名和零件名(需要多个表连接)。 

2.查询重量小于40的零件的零件号,零件名和零件颜色。并按照零件颜色排序降序排列,颜色相同的,按照零件号升序排列。 

3.找出最重的三种零件的零件号和零件名。 

4.查询零件共有几种颜色。 

5.如果每种零件取一个(零件号不同就是不同种的零件),那么所有种类的零件的总重量是多少。 

6.查询红色零件中最轻的那种零件的重量是多少。 

7.查询蓝色零件的平均重量。 

8.求每种颜色的平均重量和最重的重量。要求输出颜色和平均重量和最重的重量。 

9.在spj表中,计算每个工程项目所被供应的零件的总个数。输出:工程项目号和零件总个数总 个数。

10.计算每个供应商供应的零件的总个数。要求输出:供应商名和零件总个数。

11.所有城市所在地是‘天津’的工程项目被供应的零件的总个数。输出:工程项目名和零件总个数。 

12.统计汇总每个供应商提供给每个工程项目的零件的总个数。输出:供应商号和工程项目号和零件总个数。 

13.查询有哪些供应商所供应的零件总数超过了1000个。输出供应商号和零件总数。 

14.查询有那些零件的供应量小于500.输出零件号,零件名称和供应量。 

15.在S表中查询,和供应商S1在同一个城市的其他供应商的供应商号和供应商名。(用自身连接) 


使用EDUC数据库进行查询


EDUC数据库建库建表代码:

create database educ;
use educ;
CREATE TABLE Student
(
Sno CHAR(9) NOT NULL PRIMARY KEY,
Sname CHAR(20),
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
 
CREATE TABLE Course
(
Cno CHAR(4) NOT NULL PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
 
CREATE TABLE SC
(
Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
 
INSERT INTO Student VALUES('200215121','李勇','男',20,'CS');
INSERT INTO Student VALUES('200215122','刘晨','女',19,'CS');
INSERT INTO Student VALUES('200215123','王敏','女',18,'MA');
INSERT INTO Student VALUES('200215125','张立','男',19,'IS');
INSERT INTO Student VALUES('200215124','张立','男',19,'IS');
 
INSERT INTO Course VALUES('2','数学',null,2);
INSERT INTO Course VALUES('6','数据处理',null,2);
INSERT INTO Course VALUES('7','pascal语言','6',4);
INSERT INTO Course VALUES('5','数据结构','7',4);
INSERT INTO Course VALUES('4','操作系统','6',3);
INSERT INTO Course VALUES('1','数据库','5',4);
INSERT INTO Course VALUES('3','信息系统','1',4);
 
INSERT INTO SC VALUES('200215121','1',92);
INSERT INTO SC VALUES('200215121','2',85);
INSERT INTO SC VALUES('200215121','3',88);
INSERT INTO SC VALUES('200215122','2',90);
INSERT INTO SC VALUES('200215122','3',80);

1.查询课程总个数。 

SELECT COUNT(*)
FROM course

2.计算学号为“200215121”的学生平均成绩。

SELECT AVG(grade)
FROM sc
WHERE sno=200215121;

3.查询被选修的课程的个数。 

SELECT COUNT(DISTINCT cno)
FROM sc

4.查询学号为“200215121”的学生所考试的课程中的最高分数。

SELECT MAX(grade)
FROM sc
WHERE sno=200215121;

5.求每门课的平均分。要求输出课程号和平均分 

select Cno,AVG(grade) as 平均分
from SC
group by Cno

6.求每个选课的男学生的学号和 最低分和平均分

select sc.Sno,MIN(Grade) as 最低分,AVG(grade) as 平均分
from Student,SC
where Student.Sno = SC.Sno and Ssex = '男'
group by SC.Sno

7.求每个选课的年龄大于20岁的学生的学号和平均分。要求只输出平均分小于60的。 

select sc.sno,AVG(grade) as 平均分
from SC,Student
where SC.Sno = Student.Sno and Sage > 20
group by SC.Sno
having AVG(Grade) <60

8.查询每一门课的间接先修课(即先修课的先修课),输出:课程号、先修课的课程号、先修课的先修课的课程号。 

SELECT FIRST.Cno,FIRST.Cpno,SECOND.Cpno
FROM course FIRST,course SECOND
WHERE FIRST.Cpno=SECOND.Cno;

9. 查询与“李勇”在同一个系学习的学生(输出结果中不包含李勇本人)。(使用自身连接)

SELECT S1.Sname,S1.Sno,S1.Sdept
FROM student S1,student S2
WHERE S1.Sdept=S2.Sdept AND S2.Sname='李勇' AND S1.Sname<>'李勇';

10.查询至少选修了两门课的学生的学号。(使用自身连接和分组查询两种方法实现) 

自身连接

SELECT DISTINCT sc1.Sno
FROM sc sc1,sc sc2
WHERE sc1.Sno=sc2.Sno AND sc1.Cno<>sc2.Cno;

分组查询

SELECT sno,COUNT(cno)
FROM sc
GROUP BY sno HAVING COUNT(cno)>=2;

使用spj数据库进行查询

spj数据库建库建表代码:

create database spj;
use spj;
CREATE TABLE S
(
SNO CHAR(4) NOT NULL PRIMARY KEY,
SNAME VARCHAR(20),
STATUS SMALLINT,
CITY VARCHAR(20)
);
 
 
CREATE TABLE P
(
PNO CHAR(4) NOT NULL PRIMARY KEY,
PNAME VARCHAR(20),
COLOR VARCHAR(10),
WEIGHT SMALLINT
);
 
CREATE TABLE J
(
JNO CHAR(4) NOT NULL PRIMARY KEY,
JNAME VARCHAR(20),
CITY VARCHAR(20)
);
 
CREATE TABLE SPJ
(
SNO CHAR(4) NOT NULL,
PNO CHAR(4) NOT NULL,
JNO CHAR(4) NOT NULL,
Qty SMALLINT,
PRIMARY KEY(SNO,PNO,JNO),
FOREIGN KEY (SNO) REFERENCES S(SNO),
FOREIGN KEY (PNO) REFERENCES P(PNO),
FOREIGN KEY (JNO) REFERENCES J(JNO)
);
 
INSERT INTO S VALUES('S1','精益',20,'天津');
INSERT INTO S VALUES('S2','盛锡',10,'北京');
INSERT INTO S VALUES('S3','东方红',30,'北京');
INSERT INTO S VALUES('S4','丰泰盛',20,'天津');
INSERT INTO S VALUES('S5','丰泰盛',20,'上海');
 
INSERT INTO P VALUES('P1','螺母','红',12);
INSERT INTO P VALUES('P2','螺栓','绿',17);
INSERT INTO P VALUES('P3','螺丝刀','蓝',14);
INSERT INTO P VALUES('P4','螺丝刀','红',14);
INSERT INTO P VALUES('P5','凸轮','蓝',40);
INSERT INTO P VALUES('P6','齿轮','红',30);
 
INSERT INTO J VALUES('J1','三建','北京');
INSERT INTO J VALUES('J2','一汽','长春');
INSERT INTO J VALUES('J3','弹簧厂','天津');
INSERT INTO J VALUES('J4','造船厂','天津');
INSERT INTO J VALUES('J5','机车厂','唐山');
INSERT INTO J VALUES('J6','无线电厂','常州');
INSERT INTO J VALUES('J7','半导体厂','南京');
 
INSERT INTO SPJ VALUES('S1','P1','J1',200);
INSERT INTO SPJ VALUES('S1','P1','J3',100);
INSERT INTO SPJ VALUES('S1','P1','J4',700);
INSERT INTO SPJ VALUES('S1','P2','J2',100);
INSERT INTO SPJ VALUES('S2','P3','J1',400);
INSERT INTO SPJ VALUES('S2','P3','J2',200);
INSERT INTO SPJ VALUES('S2','P3','J4',500);
INSERT INTO SPJ VALUES('S2','P3','J5',400);
INSERT INTO SPJ VALUES('S2','P5','J1',400);
INSERT INTO SPJ VALUES('S2','P5','J2',100);
INSERT INTO SPJ VALUES('S3','P1','J1',200);
INSERT INTO SPJ VALUES('S3','P3','J1',200);
INSERT INTO SPJ VALUES('S4','P5','J1',100);
INSERT INTO SPJ VALUES('S4','P6','J3',200);
INSERT INTO SPJ VALUES('S4','P6','J4',200);
INSERT INTO SPJ VALUES('S5','P2','J4',100);
INSERT INTO SPJ VALUES('S5','P3','J1',200);
INSERT INTO SPJ VALUES('S5','P6','J2',200);
INSERT INTO SPJ VALUES('S5','P6','J4',500);
INSERT INTO SPJ VALUES('S1','P1','J2',500);

1.spj表中,如果供应数量qty是null。代表供应商给某项目供应的某零件的数量不确定。查询有那些供应商给哪些项目供应的哪些零件是不确定数量的。要求给出供应商名,项目名和零件名(需要多个表连接)。 

SELECT s.SNO,j.JNO,p.PNO
FROM s,p,j,spj
WHERE s.SNO=spj.SNO AND p.PNO=spj.PNO AND j.JNO=spj.JNO AND qty IS NULL ;

2.查询重量小于40的零件的零件号,零件名和零件颜色。并按照零件颜色排序降序排列,颜色相同的,按照零件号升序排列。 

SELECT p.PNO,p.PNAME,p.COLOR 
FROM p,spj
WHERE p.PNO=spj.PNO AND qty<40
ORDER BY pno,color DESC ;

3.找出最重的三种零件的零件号和零件名。 

SELECT p.PNO,p.PNAME,weight
FROM p 
ORDER BY weight DESC LIMIT 3;

4.查询零件共有几种颜色。 

SELECT COUNT(DISTINCT color) 
FROM p

5.如果每种零件取一个(零件号不同就是不同种的零件),那么所有种类的零件的总重量是多少。 

SELECT SUM(weight)
FROM p;

6.查询红色零件中最轻的那种零件的重量是多少。 

SELECT weight
FROM p
WHERE color='红'
ORDER BY weight LIMIT 1;

7.查询蓝色零件的平均重量。 

SELECT AVG(weight)
FROM p
WHERE color='蓝';

8.求每种颜色的平均重量和最重的重量。要求输出颜色和平均重量和最重的重量。 

SELECT color,AVG(weight),MAX(weight)
FROM p
GROUP BY color;

9.spj表中,计算每个工程项目所被供应的零件的总个数。输出:工程项目号和零件总个数总 个数。

SELECT jno,SUM(qty)
FROM spj
GROUP BY jno;

10.计算每个供应商供应的零件的总个数。要求输出:供应商名和零件总个数。

SELECT spj.SNO,s.SNAME,SUM(qty)
FROM spj,s
WHERE spj.SNO=s.SNO
GROUP BY spj.SNO;

11.所有城市所在地是‘天津’的工程项目被供应的零件的总个数。输出:工程项目名和零件总个数。 

SELECT SUM(qty)
FROM s,spj
WHERE s.SNO=spj.SNO AND city='天津';

12.统计汇总每个供应商提供给每个工程项目的零件的总个数。输出:供应商号和工程项目号和零件总个数。 

SELECT sno,jno,SUM(qty)
FROM spj
GROUP BY sno,jno

13.查询有哪些供应商所供应的零件总数超过了1000个。输出供应商号和零件总数。 

SELECT sno,SUM(qty) 
FROM spj
GROUP BY sno HAVING SUM(qty)>1000;

14.查询有那些零件的供应量小于500.输出零件号,零件名称和供应量。 

SELECT p.PNO,p.PNAME,qty 
FROM spj,p
WHERE spj.PNO=p.PNO AND qty<500

15.在S表中查询,和供应商S1在同一个城市的其他供应商的供应商号和供应商名。(用自身连接) 

SELECT s2.SNO,s2.SNAME,s2.CITY
FROM s s1,s s2
WHERE s1.CITY=s2.CITY AND s1.SNAME='精益';

一、简答题 1、什么是数据与程序的物理独立性?什么是数据与程序的逻辑独立性? ①物理独立性是指用户的应用程序与数据库中数据的物理存储是相互独立的。也就是说,数据在数据库中怎样存储是由数据库管理系统管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变时应用程序不用改变。 ②逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的。也就是说,数据的逻辑结构改变时用户程序也可以不变。 2、试述等值连接与自然连接的区别和联系。 连接运算符是“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。 3、试述实现数据库安全性控制的常用方法和技术。 ( l )用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。 **( 2 )存取控制:**通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如CZ 级中的自主存取控制( DAC ) , Bl 级中的强制存取控制(MAC )。 **( 3 )视图机制:**为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。 ( 4 )审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。 **( 5 )数据加密:**对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。 4、试述关系模型的三类完整性规则,并举例说明。 实体完整性:所谓的实体完整性就是指关系(所谓的关系就是表)的主码不能取空值; 例子: (1) 实体完整性规则:若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值。 **参照完整性:**是指参照关系中每个元素的外码要么为空(NULL),要么等于被参照关系中某个元素的主码; 例子: (2) 参照完整性规则:若属性(或属性组) F 是基本关系 R 的外码,它与基本关系 S 的主码 K s 相对应(基本关系 R 和 S 不一定是不同的关系),则对于 R 中每个元组在 F 上的值必须为: 或者取空值( F 的每个属性值均为空值); 或者等于 S 中某个元组的主码值。 用户定义的完整性:指对关系中每个属性的取值作一个限制(或称为约束)的具体定义。 5、一个不好的模式会有些什么问题? ①数据冗余 ②更新异常 ③插入异常 ④删除异常 6、数据库设计中,需求分析的任务是什么?调查的内容是什么? 需求分析阶段的设计目标是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统手工系统或计算机系统)工作概况明确用户的各种需求,然后在此基础上确定新系统的功能。 **调查的内容是“数据”和“处理”**即获得用户对数据库的如下要求: (1)信息要求指用户需要从数据库中获得信息的内容与性质由信息要求可以导出数据要求即在数据库中需要存储哪些数据。 (2)处理要求指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理。 (3)安全性与完整性要求 7、什么是索引?索引的作用。 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 建立索引是加快查询速度的有效手段,数据库索引类似于图书后面的索引,能快速定位到需要查询的内容,用户可以根据应用环境的需要在基本表上建立一个或者多个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值