{cascade | restrict}
其中cascade表示级联,删除将成功,并且依赖于该列的数据库对象(如涉及到该列的视图)也一并删除。restrict表示受限,仅当没有依赖于该列的数据库对象时删除才成功。
例:删除Courses中的Pno列可以用:
alter table Courses drop Pno;
(4)添加表约束
alter table <表名> add <表约束定义>
其中表约束定义与创建基本表相同。
(5)删除表约束
alter table <表名> drop constraint <约束名> {cascade | restrict}
其中被删除的约束名一定是命名的约束,给出约束名。cascade导致删除约束并且同时删除依赖于该约束的数据库对象。而restrict仅当不存在依赖于该约束的数据库对象才可以删除该约束。
删除基本表
当不需要某个基本表时,可以将其删除。语句格式为:
drop table <表名> {cascade | restrict}
其中cascade表示级联删除,依赖于表的数据对象(最常见的是视图)也将一同删除。restrict表示受限删除,如果基于该表定义有视图或者有其他表引用该表(如check,foreign key等约束),或者该表有触发器。存储过程或函数等,则不能删除。
删除基本表将导致存放在表中的数据和表定义都将被彻底删除。
例:
drop table Student restrict;
添加
insert语句有两种使用形式,一种是向基本表中插入单个元组;另一种是将查询的结果(多个元组)插入基本表。
1)插入单个元组
语句格式为:
insert into T[(A1, .... ,Ak)] values (c1,....,ck);
其中T通常是基本表,也可以是视图,Ai是T的属性,ci是常量。
(A1, .... ,Ak)缺省时,values子句必须按基本表属性的定义次序提供新元素每个属性上的值。否则,(A1, .... ,Ak)中属性的次序可以是任意次序,并且可以仅列举基本表的部分属性。此时,value子句中的常量与属性个数是相等的,并且常量对应相对位置上的属性,新元组取缺省值(如果定义了缺省值的话)或空值为null。
eg.
insert 表名 (栏位名称) values (栏位值)
insert stu_info (stu_no, stu_name, gender, birthday)
values('20171217123', '张三', 1, '2017‐12‐14');
insert stu_info (stu_no, stu_name, birthday)
values ('20171217123', '张三', '2017‐12‐14');
2)插入查询结果
语句格式为
insert into T[(A1, .... ,Ak)] <查询表达式>
其中查询表达式通常是一个select语句。该表达式对查询表达式求值,并将结果元组插入到基本表中。
设存放就餐卡登记信息关系Cardinf具有如下模式:
Cardinf(Card-no, Name, Banlance)
其中属性分别是持卡人编号,Name为持卡人姓名,Balance为卡中余额。假设现为教师办理一个就餐卡,直接使用教师号作为持卡人编号,并预存100元。
insert into Cardinf(Card-no, Name, Banlance)
select Tno, Tname, 100.00
from Teachers;
注意:常量100.00出现在select子句中。这使得查询结果的每个元组的第三列均取常量值100.00。
查询
模糊查询
like表达式允许我们表示模糊查询,一般格式是:
<匹配值> [not] like <模式> [escape'<换码字符>']
其中<匹配值>和<模式>都是字符串表达式,它们的值是可以比较的。通常,<匹配值>是属性,<模式>是给定的字符串常量。<模式>中允许使用通配符。有两种通配符:“_”(下划线)可以与任意单个字符匹配,而"%"可以与零个或多个任意字符匹配。escape'<换码字符>'通常是escape'\'。它定义‘\’为转义字符,将紧随其后的一个字符转义。如果<模式>中的_或%紧跟在\之后,则这个_或%就失去了通配符的意义,而取其字面意义。
当<匹配值>与<模式>匹配时,则like表达式的值为真,否则,值为假。
eg.
select Sno, Sname
from Student
where Sname like '李__'; /*有两个下划线,因为一个汉字占两个字符位置*/
select *
from Courses
where Cname like 'C\_%' escape '\'; /* 定义"\"为转义字符,“_" 被转义 */
NULL 查询
SQL允许元组在某些属性上取空值(NULL)。空值代表未知的值,不能与其他值进行比较。NULL表达式允许我们判断给定的值是否为空值。NULL表达式常见的形式如下:
<值表达式> | <子查询> IS [NOT] NULL
通常<值表达式>是属性。
eg.
select Sno, Cno
from SC
where Grade IS NULL;
删除
使用delete语句删除表中的某些记录,语句格式为:
delete from T [where <删除条件>]
其中T通常为基本表,但也可以是某些视图,<删除条件>与select语句中的查询条件类似。
delete语句的功能是从指定的表T中删除满足<删除条件>的所有元组。where子句缺省时,则删除表T中全部元组(剩下一个空表T)。
删除所有学生的记录:
delete from Students;
删除学号为200624010的学生记录可以用:
delete from Students where Sno='200624010';
尽管delete语句只能从一个表删除元组,但是删除条件可以涉及到多个表
例如删除计算机系所有学生的选课记录(SC是学生选课关系表)
我们可以先得到计算机系所有学生的学号
delete from SC
where Sno In
(
select Sno
from Students
where Speciality='计算机');
修改
使用update语句可以修改表中某些元组指定属性上的值。格式为:
update T
set A1=e1,...,Ak=ek
[where <修改条件>]
其中T通常为基本表,但也可以是某些视图;A1,...Ak是T的属性,而e1,...ek是表达式;<修改条件>与select语句中的查询条件类似