题目:
学生表:Student (Sno, Sname, Ssex , Sage, Sdept)
学号,姓名,性别,年龄,所在系 Sno为主键
课程表:Course (Cno, Cname,)
课程号,课程名 Cno为主键
学生选课表:SC (Sno, Cno, Score)
学号,课程号,成绩 Sno,Cno为主键1.用SQL语句创建学生表student,定义主键,姓名不能重名,性别只能输入男或女,所在系的默认值是 “计算机”。
2.修改student 表中年龄(age)字段属性,数据类型由int 改变为smallint。
3.为SC表建立按学号(sno)和课程号(cno)组合的升序的主键索引,索引名为SC_INDEX 。
4.创建一视图 stu_info,查询全体学生的姓名,性别,课程名,成绩。
1、创建学生表Student,定义主键,姓名唯一,性别限制,系默认值为“计算机”。
CREATE TABLE Student (
Sno INT PRIMARY KEY,
Sname VARCHAR(20) NOT NULL UNIQUE,
Ssex ENUM('男', '女') NOT NULL DEFAULT '男',
Sage INT,
Sdept VARCHAR(20) DEFAULT '计算机'
);
这里使用了ENUM
类型来限制性别只能输入'男'或'女',Sname
设为UNIQUE
确保姓名不重复,Sdept
设了默认值为'计算机'。
2、修改student 表中年龄(age)字段属性,数据类型由int变为smallint。
由于SQL标准不直接支持直接修改字段类型的同时改变大小(特别是从大改小),通常的做法是新增一个字段,迁移数据,再删除旧字段。但小型整型(SMALLINT)在多数系统中已经足够存放年龄,且与INT差别不大,如果原表数据量不大或允许暂时锁表操作,可以考虑直接操作,但需谨慎。这里提供一般推荐的较为安全的做法:
ALTER TABLE Student
ADD COLUMN Sage_new SMALLINT;
UPDATE Student SET Sage_new = Sage;
ALTER TABLE Student DROP COLUMN Sage;
ALTER TABLE Student RENAME COLUMN Sage_new TO Sage;
请根据实际情况和数据库管理系统(如MySQL、PostgreSQL等)的具体支持情况调整上述脚本,因为不是所有数据库都支持直接rename column操作。
3、为SC表建立组合主键索引。
ALTER TABLE SC
ADD CONSTRAINT SC_INDEX PRIMARY KEY (Sno, Cno);
这里创建了一个名为SC_INDEX
的复合主键,由Sno和Cno组成。
4、创建视图stu_info,查询全体学生的姓名,性别,课程名,成绩。
CREATE VIEW stu_info AS
SELECT S.Sname, S.sex, C.Cname, SC.Score
FROM Student S
JOIN SC ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno;
这样,stu_info
视图就被创建了,它可以展示学生的姓名、性别、所选课程名及其对应的成绩。