• 005


    --视图
    --视图是数据库对象之一
    --视图在sql语句中体现的角色与表一致但其并不是表,他只是对应了一个查询语句的结果集
    create view v_emp_coco
    as
    select empno,ename,sal,deptno from emp_coco
    where deptno=10
    --查询视图与查询表一样
    select * from v_emp_coco
    --查看视图的结构
    desc v_emp_coco
    --视图对应的子查询若含有函数或者表达式那么必须给别名
    --当一个字段使用了别名那么视图中该字段的名字就是这个别名
    --修改视图
    --由于视图只是对应了一个查询语句,所以修改视图就是替换该sql语句
    create or replace view v_emp_coco
    as
    select empno id,ename name,sal salary,deptno from emp_coco
    where deptno=10
    with check option--检查选项
    --对视图进行DML操作
    --对视图进行dml操作就是对视图数据来源的基础表进行操作,
    --并且只能对视图可见的字段进行
    insert into v_emp_coco
    (id,name,salary,deptno)
    values
    (1001,'jack',5000,10)
    select * from emp_coco
    --修改也是对基础表的修改
    update v_emp_coco
    set salary=6000
    where id=1001
    --删除也一样
    delete from v_emp_coco
    where id=1001
    
    --通过对视图操作的数据,若视图不可见那么就等同与对基表数据进行了污染(尽量避免)
    --插入
    insert into v_emp_coco
    (id,name,salary,deptno)
    values
    (1001,'jack',5000,20)、
    --更新
    update v_emp_coco
    set deptno=20
    --删除,不会发生数据污染
    delete from v_emp_coco
    where deptno=20
    select * from v_emp_coco
    select * from emp_coco
    --为视图添加检查选项可以避免对视图进行dml操作后对基表有数据污染的情况
    --检查选项要求对视图进行的dml操作的数据视图必须对其可见,否则不允许操作
    insert into v_emp_coco
    (id,name,salary,deptno)
    values
    (1001,'jack',5000,20) --此时会报错
    
    update v_emp_coco
    set deptno=20
    --read only选项
    --当视图添加了只读选项后,该视图仅能查看,不能执行任何dml操作
    create or replace view v_emp_coco
    as
    select empno id,ename name,sal salary,deptno from emp_coco
    where deptno=10
    with read only
    --dml操作会报错
    insert into v_emp_coco
    (id,name,salary,deptno)
    values
    (1001,'jack',5000,10)
    --数据字典
    --USER_OBJECTS:记录了用户创建的所有数据库对象
    select object_name from user_objects
    where object_type='TABLE'
    --user_views:记录了用户创建的所有视图
    select text from user_views
    where view_name = 'V_EMP_COCO'
    --user_tables:记录了用户创建的所有表
    SELECT table_name from user_tables
    --创建复杂视图(多表关联)
    --复杂视图不允许dml操作
    --把职员表的数据按部门分组,获得每个部门的
    create view v_emp_dept_coco
    as
    select max(sal) max_sal,--必须有别名
           min(sal) min_sal,
           avg(sal) avg_sal,
           sum(sal) sum_sal,
           d.deptno,d.dname
    from emp_coco e,dept_coco d
    where e.deptno=d.deptno
    group by d.deptno,d.dname
    select * from v_emp_dept_coco
    --查看比自己所在部门平均工资高的员工
    select e.ename,e.sal,e.deptno
    from emp_coco e,v_emp_dept_coco d
    where e.deptno=d.deptno and e.sal>d.avg_sal
    --删除视图
    --删除视图中的数据时,会对应的将基表数据删除
    --但是删除视图本身时,是不会影响基表任何数据的
    drop view v_emp_coco
    
    --序列,数据库对象之一
    --序列是用来生成一系列数字的,序列生成的数字常被用做某张表主键字段的值
    create sequence seq_emp_coco_id
    start with 1
    increment by 1
    --序列提供了两个伪列用于获取当前序列的值
    --NEXTVAL:获取序列下一个数,这个为例会导致序列发生步进,
    --序列不能回退的,即:生成下一个数字后,就不能得到之前的数字了
    --CURRVAL:获取序列当前值(最后一次生成的值)无论调多少次都不会导致序列发生步进
    --新创建的序列要至少调用一次NEXTVAL后才可以使用CURRVAL
    select seq_emp_coco_id.currval
    from dual
    insert into emp_coco
    (empno,ename,sal,job,deptno)
    values
    (seq_emp_coco_id.nextval,'JACK',5000,'CLK',10)
    SELECT * from emp_coco
    --删除序列
    drop sequence seq_emp_coco_id
    
    --索引,数据库对象之一
    --作用时提高查询效率
    --索引的建立是数据库执行完成的,过程对我们是透明的,我们只需要告诉数据库是否添加索引即可
    --索引的应用也是自动的,无需在查询的过程中告知数据库是否使用索引,
    --数据库会自行判断可用索引并自动使用
    create index idx_emp_coco_ename
    on emp_coco(ename)
    --当只用ename作为过滤条件(除了like),作为排序的字段,去重等操作时
    --数据库会自动使用索引idx_emp_ename提高查询效率
    create index inx_emp_coco_job_sal
    on emp_coco(job,sal)
    select empno,ename,sal,job from emp_coco
    order by job,sal
    create index inx_emp_coco_upper_idx
    on emp_coco(upper(ename))
    select * from emp_coco
    where upper(ename)='KING'
    
    --重构一个索引
    alter index idx_emp_coco_ename rebuild
    --删除索引
    drop index idx_emp_coco_ename
    --非空约束
    create table employees_coco(
    eid number(6),
    name varchar(30) not null,
    salary number(7,2),
    hiredate date constraint employees_coco_hiredate_nn not null )
    desc employees_coco
    --约束分为表级约束与列级约束
    --not null只是列级约束 其他约束即是表级约束也是列级
    --列级约束:为某个字段添加约束只能在操作(修改)该列的同时进行
    alter table employees_coco
    modify(eid number(6) not null)
    alter table employees_coco
    modify(eid number(6) null)--取消非空约束
    --表级约束:可以直接对表进行添加约束并指定为该表的那个字段添加
    --简单说:添加约束时的语法不一样
    create table employees_coco1(
    eid number(6) unique,
    name varchar(30),
    email varchar(50),
    salary number(7,2),
    hiredate date,
    --唯一性约束
    --唯一性约束可以要求某个字段
    constraint employees_coco1_email_uk unique(email))
    
    drop table employees_coco1
    insert into employees_coco1
    (eid,name,email)
    values
    (3,'jack','jck3@qq.com')
    select * from employees_coco1
    delete from employees_coco1
    alter table employees_coco1
    add constraint employees_coco1
    unique(name)
    
    --主键约束
    --主键约束只能建立在单列上,并且一张表只能有一个主键约束
    --主键约束可以保证该字段非空且唯一
    create table employees_coco2(
    eid number(6) primary key,
    name varchar(30),
    email varchar(50),
    salary number(7,2),
    hiredate date)
    select * from employees_coco2
    
    insert into employees_coco2
    (eid,name)
    values
    (2,'jack')
    --检查约束
    alter table employees_coco2
    add constraint employees_coco2_salary_check
    check(salary>2000)
    
    insert into employees_coco2
    (eid,name,salary)
    values
    (1234,'donna',2500)
  • 相关阅读:
    在webBrowser中取Cookie的方法
    C#遍历DataSet中数据的几种方法总结
    php数组排序函数
    linux top命令详解
    HTTPSQS(HTTP Simple Queue Service)消息队列
    mysql 触发器(trigger) 总结
    HDU4292 Food —— 最大流 + 拆点
    POJ1459 Power Network —— 最大流
    POJ2516 Minimum Cost —— 最小费用最大流
    HDU4280 Island Transport —— 最大流 ISAP算法
  • 原文地址:https://www.cnblogs.com/wangyuyanhello/p/8940918.html
Copyright © 2020-2023  润新知