900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > oracle数据库王珊 数据库系统概论 王珊 教材部分总结

oracle数据库王珊 数据库系统概论 王珊 教材部分总结

时间:2020-09-02 17:22:18

相关推荐

oracle数据库王珊 数据库系统概论 王珊 教材部分总结

第五章:

01:用户自定义完整性的时候, 我们可以在一个属性后面 同时加上 not null 和 unique 和 check语句。

并且 他们之间并没有 符号 而是空格隔开。

02:我们 针对 一个属性 定义完整性约束的时候 , 一般仅仅针对当前的一个属性 来写 check子句, 当然了 写的时候也可以包含 其他属性,但是一般不建议这么做,因为我们可以使用 针对元素 定义的 check子句。

03:当我们使用 check 子句 定义约束的时候,

我们可以使用

in

加减乘除操作符

Between ... and

逻辑操作符 and or

比较大小的操作符

Like not like

% 和 _ 通配符

04:当我们 使用 完整性约束命名子句 的时候 如何定义 一个字段 唯一?如何定义一个字段 非空呢?书上没有说明,但是写法如下:

CREATE TABLE student(

sno CHAR(9) ,

sname CHAR(20) ,

CONSTRAINT csn UNIQUE(sname , sno) ,

CONSTRAINT css CHECK( sno IS NOT NULL) ,

ssex CHAR(4) ,

sage SMALLINT ,

sdept CHAR(20) ,

ssalary SMALLINT ,

sfee INTEGER ,

CONSTRAINT csno PRIMARY KEY (sno),

CONSTRAINT cssex CHECK(ssex IN ('男', '女'))

);

//此时 unique 跟 primary key 是一个级别 使用括号 将字段填入其中,就表示 填入其中的字段 是唯一的。

//当我们使用 完整性约束子句(constraint) 的时候 结合使用 check 子句 ,且在子句中 填入 不能为空 的 字段的名字 后面 写上 is not null 子句。

02:unique 和 primary key是一个级别的 我们依然单独的一行的使用 unique(属性,属性)的形式。也可以直接在一个 属性的后面直接写上 unique 的形式。如果是第一种写法的话 ,就是一个表级别的约束条件 , 第二种是属性级别的约束条件。但是not null 只可以是 属性级别的约束。

CREATE TABLE student(

sno CHAR(9) ,

sname CHAR(20) ,

CONSTRAINT css CHECK( sno IS NOT NULL) ,

ssex CHAR(4) ,

sage SMALLINT ,

sdept CHAR(20) ,

ssalary SMALLINT ,

sfee INTEGER ,

UNIQUE(sno , sname),

PRIMARY KEY (sno),

CONSTRAINT csno PRIMARY KEY (sno),

CONSTRAINT csn UNIQUE(sname , sno) ,

CONSTRAINT cssex CHECK(ssex IN ('男', '女'))

);

03:mysql不支持 删除 constraint 约束 ,因此下面的写法是错误的。

ALTER TABLE student DROP CONSTRAINT csno

但是oracle支持 这样的写法。

04:当表 跟 表之间存在外键约束关系的时候,要删除其中一张表的时候 , mysql会提示删除不成功的提示, 此时要执意删除的话, 先关掉外键约束,然后删除指定的表,然后在打开外键约束 , 那么操作之后, 存在外键约束的表 不会因为 另一张被删除的表被删除,而外键就不存在了,此时另一张表的外键的值 保持不变 跟之前的一样。这个是mysql的情况。

05:Select短语中也可以有子查询,这个子查询的执行思路的底层 依然还是按照固定的执行思路:先根据 where中的条件,然后带上这些个条件 去检索 from表中合适的元组组合,然后预备返回组合元组的所有的属性,此时具体返回组合元组的那个属性,视select写法的具体情况而定,也就是说select是针对每个符合条件的组合元组的,返回一条针对一条,返回一条针对一条。

那么此时在select短语中使用子查询的话,依然是接着上边的思路执行的。所以说大多数是 相关查询 ,也有少数情况是不相关查询。比如:

SELECT s.student_id,s.student_name,(SELECT class_name FROM t_class c WHERE c.class_id=s.class_id) FROM t_student s GROUP BY s.student_id;//相关

SELECT sno , sname , (SELECT 1/2)AS val FROM student;// 不相关

//但是它要求返回的必须是一个值,而不是一个集合,也不是一个元组,因为要符合select的检索的规范:只可以输出一个值 要不后面如何使用as 起一个别名呢!

//select子句的意思就是选择性的输出的意思;

Where 子句中可以有子查询:

比如使用 in 谓词的时候,后面返回的是 不重复 的 单值的集合。不可以是元组的集合。是不是相关查询 还是不相关查询 视具体情况而定。

使用 > = < <> 符号后面都可以用子查询 ,但是要求返回的是一个具体的值,而不是一个元组,或者多个值 ,仔细体会 。是相关查询 还是不相关查询 视具体情况而定。

//但是它要求返回的必须是一个值,而不是一个集合,也不是一个元组,要满足 比较运算符的规范(只可以跟一个值比较)。

Exists 十有八九就是 相关查询, 子查询依赖父查询。

having子句也 可以有子查询:

HAVING子句 此时子查询返回的都是 单行单列数据,主要是配合 聚合统计函数的使用。

此时having子句中的 子查询是相关查询 还是 不相关查询 视具体情况而定,都有可能。

//但是它要求返回的必须是一个值,而不是一个集合,也不是一个元组,要满足 having后面跟的聚合函数 的规范(只可以跟一个值比较)。

From子句也可以有子查询,这个一定不是 相关性查询的。因为没办法写成相关性查询。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。