SQL:结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11
学生表Student(Sno,Sname,Ssex,Sage,Sdept)
课程表Course(Cno,Cname,Cpno,Ccredit)
学生选课表SC(Sno,Cno,Grade)
学生表数据
学号Sno | 姓名 Sname | 性别 Ssex | 年龄 Sage | 所在系 Sdept |
---|---|---|---|---|
201215121 | 李勇 | 男 | 20 | CS |
201215122 | 刘晨 | 女 | 19 | CS |
201215123 | 王敏 | 女 | 18 | MA |
201215125 | 李勇 | 男 | 20 | IS |
课程表数据(其中先行课既是主键又是外键)
课程号Cno | 课程名Cname | 先行课Cpno | 学分Ccredit |
---|---|---|---|
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据处理 | 2 | |
7 | PASCAL语言 | 6 | 4 |
选课表SC中间表(联系表)
学号Sno | 课程号Cno | 成绩Grade |
---|---|---|
201215121 | 1 | 92 |
201215121 | 2 | 85 |
201215121 | 3 | 88 |
201215121 | 2 | 90 |
201215121 | 3 | 80 |
在建表的过程中使用数据库管理员进行登录,在SQL定义与查询实验中忽略用户授权与相应的视图机制
在实验贱建表的过程中对常用的数据类型的说明进行省略
数据类型参考说明
实验工具Sqlserver自带工具
前期加主键约束与列级完整性约束条件
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY, /*主键约束*/
Sname CHAR(20) UNIQUE, /*唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
外键引用自身
-- 选课表
CREATE TABLE Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno)
);
中间表的部分主键由两个外键联合组成,外键分别引用另外两个表的主键
CREATE TABLE SC(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno),
);
完成数据库系统表的建立
语法关键字
列名:COLUMN(column)
ALTER TABLE Student ADD S_entrance DATE;
ALTER TABLE Student DROP COLUMN S_entrance;
删除表中一列时携带关键字
带有外键约束的无法直接进行删除
级联删除语法存在问题
查询后发现是因为SQL2012不支持使用"cascade"和"destrict”
先删除对应的关系在删除学生表