创建表命令使用
CREATE DATABASE stsc ON PRIMARY ( /* NAME is filespec: filespec 指定的文件的逻辑文件名 逻辑文件名--数据库文件在数据库中显示的名字 */ name=coderitl_datafile, /* 主数据文件存储路径 name.mdf */ filename='G:\SQLServer\Data\database-20210928\stsc.mdf', /* SIZE: 指定 filespec 定义的文件的初始大小 */ size=10mb, /* MAXSIZE:指定 filespec 定义文件的最大大小 */ maxsize = 50mb, filegrowth = 5mb ) log ON ( name=coderit_log, filename='G:\SQLServer\Data\database-20210928\stsc.ldf', SIZE=5mb, maxsize=25mb, filegrowth=5mb ) ;
使用T-SQL
命令,为stsc
数据库创建教材P388
所示的student
,course
,score
,teacher
数据表结构。
use stsc; -- 创建表 student create table student( /* 学号 */ sno char(6) not null primary key, /* 姓名 */ sname char(8) not null, /* 性别 */ stsex char(2) not null, /* 出生日期 */ stbirthday date not null, /* 专业 */ speciality char(12), /* 总学分 */ tc int ); -- 创建表 course create table course( -- 课程号 cno char(3) not null primary key, -- 课程名 cname char(16) not null, -- 学分 credit int , -- 教师号 tno char(6) ); -- 创建表 score create table score( -- 学号 stno char(6) not null, -- 课程号 cno char(3) , -- 成绩 grade int , -- 添加联合主键 primary key(stno,cno) ); -- 创建表 teacher create table teacher( -- 教师号 tno char(6) not null, -- 姓名 tname char(8) not null, -- 性别 tsex char(2) not null, -- 出生日期 tbirthday date not null, -- 职称 title char(12) , -- 学院名 school char(12), );
使用T-SQL
命令,为stsc
数据库的student
表添加Email
字段,类型为char(20)
use stsc go ALTER TABLE student ADD Email char(20) NOT NULL;
使用T-SQL
命令,在stsc
数据库中修改course
表的credit
字段类型,改为float
USE stsc GO ALTER TABLE course ALTER COLUMN credit float;
使用T-SQL
命令,在stsc
数据库中删除student
表的email
字段
USE stsc GO ALTER TABLE student DROP COLUMN email;
用SSMS
图形界面向stsc
数据库中的student
,course
,score
表插入数据,(表中数据如P389
)
student: INSERT INTO student VALUES ('121001', '李贤友', '男', '1991-12-30', '通信', 52); INSERT INTO student VALUES ('121002', '周映雪', '女', '1993-01-12', '通信', 49); INSERT INTO student VALUES ('121005', '刘刚', '男', '1992-07-05', '通信', 50); INSERT INTO student VALUES ('122001', '郭德纲', '男', '1991-10-23', '计算机', 48); INSERT INTO student VALUES ('122002', '谢暄', '女', '1992-09-11', '计算机', 52); INSERT INTO student VALUES ('122004', '孙婷', '女', '1991-02-24', '计算机', 50);
course: INSERT INTO course VALUES ('102', '数字电路', 3, '102101'); INSERT INTO course VALUES ('203', '数据库系统', 3, '204101'); INSERT INTO course VALUES ('205', '微机原理', 4, '204107'); INSERT INTO course VALUES ('208', '计算机原理', 4, NULL); INSERT INTO course VALUES ('801', '高等数学', 4, '801102');
score: INSERT INTO score VALUES ('121001', '102', 92); INSERT INTO score VALUES ('121002', '102', 72); INSERT INTO score VALUES ('121005', '102', 87); INSERT INTO score VALUES ('122002', '203', 94); INSERT INTO score VALUES ('122004', '203', 81); INSERT INTO score VALUES ('121001', '205', 91); INSERT INTO score VALUES ('121002', '205', 65); INSERT INTO score VALUES ('121005', '205', 85); INSERT INTO score VALUES ('121001', '801', 94); INSERT INTO score VALUES ('121002', '801', 73); INSERT INTO score VALUES ('121005', '801', 82); INSERT INTO score VALUES ('122001', '801', NULL); INSERT INTO score VALUES ('122002', '801', 95); INSERT INTO score VALUES ('122004', '801', 86);
用Insert
语句向stsc
数据库中的teacher
数据表插入数据(表中数据如P389
)
Teacher: INSERT INTO teacher VALUES ('102101', '刘林卓', '男', '1962-03-21', '教授', '通信学院'); INSERT INTO teacher VALUES ('102105', '周学莉', '女', '1977-10-05', '讲师', '通信学院'); INSERT INTO teacher VALUES ('204101', '吴波', '男', '1978-04-26', '教授', '计算机学院'); INSERT INTO teacher VALUES ('204107', '王冬琴', '女', '1968-11-18', '副教授', '计算机学院'); INSERT INTO teacher VALUES ('801102', '李伟', '男', '1975-08-19', '副教授', '数学学院');
新增练习
/* 1. 将李贤友同学的出生日期改为‘1995-4-5’。*/ UPDATE student SET stbirthday = '1995-4-5' WHERE sname = '李贤友'; -- 2. 在teacher表添加一名老师的信息: 通信学院,张丽,女,教授,教师号:102103,出生日期:1977-8-7。 INSERT INTO teacher ( school, tname, tsex, title, tno, tbirthday) VALUES ( '通信学院', '张丽', '女', '教授', '102103', '1977-8-7'); -- 3. 删除张丽老师的信息。 DELETE FROM teacher WHERE tname = '张丽'; -- 4. 查询student表中总分大于或等于50分的学生情况。 SELECT * FROM student WHERE tc >= 50; -- 5. 查询谢暄的“高等数学”成绩。 SELECT sname, grade FROM student stu INNER JOIN score ON stu.sno = score.stno INNER JOIN course ON score.cno = course.cno WHERE stu.sname = '谢暄' AND cname = '高等数学'; -- 6. 查找选修了“数字电路”的学生的姓名及成绩,并按成绩降序排列。 SELECT sname, grade FROM student stu INNER JOIN score ON stu.sno = score.stno INNER JOIN course ON score.cno = course.cno WHERE cname = '数字电路' ORDER BY grade DESC; -- 7. 查询学号为121001的学生的所有课程的平均成绩。 SELECT avg(grade) AS "allCourseAvgScore", stu.sno FROM student stu INNER JOIN score ON stu.sno = score.stno WHERE stu.sno = '121001' GROUP BY stu.sno; -- 8. 查找“数据库系统”和“微机原理”的平均成绩。 SELECT cname, avg(grade) AS "Avg" FROM score INNER JOIN course ON score.cno = course.cno WHERE cname = '数据库系统' GROUP BY cname; SELECT cname, avg(grade) AS "Avg" FROM score INNER JOIN course ON score.cno = course.cno WHERE cname = '微机原理' GROUP BY cname; -- 9. 查询每个专业最高分的课程名和分数。 SELECT max(grade) AS "MaxGrade", cname FROM score INNER JOIN course ON score.cno = course.cno GROUP BY cname; -- 10. 查询通信专业最高分的学生的学号、姓名、课程号和分数。 SELECT max(grade) AS "MaxGrade" , sno , sname , score.cno , grade , speciality FROM student stu INNER JOIN score ON stu.sno = score.stno INNER JOIN course ON score.cno = course.cno WHERE speciality = '通信' GROUP BY sno, sname, score.cno, grade, speciality; -- 11. 查询有两门以上(含两门)课程超过 80 分的学生的姓名及其平均成绩。 SELECT count(*) as 'TCourse', avg(grade) as 'Avg', sname FROM student stu inner join score on score.stno = stu.sno inner join course on score.cno = course.cno where grade > 80 group by sname having count(*) > 2; -- 12. 查询选修了所有已安排任课教师的课程的学生的姓名 /* 已安排: 如何实现 */ select sname, tname, cname from student stu inner join score on score.stno = stu.sno inner join course on score.cno = course.cno inner join teacher tch on course.tno = tch.tno;
对应结果输出(暂未整理顺序)