前段时间项目中需要做数据管理和迁移的工作,于是又重新拾起了数据库,在javaEE阶段,我们对于数据库的使用仅限于DML(insert,update,delete,select)。数据库的使用也比较狭隘,只需要能够进行基本的增删改查操作就好。本文中,我将主要介绍Oracle数据库的一些基础知识以及一些常用的函数和PL/SQL。

  Oracle数据库可以说是目前世界上大型企业运用最多的数据库,它是由oracle公司自主研发的,同时也就决定了它的sql语句和其他数据库(Mysql,Sqlserver)等有一些小地方的区别,不过大体来说,很大一部分的sql语句还是遵循普遍的规则。

一 :Oracle开发管理工具

  工欲善其事,必先利其器。Java 有Eclipse,服务器有tomcat,前端有sublime,编辑器有ue,数据库也有自己的管理软件DBMS--Database Management System.DBMS分为两类:基于共享文件和(客户端(Client)—服务端(Server))。客户端主要进行的是用户与之交互的软件,例如客户选择要筛选的条件,后客户端通过网络把改请求传递给服务端,服务端处理完成后返回结果给客户端,呈现给用户。服务端则主要进行连接数据库服务器,对数据进行添加,删除,查询和修改。都是通过服务端来进行的。

在平常使用中,所有的oracle服务器都会安装一个名为Sql*Plus的命令行工具,这个客户端只会在窗口显示SQL>提示符,允许输入命令给Oracle数据库。

另外还会有Oracle SQL DEVELOPR ,在计算机上安装时只显示 SQL DEVELOPR,它支持所有的oracle中sql语句。

二:Oracle 基础知识

  在oracle数据库中,与其他数据库不同的是,存在表空间。Oracle中表空间是像其他数据库一样设置了表空间,会管理该空间内的表,表空间实质是一个虚拟的,人为的创建好以后分配给特定的用户,其他用户登陆是不能够对该表空间中的表做任何操作的。

Create tablespace name

Datafile  ”D:/Oracle/tomspace” size  1024M

Extent management local

Uniform size 5M

在分配好表空间后,我们就要开始创建表.

下面是oracle数据库的字段类型  (注意:其他数据库的int--> number)

字段类型

中文说明

限制条件

其它说明

CHAR

固定长度字符串

最大长度2000 bytes

VARCHAR2

可变长度的字符串

最大长度4000 bytes

可做索引的最大长度749

NCHAR

根据字符集而定的固定长度字符串

最大长度2000 bytes

NVARCHAR2

根据字符集而定的可变长度字符串

最大长度4000 bytes

DATE

日期(日-月-年)

DD-MM-YY(HH-MI-SS)

经过严格测试,无千虫问题

LONG

超长字符串

最大长度2G(231-1)

足够存储大部头著作

RAW

固定长度的二进制数据

最大长度2000 bytes

可存放多媒体图象声音等

LONG RAW

可变长度的二进制数据

最大长度2G

同上

BLOB

二进制数据

最大长度4G

CLOB

字符数据

最大长度4G

NCLOB

根据字符集而定的字符数据

最大长度4G

BFILE

存放在数据库外的二进制数据

最大长度4G

ROWID

数据表中记录的唯一行号

10 bytes ********.****.****格式,*为0或1

NROWID

二进制数据表中记录的唯一行号

最大长度4000 bytes

NUMBER(P,S)

数字类型

P为整数位,S为小数位

DECIMAL(P,S)

数字类型

P为整数位,S为小数位

INTEGER

整数类型

小的整数

FLOAT

浮点数类型

NUMBER(38),双精度

REAL

实数类型

NUMBER(63),精度更高

2.1 DDL(数据定义语言)

2.1.1新建表

     Create  table  tableName( name  number,列2  类型.....);(数据库中多条sql语句需要用‘;’隔开)

主键,外键,约束

在新增是一般都会有各种约束,下面简单说几种。

Name  Varchar2(45)   Primary key  ----主键

Age    number            not null       ----非空约束

Sex    char(3)        default ‘男’      ----默认’男’

Constraint tableName   primary Key(列名1,列名2,列名3...) ---联合主键

Foreigen key            ---外键

建好的表可以在相应的数据库下Tables中看到

2.1.2 删除表

Drop table tableName

2.1.3 修改表

2.1.3.1.向表中添加新字段

ALTER TABLE <table_name> ADD (字段1 类型 [NOT NULL],字段2 类型 [NOT NULL].... );

2.1.3.2 修改表中字段

  ALTER TABLE <table_name> modify(字段1 类型,字段2 类型... );

  2.1.3.3 删除表中字段

    ALTER TABLE <table_name> drop(字段1,字段2,.... );

  2.1.3.4 修改表的名称

    RENAME <table_name> to <new table_name>;

  2.1.3.5 对已经存在的表添加约束

    ALTER TABLE <table_name> ADD CONSTRAINT <constraint_name> 约束类型 (针对的字段名);

    示例:

    Alter table emp add constraint S_F Foreign key (deptno) references dept(deptno);

  2.1.3.6 对表里的约束禁用;

    ALTER TABLE <table_name> DISABLE CONSTRAINT <constraint_name>;

  2.1.3.7 对表里的约束重新启用;

    ALTER TABLE <table_name> ENABLE CONSTRAINT <constraint_name>;

  2.1.3.8 删除表中约束

    ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name>;

    示例:

    ALTER TABLE emp drop CONSTRAINT <Primary key>;

2.2 DML(数据操作语言)

  2.2.1 插入数据

    Insert into  tableName  values(值1,值2,值3.....)

  2.2.2 修改数据

    Update  tableName  set name=’王五’  where age=28

    修改是需要添加Where 查询条件,否则整个表中数据都会被修改

  2.2.3 删除数据

    在删除的时候 有delete 和truncate两种,delete 删除时一般不需要遵从外键约束,而truncate删除时更加彻底,会收到外键约束。

    Delete from  tableName

    Truncate  tableName

  2.2.4 查询数据

    Select name from users

    带别名的查询语句

    Select s.name from users s 表别名不能够添加 as

    Select name (as) a ,age b from users    -->查询出的结果显示的列名分别是 a,b 对于(as)可以省略

    需要注意的是在oracle自带的DBMS中查询语句不能够对表别名添加AS

2.3 序列(例如id自增长)

    在oracle数据库中,列值自动增长需要使用到序列(Sequence).

    Create Sequence sequence_name

    Start with number                          ----初始值

    Increment by number                       ----每次增加的值

    MaxValue  number/NoMaxValue           ----最大值/默认无最大值

    MinValue  number/NoMinValue            ----最小值/默认无最小值

    Cycle/NoCycle                         ----表示达到最大值/最小值后(重新开始/不重新开始,会报错)

    CACHE/NoCACHE                    ----会生成序列号

    在生成序列之后,在添加中可以

    Insert into tableName values(sequence_name.nextval,name,age,sex....)

    可以使用nextval 或currval 两个”伪列”来获取下一个值和当前值。

    Alter sequence  时     1.初始值是不能去修改的;

          2.最大值不能小于当前值,最小值不能大于当前值;

2.4 高级查询

    在实际开发中,对于数据的检索我们使用的时候需要各种各样的条件去限制。

  2.4.1  Where 过滤查询,带条件查询时必须有Where关键字

描述

Sql语句

查询年龄在25 的用户姓名

select  name from users where age=’25’

查询年龄25,性别男的用户姓名

select  name from users where age=’25’ and sex=’男’

   2.4.2  Between, and , or,in,not in运算符查询

 

描述

Sql语句

查询年龄在20-25 之间的用户姓名

Select name from users where age Between(20,25)

Select name from users where age>=20 and age<= 25

Select name from users where age in(20,25)

查询年龄不在20-25之间的用户姓名

Select name from users where age<20 or age>25

Select name from users where age not in (20.25)

  2.4.3  Group By 分组

描述

Sql语句

会通过不同的年龄去分组表中数据,最后得到的一个年龄只有一条数据,显示的数据是id靠前的

Select name from users gruop by age

  2.4.4  Having 过滤分组

描述

Sql语句

显示以年龄分组后数量大于2的用户姓名

Select name,count(*) from users group by age having count(*)>2

   2.4.5  Count() 计算总记录数

描述

Sql语句

查询所有users 表中的记录总数(包括Null)

Select count(*)  from users

查询所有users表中列名不为NUll的记录总数

Select count(列名)  from users

 

   2.4.6  Order By 排序 (asc升序,desc 降序 不写默认升序)

描述

Sql语句

按年龄查找用户姓名,按升序排列)

Select name from users order by age asc

按年龄查找用户姓名,按降序排列

Select name from users order by age desc

  2.4.7  Like 模糊查询 (“_” ,”%”的使用区别)

      使用模糊查询的地方很多,比如百度的搜索框应该就是模糊查询,模糊查询可以更有效的,更全面的搜索到相应的信息。

描述

Sql语句

会查出例如”王阳/李阳”这样的用户年龄 “_”代表前面只有一个字符

Select age from users where name like ’_阳’

会查出名字中最后一个字是阳的用户,例如”李海阳,李阳”

“%”代表任意字符,任意长度

Select age from users where name like ’%阳’

会查出名字中带有字阳的用户,例如”李海阳,李阳光”,”阳光”

Select age from users where name like ’%阳%’ -->

三、常用函数

    函数的使用在数据库中是十分常见的,函数的存在方便了我们对数据做所需要的处理,更加规范,安全的得到想要的数据。

    字符函数

名称

描述

CONCAT(字符串1,字符串2)

将字符串1和字符串2连接成一个新的字符串
示例: select CONCAT(job,ename) from emp

LPAD(字段,总的大小,添充字符)

左填充即向右对齐
示例: select empno,lpad(sal,10,'*') from emp

RPAD(字段,总的大小,添充字符)

右填充即向左对齐
示例: select empno,rpad(sal,10) from emp

LOWER(字符串)

将字符串全部变成小写;

UPPER(字符串)

将字符串全部变成大写;

INITCAP(字符串)

将字符串变成第一个字母大写,其余都变成小写;

LENGTH(字符串)

求出字符串的长度;

SUBSTR(字符串,开始位置,长度)

从字符串中取子串;
示例: select substr(ename,2,3) from emp;--从ename的第2位开始取3位

INSTR(字符串,字符)

查看字符是否在字符串中存在;不存在返回0;存在则返回字符所在的的位置;如果有两个以上的字符则返回第一个的位置.
示例:select instr(ename,'S') from emp;

TRIM(字符 FROM 字符串)

去掉字符串首尾的字符;
示例: select trim('S' from ename) from emp;

TO_CHAR()

将不是其他类型转成字符类型;
对于日期型可以控制其格式:TO_CHAR(日期,'格式');
其中格式有: 'YYYY' --以4为显示年;
'YEAR' --以标准格式显示年; 'MM' ; 'MON' ; 'DD' ; 'DAY'; 'HH'
; 'MI' ;'SS'

REPLACE(字符串,字符串1,字符串2)

将字符串中的字符1替换成字符2;
示例: select replace(ename,'SC','SS') from emp;

TRANSLATE(字符串,字符串1,字符串2)

替换多的字符;
示例: select translate(ename,'SH','AB') from emp;
--表示将ename中的'S'换成'A','H'换成'B';

ASCII(char)

求字符的ascii码

NLSSORT(字符串)

对字符串排序.

    数学函数

名称

描述

ABS(数字)

一个数的绝对值

CEIL(数字)

向上取整;不论小数后的书为多少都要向前进位;
CEIL(123.01)=124;
CEIL(-123.99)=-123;

FLOOR(数字)

向下取整;不论小数后的书为多少都删除;|
floor(123.99)=123;
floor(-123.01)=-124;

MOD(被除数,除数)

取余数;
MOD(20,3)=2

ROUND(数字,从第几为开始取)

四舍五入;
ROUND(123.5,0)=124;
ROUND(-123.5,0)=-124;
ROUND(123.5,-2)=100;
ROUND(-123.5,-2)=-100;

SIGN(数字)

判断是正数还是负数;正数返回1,负数返回-1,0返回0;

SQRT(数字)

对数字开方;

POWER(m,n)

求m的n次方;

TRUNC(数字,从第几位开始)

切数字;
TRUNC(123.99,1)=123.9
TRUNC(-123.99,1)=-123.9
TRUNC(123.99,-1)=120
TRUNC(-123.99,-1)=-120
TRUNC(123.99)=123

GREATEST(数字列表)

找出数字列表中最大的数;
示例:
select greatest(100,200,-100) from dual; --结果为200

LEAST(数字列表)

找出数字列表中最小的数;

SIN(n)

求n的正旋

COS(n)

求n的余旋

TAN(n)

求n的正切

ACos(n)

求n的反正切

ATAN(n)

求n的反正切

exp(n)

求n的指数

LN(n)

求n的自然对数,n必须大于0

LOG(m,n)

求n以m为底的对数,m和n为正数,且m不能为0

    日期函数

名称

描述

ADD_MONTHS(日期,数字)

在以有的日期上加一定的月份;
示例:
select add_months(hiredate,20),hiredate from emp;

LAST_DAY(日期)

求出该日期的最后一天.

MONTHS_BETWEEN(日期1,日期2)

求出两个月之间的天树(注意返回的天数为小数);
示例:
select months_between(sysdate,hiredate) from emp;

NEW_TIME(时间,时区,'gmt')

按照时区设定时间.

NEXT_DAY(d,char)

返回d指定的日期之后并满足char指定条件的第一个日期

    其他函数

名称

描述

VSIZE(类型)

求出数据类型的大小;

NVL(字符串,替换字符)

如果字符串为空则替换,否则不替换

数据库之Oracle(一)的更多相关文章

  1. sqlserver 2008R2数据库迁移oracle

    x项目需要,将以前的sqlserver数据库迁移的oracle数据库中,由于以前对oracle只是在DML语句的步骤,所以总结一下这次遇到的问题以及具体步骤 1,oracle新建数据库 新建Oracl ...

  2. 初识 数据库及Oracle数据库

    一.数据库基本概念二.数据库举例三.Oracle特点四.Oracle版本五.安装Oracle注意事项六.SQL简介七.Select语句 一.数据库基本概念 数据库(Database,DB)数据库管理系 ...

  3. oracle监听,数据库,oracle服务器的启动和停用

    一.oracle监听,数据库,oracle服务器的启动和停用 使用root用户登录:切换用户su – root/root操作系统,一般只有root用户才有权限去操作系统中安装的oracle数据库服务器 ...

  4. 数据库之Oracle的介绍与使用20180620

    /*******************************************************************************************/ 一.orac ...

  5. Microsoft-PetSop4.0(宠物商店)-数据库设计-Oracle

    ylbtech-DatabaseDesgin:Microsoft-PetSop4.0(宠物商店)-数据库设计-Oracle DatabaseName:PetShop(宠物商店) Model:宠物商店网 ...

  6. 数据库之Oracle

    数据库之Oracle 一. 用户的管理 1. 用户就是好比公司的某个人,而权限是这个人能在公司做什么,他的角色就是说明他的职位. 2. 用户的权限分为: 系统权限:对别的用户的管理操作. 对象权限:对 ...

  7. Oracle数据库之Oracle的下载与安装

    二.Oracle 的下载与安装 2.1.Oracle 简介 Oracle 公司是全球最大的信息管理软件及服务供应商,成立于 1977 年,主要的业务是推动电子商务平台的搭建.Oracle 公司有自己的 ...

  8. Linux下安装Oracle后重启无法登录数据库ORA-01034:ORACLE not available

    Linux下安装了数据库,安装完成后可以用,今天启动就不能用了,提示Oracle not available,后来查找资料,据说是oracle服务没有打开.如下方式可以解决问题. [root@root ...

  9. 数据库之Oracle优化技巧(一)

    数据库之Oracle优化技巧(一) 1.where子句中的连接顺序 在Oracle数据库中,where子句的执行顺序是自下而上进行解析,根据这个原理,表之间的连接必须写在其他where条件之前,那些可 ...

  10. Python操作数据库类 Oracle、Sqlserver、PostgreSQL

    我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...

随机推荐

  1. shp文件的读取

    http://blog.csdn.net/q_l_s/article/details/41486813

  2. 微信JS初始化--微信JS系列文章(一)

    概述 微信JS的使用方法,官方文档已经描述得比较清楚了,这里我就不重复介绍了,本文意在提供现成的代码,供大家快速迭代开发,以及补充一下官方文档描述得不够清楚的地方,避免大家踩相同的坑. 微信JS初始化 ...

  3. ubuntu14.04下chrome浏览器的安装

    ubuntu 64位 1.下载chrome安装包: sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_ ...

  4. mysql索引使用技巧及注意事项

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  5. JS-DOM . 01 简单了解DOM

    DOM概述 html加载完毕,渲染引擎会在内存中把html文档生成一个DOM树,getElementById是获取内DOM上的元素,然后操作的时候修改的是该元素的属性 体验事件/事件三要素1.事件源( ...

  6. 零基础入门学习UI设计指南

    第一步:认识设计启蒙必备知识 学习一项技能,尤其是已经有一定沉淀并在各行各业有广泛应用的技能,就一定要对它先有充分的认知.在开始正式学习前,你需要花足够的经历去了解和查阅它的起源.发展.应用.未来. ...

  7. 【前端童鞋看过来!】给大家分享网盘里前端相关书籍,主要是和网络通信(HTTP/TCP/IP)及javascript相关的

    百度云链接:https://pan.baidu.com/s/1kUPdf5H(无密码) 截图: <HTTP权威指南> [豆瓣书评]:此书第一部分是HTTP的概略,如果你没有时间,通读第一部 ...

  8. pygame加载中文名mp3文件出现error

    好一阵子没有写东西了,最近几天在做一个基于Python pygame的音乐播放器,本来想做完了,再来发篇文章的,可越做越深,框架大致出来了,考虑周期比较长,也可能是我个人问题,做得比较慢,最近.下面来 ...

  9. 转载八个最佳Python IDE

    八个最佳Python IDE 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Python是一种功能强大.语言简洁的编程语言.本文向大家推荐8个适合Pyt ...

  10. C语言 动态数组实现

    一.概述 C语言是不能直接定义动态数组的,数组必须在初始化时确定长度. 如果要在程序运行时才确定数组的长度,就需要在运行的时候,自己去向系统申请一块内存用动态内存分配实现动态数组. 二.动态内存分配函 ...