【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. linux系统中中断已连接的用户

    1.用w命令查看当前系统登录的用户 [root@rhel7 ~]# w :: up :, users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOG ...

  2. 最小生成树--->NYOJ-38 布线问题

    此题是最基础的最小生成树的题目,有两种方法, 一个是prim一个是kruskal算法,前者利用邻接矩阵,后者是利用边集数组 prim算法的思想是:一个点一个点的找, 先找从第一个点到其他点最小的, 把 ...

  3. JPush 极光推送 消息推送 实例

    简介 官网:https://www.jpush.cn/ 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度 ...

  4. 使用socket实现聊天功能

    public class Service { //服务器 public static void main(String[] args) { ServerSocket serverSocket=null ...

  5. java03变量和基本数据类型

    /** * * 失去一日甚易,欲得回已无途! * * 关键字:java中的关键字 就是指 已经被定义了的单词! * 我们就不能再拿关键字 作为我们的变量名! * 常用的关键字: * 基本数据类型: * ...

  6. js动态新增组合Input标签

    var x = 1; function addlink() { var linkdiv = document.getElementById("add1_0"); if (linkd ...

  7. ImageView设置点击效果没有用?ImageView src的图片大小改变不了?

    ImageView设置点击效果没有用? 解决 1.ImageView xml里面必须clickable 和longClickable为true <ImageView android:layout ...

  8. Starting nagios:This account is currently not available nagios

    nagios在启动时报错 # service nagios restartRunning configuration check…done.Stopping nagios: done.Starting ...

  9. static和const关键字的作用

    static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...

  10. Libevent源码分析(一):最小堆

    Libevent中的timeout事件是使用最小堆来管理维护的.代码位于<minheap-internal.h>. 看函数命名和代码风格应该是一个C++程序员,函数名都挺好懂的,只是下面这 ...