韩顺平玩转Oracle视频资料整理

1.oracle10g 11g:g(grid)表示网格技术
  以baidu搜索为准,现在想使用一个软件,但是此软件在离自己非常近的地方就存在了下载地址,但是与自己非常远的地方也同样存在一个下载地址,而搜索引擎就有可能没有搜索到离自己近的下载,而是使用了更远的下载。那么这样一来肯定会造成资源的浪费。
  所以新的网格概念就是将网络划分一个个的网格,通过网格表示一个区域。
  先找自己所在的"网格",找不到的话再去找其他"网格"。

2.输出环境变量设置:
每行显示的长度: set linesize 长度  (默认80)
每页显示的长度: set pagesize 长度

3.命令行输入:"sqlplusw"进入sqlplusw窗口操作界面
  在窗口中输入"ed 文件名称",输入完后,会提示用户是否创建文件。
  编辑完成后,就可以通过@文件名称的方式来执行命令了。
  以下几种输入方式都是正确的:
  假设新创建的文件demo是在D盘的根目录下面
  (1)txt文件
  @d:demo.txt
  @d:demo.txt
  (2)sql文件(默认的是sql文件,其他格式的文件执行的时候必须带后缀名)
  @d:demo
  @d:demo

4.子查询的分类
(1)单列子查询:返回的结果是只有一列。
(2)单行子查询:返回的结果是只有一行,有坑是一条完整的记录。
(3)多行子查询:返回多行记录。

5.事务处理
  所谓事务处理就是保证数据操作的完整性,所有的操作要么全部成功,要么全部失败。
  每一个连接到数据库上的用户都是一个session。

6.组函数和统计函数、聚合函数是同一个概念
  统计函数:max()、min()、avg()、sum()、count() 
  (1).统计函数必须出现在分组统计之中。
  (2).所谓分组是只列中存在重复的内容,使用group by的方式进行分组的统计。
  (3).如果要加入分组条件,则编写having 子句,所有的统计函数作为条件的时候
  只能在having中出现,不能在where中出现。
  (4)分组函数允许嵌套,但是嵌套之后就不能再查询其他字段,包括分组字段。

7.添加检查约束:
 --匿名
 age number(3) not null check(age between 0 and 100)    
 sex varcahr2(2) default '' check(sex in ('',''))

 --命名
 检查约束: constranit tablename_age_ck(约束名称)      check(age between 0 and 100)
 主键约束: constranit tablename_id_pk(约束名称)       primary key(id)
 唯一约束: constranit tablename_name_uk(约束名称)     unique(name)
 外键约束: constranit tablename_name_fk(约束名称)     foreign key(字段) references 父表名称(父表主键字段)

 约束的修改:
 alter table tablename add constranit ablename_name_uk(约束名称)  unique(name);
 约束的删除:
 alter table tablename drop constranit ablename_name_uk(约束名称);

8.级联删除
删除表的同时删除约束: drop table tablename cascade constranit
删除时级联删除内容: constranit tablename_id_pk(约束名称)   primary key(id) on delete cascade

9.嵌套表:
  一张表中又包含有一个子表
举例:
(1)创建子表类型
create type project_ty as object
(
    proid    number(4),
    proname  varchar2(20),
    prodata  date
);

(2)为类型创建一个名称
create type project_nt as table of project_ty;

(3)创建嵌套表
create table department
(
    deptno    number(2)     primary key not null,
    dname     varchar2(20)  not null,
    projects  project_nt
)nested table projects store as project_nt_tab_temp;

插入数据:
insert into department(deptno,dname,projects)
values(1,'研发部',
          project_nt(
                      project_ty(1001,'f1',sysdate),
                      project_ty(1002,'f2',sysdate),
                      project_ty(1003,'f3',sysdate)
                    )
);

嵌套表查询:
select * from department;
select * from table(select projects from department where deptno=1);

嵌套表的更新:
--将项目编号为1001的项目名称,将此项目名称更新为"测试项目"
update tabletable(select projects from department where deptno=1) pro
   set value(project_ty('1001','测试项目',sysdate))
 where pro.proid = 1001;

10.可变数组
例如:一个部门有多个工人
(1)首先要创建一个工人类型
create type worker_ino as object(
    id    number,
    name  varchar2(20),
    sex   varchar2(2)
);

(2)创建数组类型
create type work_info_list as varry(10) of worker_info;

(3)创建表
create table department
(
    deptno    number(2)     primary key not null,
    dname     varchar2(20)  not null,
    works     work_info_list 
);

插入测试数据
insert into department(deptno,dname,works)
values(1,'研发部',
          worker_info_list(
                      worker_info(1,'张三',''),
                      worker_info(2,'李四',''),
                      worker_info(3,'王五','')
                    )
);