数据库练习——一些复健
数据库一些复健,一些认为比较重要的语句标红了。
第一,创建数据库,参见本书291页“附录B 学生信息数据库stusys的表结构和样本数据”。
1./ *创建stusys数据库*/
CREATE DATABASE stusys;
USE stusys;
/*创建student表*/
CREATE TABLE student
(
sno char(6) NOT NULL PRIMARY KEY,
sname char(8) NOT NULL,
ssex char(2) NOT NULL DEFAULT '男',
sbirthday date NOT NULL,
speciality char(12) NULL,
tc tinyint NULL
);
/*创建course表*/
CREATE TABLE course
(
cno char(4) NOT NULL PRIMARY KEY,
cname char(16) NOT NULL,
credit tinyint NULL
);
/*创建score表*/
CREATE TABLE score
(
sno char (6) NOT NULL,
cno char(4) NOT NULL,
grade tinyint NULL,
PRIMARY KEY(sno,cno)
);
/*创建teacher表*/
CREATE TABLE teacher
(
tno char (6) NOT NULL PRIMARY KEY,
tname char(8) NOT NULL,
tsex char (2) NOT NULL DEFAULT '男',
tbirthday date NOT NULL,
title char (12) NULL,
school char (12) NULL
);
/*创建 lecture表*/
CREATE TABLE lecture
(
tno char(6) NOT NULL,
cno char(4) NOT NULL,
location char(10) NULL,
PRIMARY KEY(tno,cno)
);
/*插入数据到student表*/
INSERT INTO student
VALUES('191001','刘清泉','男','1998-06-21','计算机',52),
('191002','张慧玲','女','1999-11-07','计算机',50),
('191003','冯涛','男','1999-08-12','计算机',52),
('196001','董明霞','女','1999-05-02','通信',50),
('196002','李茜','女','1998-07-25','通信',48),
('196004','周俊文','男','1998-03-10','通信',52);
/*插入数据到course表*/
INSERT INTO course
VALUES('1004','数据库系统',4),
('1017','操作系统',3),
('4002','数字电路',3),
('8001','高等数学',4),
('1201','英语',4);
/*插入数据到score表*/
INSERT INTO score
VALUES('191001','1004',95),
('191002','1004',87),
('191003','1004',93),
('196001','4002',90),
('196002','4002',79),
('196004','4002',88),
('191001','8001',92),
('191002','8001',88),
('191003','8001',84),
('196001','8001',87),
('196002','8001',NULL),
('196004','8001',94),
('191001','1201',92),
('191002','1201',78),
('191003','1201',93),
('196001','1201',84),
('196002','1201',76),
('196004','1201',92);
/*插入数据到teacher表*/
INSERT INTO teacher
VALUES('100006','何艺杰','男','1970-06-23','教授','计算机学院'),
('100023','孙浩然','男','1979-04-09','教授','计算机学院'),
('400017','李亚兰','女','1988-11-04','讲师','通信学院'),
('800028','袁万明','男','1978-08-15','副教授','数学学院'),
('120046','刘颖','女','1976-12-15','副教授','外国语学院');
/*插入数据到lecture表*/
INSERT INTO lecture
VALUES('100006','1004','2-311'),
('400017','4002','1-106'),
('800028','8001','6-104'),
('120046','1201','6-215');
第二,数据查询
【练习6.1】查询student表中所有学生的学号、姓名和专业。
【练习6.2】查询student表中所有列。
【练习6.3】查询student表中所有学生的学生的sno、sname、speciality,并将结果中各列的标题分别修改为学号, 姓名, 专业。
【练习6.4】列出Goods表的商品名称、商品价格和打9折后的商品价格。
【练习6.5】查询student表中speciality列,消除结果中的重复行。
【练习6.6】查询student表中专业为计算机或性别为女的学生。
【练习6.7】查询score表成绩为92、95的记录。
【练习6.8】查询student表中不在1998年出生的学生情况。
【练习6.9】查询已选课但未参加考试的学生情况。
【练习6.10】查询student表中姓董的学生情况。
【练习6.11】查询含有“系统”或“数字”的所有课程名称。
【练习6.12】求学生的总人数。
【练习6.13】查询通信专业学生的总人数。
【练习6.14】查询1201课程总分。(这里如果用连接要设置sc为主表)
【练习6.15】查询8001课程的最高分、最低分、平均成绩。
【练习6.16】查询各门课程的最高分、最低分、平均成绩。
【练习6.17】查询平均成绩在90分以上的学生的学号和平均成绩。
(group by起别名是有规则的,记得去查看)
Select sno Avg(grade)
From score
Group by sno HAVING AVG(grade) > 90
【练习6.18】查询至少有5名学生选修且以8开头的课程号和平均分数。(这里不要用别名,写快le)
【练习6.19】将计算机专业的学生按出生时间降序排序。
【练习6.20】查询成绩表中成绩前3位学生的学号、课程号和成绩。(使用了limit)
【练习6.21】采用交叉连接查询教师和和讲课地点所有可能组合。(意思是说记录和记录之间的所有组合,不是说tno和location)
【练习6.22】查询每个学生选修课程的情况。(什么意思??,我按我的意思来写了,学生是主表)
【练习6.23】查询选修了数据库系统课程且成绩在80分以上的学生情况。
Select st.*
From student st
Left join score sc on st.sno = sc.sno AND
Left join course c on c.cno
Group by
【练习6.24】对练习6.22进行自然连接查询。
【练习6.25】查询选修了“1201”课程的成绩高于学号为“191002”的成绩的学生姓名。
三重查询
Select
Select grade
From score
Where cno = 1201 AND sno = 191002
Select st.sname
From student st
Left join score sc on sc.sno = sc.sno AND sc.cno = 1201
Where sc.grade > (select grade from score where cno = 1201 and sno = 191002)
【练习6.26】采用左外连接查询教师任课情况。
【练习6.27】采用右外连接查询教师任课情况。
【练习6.28】查询选修了课程号为8001的课程的学生情况。
【练习6.29】查询选修某课程的学生人数多于4人的教师姓名。
【练习6.30】查询比所有通信专业学生年龄都小的学生。
【练习6.31】查询选修1004课程的学生姓名。
【练习6.32】查询性别为女及选修了课程号为4002的学生。
【练习6.1】查询student表中所有学生的学号、姓名和专业。
【练习6.2】查询student表中所有列。
【练习6.3】查询student表中所有学生的学生的sno、sname、speciality,并将结果中各列的标题分别修改为学号, 姓名, 专业。
【练习6.4】列出Goods表的商品名称、商品价格和打9折后的商品价格。
【练习6.5】查询student表中speciality列,消除结果中的重复行。
【练习6.6】查询student表中专业为计算机或性别为女的学生。
【练习6.7】查询score表成绩为92、95的记录。(需要注意
【练习6.8】查询student表中不在1998年出生的学生情况。
【练习6.9】查询已选课但未参加考试的学生情况。(这道题可以直接写grade IS NOT NULL)
【练习6.10】查询student表中姓董的学生情况。
【练习6.11】查询含有“系统”或“数字”的所有课程名称。
【练习6.12】求学生的总人数。(count是数数,sum是总和,要区分的话记一下这一道题就可以了,求学生的总人数,肯定需要用到主键,如果使用sum的话,就是1922222+192222222+……+192222222= 10^n(估计) , 那么就要用count,因为count是数有多少条记录,数主键(不会重复,除非是联合主键)就是数有多少人)
【练习6.13】查询通信专业学生的总人数。
【练习6.14】查询1201课程总分。(这里如果用连接要设置sc为主表)
【练习6.15】查询8001课程的最高分、最低分、平均成绩。
【练习6.16】查询各门课程的最高分、最低分、平均成绩。
【练习6.17】查询平均成绩在90分以上的学生的学号和平均成绩。
【练习6.18】查询至少有5名学生选修且以8开头的课程号和平均分数。(这里不要用别名,写快le)
【练习6.19】将计算机专业的学生按出生时间降序排序。
【练习6.20】查询成绩表中成绩前3位学生的学号、课程号和成绩。(使用了limit)
【练习6.21】采用交叉连接查询教师和和讲课地点所有可能组合。
【练习6.22】查询每个学生选修课程的情况。(学生情况按照我的理解,我将各表的列都select了)
【练习6.23】查询选修了数据库系统课程且成绩在80分以上的学生情况。
【练习6.24】对练习6.22进行自然连接查询。(自然连接,所以直接用了外连接,这里我写答案应该有误)
【练习6.25】查询选修了“1201”课程的成绩高于学号为“191002”的成绩的学生姓名。
【练习6.26】采用左外连接查询教师任课情况。
【练习6.27】采用右外连接查询教师任课情况。
【练习6.28】查询选修了课程号为8001的课程的学生情况。
【练习6.29】查询选修某课程的学生人数多于4人的教师姓名。
【练习6.30】查询比所有通信专业学生年龄都小的学生。
(这里min就可以了)
【练习6.31】查询选修1004课程的学生姓名。
【练习6.32】查询性别为女及选修了课程号为4002的学生。
本文作者:程序计算机人
本文链接:https://www.cnblogs.com/clina/p/18161041
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步