欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle笔记

程序员文章站 2022-05-11 19:21:07
...

数据库的基本概念
1.数据库(Database,DB)
2.数据库管理系统(Database Management System,DBMS)
3.数据库管理员(Database Administrator,DBA)
4.数据库系统(Database System,DBS)
5.关系型数据库(Relationship Database,RDB)
6.关系型数据库管理系统(RDBMS)
7.SQL语言(Structured Query Language)
 使用关系模型的数据库语言,用于和各类数据库的交互,提供通用的数据管理和查询功能。
 常用SQL指令:SELECT  INSERT  DELETE  UPDATE  CREATE  DROP

Oracle基本概念/数据
1.数据库(Database)
是磁盘上存储的数据的集合(包括配置文件、数据文件、日志文件和控制文件等)
2.数据库实例(Database Instance)
运行在数据库文件上的一组Oracle后台进程/线程以及一个共享内存区。数据库可以由实例装载和打开。
3. Oracle实时应用集群(RAC,Real Application Clusters)
   Oracle并行服务器架构/RAC架构
4.数据库服务名(Database Service_Name)
      从oracle8i开始引入,数据库客户端与服务器端连接时建议指定其数据库服务名,而不是数据库实例名。
5.网络服务名(Net Service Name)
   数据库在客户端的逻辑表示,包含数据库服务名和网络地址两方面信息
6.监听器(Monitor)
7.数据库对象:表   视图   约束条件   索引   序列   同义词   存储过程   函数   触发器   包
8.数据库安全:用户   方案   权限   角色   配额

Oracle数据库存储结构
1.物理存储结构
  数据文件(Data File)    重做日志文件(Redo LogFile)   控制文件(Control File)
2.逻辑存储结构
  表空间(Table Space)   段(Segment)   区(Extent)   块(Block)

Oracle基本工具
1.服务器管理工具OEM
1.1集成式系统管理控制台
1.2提供管理、诊断以及调优数据库功能
1.3远程管理多个网络数据库节点和服务
1.4管理并行服务器
2.客户端工具:Sql Plus       Sql Plus WorkSheet       iSqlplus

简单的表操作
//创建一个简单的表
create table student(
 name varchar2(20),
 age number(3)
);
//插入新纪录
insert into student values('Tom',18);
//查询记录
select * from student;
//查看表结构
desc student;
//删除表
drop table student;

SQL语句分类
1.Select查询语言
2.DML语句(数据操作语言):Insert、Update、Delete、Merge
3.DDL语句(数据控制语言):Create、Alter、Drop、Truncate
4.DCL语句(数据控制语言):Grant、Revoke
5.事物控制语句:Commit、Rollback、Savepoint

=============================================================
=============================================================

简单的Select查询语句
1.句法结构:SELECT *|{ <字段名> , ...  } FROM <表名>;
2.查询结果的默认显示效果
2.1Sql*plus的默认显示
 Date和character型数据左对齐
 Numeric型数据右对齐
 列标题默认显示为大写
2.2iSql*默认显示
 列标题默认显示为大写
 列标题缺省居中对齐
3.使用算术表达式
3.1在Select语句中,对NUMBER型数据可以使用算术运算符创建表达式。
 select empno, ename, sal, sal*12 form emp;
3.2算术运算符:+ - * /
3.3运算优先级
 乘法和除法的优先级高于加法和减法
 同优先级运算的顺序是从左到右
 表达式中可以使用小括号强行改变运算顺序
4.连接运算符
4.1连接运算符‘||'可以把列与字符、或其它表达式连接在一起,得到一个新的字符串,实现’合成‘列的功能
5.使用字段别名
5.1字段别名
 重命名查询结果中的字段,以增强可读性
 如果别名中使用特殊字符,或者是强制大小写敏感需使用双引号
5.2语法格式:
 SELECT <字段名>|<表达式>[[AS]<字段别名>],...FROM <表名>;
5.3语法举例:
 select empno as 员工编号, ename 员工姓名, sal*12 "年薪" from emp;
 select empno, ename "Ename", sal*12 "Anual Salary" from emp;
6.在表达式中使用空值
6.1算术表达式中如果出现空值,则整个表达式结果为空
6.2连接表达式中出现的空值被当作一个空的(长度为零的)字符串处理
7.去除重复行
7.1在缺省情况下查询结果中包含所有符合条件的记录行,包括重复行。
7.2使用DISTINCT关键字可从查询结果中清除重复行。
7.3DISTINCT的作用范围是后面所有的字段的组合。
8.查询结果排序
8.1查询结果缺省按照记录的插入顺序进行排列
8.2也可使用ORDER BY子句对查询结果进行排序,排序方式包括升序(ASC,缺省)和降序(DESC)两种:
 select empno, ename, sal from emp order by sal;
 select empno, ename, sal from emp order by sal desc;
8.3按多字段排序
 select deptno, empno, ename, sal from emp order by deptno, sal;
8.4使用字段别名排序
 select empno, ename, sal*12 annsal from emp order by annsal;
9.条件查询
9.1语法格式:SELECT * |{[DISTINCT]<字段名>|<表达式>[<别名>],...} FROM <表名> [WHERE<查询条件>];
9.2查询语句中使用字符串和日期
 字符串和日期值要用单引号
 字符串大小写敏感
 日期值格式敏感,缺省的日期格式是'DD-MON-RR'
  select * from emp where ename = 'SMITH';
  select * from emp where hiredate = '02-4月-81';
 获取当前缺省日期格式
  select sysdate from dual;
10.比较运算符:= >   >=    <     <=      <>
11.比较运算符:
 BETWEEN...AND...  介于两值之间(包括边界)
 IN(set)   出现在集合中
 LIKE   模糊查询
 IS NULL   为空值
12.模糊查询
12.1使用LIKE运算符执行模糊查询(通配查询)
 %表示零或多个字符
 _表示一个字符
 对于特殊符号可使用ESCAPE标识符来查找
13.逻辑运算符
 AND 逻辑与
 OR  逻辑或
 NOT 逻辑非
14.运算符优先级
 1 *  /
 2 +  -
 3 ||
 4 =  >  >=  <  <=  <>
 5 IS [NOT] NULL      LIKE      [NOT] IN
 6 [NOT] BETWEEN...AND
 7 NOT
 8 AND
 9 OR
 (可使用小括号强行改变运算顺序)

 

Oracle主要数据类型
------------------------------------------------------------------------------------------------------------------------------------------
数据类型                                                         说明
-------------------------------------------------------------------------------------------------------------------------------------------
char  字符型,最大长度2000B,缺省长度为1B
-------------------------------------------------------------------------------------------------------------------------------------------
nchar  基于NI.S国家字符集的字符型,最大长度2000B,缺省为1字符
-------------------------------------------------------------------------------------------------------------------------------------------
varchar2  变长字符型,最大长度4000B
-------------------------------------------------------------------------------------------------------------------------------------------
nvarchar2  基于NI.S国家字符集的字符型,其余同varchar2
-------------------------------------------------------------------------------------------------------------------------------------------
varchar  同varchar2
-------------------------------------------------------------------------------------------------------------------------------------------
number(m,n) 数值型,m为总位数,n为小数位,总长度最大为38位
-------------------------------------------------------------------------------------------------------------------------------------------
date  日期型,有效表数范围:公元前4712年1月1日到公元后4712年12月31日
-------------------------------------------------------------------------------------------------------------------------------------------
long  变长字符型,最大长度2GB,不支持对字符串内容进行搜索
-------------------------------------------------------------------------------------------------------------------------------------------
raw  变长二进制数据类型,最大长度2000B
-------------------------------------------------------------------------------------------------------------------------------------------
long raw  变长二进制数据类型,最大长度2GB
-------------------------------------------------------------------------------------------------------------------------------------------
blob  二进制大对象类型,最大长度4GB
-------------------------------------------------------------------------------------------------------------------------------------------
clob  字符大对象类型,最大长度4GB
-------------------------------------------------------------------------------------------------------------------------------------------
nclob  基于NLS国家字符集的字符字符大对象类型,最大长度4GB
-------------------------------------------------------------------------------------------------------------------------------------------
bfile  在数据库外部保存的大型二进制文件大对象类型,最大长度4GB
-------------------------------------------------------------------------------------------------------------------------------------------


=============================================================
=============================================================

函数
1.Oracle函数分为单行函数和多行函数两大类
2.单行函数
 操作数据项
 接受参数并返回处理结果
 对每一返回行起作用
 可修改数据类型
 可嵌套使用
3.单行函数分类
 字符函数
 数值函数
 日期函数 
 转换函数
 通用函数

3.1字符函数
字符大小写转换函数
------------------------------------------------------------------------------------------------------------------------------------------
函数  功能  用法   返回结果
------------------------------------------------------------------------------------------------------------------------------------------
lower()  转换为小写 lower('John Smith')  john smith
------------------------------------------------------------------------------------------------------------------------------------------
upper()  转换为大写 upper('John Smith')  JOHN SIMTH
------------------------------------------------------------------------------------------------------------------------------------------
initcap()  单词首字母大写 initcap('JOHN smith') John Smith
------------------------------------------------------------------------------------------------------------------------------------------
字符处理函数
------------------------------------------------------------------------------------------------------------------------------------------
函数  功能  用法   返回结果
------------------------------------------------------------------------------------------------------------------------------------------
concat()  字符串连接 concat('Hello ','World') Hello World
------------------------------------------------------------------------------------------------------------------------------------------
substr()  截取子串  substr('HelloWorld',4,3) loW
------------------------------------------------------------------------------------------------------------------------------------------
length()  返回字符串长度 length('Hello World') 11
------------------------------------------------------------------------------------------------------------------------------------------
instr()  定位子串  instr('Hello World','or') 8
------------------------------------------------------------------------------------------------------------------------------------------
lpad()  左侧填充  lpad('Smith',10,'*')  *****Smith
------------------------------------------------------------------------------------------------------------------------------------------
rpad()  右侧填充  rpad('Smith',10,'*')  Smith*****
------------------------------------------------------------------------------------------------------------------------------------------
trim()  过滤首尾空格 trim('  Mr Smith  ')  Mr Smith
------------------------------------------------------------------------------------------------------------------------------------------
replace()  替换  replace('Smith','mi','na') Snath
------------------------------------------------------------------------------------------------------------------------------------------

3.2数值函数
------------------------------------------------------------------------------------------------------------------------------------------
函数  功能  用法   返回结果
------------------------------------------------------------------------------------------------------------------------------------------
abs()  取绝对值  abs(-3.14)  -3.14
------------------------------------------------------------------------------------------------------------------------------------------
round()  四舍五入  round(314.15,-2)  300
------------------------------------------------------------------------------------------------------------------------------------------
trunc()  截断  trunc(3.1415,3)  3.141
------------------------------------------------------------------------------------------------------------------------------------------
ceil()  向上取整  ceil(3.14)   4
------------------------------------------------------------------------------------------------------------------------------------------
floor()  向下取整  floor(3.14)  3
------------------------------------------------------------------------------------------------------------------------------------------
sign()  判断数值正负 sign(-3.14)  -1
------------------------------------------------------------------------------------------------------------------------------------------
sin()...  三角函数... sin(3.14)   .001592653
------------------------------------------------------------------------------------------------------------------------------------------
power()  幂运算  power(4.5,2)  power(4.5,2)
------------------------------------------------------------------------------------------------------------------------------------------
sqrt()  开平方根  sqrt(9)   3
------------------------------------------------------------------------------------------------------------------------------------------
mod()  取模  mod(10,3)  1
------------------------------------------------------------------------------------------------------------------------------------------
exp()  基数为e的幂运算 exp(1)   2.71828183
------------------------------------------------------------------------------------------------------------------------------------------
log()   对数运算  log(4,16.0)  2
------------------------------------------------------------------------------------------------------------------------------------------
ln()  自然对数运算 ln(7)   1.94591015
------------------------------------------------------------------------------------------------------------------------------------------

3.3日期类型
3.3.1关于日期类型
 Oracle内部以数字格式存储日期和时间信息:世纪,年,月,日,小时,分钟,秒
 缺省的日期格式是DD-MON-YY
 可使用sysdate函数获取当前系统日期和时间
3.3.2日期型数据的算术运算
 日期型数据可以直接加或减一个数值,结果仍为日期
 两个日期型数据可以相减,结果为二则相差多少天
3.3.3日期函数
--------------------------------------------------------------------------------------------------------------------------------------------------------
函数   功能    用法   返回结果
--------------------------------------------------------------------------------------------------------------------------------------------------------
add_months(x,y)  计算在日期x基础上增加y个月后的日期 add_month(sysdate,2)
--------------------------------------------------------------------------------------------------------------------------------------------------------
last_day(x)  返回日期x当月最后一天的日期  last_day(sysdate)
--------------------------------------------------------------------------------------------------------------------------------------------------------
months_between(x,y) 返回日期x和y之间相差的月数  month_between(sysdate,hiredate)
--------------------------------------------------------------------------------------------------------------------------------------------------------
round(x,y)  将日期x四舍五入到y所指定的  round(sysdate,'month')
   日期单位(月或年)的第一天  round(sysdate,'year')
--------------------------------------------------------------------------------------------------------------------------------------------------------
trunc(x,y)   将日期x截断到y所指定的日期  trunc(sysdate,'month')
   单位(月或年)的第一天  trunc(sysdate,'year')
--------------------------------------------------------------------------------------------------------------------------------------------------------
next_day(x,y)  计算指定日期x后的第一个星期  next_day(sysdate,'星期二')
   几(有参数y指定)对应的日期 
--------------------------------------------------------------------------------------------------------------------------------------------------------

3.4转换函数
数据类型转换包括隐含转换和显式转换两种方式,建议使用显式的数据类型转换,确保SQL语句的可靠性

  to_number()  to_date()
     <----------------------------------------   ---------------------------------------->
 数值类型   字符类型   日期类型 
     ------------------------------------------> <----------------------------------------
  to_char()   to_char()

3.5常用日期格式符
------------------------------------------------------------------------------------------------------------------------------------------
格式   说明   举例
------------------------------------------------------------------------------------------------------------------------------------------
yyyy  年份   2008
------------------------------------------------------------------------------------------------------------------------------------------
dd  用数字显示月份  02
------------------------------------------------------------------------------------------------------------------------------------------
day  星期几   28
------------------------------------------------------------------------------------------------------------------------------------------
am/pm  显示上午/下午  上午
------------------------------------------------------------------------------------------------------------------------------------------
hh/hh12/hh24 小时   2:30 14:30
------------------------------------------------------------------------------------------------------------------------------------------
mi  分钟   30
------------------------------------------------------------------------------------------------------------------------------------------
ss  秒钟   46
------------------------------------------------------------------------------------------------------------------------------------------
说明:除上述格式符外,日期模式串中还可直接出现如下字符-:;/,如要显示其它文本字符串则需使用双
引号括起来;也可在模式串的开头使用“fm"标记去掉数字前面的零

3.6 通用函数
3.6.1通用函数适用于任何类型数据(包括空值):
 nvl() nvl2() nullif() coalesce() case表达式 decode()
3.6.2 NVL()函数
 #NVL()函数用于将空值null替换为指定的缺省值,适用于字符、数字、日期等类型数据。
 #语法格式:NVL(exp1,exp2)
 #说明:如果表达式exp1的值为null,则返回exp2的值,否则返回exp1的值。
 #用法举例:
  select empno, ename, sal, comm, sal+nvl(comm,0) from emp;
  select empno, ename, hiredate, nvl(hiredate, sysdate) from emp;
  select empno,ename,job, nvl(job,'No job yet') from emp;
3.6.3 NVL2()函数
 #NVL2()函数用于实现条件表达式功能。
 #句法格式:NVL2(exp1,exp2,exp3)
 #说明;如果表达式exp1的值不为null,则返回exp2的值,否则返回exp3的值。
 #用法举例:select empno,ename,sal,comm,nvl2(comm,sal+comm,sal) total from emp;
3.6.4 NULLIF()函数
 #nullif()函数用于数据等价性比较根据比较结果返回null或其中一个被比较的数值。
 #语法格式:nullif(exp1,exp2)
 #说明:如果表达式exp1与exp2的值相等则返回null,否则返回exp1的值。
 #语法举例:select select name 原名, nullif(pen_name,name) 化名 from author;
3.6.5 COALESCE()函数
 #coalesce()函数用于实现数据“结合”功能
 #语法格式:coalesce(exp1,exp2,...)
 #说明:依次考察各参数表达式,遇到非null值即停止并返回该值。
 #用法举例:select empno, emane, sal, comm, coalesce(sal+comm, sal, 0) 总收入 from emp;
3.6.6 CASE函数
 #case表达式用于实现多路分支结构
 #语法格式:
  case exp when comparison_exp1 then return_exp1
   when comparison_exp2 then return_exp2
   when comparison_exp3 then return_expn
   else else_exp
  end
 #语法举例:
  select empno, ename, sal,
   case deptno when 10 then '财务部'
        when 20 then '研发部'
        when 30 then '销售部'
        else '未知部门'
   end 部门
  from emp;
3.6.7 DECODE()函数
 #和case表达式类似,decode()函数也用于实现多路分支机构
 #语法格式:decode(col | expression, search1, result1
     [,search2, result2,...,]
     [,default])
 #用法举例:
  select empno, ename, sal
   decode(deptno,10, '财务部',
             20, '研发部',
             30, '销售部',
             '未知部门')
  部门
  from emp;

3.7 函数嵌套
3.7.1 单行函数可以嵌套使用,嵌套层次无限制
3.7.2 嵌套函数的执行顺序是由内到外
 select empno, lpad(initcap(trim(ename)),10,' ') name, job, sal from emp;

4.分组函数
4.1 分组函数对一组数据进行运算,针对一组数据(多行记录)只返回一个结果,也称多行函数。
4.2 常用分组函数
---------------------------------------------------------------------------------------------------------------------------------------
函数  功能说明    适用类型
---------------------------------------------------------------------------------------------------------------------------------------
avg()  计算平均值   数值型
---------------------------------------------------------------------------------------------------------------------------------------
count()  返回查询所得到的记录行数  任何类型数据
---------------------------------------------------------------------------------------------------------------------------------------
max()  计算最大值   任何类型数据
---------------------------------------------------------------------------------------------------------------------------------------
min()   计算最小值   任何类型数据
---------------------------------------------------------------------------------------------------------------------------------------
sum()  求和    数值型
---------------------------------------------------------------------------------------------------------------------------------------
4.3 COUNT()函数
4.3.1 count(*)返回组中总记录数目
4.3.2 count(exp)返回表达式exp值非空记录数目
4.3.3 count(distinct(exp))返回表达式exp值不重复的、非空的记录数目。

4.4分组函数与空值
4.4.1分组函数省略列中的空值
4.4.2可使用NVL()函数强制分组函数处理空值

4.5 GROUP BY子句
4.5.1 GROUP BY子句将表中的数据分成若干小组
4.5.2 语法格式:select deptno, avg(sal) from emp group by depno;
4.5.3 说明:
 #出现在SELECT列表中的字段,如果不是包含在组函数中,那么该字段必须同时在GROUP BY子句中出现
 #包含在GROUP BY子句中的字段则不必须出现在SELECT列表中。

4.6 组函数的错误用法
4.6.1 如果没有GROUP BY子句,SELECT列表中不允许出现字段(单行函数)与分组函数混用的情况。
4.6.2 不允许在WHERE 子句中使用分组函数。

4.7 HAVING子句
4.7.1 HAVING子句用于过滤分组
4.7.2 句法格式
 slect deptno, job, avg(sal)
 from emp
 where hiredate>=to_date('1981-05-01','yyyy-mm-dd')
 group by deptno, job
 having avg(sal)>1200
 order by deptno, job;
4.8 分组函数嵌套

4.8.1 分组函数最多可嵌套两层