【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. PHP的魔术方法(简介)

    public void _set(string $name,mixed $value) public mixed _get(string $name) public bool _isset(strin ...

  2. N!水题

    //题目是求N!的问题,思路:设定一个整形数组来存放每次计算过后的值 有两个for循环,第一个for循环每次加进一个数 然后在第二个for循环里面计算出此时的阶乘,比如9999,先给出i=2 在第二个 ...

  3. java反射新的应用

    利用java反射动态修改运行中对象的私有final变量,不管有没有get方法获取这个私有final变量. spring aop 本质是cglib,动态代理 可以做很多事情 query.addCrite ...

  4. ViewState探索

    什么是 view state? View State是客户端状态管理重要机制之一.当页面PostBack(向服务器发送或获得数据)时,它能存储页面的值.ASP.NET把View State属性作为页面 ...

  5. (转)asp.net中Literal与label的区别

    asp.net中Literal与label的区别 一.Literal Web 服务器控件概述(摘于MSDN) 可以使用 Literal Web 服务器控件作为页面上其他内容的容器.Literal 最常 ...

  6. 返回到上一页的html代码的几种写法

    关键词:返回上一页 html代码超链接返回上一页代码: <a href=”#” onClick=”javascript :history.back(-1);”>返回上一页</a> ...

  7. mysql查询计划

    mysql查询计划 1:客户端发起查询请求 2:服务器接收到请求后,先查询缓存 如果缓存命中,直接返回数据给客户端 否则,解析sql 3:sql解析完成后,进行预处理 4:有查询优化器生存查询计划 5 ...

  8. 小学生之解析XML应用

    1.什么是XML? 解析:XML:Extensible Markup Language(可扩展标记语言) HTML:HyperLink Text  Markup Language(超文本标记语言)   ...

  9. 自动加载类PHP中spl_autoload_register函数的用法

    spl_autoload_register(PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明bool spl_autoloa ...

  10. 你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物

    3.8  用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName ...