oracle笔记

数据库的基本概念
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 分组函数最多可嵌套两层

你可能感兴趣的:(oracle,DB,基础,数据库sql)