【JSU】LJDragon's Oracle course notes In the first semester, junior year

I.用户和权限

1.用户操作

--创建新用户

  1. CREATE
    USER LJL IDENTIFIED BY LJL;

--解锁用户

  1. ALTER
    USER LJL ACCOUNT UNLOCK;

--修改密码

  1. ALTER
    USER LJL IDENTIFIED BY 123;

2.DCL授权语句

--GRANT 权限1,权限2,…… TO 用户; --授予开发人员权限

  1. GRANT
    CONNECT,RESOURCE TO LJL;

--授予对象访问权限

  1. GRANT
    SELECT
    ON scott.emp TO LJL;
  2. GRANT
    ALL
    ON scott.emp TO LJL;

--授予创建会话的权限给LJL

3.DCL收权语句

--REVOKE 权限1,权限2,……FROM 用户;

--回收创建会话权限

--回收对象访问权限

  1. REVOKE
    ALL
    ON scott.emp FROM LJL;

--查询用户拥有哪些权限(SQLPlus)

  1. SQL> select * from dba_role_privs;
  2. SQL> select * from dba_sys_privs;
  3. SQL> select * from role_sys_privs;

--查自己拥有哪些系统权限

  1. SQL> select * from session_privs;

--删除用户

II.表管理

--创建学生表

  1. CREATE
    TABLE student
  2. (
  3.     stu_id NUMBER(6),
  4.     stu_name VARCHAR2(50),
  5.     stu_sex CHAR(2),
  6.     stu_hiredate DATE
  7. );

--创建学生表(带列默认值)

  1. CREATE
    TABLE student
  2. (
  3.     stu_id NUMBER(6),
  4.     stu_name VARCHAR2(50),
  5.     stu_sex CHAR(2) DEFAULT '男',
  6.     stu_hiredate DATE
    DEFAULT SYSDATE
  7. );

--删除学生表

  1. DROP
    TABLE student;

--删除表(直接删除)

  1. DROP
    TABLE new_emp PURGE;

--还原表

  1. FLASHBACK TABLE stu TO BEFORE DROP;

--利用子查询创建表

  1. CREATE
    TABLE new_emp2
  2. SELECT empno,ename
  3. FROM emp;

--常用数据字典

  1. --回收站的数据字典
  2. SELECT * FROM user_recyclebin;
  3. SELECT * FROM user_tables;
  4. SELECT * FROM user_objects;
  5. SELECT * FROM user_catalog;

修改表

--追加列

  1. ALTER
    TABLE student
  2. ADD (phone VARCHAR2(50),address VARCHAR2(100));

--修改列

  1. ALTER
    TABLE student
  2. MODIFY (address VARCHAR2(200));

--删除列

  1. ALTER
    TABLE student
  2. DROP (phone);

--重命名对象

  1. RENAME student TO stu;

--清空表

truncate与delete的区别:

delete truncate

事务 可回退 自动提交,不可回退

记录日志 记录 不记录

释放空间 不释放空间 释放空间

--表注释

  1. COMMENT ON
    TABLE stu IS '学生表';

--列注释

  1. COMMENT ON
    COLUMN stu.stu_id IS '学生编号';
  2. COMMENT ON
    COLUMN stu.stu_name IS '学生姓名';

--清空回收站

  1. PURGE RECYCLEBIN;

III.五种约束

not null 非空约束        primary key 主键约束

unique 唯一值约束        check 检查约束        foreign key 外键约束

约束可以建表的同时创建,也可以在建表之后追加创建

--创建约束表

  1. CREATE
    TABLE newdept
  2. SELECT * FROM dept;
  3.  
  4. CREATE
    TABLE newemp
  5. SELECT * FROM emp;

--创建表的同时增加约束_1

  1. (
  2.    emp_id NUMBER(6) PRIMARY
    KEY,
  3.    emp_name VARCHAR2(50) NOT
    NULL,
  4.    emp_email VARCHAR2(50) UNIQUE,
  5.    emp_sal NUMBER(8,2) CHECK (emp_sal>=400),
  6.    emp_deptid NUMBER(6) REFERENCES newdept (department_id)
  7. );

--创建表的同时增加约束_2

  1. (
  2.    emp_id NUMBER(6),
  3.    emp_name VARCHAR2(50) NOT
    NULL,
  4.    emp_email VARCHAR2(50),
  5.    emp_sal NUMBER(8,2),
  6.    emp_deptid NUMBER(6),
  7.    CONSTRAINTS emp2_empid_pk PRIMARY
    KEY (emp_id),
  8.    CONSTRAINTS emp2_email_uk UNIQUE (emp_email),
  9.    CONSTRAINTS emp2_sal_chk CHECK (emp_sal>=400),
  10.    CONSTRAINTS emp2_deptid_fk FOREIGN
    KEY (emp_deptid)
  11.    REFERENCES newdept (department_id)
  12. );

--非空约束:限制列值不允许为空

--修改first_name列为非空(需先创建表)

  1. ALTER
    TABLE newemp
  2. MODIFY (first_name NOT
    NULL);

--取消非空约束

  1. ALTER
    TABLE newemp
  2. MODIFY (first_name NULL);

--增加约束

ALTER TABLE 表名 ADD CONSTRAINT 自定义约束名称 约束设置;

--主键约束:限制列值不允许重复,且不能为空,一个表只能由一个主键

--设置主键约束

  1. ALTER
    TABLE newemp
  2. ADD
    CONSTRAINTS newemp_empid_pk PRIMARY
    KEY (employee_id);

--删除约束

  1. ALTER
    TABLE newemp
  2. DROP
    CONSTRAINTS newemp_empid_pk;

--复合主键(多列组成一个主键)

  1. ALTER
    TABLE newemp
  2. ADD
    CONSTRAINTS newemp_ename_pk PRIMARY
    KEY (first_name,last_name);

--唯一值约束:限制列值不允许重复,不限制空值,一个表中可以有多个唯一值约束

--设置唯一值约束

  1. ALTER
    TABLE newemp
  2. ADD
    CONSTRAINTS newemp_email_uk UNIQUE (email);

--检查约束:限制自定义条件,忽略空值

--限制工资不能少于400

  1. ALTER
    TABLE newemp
  2. ADD
    CONSTRAINTS newemp_sal_chk CHECK (salary>=400);

--外键约束:限制外键列值必须是引用的主表中的主键列存在的列值,不限制空值

--前置条件:引用的主表中的主键列必须已经设置主键约束

--部门主键约束设置

  1. ALTER
    TABLE newdept
  2. ADD
    CONSTRAINTS newdept_deptid_pk PRIMARY
    KEY (department_id);

--员工外键约束设置

  1. ALTER
    TABLE newemp
  2. ADD
    CONSTRAINTS newemp_deptid_fk FOREIGN
    KEY (department_id)
  3. REFERENCES newdept (department_id);

--级联删除

  1. ALTER
    TABLE newemp
  2. ADD
    CONSTRAINTS newemp_deptid_fk FOREIGN
    KEY (department_id)
  3. REFERENCES newdept (department_id)

--级联置空

  1. ALTER
    TABLE newemp
  2. ADD
    CONSTRAINTS newemp_deptid_fk FOREIGN
    KEY (department_id)
  3. REFERENCES newdept (department_id)

--无效化约束(暂时使约束失效)

  1. ALTER
    TABLE newemp
  2. DISABLE CONSTRAINTS newemp_empid_pk;

--激活约束

  1. ALTER
    TABLE newemp
  2. ENABLE CONSTRAINTS newemp_empid_pk;

--给学生表设置班级外键约束

  1. -- 设置班级表的主键
  2. alter
    table class
  3. add
    constraint classid_pk primary
    key (classid);
  4. --加外键约束
  5. alter
    table student
  6. add
    constraint stu_class_fk foreign
    key(classid)
  7. references class (classid)
  8. on
    delete
    set
    null;--删除的时候子表外键字段置空
  9. --on delete cascade;--联级删除

--删除约束

  1. ALTER
    TABLE student
  2. DROP
    CONSTRAINTS stu_class_fk;

IV.视图

虚拟表,作用是保存查询结果,仅保存查询语句,而不保存真实数据(物化视图例外)

--创建视图语法(如果查询语句中有衍生列,必须起别名)

CREATE [OR REPLACE] VIEW 视图名称 AS 查询语句

--创建视图CREATE VIEW v_视图名字AS SQL语句(不能有重复的列)

--创建视图v_emp:查询员工表中的50号部门的员工编号,姓名,工资

  1. CREATE
    OR REPLACE VIEW v_emp
  2. SELECT employee_id,last_name,salary
  3. FROM employees
  4. WHERE department_id=50;

--创建只读视图_1

  1. CREATE
    OR REPLACE VIEW v_emp_view
  2. select t1.*,t2.dname from emp t1 left
    join dept t2
  3. on t1.deptno = t2.deptno
  4. with
    read
    only
    --只读视图

--创建只读视图_2

  1. CREATE
    OR REPLACE VIEW v_emp
  2. SELECT employee_id,last_name,salary
  3. FROM employees
  4. WHERE department_id=50

--查询视图

  1. SELECT * FROM v_emp;

--删除视图

  1. DROP
    VIEW v_emp;

--创建视图v_dept:查询每个部门的编号,名称,员工人数,员工工资总和

  1. CREATE
    OR REPLACE VIEW v_dept
  2. SELECT d.department_id,
  3.        d.department_name,
  4.        COUNT(e.employee_id) emp_count,
  5.        SUM(e.salary) sal_sum
  6. FROM departments d
  7. INNER
    JOIN employees e ON d.department_id = e.department_id
  8. GROUP
    BY d.department_id,
  9.           d.department_name;

--查询视图

  1. SELECT * FROM v_dept WHERE emp_count>=3;

--物化视图

--序列

  1. select test_seq.nextval from dual;
  2.  
  3. select test_seq.currval from dual;

V.序列

--创建序列(CREATE SEQUENCE stu_seq;)

  1. CREATE SEQUENCE stu_seq
  2. START WITH 100 --起始值,默认是1
  3. INCREMENT BY 10 --递增值,默认是1
  4. NOMAXVALUE --最大值,默认无最大值
  5. NOCYCLE --假如设置了最大值,到达最大值之后,是否从头开始,默认NOCYCLE
  6. CACHE 10 --缓存数量,默认20
  7. ;

--使用序列

  1. SELECT stu_seq.nextval FROM dual;
  2. SELECT stu_seq.currval FROM dual;

--在插入语句中使用序列

  1. INSERT
    INTO stu VALUES (stu_seq.nextval,'tom','男',sysdate);

--删除序列

  1. DROP SEQUENCE stu_seq;

VI.索引

其作用加快查询速度,但是会降低DML速度

--索引的分类:

--B-TREE索引:默认,适合列值基数比较高,冗余数据很少的时候

--位图索引: 适合列值基数比较低,冗余数据比较多的时候

--创建实验表、

  1. CREATE
    TABLE new_emp
  2. SELECT * FROM employees;

--创建唯一性索引

  1. ALTER
    TABLE new_emp
  2. ADD
    CONSTRAINTS newemp_empid_pk PRIMARY
    KEY (employee_id);

--创建普通索引

  1. CREATE
    INDEX newemp_lname_idx ON new_emp (last_name);

--删除索引

  1. DROP
    INDEX newemp_lname_idx;

--创建基于函数的索引

  1. CREATE
    INDEX newemp_lname_idx ON new_emp (LOWER(last_name));

--创建位图索引

  1. CREATE BITMAP INDEX newemp_jobid_idx ON new_emp (job_id);

--查询实验

  1. SELECT * FROM new_emp WHERE employee_id=174;
  2. SELECT * FROM new_emp WHERE employee_id IS
    NULL;
  3. SELECT * FROM new_emp WHERE last_name='King';
  4. SELECT * FROM new_emp WHERE
    LOWER(last_name)='king';
  5. SELECT * FROM new_emp WHERE
    LOWER(last_name) LIKE '%en%';
  6. SELECT * FROM new_emp WHERE job_id='xxx';

适合创建B-TREE索引的时机:

1.列值基数比较高(重复率比较低)

2.不以空值做条件

3.列经常出现在条件子句中

4.表很大

5.经常做查询操作,而不是DML操作

6.满足条件的数据不超过总记录数的15%

7.模糊查询不走索引,如果模糊查询想使用索引,必须用全文检索技术

  1. select rowid,t.* from emp_index t;
  2.  
  3. create
    table emp_index
  4. select t1.* from emp t1,emp t2,emp t3,emp t4,emp t5,emp t6
  5.  
  6. select * from emp_index where
    for
    update;
  7.  
  8. select * from emp_index where ename = 'BL1AKE';
  9. select * from emp_index where ename like '%BL1AKE%'--不会
  10. select * from emp_index where ename like 'BL1AKE%'--会走索引
  11. select * from emp_index where ename like '%BL1AKE'--不会
  12. create
    index index_ename on emp_index(ename);

--快速查找

--二分法

--先排序

  1. select rowid,t.* from emp t;
  2.  
  3. --创建普通索引(单列)
  4. create
    index index_ename on emp_index(ename);
  5. --创建普通索引(多列)
  6. create
    index index_ename on emp_index(ename,job,hiredate);
  7. --最左前缀性
  8. select * from emp_index where ename = '' and job = '' and hiredate ='';
  9. select * from emp_index where ename = ''and job = ''
  10. select * from emp_index where ename = ''and hiredate = ''
  11. select * from emp_index where job = '' and hiredate ='';--不会走索引
  12. select * from emp_index where hiredate ='';--不会走索引
  13. --创建唯一索引
  14. create
    unique
    index index_ename on emp_index(ename);
  15. --创建函数索引
  16. create
    index index_ename on emp_index(upper(ename));
  17. --位图索引
  18. create bitmap index index_ename on emp_index(ename);

like 'a%'--有可能走索引

like '%a%'--不会走索引

--创建实验表

  1. id number(6),
  2. name varchar2(20)
  3. );
  4. id number(6),
  5. name varchar2(20)
  6. )

--这个忘了什么意思

--去重

  1. union
    --去重
  2. union
    all--去重

--找交集

  1. intersect--找交集

--找补集

  1. minus--找补集
  2. minus--找补集

--查询5-10条记录

  1. select * from emp where rownum<=10
  2. minus
  3. select * from emp where rownum<=5;

VII.同义词

即:缩短对象的名称

  1. SELECT * FROM user_tables;
  2. SELECT * FROM tabs;

--授权

  1. GRANT
    CREATE SYNONYM TO scott;

--创建同义词

  1. CREATE SYNONYM e FOR employees

--使用同义词

  1. SELECT * FROM e;

--删除同义词

  1. DROP SYNONYM e;

VII.集合运算

把多个查询结果以并集,交集,补集的形式合并成一个查询结果

-- 去掉重复,排序,速度慢--纵向拼接,注意,字段类型,数量,顺序保持一致

  1. select t.* from emp t where empno = 7521
  2. select t.* from emp t where empno = 7369;

-- 不去掉重复,不排序,速度快

  1. select t.* from emp t where empno = 7521
  2. select t.* from emp t where empno = 7369

--创建试验表1

  1.   id NUMBER,
  2.   name VARCHAR2(50)
  3. );

--创建试验表2

  1.   id NUMBER,
  2.   name VARCHAR2(50)
  3. );

--并集union(自动消除重复行)

  1. SELECT id,name FROM
    set1
  2. SELECT id,name FROM
    set2;

--并集union all

  1. SELECT id,name FROM
    set1
  2. SELECT id,name FROM
    set2
  3. SELECT id,name FROM
    set1;

--交集intersect

  1. SELECT id,name FROM
    set1
  2. SELECT id,name FROM
    set2;

--补集minus

  1. SELECT id,name FROM
    set1
  2. MINUS
  3. SELECT id,name FROM
    set2;
  4.  
  5. SELECT id,name FROM
    set2
  6. MINUS
  7. SELECT id,name FROM
    set1;

--混合运算

  1. SELECT id,name FROM
    set1
  2. SELECT id,name FROM
    set2
  3. SELECT id,name FROM
    set1
  4. MINUS
  5. SELECT id,name FROM
    set1;

--查询员工的第5到第10条数据

  1. SELECT * FROM employees WHERE ROWNUM<=10
  2. MINUS
  3. SELECT * FROM employees WHERE ROWNUM<=4;

【JSU】LJDragon's Oracle course over in 3th.

ORACLE STUDY NOTES 02的更多相关文章

  1. ORACLE STUDY NOTES 01

    [JSU]LJDragon's Oracle course notes In the first semester, junior year DML数据操纵语言 DML指:update,delete, ...

  2. Machine Learning Algorithms Study Notes(3)--Learning Theory

    Machine Learning Algorithms Study Notes 高雪松 @雪松Cedro Microsoft MVP 本系列文章是Andrew Ng 在斯坦福的机器学习课程 CS 22 ...

  3. Machine Learning Algorithms Study Notes(2)--Supervised Learning

    Machine Learning Algorithms Study Notes 高雪松 @雪松Cedro Microsoft MVP 本系列文章是Andrew Ng 在斯坦福的机器学习课程 CS 22 ...

  4. Machine Learning Algorithms Study Notes(1)--Introduction

    Machine Learning Algorithms Study Notes 高雪松 @雪松Cedro Microsoft MVP 目 录 1    Introduction    1 1.1    ...

  5. Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(3)

    Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(3) 一.配置共享存储 [oracle@aix203 ~]$lsdev -c disk hdisk0 Available ...

  6. Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(4)

    Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(4) 一.安装CRS补丁 在安装CRS之前,须要安装补丁p6718715_10203_AIX64-5L,否则在安装时会出现 ...

  7. Oracle Study之--Oracle 11gR2通过RMAN克隆数据库

    Oracle Study之--Oracle 11gR2通过RMAN克隆数据库 Purpose of Database Duplication A duplicate database is usefu ...

  8. Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0

    Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0 系统环境: 操作系统:RedHat EL6(64位) Oracle:    Oracle 11gR2 ...

  9. Study notes for Clustering and K-means

    1. Clustering Analysis Clustering is the process of grouping a set of (unlabeled) data objects into ...

随机推荐

  1. mysql 热备

    全备份:(生成时间戳文件夹:2016-04-20_16-12-01)innobackupex --users=root --password=root /tmp/backup 第一次增量备份:(生成时 ...

  2. Oracle数据库配置方式二--使用Net Manager配置数据库

    在Oracle安装配置中使用Net Configuration配置了数据库,今天给大家介绍第二种配置方式,Net Manager配置. 先找到我们的Net Manager的快捷方式,如下面截图

  3. Java类与类之间关系总结

    继承,依赖,关联,聚合,组合 一般来说依赖和关联是类似的,关联是强依赖,聚合和组合是一类,组合属于强聚合. 继承:一般是子类和父类之间的关系,关键字extends 依赖:可以这样记忆,做某件事必须要依 ...

  4. bootstrap字体图标

    bootstrap字体图标 http://v3.bootcss.com/components/ <!DOCTYPE HTML> <html> <head> < ...

  5. Redis,MemCached,MongoDB 概述

    调研项目主要有Redis. MemCached. MongoDB,以及Amazon的DynamoDB Redis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...

  6. SQL Server 分组后取Top N

    SQL Server 分组后取Top N(转) 近日,工作中突遇一需求:将一数据表分组,而后取出每组内按一定规则排列的前N条数据.乍想来,这本是寻常查询,无甚难处.可提笔写来,终究是困住了笔者好一会儿 ...

  7. String在JAVA里是固定长度的吗?为什么可用“+”连接

    所谓长度固定不是你理解的意思而是说String类中存储的char[]是final的,不能修改,你对String的操作实际上是产生了一个新的String,对于某一个String来说,长度就是固定的了 S ...

  8. 3D dungeon

    算法:广搜: 描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is comp ...

  9. [java] Java NIO 学习笔记 I

    如今在运行时优化方面,JVM 已然前进了一大步.现在 JVM 运行字节码的速率已经接近本地 编译代码,借助动态运行时优化,其表现甚至还有所超越.这就意味着,多数 Java 应用程序已不 再受 CPU ...

  10. UVA 305 Joseph (约瑟夫环 打表)

     Joseph  The Joseph's problem is notoriously known. For those who are not familiar with the original ...