4.基本表结构的创建
语法:CREATE TABLE <基本表名>
(<列名 类型>,
……
<完整性约束>,
……)
说明:完整性约束常用以下几种子句:主键子句(PRIMARY KEY)、外键子句(FOREIGN KEY)等
NOT NULL:表示不允许某一列的值为空值
例:对于教学数据库中的四个关系:
教师关系T(T#,TNAME,TITLE)
课程关系C(C#,CNAME,T#)
学生关系S(S#,SNAME,AGE,SEX)
选课关系SC(S#,C#,SCORE)
创建基本表。
CREATE TABLE T
(T# CHAR(4) NOT NULL,
TNAME CHAR(8) NOT NULL,
TITLE CHAR(10),
PRIMARY KEY(T#))
CREATE TABLE C
(C# CHAR(4) NOT NULL,
CNAME CHAR(10) NOT NULL,
T# CHAR(4),
PRIMARY KEY(C#),
FOREIGN KEY(T#) REFERENCES T(T#))
CREATE TABLE S
(S# CHAR(4) NOT NULL,
SNAME CHAR(8) NOT NULL,
AGE SMALLINT,
SEX CHAR(2),
PRIMARY KEY(S#))
CREATE TABLE SC
(S# CHAR(4),
C# CHAR(4),
SCORE SMALLINT,
PRIMARY KEY(S#,C#),
FOREIGN KEY(S#) REFERENCES S(S#),
FOREIGN KEY(C#) REFERENCES C(C#))
5.基本表结构的修改
1)增加新的列
语法:ALTER TABLE <基本表名> ADD <列名> <类型>
2)删除原有的列
语法:ALTER TABLE <基本表名> DROP <列名> [CASCADE | RESTRICT]
说明:CASCADE方式表示在基本表中删除某列时,所有引用到该列的视图和约束也要一起自动地被删除;RESTRICT方式表示在没有视图或约束引用该属性时,才能在基本表中删除该列,否则拒绝删除。
3)修改原有列的类型、宽度
语法:ALTER TABLE <基本表名> MODIFY <列名> <类型>
6.基本表的撤销
语法:DROP TABLE <基本表名> [CASCADE | RESTRICT]
7.索引的创建
语法:CREATE [UNIQUE] INDEX <索引名> ON <基本表名>(<列名序列>)
说明:UNIQUE表示每个索引值对应惟一的数据记录。
索引在用户查询时会自动起作用。
一个索引键可以对应多个列。索引排列时可以升序,也可以降序,升序排列用ASC表示,降序排列用DESC表示,默认时表示升序。
8.索引的撤销
语法:DROP INDEX <索引名>
三、SQL的数据查询
1.SELECT查询语句句型
在关系代数中最常用的式子是下列表达式:
ΠA1,…,An(σF(R1×…×Rm))
这里,R1、…、Rm为关系,F是公式,A1、…、An为属性。
与该表达式对应,SQL设计了SELECT—FROM—WHERE句型:
SELECT A1,…,An
FROM R1,…,Rm
WHERE F
注意:1)在学习时,应把SELECT语句和关系代数表达式联系起来考虑问题。
2)在WHERE子句的条件表达式F中可使用下列运算符:
比较运算符:〈、 〈=、 〉、 〉=、 =、 〈〉或!=
逻辑运算符:AND、OR、NOT
集合成员资格运算符:IN、NOT IN
谓词:EXISTS、ALL、SOME
聚合函数:AVG、MIN、MAX、SUM、COUNT
F中运算对象还可以是另一个SELECT语句,即SELECT语句可以嵌套。
2.SELECT语句的使用技术
SELECT使用时有三种写法:连接查询、嵌套查询和带存在量词的嵌套查询。
例:针对前面使用的教学数据库,检索学习课程号为C2课程的学生学号与姓名。
第一种写法(连接查询):
SELECT S.S#,SNAME
FROM S,SC
WHERE S.S#=SC.S# AND C#=’C2’
第二种写法(嵌套查询):
SELECT S#,SNAME
FROM S
WHERE S# IN(SELECT S#
FROM SC
WHERE C#=‘C2’)