整理自博主本科《数据库系统原理》专业课自己完成的实验课查询作业,以便各位学习数据库系统概论的小伙伴们参考、学习。
*文中若存在书写不合理的地方,欢迎各位斧正。
专业课本:
————
本次实验使用到的图形化工具:Heidisql
目录
第一题、生成EDUC数据库中的三个表,把问题在MySQL中执行,并查看查询结果,截图。
1.在课程表中查询课 程名以“数据”开头的课程的课程号,课程名。注意要取别名。
2.在课程表中查询课程名,学分,学分是2到4之间。用比较运算符,或between and ,或in。分别表达学分的限制条件。
3.查询课程表中,课程的学分都有哪些。
4.查询所有没有确定专业的,年龄小于19岁的,女生的学号,姓名,年龄。并按照年龄降序排列,如果年龄相同,按照学号升序排列。
5.查询所有学分大于2的 ,没有先修课的课程的课程号,课程名,并按课程号升序排列
6.查询课程总个数。
7.计算学号为“200215121”的学生平均成绩。
8.查询被选修的课程的个数。
9.查询学号为“200215121”的学生所考试的课程中的最高分数。
第二题、生成spj数据库中的四个表,进行查询,给出查询结果。
1.查询工程项目所在地名字最后一个字是‘京’字的项目号,项目名,所在城市。注意把列名从英文改为中文。
2.查询零件重量大于等于10,小于等于20的红色零件或重量大于30的蓝色零件的零件名称,颜色和重量。列名不改别名。
3.表中零件重量单位是公斤,请给出每种零件的市斤数。输出的列有零件号,零件名,和市斤数。市斤数是列的别名,其他两个不用改。
4.查询零件表中,零件的颜色都有哪些。
5.在spj表中。查询供应数量是100,200,300,400的那些元组。
6.在spj表中,如果供应数量是null。代表供应商给某项目供应的某零件的数量不确定。查询有那些供应商给哪些项目供应的哪些零件是不确定数量的。要求给出供应商名,项目名和零件名。
7.查询重量小于40的零件的零件号,零件名和零件颜色。并按照零件颜色排序降序排列,颜色相同的,按照零件号升序排列。
8.找出最重的三种零件的零件号和零件名。
9.查询零件共有几种颜色。
10.如果每种零件取一个,那么所有种类的零件的总重量是多少。
11.查询红色零件中最轻的那种零件的重量是多少。
12.查询蓝色零件的平均重量。
*做题,截图,把代码及查询执行结果的截图放在相应题目的下方。(没有安装成功的,可以只写代码)
第一题、生成EDUC数据库中的三个表,把问题在MySQL中执行,并查看查询结果,截图。
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 cno as 课程号,Cname as 课程名
from Course
where Cname like '数据%'
2.在课程表中查询课程名,学分,学分是2到4之间。用比较运算符,或between and ,或in。分别表达学分的限制条件。
(不用取别名,后面的题目没有特别要求都可以不用取别名。 )
比较运算符:
select cname,Ccredit
from Course
where Ccredit>=2 and Ccredit<=4
between and:
select cname,Ccredit
from Course
where Ccredit between 2 and 4
in:
select cname,Ccredit
from Course
where Ccredit IN (2,3,4)
3.查询课程表中,课程的学分都有哪些。
select distinct Ccredit
from Course
4.查询所有没有确定专业的,年龄小于19岁的,女生的学号,姓名,年龄。并按照年龄降序排列,如果年龄相同,按照学号升序排列。
select sno,sname,sage
from Student
where Ssex = '女' and Sage < 19 and Sdept is null
order by Sage desc,sno asc
5.查询所有学分大于2的 ,没有先修课的课程的课程号,课程名,并按课程号升序排列
select Cno,cname
from Course
where Ccredit>2 and Cpno is null
order by Cno
6.查询课程总个数。
select COUNT(*)
from Course
7.计算学号为“200215121”的学生平均成绩。
select AVG(grade)
from SC
where Sno = '200215121'
8.查询被选修的课程的个数。
select COUNT( distinct Cno) as 被选修的课程数
from SC
9.查询学号为“200215121”的学生所考试的课程中的最高分数。
select MAX(grade) as 最高分数
from SC
where Sno = '200215122'
第二题、生成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.查询工程项目所在地名字最后一个字是‘京’字的项目号,项目名,所在城市。注意把列名从英文改为中文。
select jno 工程项目代码,jname 工程项目名,city 工程所在城市
from J
where CITY like '%京'
2.查询零件重量大于等于10,小于等于20的红色零件或重量大于30的蓝色零件的零件名称,颜色和重量。列名不改别名。
select pname,color,weight
from P
where (WEIGHT between 10 and 20 and COLOR = '红') or(WEIGHT > 30 and COLOR = '蓝')
3.表中零件重量单位是公斤,请给出每种零件的市斤数。输出的列有零件号,零件名,和市斤数。市斤数是列的别名,其他两个不用改。
select pno,pname,weight*2 as 市斤数
from P
4.查询零件表中,零件的颜色都有哪些。
select distinct color
from P
5.在spj表中。查询供应数量是100,200,300,400的那些元组。
select *
from spj
where Qty in (100,200,300,400)
6.在spj表中,如果供应数量是null。代表供应商给某项目供应的某零件的数量不确定。查询有那些供应商给哪些项目供应的哪些零件是不确定数量的。要求给出供应商名,项目名和零件名。
select sname,pname,jname
from s,P,J,spj
where s.SNO =spj.SNO and P.PNO = spj.PNO and J.JNO = spj.JNO and Qty is null
7.查询重量小于40的零件的零件号,零件名和零件颜色。并按照零件颜色排序降序排列,颜色相同的,按照零件号升序排列。
select pno,pname,color
from P
where WEIGHT<40
order by color desc,pno
8.找出最重的三种零件的零件号和零件名。
select pno,pname
from P limit 3
order by WEIGHT desc
9.查询零件共有几种颜色。
select count(distinct color)
from P
10.如果每种零件取一个,那么所有种类的零件的总重量是多少。
select sum(weight)
from P
11.查询红色零件中最轻的那种零件的重量是多少。
select weight,pno,pname
from P
where COLOR = '红'
order by WEIGHT asc limit 1
-- 如果用下面的代码,只能查到重量,查不到是哪种零件
select MIN(WEIGHT )
from P
where COLOR = '红'
12.查询蓝色零件的平均重量。
select AVG(WEIGHT)
from P
where COLOR = '蓝'