*.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:#99ccff;}*.hl_mark_KMSmartTagYellowImg{background-color:#ffff66;}*.hl_mark_KMSmartTagOrangeImg{background-color:#ffad5b;}*.hl_mark_KMSmartTagGreenImg{background-color:#84e384;}*.hl_mark_KMSmartTagPurpleImg{background-color:#d6acff;}*.hl_mark_KMSmartTagRedImg{background-color:#ff8888;}
.wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertical-align: -7%;-webkit-user-select: none;} .wiz-todo-label { line-height: 2.5;} .wiz-todo-label-checked { color: #666;} .wiz-todo-label-unchecked {text-decoration: initial;} .wiz-todo-completed-info {padding-left: 44px; display: inline-block; } .wiz-todo-avatar { width:20px; height: 20px; vertical-align: -20%; margin-right:10px; border-radius: 2px;} .wiz-todo-account, .wiz-todo-dt { color: #666; }
一、Oracle的基本概念
1.Oracle Database的基本概念:
一个Oracle服务器
是一个数据库管理系统(RDBMS,关系型数据库管理系统——基于关系模型的数据库系统叫做RDBMS,关系模型是指基于二维表的模型),它提供开发的,全面的,近乎完整的信息管理
由一个Oracle数据库和多个Oracle实例组成
2.Oracle数据库和Oracle实例
Oracle数据库:位于硬盘上实际存放数据的文件,这些文件组织在一起,成为一个逻辑整体,即为Oracle数据库。因此在Oracle看来,“数据库”是指硬盘上文件的逻辑集合,必须要与内存里的实例合作,才能对外提供数据管理服务。
Oracle实例:位于物理内存里的数据结构。它由一个共享的内存池和多个后台进程所组成,共享的内存池可以被所有进程访问。用户如果要存取数据库(也就是硬盘上的文件)里的数据,必须通过实例才能实现,不能直接读取硬盘上的文件。
区别:实例可以操作数据库;在任何时刻一个实例只能与一个数据库关联;大多数情况下,一个数据库上只有一个实例对其进行操作。
3.Oracle数据库的体系结构(重要)
客户端JDBC访问Oracle数据库时,如果是写入操作,会先将数据存在在实例内存中(可以有多个),然后将实例内存中的数据统一存放到系统全局区域,再统一调用系统进程的写操作,将数据写入到磁盘上的数据库文件;如果是读取操作,系统进程的读取操作会将数据读取到系统全局区域,再分别存储到实例内存中,再提供给客户端JDBC。
4.集群:
5.表空间(users)和数据文件
表空间由多个数据文件组成,数据文件只能属于一个表空间。表空间为逻辑概念,数据文件为物理概念。
6.段、区和块
7.数据库的逻辑和物理结构
8.其他知识:
如果不想让Oracle数据库开机启动,可在服务中关闭OracleServiceORCL服务
Oracle客户机:如果想要从网的一台计算机上访问另外一台计算机上的Oracle服务,需要安装Oracle客户机才能够访问。安装Oracle客户机需要将客户机程序解压,然后将sqlplus所在目录添加到path路径中
访问方式:sqlplus scott/[email protected]:1521/orcl
解决中文乱码问题:
增加环境变量,设置NLS_LANG为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
本机ip:192.168.56.1 虚拟机ip:192.168.56.101
二、基本的select语句
1.基本的登录语句:
--登录Oracle
sqlplus scott/[email protected].168.56.101:1521/orcl
--清屏
host cls
--当前用户
show user
USER 为 "SCOTT"
2.JDBC连接Oracle数据库的写法:
jdbc:oracle:thin:@localhost:1521:orcl
jdbc:oracle:oci:@loaclhost:1521:orcl
第一种方式只需要一个jar包,第二种方式更复杂一些(功能更强大)。
3.记录控制台屏幕语句:
--开始记录
spool d:\1.txt
--结束记录
spool off
4.设置行宽和列宽
--当前用户下的表(oracle中必须要有from)
select * from tab;
--员工表的结构desc是describe的缩写
desc emp
--查询所有员工信息
select * from emp;
--显示设置行宽
show linesize
--结果linesize 80
set linesize 120
--设置列宽(col代表column,a表示字符类型,8表示长度为8,9表示以为数字,9999表示四个数字,for是format的缩写)
col ename for a8
col sal for 9999
--/表示引用上面的sql语句
/
5.change命令:
--通过列名查询
select empno,ename,job,mgr,hiredate,sal,comm,deptno form emp;
--第 2 行出现错误: ORA-00923: 未找到要求的 FROM 关键字
--c命令 change缩写
--指定第二行
2
--结果:2* form emp
--/form原错误值/from新值
c /form/from
--改正结果:2* from emp
--/代表引用上面的sql语句
/
6.滤空函数nvl
将comm奖金中的null值变成0,从而不会出现总薪水的值为null
select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) from emp;
7.edit方法
--ed是edit的缩写
ed
--结果:已写入 file afiedt.buf
--执行sql语句
/
8.别名的格式:
"别名"或者不加引号,区别:别名中有空格或者关键字必须加上双引号
1 2 |
|
9.distinct的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
10.其它注意点:
三、过滤和排序
1.基本用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
2.其它:
四、单行函数(共六种,最后一个是条件表达式)
1.基本用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
|
2.其它:
五、多行函数(分组函数)
1.基本用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
|
2.其它:
六、多表查询
1.层次查询:
2.笛卡尔积(使用连接条件就是避免使用笛卡尔全集):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
3.其它:
4.SQL99
七、SQL中的重点知识
1.SQL优化的原则:
(1)尽量使用列名代替*,效率更高
(2)where 解析的顺序: 右 --> 左,因此可以在and语句时将最可能错误的放在右边,在or语句时将最可能正确的放在右边
(3)尽量使用where,因为where在分组前就进行了过滤,效率更高(尤其是数据量大的时候)
(4)理论上,尽量使用多表查询
(5)尽量不要使用集合运算,集合运算效率低
2.SQL中的null:
(1)包含null的表达式都为null
(2)null!=null(需要使用is null或者is not null判断是否为空)
(3)如果集合中含有null,不能使用not in;但可以使用in(为什么?因为not in做的是与操作所以就得不到任何结果(null!=null),而in 做的是或操作)
(4)null的排序,默认情况下null最大
(5)多行函数会自动滤空;
3.next_day的应用:每个星期一自动备份数据
1. 分布式数据库
2. 快照snapshot
参考: 27-分布式数据库.avi