(1) π S N O ( σ J N O = ′ J 1 ′ ( S P J ) ) \pi_{SNO}( \sigma_{JNO='J1' }(SPJ) ) πSNO(σJNO=′J1′(SPJ))
(2) π S N O ( σ P N O = ′ p i ′ ( σ J N O = ′ J 1 ′ ( S P J ) ) ) \pi_{SNO}(\sigma_{PNO='pi'}( \sigma_{JNO='J1'}(SPJ))) πSNO(σPNO=′pi′(σJNO=′J1′(SPJ)))
(3) π S N O ( π S N O , P N O ( σ J N O = ′ j 1 ′ ( S P J ) ) ⋈ π P N O ( σ C O L O R = ′ 红 色 ′ ( P ) ) ) \pi_{SNO}( \pi_{SNO,PNO}(\sigma_{JNO='j1'}(SPJ))\Join\pi_{PNO} (\sigma_{COLOR='红色'}(P)) ) πSNO(πSNO,PNO(σJNO=′j1′(SPJ))⋈πPNO(σCOLOR=′红色′(P)))
(4) π J N O ( S P J ) − π J N O ( π S N O , P N O < J N O ( S P J ) ⋈ π S N O ( σ C I T Y = ′ 天 津 ′ ( S ) ) ⋈ π P N O ( σ C O L O R = ′ 红 色 ′ ( P ) ) ) \pi_{JNO}(SPJ)-\pi_{JNO}(\pi_{SNO,PNO
(5) π J N O , P N O ( S P J ) ÷ π P N O ( σ S N O = ′ s i ′ ( S P J ) ) \pi_{JNO,PNO}(SPJ)\div\pi_{PNO}(\sigma_{SNO='si'}(SPJ)) πJNO,PNO(SPJ)÷πPNO(σSNO=′si′(SPJ))
实例1
建立模式的语法:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
CREATE SCHEMA "S-T" AUTHORIZATION WANG
/* 使用这个语句注意wang 这个用户所在的数据库*/
实例2
CREATE SCHEMA AUTHORIZATION WANG
/*这个是没有指定模式名会隐含为用户名*/
SQL 模式百度百科
实例3
CREATE SCHEMA TEST AUTHORIZATION WANG
CREATE TABLE TAB1(
COL1 SMALLINT,
COL2 INT,
COL3 NUMERIC(10,3),
COL5 DECIMAL(5,2)
/*默认的模式是dbo*/
);
如图所示,在新建的STU 数据库中表的位置出现TEXT.TAB1,并且在框架中出现TEST框架。
实例4
删除语句:
DROP SCHEMA <模式名>
DROP SCHEMA "TEST" CASCADE
注意直接删除会出现错误,如图
原因是不支持cascade ,因此换一种方法。其实这也说明了标准的sql在实际应用的时候会有所不同。这就是与T-SQL之间的区别。
DROP TABLE TEST.TAB1
DROP SCHEMA TEST
/*先删除表,再删除模式*/
实例5
创建基本表:
CREATE TABLE<名> (
<列名><数据类型>(列级的完整性)
…
<表级完整性>
)
CREATE SCHEMA "TEST" AUTHORIZATION WANG
CREATE TABLE Student(
Sno CHAR(9)PRIMARY KEY,
Sname CHAR(9) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT
)
CREATE TABLE TEST.Course(
Cno CHAR(4) PRIMARY KEY,
/*列完整性的约束条件*/
Cname CHAR(40) NOT NULL,
Cpno CHAR(4) ,
FOREIGN KEY (Cpno) REFERENCES TEST.Course(Cno),
/*标记完整性的约束条件,指出参照表*/
);
这个例子也是说明了参照表与被参照表可以是同一个。
实例7:
CREATE TABLE TEST.SC(
Sno CHAR(9),
Cno CHAR(4),
PRIMARY KEY (Sno,Cno),
FOREIGN KEY (Sno) REFERENCES TEST.Student(Sno),
FOREIGN KEY (Cno) REFERENCES TEST.Course(Cno),
);
修改基本表:
ALTER TABLE<表名>
[ADD [COLUMN]<新列名><数据类型>[完整性约束]]
[ADD<表级完整性约束>]
[DROP [COLUMN]<列名>[CASCADE | RESTRICT]]
[DROP CONSTRAINT <完整性的约束名>[CASCADE | RESTRICT]]
[ALTER COLUMN <列名><数据类型>];
实例8:
ALTER TABLE TEST.Student ADD S_entrance DATE
ALTER TABLE TEST.Student ALTER COLUMN Sage INT
实例10:
ALTER TABLE TEST.Course ADD UNIQUE(Cname)
实例11:
删除Student表:
DROP TABLE Student CASCADE
DROP TABLE TEST.Student CASCADE
直接运行会报错,同样选择直接删除也会报错
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id('TEST.SC')
ALTER TABLE TEST.SC DROP CONSTRAINT FK__SC__Sno__44FF419A
DROP TABLE TEST.Student
为了验证能不能直接删除SC中的Sno进而删除STudent,写入了已下代码:
ALTER TABLE TEST.SC DROP COLUMN Sno
事实证明不可以,因为Sno是SC的主码,上面的代码删除的是表级的完整性(个人觉得)
实例12:
在表上建有视图,选择RESTRICT时表不会删除,选择CASCADE 可以删除表视图
DROP TABLE TEST.Student
删除后这个视图不能再使用。
以上就是所有的内容,总的来说标准的sql 和T-sql有很大的不同,通过具体的例子加深了语句的理解。数据库的基本表是建立在模式的基础上的(也就是框架),删除基本表的同时要注意表级的引用关系,先去掉约束再删除。最后附上参考文档。
参考文档