子查询
嵌套子查询,子查询先运行,得出结果后作为值参与父查询。作用在where,from,having子句中。
相关子查询,先从父表获得相关字段,带入子查询中判断符合则返回值不符合则不显示。当子查询引用了父查询表中的一个字段时,Oracle服务器执行相关子查询。
Exists ¬ exists condition (operator) 这里课件上给了操作符这个概念,文档里给的是condition 条件这个概念
exists ¬ exists 应为判断条件,返回true或者false,在相关子查询里如果子查询有值,则相应保留或不保留父查询的查询单项语句。注意与in 不同 null值可以比较
数据库对象
表,视图,索引,序列,同义词这些都可以看做数据库对象。
在创建表时注意数据类型,char ,varchar,clob(character large object)最大能存4g需要特殊方式。
存储的date是有分秒的,timestamp是可以精确到毫秒的,显示上默认没有分秒不代表不存。
高水位线
数据库存储是按数据块来存储的,有两个值控制每个数据块的物理配置PCTFREE&PCTUSED,前者是设置保留空间,后者是设置使用空间。水位线就是使用存储数据块的百分比,注意的是 delete 不会直接降低这个水位线。而truncate会直接降低水位线。
数据字典
数据字典命名方式就是 范围_结构对象 比如 user_tables,all_views,sys_indexs
约束
非空约束只能定义在列级,复合约束只能定义在表级
on delete cascade,on delete set null 当删除时关联删除相关元组或者将相关字段值设为null从而保证参照完整性。
同一个表可以定义外键为同一个表的其他字段,例子:mgr 和empno,外键必须参照在其他表主键或者unique字段上
其他
heap-organized table &index-organized table
以堆为组织的表和有排序组织的表,oracle正常存放的表都是以堆为形式存放的,给字段建索引就是index-organized 的,应该有以b+树形式存储的表。
一些pseudocolumns,rowid,rownum
即便是存储信息完全相同的两条元组他们的rowid也是不同的,
CREATE TABLE testRow
(x NUMBER(4),
y VARCHAR(20)
)
INSERT INTO testRow VALUES(1,'hello world'),(1,'hello world')
/////作业//////
DELETE FROM testrow
WHERE ROWID=
(SELECT ri1 FROM
(SELECT x,y,ROWID ri1,ROWNUM rm1 FROM testRow)
WHERE rm1=3) 作业 如何指定删除内容完全相同的记录