【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. 批量升级BMC固件asu64、ipmitool

    需求:通过服务器远程管理IP批量升级IMM.UEFI固件 工具:asu64.ipmitool.iflash64.cdc_interface.sh 下载:http://pan.baidu.com/s/1 ...

  2. Resizing LVM Logical Volumes-lvextend

    1. fdisk命令/dev/sdc再分出一个sdc2分区 [root@rhel7 ~]# fdisk /dev/sdc Welcome to fdisk (util-linux ). Changes ...

  3. C# 在右下角弹出窗口

    窗口代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Da ...

  4. hdu 5124

    bc上的题目,很水,有很多方法做吧,题意大概就是给定你票数,然后让你求出票数最多的那个下标...... 之前我用两个for循环分开写,一个是读入,然后是判断,提交就wa,后来网上看了别人的,就是不能分 ...

  5. jquery插件--多行文本缩略

    1.webkit内核多行缩略样式 text-overflow:ellipsis; display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orie ...

  6. 获取EnterpriseLibrary企业库配置文件中ConnectionStrings(原创)

    在使用企业类库时想取出单独企业配置文件中的连接字符串遍历,并放到自己的数据库处理类中,在查找了很久的资料后都没有找到,于是自己探索着写了一个,共享给大家以做参考: ConfigurationSourc ...

  7. SOA

    面向服务架构Service-Oriented Architecture 4个特性 1每个服务具有明确的边界 2服务是独立的 3采用标准的契约定义和通信协议 4服务是自解释的

  8. Android Studio 实用快捷键

    ctrl + alt + 方向键   跳转到上次或下次编辑位置 ctrl + alt +n   查找文件 shift + f6       重构之重命名 ctrl + f12       导航到类方法 ...

  9. 1201.1——Vim编辑器的相关操作

    一 vi的操作模式 vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode).在输入模式下,用户可输入文本资料.在指令模式下,可进行删除.修改等各种编辑动作. 在 ...

  10. sql语法图