上篇博客解答题2.0版
(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<JNO}(SPJ)\Join\pi_{SNO}(\sigma_{CITY='天津'}(S))\Join\pi_{PNO}(\sigma_{COLOR='红色'}(P)))
πJNO(SPJ)−πJNO(πSNO,PNO<JNO(SPJ)⋈πSNO(σCITY=′天津′(S))⋈πPNO(σCOLOR=′红色′(P)))
(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))
sql基本语句练习
实例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 <模式名> <CASCADE|RESTRICT>
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
)
实例6:
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
实例9:
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有很大的不同,通过具体的例子加深了语句的理解。数据库的基本表是建立在模式的基础上的(也就是框架),删除基本表的同时要注意表级的引用关系,先去掉约束再删除。最后附上参考文档。
参考文档