【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.

最新文章

  1. Java的ResultSet中rs.next()含义
  2. poj3086---数论
  3. 页面打开直接执行a点击事件
  4. 自绘XP风格菜单
  5. CC_CALLBACK之间的区别
  6. editplus 常用正则
  7. COM原理与实现之一
  8. Ubuntu 16.04安装httpd
  9. 关于Chrome 67 以后版本无法离线安装扩展的解决方法
  10. ****** 三十四 ******、软设笔记【存储器系统】-Cache存储器
  11. MySQL 5.6新特性 -- crash-safe replication
  12. flask中的模型
  13. Java http请求工具类
  14. TestNG简单介绍以及安装—学习笔记1
  15. GPS欺骗(一)—无人机的劫持
  16. Java 之集合框架 上(9)
  17. laravel 闪存
  18. Centos + HHVM 生产环境安装!
  19. rsync的配置
  20. perl学习笔记——哈希

热门文章

  1. 安装Microsoft oneDrive(原skyDrive)
  2. nyoj 76
  3. mysql索引和缓存
  4. 获取android手机联系人信息
  5. 在SPItemEventReceiver中使用BeforeProperties和AfterProperties
  6. 本机运行.net 2.0项目报错,解决方案
  7. MySQL REPLACE替换输出
  8. IP V4地址分类
  9. 快速幂:quickpow
  10. Axure矩形边框重合边框变成双倍宽度解决办法