本来第四次作业草稿都写完了的,但就是忘了发,所以就在此基础上精简修改一下连带第五次的一起发了。
【例3.1】没什么好说的简单的建立用户
CREAT SCHEMA"S-A"AUTHORIZATION WANG;
【例3.2】在这里定义过了模式,我们就是定义了命名空间
CREATE SCHEMA AUTHORIZATION WANG;
【例3.3】创建模式,新建表。
CREATE SCHEMA TEST AUTHORIZATION wang
CREATE TABLE TEB1(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
随后在菜单中可以找到新建的表(可以用DROP SCHEMA<模式名>;语句删除模式)
【例3.4】 DROP SCHEMA WANG (CASCADE);
删除了模式,连带其中的表会一并删除。
(额外内容:CASCADE 级联: 删除模式的同时把该模式中所有的数据库对象全部删除。
RESTRICT 限制:如果该模式中定义了下属的数据库对象,则拒绝该删除语句的执行。仅当该模式中没有任何下属的对象时才能执行。)
【例3.5】CREATE TABLE Student
(Sno CHAR(9)PRIMARY KEY, /列级完整性约束田间,Sno是主码/
Sname CHAR(20)UNIQUE, /Sname取唯一值/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
照书上输入即可,随后可发现表已生成。
【例3.6】CREATE TABLE Course
(Cno CHAR(4)PRIMARY KEY,
Cname CHAR(40) NOT NULL, /Cname不可为空/
Cpno CHAR(4),
Credit SMALLINT,
FOREIGN KEY(Cpno)REFERENCES Course(Cno)
);
这部分的话也是照书上输入可得一个“课程”表
【例3.7】 建立学生选课表SC。
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4) , /Cname不可为空/
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno)REFERENCES Student(Sno), /表级完整性约束条件,Sno是外码,被参照表是Student/
FOREIGN KEY(Cno)REFERENCES Course(Cno), /表级完整性约束条件,Cno是外码,被参照表是Course/
);
这里要记住以下是ALTER TABLE语句修改表的格式
ALTER TABLE<表名>
1、[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
/[ADD<标记完整性约束>]
2、[DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
3、[DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
4、[ALTER COLUMN<列名><数据类型>];
【例3.8】
ALTER TABLE Student ADD S_entrance DATE;
注意新增加的列必须是空值,且不可以重名,否则无法执行
【例3.9】
ALTER TABLE Student ALTER COLUMN Sage INT ;
原样输入即可
【例3.10】
ALTER TABLE Course ADD UNIQUE(Cname);
同原样输入即可
【例3.11】删除Student表
DROP TABLE Student;
如果提示该对象正在被。。。引用就把上面SC表删了,极可能是Sno的外码就是Student
【例3.12】
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept=‘IS’;
DROP TABLE Student;
SELECT*FROM IS_Student;
会给报错:–由于绑定错误,无法使用视图或函数 ‘IS_Student’。
【3.13】
输入
CREATE UNIQUE INDEX Stusno ON Student(Sno);(按照Sno学号升序,没有说明是升序)
CREATE UNIQUE INDEX Coucno ON Course(Cno);(按照Cno课程号升序)
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);(按学号升序和课程号降序,即在SC上建立索引)
【3.14】
ALTER INDEX SCno RENAME TO SCSno;
修改索引名,用完后会报错,版本问题。。。
【3.15】
DROP INDEX Stusno;
删除表中索引,依旧报错,错上加错,版本问题。。。
(通过借鉴其他同学得知这两句应该是EXEC sp_rename ‘SC.SCno’, ‘SCSno’, 'index’和DROP INDEX Stusno on Student;)
【3.69】
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES (‘201215128’,‘陈冬’,‘男’,‘IS’,18);
输入后丝滑流畅没问题。
【3.70】
INSERT
INTO Student
VALUES (‘201215126’,‘张成民’,‘男’,18,‘CS’);
输入后流畅丝滑没问题。
【3.71】
INSERT
INTO SC(Sno,Cno)
VALUES ('201215128 ‘,‘1’);
当然老师讲的也可以这么写:
INSERT
INTO SC
VALUES (’ 201215128 ‘,’ 1 ',NULL);
【3.16】
SELECT Sno,Sname
FROM Student;
在所有学生中查询Sno,Sname两列
【3.17】
SELECT Sname,Sno,Sdept
FROM Student;
还是那几个名字
【3.18】
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student;
等价于
SELECT *
FROM Student;
所有的学生显示了出来
【3.19】
SELECT Sname,2014-Sage
FROM Student;
无异常
【3.20】
SELECT Sname,'Year of Birth: ',2014-Sage,LOWER(Sdept)
FROM Student;
哦,显示了出身年份。
【3.21】
SELECT Sno FROM SC;
若没有指定DISTINCT,缺省就是ALL ,此时保留所有的元组。如果有DISTINCT,则消除重复的行。
【3.22】
SELECT Sname
FROM Student
WHERE Sdept=‘CS’;
搜索出特定的学生:张成民
【3.23】
SELECT Sname,Sage
FROM Student
WHERE Sage < 20;
哦,全是20岁都不到的小伙。
【3.24】
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;
一切正常
【3.25】
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
一切正常
【3.26】
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
一切正常
【3.27】
SELECT Sname, Ssex
FROM Student
WHERE Sdept IN (‘CS’,‘MA’,‘IS’);
还是这三个系里的人
【3.28】
SELECT Sname, Ssex
FROM Student
WHERE Sdept NOT IN (‘IS’,‘MA’,‘CS’);
不在这三个系里的,嗯。。。没人。