2024-04-26 22:50阅读: 26评论: 0推荐: 0

数据库练习——一些复健

  数据库一些复健,一些认为比较重要的语句标红了。

  

第一,创建数据库,参见本书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 中国大陆许可协议进行许可。

posted @   程序计算机人  阅读(26)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Lions Pride Audio artist
  2. 2 Salty Sailor David Arkenstone
  3. 3 Stonefire David Arkenstone
Lions Pride - Audio artist
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available