好友
阅读权限 10
听众
最后登录 1970-1-1
本帖最后由 Marbles 于 2022-4-10 20:58 编辑
第一部分——建立最简单的表
学生-课程模式 S-T:
学生表:Student(Sno ,Sname,Ssex,Sage,Sdept) 学号,姓名,性别,年龄,所在系
课程表:Course(Cno ,Cname,Cpno,Ccredit) 课程号,课程名,先行课,学分
学生选课表:SC(Sno ,Cno ,Grade) 学号,课程号,成绩
注意:
1.下划线表示主键(区分行,区分不同的元组。列是属性)
2.SC表的Grade的值可以为空(NULL,而NULL不是0)
判断成绩是否为0:= 0
判断成绩是否为NULL:is NULL
3. 三张表的关系:
(参照表)SC<--->Student(被参照表)
(参照表)SC<--->Course(被参照表)
4.值
Student表中的Ssex定义时,要用check约束条件来限制
Course表中的Cpno有的是没有的,Ccredit在有的表里是semester(学期数)
框架如下:
[SQL] 纯文本查看 复制代码
create table Student(
Sno char(9) primary key,--primary key主键定义在单列上(法一)
Sname char(20) ,
Ssex char(2), --一个汉字两个字符
Sage smallint,
Sdept char(20)
);
create table Course
(
Cno char(4) primary key,
Cname char(40),
Cpno char(4),
Ccredit smallint
foreign key(Cpno) references Course(Cno)
--外键 Cpno, 此时Course表既是参照表也是被参照表
--根据语义,先行课一定是已有的课程
);
create table SC
(
Sno char(9), --参照其他表时,为了方便,对应列的格式尽量一致
Cno char(4), --char(9), char(4)
Grade smallint,
primary key(Sno, Cno), --primary key(列名,列名)共同构成主键
--主键定义在表上(法二)
foreign key(Sno) references Student(Sno),
--参照表字段 被参照表字段
foreign key(Cno) references Course(Cno)
--最后三行语句都是表一级,列定义完之后才写的
)
练习:
1.建库 [SQL] 纯文本查看 复制代码
create database students
go 2.建表(只建了框架,里面没有数据) [SQL] 纯文本查看 复制代码
use students
go
create table student
(
sno char(7) primary key,
sname char(10) not null,
ssex char(2) check(ssex in('男','女')), --或check(ssex='男' or ssex='女')
sage int,
sdept char(20)
)
go
create table course
(
cno char(10) primary key,
cname char(20) not null,
credit int check(credit>0),
semester int
)
go
create table sc
(
sno char(7),
cno char(10),
grade int check(grade>=0 and grade<=100),
primary key(sno,cno),
foreign key(sno) references student(sno),
foreign key(cno) references course(cno)
)
go
2.插入数据
[SQL] 纯文本查看 复制代码
use students
insert into student (sno,sname,ssex,sage,sdept)
values('0811101','李勇','男','21','计算机系'),
('0811102','刘晨','男','20','计算机系'),
('0811103','王敏','女','20','计算机系'),
('0811104','张小红','女','19','计算机系'),
('0821101','张立','男','20','信息管理系'),
('0821102','吴宾','女','19','信息管理系'),
('0821103','张海','男','20','信息管理系'),
('0831101','钱小平','女','21','通信工程系'),
('0831102','王大力','男','20','通信工程系'),
('0831103','张姗姗','女','19','通信工程系')
insert into course (cno,cname,credit,semester)
values('c001','高等数学',4,1),
('c002','大学英语',3,1),
('c003','大学英语',3,2),
('c004','计算机文化学',2,2),
('c005','java',2,3),
('c006','数据库基础',4,5),
('c007','数据结构',4,4),
('c008','计算机网络',4,4)
insert into sc (sno,cno,grade)--缺省为null
values('0811101','c001',96),('0811101','c002',80),
('0811101','c003',84),('0811101','c005',62),
('0811102','c001',92),('0811102','c002',90),
('0811102','c004',84),('0821102','c001',76),
('0821102','c004',85),('0821102','c005',73),
('0821102','c007',null),('0821103','c001',50),
('0821103','c004',80),('0831101','c001',50),
('0831101','c004',80),('0831102','c007',null),
('0831103','c004',78),('0831103','c005',65),
('0831103','c007',null)
此时的三张表为 (分别查询表的前 1000 行得到)
3. 存储 (通过数据库的分离和附加,以后还会有数据库的备份和还原)