Oracle课程知识总结

一. 认识oracle数据库:
1.数据库模型有:关系模型,键值存储,文档存储,列式存储,图形数据库
2.数据库的数据结构:由行和列组成,所谓行包含一组记录,所谓列是组命名的属性
3.数据库核心文件:数据文件(存放用户数据和系统数据),重做日志文件(记录修改系统记录数据),控制文件(记录数据库核心配置文件)
4. 数据库特征:支持海量存储、多用户并发高性能事务处理;多种备份和恢复策略;开放式联结;遵循SQL语言规范,支持各种操作系统、用户接口和网络通信协议的工业标准;应用集群实现可用性和可伸缩性…………. ;
5.数据库对象有:表,约束,索引,序列,同义词,存储过程,函数,触发器,包;
6.oracle数据库三大语言:DML(数据操纵语言),DDL(数据定义语言),DCL(数据控制语言)

二. 主要学oracle以下几点内容:
过滤和排序数据,单行函数,多表查询,分组函数,子查询,Oracle创建和管理表和数据处理,列约束,创建(或修改)视图,其他数据库对象,控制用户权限;

  1. 过滤和排序数据

1.比较运算:<>不等于(也可以是!=)
between…and…-----在两个值之间 (包含边界),
in(set)-----------------等于值表中的一个,not in(set)反义
like--------------------模糊查询
% 代表零个或多个字符(任意个字符),_ 代表一个字符
例如:like’_%’ | like’__%’ | like’ a%’ | like’%a%’ | like’_a%’ …,
is (not) null------------------判断是否是空值,
escape-----------------转义符
例如:like ‘tb_%’ escape ‘’,
2.逻辑运算:and ,or ,not
3.列排序:order by …desc(降序),asc(升序)
4.运算符:
要注意:列表中的列名和表达式在(数量)和(数据类型)上要相对应
union--------> 不去重复
union all----->去重复
intersect------>取交集
minus--------->返回两个结果集的差集

2.单行函数

1.单行函数分为:字符函数, 数值函数 , 日期函数 , 转换函数 , 通用函数
2.控制大小字符函数:lower,upper,initcap
3.lower(‘SQL Course’)----->sql course(全小写)
4.upper(‘SQL Course’)---->SQL COURSE(全大写)
5.initcap(‘SQL Course’)---->Sql Course (开头字母大写)
6.字符控制函数:concat,substr,length,instr,lpad ,rpad,trim,replace
7.concat(‘Hello’, ‘World’)-------->HelloWorld —合并字符—
8.substr(‘HelloWorld’,1,5)------->Hello —截取字符—
9.length(‘HelloWorld’)----------->10 —字符长度—
10.instr(‘HelloWorld’, ‘W’)-------->6 —字符元素位置—
11.lpad(salary,10,’’)-------------->*****24000 —左边填充----
12.rpad(salary, 10, '
’)------------->24000***** —右边填充—
13.trim(‘H’ FROM ‘HelloWorld’)—>elloWorld —去掉字符元素或者去掉空格—
14.replace(‘abcd’,’b’,’m’)–>amcd —替换字符元素—
15.数字函数:round,trunc,mod
16.round(45.965,2)------>45.97 ------四舍五入------
17.trunc(45.965,2)------->45.96 ------截断----------
18.mod(1600,300)-------->100 -------求余----------
19.日期函数:months_between(‘01-SEP-95’,‘11-JAN-94’)---->两个日期相差的月数
add_months(‘11-JAN-94’,6)-------------------->向指定日期中加上若干月数
next_day(‘01-SEP-95’,‘FRIDAY’) ---------------->指定日期的下一个星期 * 对应的日期
last_day(‘01-FEB-95’)---------------------------->本月的最后一天
extract------------------------------------------->入职月份
例如:extract(month from hire_date) from table;
select cast(‘yyyymmdd’ as date/number)from emp1;
24.转换函数:to_char,to_number,to_date
select to_char(sysdate,‘yyyy-mm-dd hh:mi:ss’) from dual ----函数对日期转换;
select to_date(‘2012年10月29日 08:10:21’,’yyyy“年”mm”月”dd“日”hh:mi:ss’)from dual----函数将字符转换成数字;
select to_number(‘¥1,234,567,890.00’,’L999,999,999,999.99’)from dual
25.时间格式:HH24:MI:SS AM------>15:45:32 PM
26.to_char 函数中经常使用的几种格式:9 数字,0 零,$ 美元符,L本地货币符,.小数点,,千位符
27.通用函数:nvl(expr1, expr2), expr1不为NULL,返回expr1,为NULL,返回expr2。
nvl2(expr1, expr2, expr3): expr1不为NULL,返回expr2;为NULL,返回expr3。
nullif(expr1, expr2):相等返回NULL,不等返回expr1 。
coalesce(expr1, expr2, …, exprn)。
这些函数适用于任何数据类型,同时也适用于空值。
28.case表达式:select t1, case when t1 then return_t1
when t2 then return_t2
else t end from table

                        3.   多表查询

1.orale 链接:select table1.column,table2.column frome table1 ,table2
where table1.column1=table2.column2;
2.非等值链接(不是表链表模式):select e.last_name, e.salary, j.grade_level
from employees e, job_grades j
where e.salary
between j.lowest_sal and j.highest_sal
3.外连接定义:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。
没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部连接,但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+).
4.orale(左)外链接:select table1.column, table2.column
From table1,table2 -------table1为主表
where table1.column = table2.column(+);
5.orale(右)外链接:select table1.column, table2.column
from table1, table2 -------table2为主表
where table1.column (+)= table2.column;
6.SQL:1999语法(左)外链接: select table1.column, table2.column
from table1 left join table2 -------table1为主表
on table1.column= table2.column;
7.SQL:1999语法(左)外链接: select table1.column, table2.column
from table1 right join table2 -------table2为主表
on table1.column = table2.column;
8.使用 on 子句创建多表连接:select table1.column,table2.column,table3.column from table1 join table2 on table1.column=table2.column
join table3 on table2.column=table3.column
9.自链接(自表链自表):select worker.last_name || ’ works for ’ || manager.last_name from employees worker, employees manager where worker.manager_id = manager.employee_id
10.叉集(叉集和笛卡尔集是相同的): select last_name, department_name
from employees cross join departments
11.自然链接(会以两个表中具有相同名字的列为条件创建等值连接,列名相同而数据类型不同,则会产生错误):
select department_id, department_name,location_id, city
from departments natural join locations
12.使用 using 子句创建连接( 1.在natural join 子句创建等值连接时,可以使用 using子句指定等值连接中需要用到的列。
2.使用using 可以在有多个列满足条件时进行选择。
3.不要给选中的列中加上表名前缀或别名。
4. join 和 using 子句经常同时使用):
例子:select employee_id, last_name, location_id
from employees join departments using (department_id)

13.满外连接(查询所有): select e.last_name, e.department_id, d.department_name
from employees e full outer join departments d
on e.department_id = d.department_id

                             4.分组函数

1.group by 分组关键词
2.avg:平均值----------->组函数忽略空值,使用nvl不忽略空值 ,
例如 :avg(nvl(commission_pct,0));
count(expr):数量---->适用于任意数据类型,返回expr不为空的记录总数;
max:最大值-------->适用于任意数据类型;
min:最小值---------->适用于任意数据类型;
sum:求和,
3.distinct :删除重复
4.非法使用组函数:例如:select department_id, AVG(salary) from employees where AVG(salary) > 8000--------->不能在 where子句中使用组函数 group by department_id;
5.可以在 having子句中使用组函数:例如:select department_id, AVG(salary)
from employees
group by department_id
having AVG(salary)>8000

                             5. 子查询

1注意事项: (1).子查询要包含在括号内
(2).将子查询放在比较条件的右侧
(3).单行操作符对应单行子查询,多行操作符对应多行子查询
2.例单行子查询:select last_name from employees
where salary > (select salary from employees where last_name = ‘Abel’);
3.多行子查询操作符:in(等于列表中的任意一个) ,
any(和子查询返回的某一个值比较) ,
all(和子查询返回的所有值比较),
4.例子:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及salary
例如 all操作符 : SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary FROM employees WHERE job_id = ‘IT_PROG’)
AND job_id <> ‘IT_PROG’;
5.返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary
例如 any操作符 :SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ANY
(SELECT salary FROM employees WHERE job_id = ‘IT_PROG’)
AND job_id <> ‘IT_PROG’;

              6. Oracle创建和管理表和数据处理

1.查看用户创建的表:select * from user_tables
2.查看用户定义的表: select table_name from user_tables
3.查看用户定义的各种数据库对象:select distinct object_type from user_objects
4.查看用户定义的表, 视图, 同义词和序列:select * from user_catalog
命名规则:
表名和列名:
必须以字母开头
必须在 1–30 个字符之间
必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
必须不能和用户定义的其他对象重名
必须不能是Oracle 的保留字

  1. orcale数据类型
    varchar2---------->可变长字符数据
    char -------------> 定长字符数据
    number --------->可变长数值数据
    date ------------>日期型数据
    long ---------->可变长字符数据,最大可达到2G
    clob ---------->可变长字符数据,最大可达到2G
    raw(long raw) —>原始的二进制数据
    blob -------->二进制数据,最大可达到4G
    bfile --------->存储外部文件的二进制数据,最大可达到4G
    rowid --------->行地址 (删除重复)
    例子:select rowid,e.* from employees e
    where rowid<>(select max(rowid) from employees where…)
    6.create table table_name (id number(8),name varchar(12),…) 直接创建表
    7.create table table_name as select … from …where … 通过子查询创建表
    或者 .create table table_name as select … from … where 1=2
    8.alter table table_name add … 追加现有的表头列
    9.alter table table_name modify … 修改表头列的数据类型, 尺寸和默认值
    10.alter table table_name rename column … to … 重命现有的表头列
    11.alter table table_name drop column …删除现有的表头列
    12.drop table table_name 删除表(不可以回滚)
    13.truncate table table_name 删除表所有数据(不可以回滚)
    14.delete from table_name 删除表所有数据(可以回滚)
    15.commit(回滚),rollback(提交)
    16.新增一条记录: insert into table_name(,) values(,),

  2. 从其它表中拷贝数据:
    insert into table_name select…from…table_name where…
    18.修改: update table_name set…where…
    19.删除:delete from table_name … where …
    20.控制事务:savepoint(语句在当前事务中创建保存点),
    rollback to savepoint(语句回滚到创建的保存点)

                        第9节  列约束
    

1.约束定义:对创建的表的列属性、字段进行的限制。
诸如:not null/unique/primary key/foreign key/check
2.如何定义约束—在创建表的同时,添加对应属性的约束
2.1表级约束 & 列级约束:
create table emp1(
employee_id number(10)
dept_id number(8),
salary number(10)
—列级约束
hire_date date not null
email varchar2(8) constraint emp1_email_uunique,
name varchar2(8) constaint emp1_name_uu not null,
—表级约束
constraint emp1_p_k primary kay(employee_id),
constraint emp1_f_k foreign kay(dept_id) references departments(department_id) on delete cascade(主键id删除,副键id也主动删除) 或 on delete set null(主键id删除,副键id为空)constraint emp1_name unique(first_name)
)
2.2 只有not null 只能使用列级约束。其他的约束两种方式皆可
3.添加和删除表的约束–在创建表以后,只能添加和删除,不能修改
3.1添加alter table emp1 add constraint emp_salary check(salary>0)
3.2对于not null来讲,不用add,需要使用modify:
alter table emp1 modify(salary not null) ;
3.3删除alter table emp1 drop constraint emp_sal;
3.4使某一个约束失效:此约束还存在于表中,只是不起作用
alter table emp1 disable constraint emp_email_uk ;
3.5使某一个约束激活:激活以后,此约束具有约束力,
alter table emp1 enable constraint emp_email_uk ;

                     10.创建(或修改)视图

1.创建视图(修改):create (or replace ) view
table_name as select …from …emp
where…with read only(屏蔽 DML 操作)
2.删除视图:drop view table_name
3.Top-N 分析:
对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据

练习1:查询员工表中,工资前10名的员工信息
select rownum ,salary from(
select salary from employees order by salary desc)
where rownum<10
练习2:查询员工表中,工资排名在10-20之间的员工信息
select * from(select rownum r,salary from(
select salary from employees
order by salary desc
)where rownum<20
)where r>10

                        11.其他数据库对象

1.什么是序列?
序列:可供多个用户用来产生唯一数值的数据库对象
.自动提供唯一的数值
.共享对象
.主要用于提供主键值
.将序列值装入内存可以提高访问效率
2.create sequence 创建序列语句
create sequence sequence_name(
increment by 10------->每次增长的数值
start with 20---------->从哪个值开始
maxvalue 10000--------->最大值
minvalue ------------>最小值
cycle | nocycle------->是否需要循环
cache---------------->是否缓存登录
)
3.nextval和currval伪列 ,注意:多个表同时使用同一序列;
创建表 :create table emp1(emp_id number(10), first_name varchar2(12) ,salary number(6));
新增一条记录: insert into values(sequence_name.nextval,’ 小米’,‘30000’)
每次增长的数值为(sequence_name.nextval);
序列 sequence_name 的当前值为:select sequence_name.currval from emp1;
4.修改序列(改变序列的初始值只能通过删除序列之后重建序列的方法实现)
alter sequence sequence_name(
increment by 10------->每次增长的数值
start with 20---------->从哪个值开始
maxvalue 10000--------->最大值
minvalue ------------>最小值
cycle | nocycle------->是否需要循环
cache---------------->是否缓存登录
) ;
5.删除序列:drop sequence table_name
6.建立索引作用:使用索引提高查询效率
7.索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度
8.什么时候创建索引:
. 列中数据值分布范围很广
.列经常在 where 子句或连接条件中出现
.表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

9.什么时候不能创建索引:
.表很小
.列不经常作为连接条件或出现在WHERE子句中
.查询的数据大于2%到4%
.表经常更新
10.删除索引:drop index table_name
11.同义词:synonym
例子: create synonym e for emp1 select * from e
11.删除同义词:drop synonym e
12.控制用户权限
1.创建用户:create user user_name identified by password;
2.创建角色:create role manger;
3.为角色赋予权限: grant create session, create table, create sequence,create view,create procedure to manger ;
4.将角色赋予用户:grant manger to user_name
5.用户修改密码:alter user user_name identified by update_possword
6.分配对象权限:grant select,update on emp1 to sue,rich
with grant option(向数据库中所有用户分配权限同样具有分配权限的权利);
grant select,update on emp1 to public(向数据库中所有用户分配权限) ;
7. 查询权限分配情况:
数据字典视图 描述
ROLE_SYS_PRIVS 角色拥有的系统权限
ROLE_TAB_PRIVS 角色拥有的对象权限
USER_ROLE_PRIVS 用户拥有的角色
USER_TAB_PRIVS_MADE 用户分配的关于表对象权限
USER_TAB_PRIVS_RECD 用户拥有的关于表对象权限
USER_COL_PRIVS_MADE 用户分配的关于列的对象权限
USER_COL_PRIVS_RECD 用户拥有的关于列的对象权限
USER_SYS_PRIVS 用户拥有的系统权限
8.收回对象权限 :revoke select ,insert on emp1 from user_name

猜你喜欢

转载自blog.csdn.net/weixin_44544678/article/details/89081179