以前的项目都是使用mysql数据库开发的,如今进了新的公司,开始接触到了Oracle数据库,而自己以前没有接触过,就自己挤时间来学习一下。
一.关系型数据库的概念
关系型数据理论由E.F.Codd博士在1970年提出;
Codd制定了一个数据库产品成为关系型数据库所必备一系列相关标准;
它是RDBMS(关系型数据库管理系统)的基础;
关系型数据库需要包含下面三个方面:
1.对象或关系的集合;
2.基于关系的操作集合;
3.因数据精确性和一致性二带来的数据的完整性;
关系型数据库是关系的集合或二维表的集合;
每个表有行和列组成;
可以通过Structured Query Language(SQL)来操作表中的数据;
表中的每一行数据可以通过主键即Primary Key(PK)来唯一标识;
表与表之间可通过外键即Foreign Key(FK)来关联;
关系型数据库中的对象:
1.表:存储的基本单元,有行和列组成;
2.视图:从一个或多个表的数据自己的一逻辑表示
3.序列:用来产生主键;
4.索引:提高查询的速度;
5.同义词:一个对象的别名;
6.编程单元:包括过程、函数或包,以及PL/SQL中的声明。
二.ORACLE简介
oracle是一个最大的数据库厂商提供的关系型数据库产品
oracle的RDBMS也称为oracle服务器
1.一个存储数据的地方;
2.能快速的获得数据;
3.数据库安全性;
4.分布式的数据库;
5.客户端和服务器的配置;
SQL——结构化的查询语言,通过它能以一种标准化的方法来对关系型数据库种的数据进行访问和操作。
SQL*Plus——是最简单的数据库开发工具。它允许用户从提示行上以交互方式输入SQL语句和PL/SQL语句块。这些语句被直接发给数据库,而结果会返回到屏幕上。通常,SQL*Plus与oracle服务器集成在一起,是标准oracle安装的一部分。SQL/Plus是字符模式环境,window版本包括了需对GUI操作,主要用于连接数据库和设置SQL*Plus选项。
PL/SQL——是用于从各种环境中访问oracle数据库的一种比较复杂的编程语言。它与数据库服务器集成在一起,也是标准数据库安装的一部分。
SQL命令:
1.取值语句:
SELECT
2.数据操作语句Data manipulation language(DML):
INSERT UPPDATE DELETE
3.数据定义语句Data definition language(DDL):
CREATE ALTER DROP RENAME TRUNCATE
4.事务控制语句Transaction control:
COMMMIT ROLLBACK SAVEPIONT
5.数据控制语句Data control language(DCL):
GRANT REVOKE
三.SELECT语句
语法:SELECT [DISTINCT] {*,column [alias],......} FROM table;
说明:
1.SELECT 后面可以跟上列名、列别名、通配符;
2.FROM 子句后面跟上要查找的表名;
3.DISTINCT 查找不重复的记录
4.SELECT语句可以写成一行或多行,不区分大小写;
5.通配符*显示表中所有的列
select * from department;
6.查询指定列时,SELECT语句中列与列之间用逗号分割
select d_id,d_name from department;
7.查询出来的数值或日期可以进行加减乘除运算,如果某一项为NULL,那么运算结果也为NULL
select salary*12 from department;
可以使用括号改变优先权,如:
select salary*12+100 from department;
和
select 12*(salary+100)from department;
8.采用NVL函数将NULL转换成某个值,如NVL(列名,‘字符串’)或NVL(列名,数值)
9.列别名是可选的,一个列别名包含了空格、特殊字符、或者要区分大小写,那就要给它加上双引号
select last_name "Employees" from department;
四.排序和条件查询
ORDER BY 子句:
1.order by 子句在整个SQL语句最后;
2.ORDER BY 后面可以是列名、列别名、表达式、列出现在SELECT关键词后的序号。
select name,salary from department order by salary;
等同于:
select name,salary from department order by 2;
3.ORDER BY后面可以跟多列,先按第一列排序,如果第一列相同再以第二列排序,一次类推。。。
4.ASC表示升序,是默认的,可以省略,DESC是降序排列;
5.NULL永远是最大的。
WHERE 子句:
1.紧跟在from子句之后,对返回数据进行筛选
2.条件由一个或多个表达式、比较符或字面值组成
3.所有字符串和日期都要用单引号包起来,数字不需要
4.日期在oracle数据库有特定形式,‘DD-MON-YY’(具体看日期显示格式),否则视作字符串
5.WHERE子句的运算符:=等于、 >大于、 >=大于等于、 <小于、 <=小于等于、 !=不等于、 <>不等于、 BETWEEN...AND...包括起止值、 IN(list)限定内容、 LIKE模糊查询、 IS NULL为空(不能使用=null)、 NOT BETWEEN不在...之间、 NOT IN不再集合里、 NOT LIKE不包含、 IS NOT NULL不为空、 NOT、 AND、 OR;
五.单行函数
Oracle数据库的函数作用:对数据进行计算、数据统计、修改数据显示、数据类型转换等
函数分类:单行函数和多行函数(组函数)
单行函数:字符函数、数值函数、日前函数、转换函数;
单行函数的使用:作用在单行(单挑记录)上,每行都可以返回一个结果,可操作数据项,接受参数并返回结果,修改数据类型,还可以嵌套使用。
函数使用方式:
function_name(column|expression,[arg1,arg2,...])
1.字符函数:
lower:转换成小写;
upper:转换成大写;
initcap:首字母大写,其余的都小写;
concat:字符串连接;
substr(str,start,end):字符串截取;
length:求字符串长度;
nvl:空值置换
示例:
LOWER('SQL Course') sql course
UPPER('SQL Course') SQL COURSE
INITCAPP('SQL Course') Sql Course
CONCAT('good','string') goodstring
SUBSTR('String',1,3) Str
LENGTH('String') 6
2.数值函数
round:四舍五入
trunc:截取,不进行四舍五入
mod:求余,取模
示例:
ROUND(45.923,2) 45.92
ROUND(45.923,0) 46
ROUND(45.923) 46
ROUND(45.923,-1) 50
TRUNC(45.923,2) 45.92
TRUNC(45.923) 45
TRUNC(45.923,-1) 40
MOD(1600,300) 100
3.日期函数
MONTHS_BETWEEN(date1,date2) 两个日期之间的月数
ADD_MONTHS(date,n) 指定日期上添加月数
NEXT_DAY(date,'friday') 指定日期的下一天(如:下一个星期五)是哪一天
LAST_DAY(date) 指定日期的最后一天
ROUND(date,'year') 对指定日期四舍五入,逢16日往月进一,逢7月往年进一
TRUNC(date,'year') 对指定日期进行截取
说明:oracle日期包括世纪、年、月、日、时、分、秒、毫秒,默认显示DD-MON-YY,函数SYSDATE、SYSTIMESTAMP可以返回相同时间,通过DUAL表可以使用这两个函数来查看系统时间。
MONTHS_BETWEEN('01-SEP-95','11-JAN-94') 19.774194
ADD_MONTHS('11-JAN-94',6) '11-JUL-94'
NEXT_DAY('01-SEP-95','FRIDAY') '08-SEP-95'
LAST_DAY('01-SEP-95') '30-SEP-95'
ROUND('25-MAY-95','MONTH') 01-JUN-95
ROUND('25-MAY-95','YEAR') 01-JAN-95
TRUNC('25-MAY-95','MONTH') 01-MAY-95
TRUNC('25-MAY-95','YEAR') 01-JAN-95
4.转换函数
TO_CHAR 将日期转换成字符串,TO_CHAR(date,‘fmt’)使用format定时日期格式,使用fm来去除空格或0,使用逗号分割
日期格式模型的元素:
year:英文年份
month:英文月份
mon:英文月份缩写
day:星期几的英文单词
DY:星期几的前三个字母
ddap:英文拼写的天
ddspth:英文拼写的第几天
d:一个星期的数字表示,周日为1,周六为7
dd:一个月的第几天
ddd:一年的第几天
yyyy:四位年
mm:二位月
hh24:24小时制的时
mi:分钟
ss:秒
AM:上午
PM:下午
RR日期格式:
RR:0-49代表本世纪,50及以上代表上世纪(默认)
YY:代表和当前时间所处的同一世纪
TO_CHAR 将数值转换成字符串,TO_CHAR(number,‘fmt’)
0:强制0填充未满数据位数
9:代表数字
$:设置一个浮点型的美元符号
L:使用本地货币符号
示例:
SELECT 'Order'||TO_CHAR(id)||'was filled for a total of'||TO_CHAR(total,'fm$9,999,999') FROM table WHERE date='21-SEP-95';
TO_NUMBER 将一个数值字符串转换成数字
TO_DATE 将一个日期字符串转换成日期
好了,今天就更新到这里,下次更新内容是夺标查询。