前段时间项目中需要做数据管理和迁移的工作,于是又重新拾起了数据库,在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. WebService从服务端到客户端的用例

    1.首先编写Wsdl(基于契约优先的方式),要注意的是命名空间(若是使用include或import)最好使用一致的,代码如下: <?xml version="1.0" en ...

  2. iOS开发之左右抖动效果

    CAKeyframeAnimation *shakeAnim = [CAKeyframeAnimation animation]; shakeAnim.keyPath = @"transfo ...

  3. iOS开发之数据存储之XML属性列表(plist)归档

    1.概述 “归档”意思是持久化存储数据.plist文件是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等 ...

  4. MySql Table错误:is marked as crashed and last (automatic?) 和 Error: Table "mysql"."innodb_table_stats" not found

    一.mysql 执行select 的时候报Table错误:is marked as crashed and last (automatic?) 解决方法如下: 找到mysql的安装目录的bin/myi ...

  5. 模拟jquery链式访问

    一直写代码写代码,博客都快荒废了,眼看一月要过完,不能不留下点记忆,嘿嘿,刚研究了下jquery的链式访问,这么好用的技能我赶紧get了下,研究后略微修改,模拟一个简单的链式访问,下面这段代码支持修改 ...

  6. 为什么要学Python

    人生苦短,我用python.在大学四年的本科学习中,Python是我接触过语法最简单,功能最为强大的语言,拥有众多第三方库的支持的语言.如果要选一门编程语言作为入门,建议使用Python.但是为了更加 ...

  7. jQuery控制input不可编辑

    1.开启disabled,是input不可以编辑 $("#id").attr("disabled","disabled"); 2.关闭dis ...

  8. Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)

    (一)Java中的继承: 关于继承,在Java中类的继承只能是单继承,不像C+++那样灵活,可以多继承,多继承的后果就是各种关系乱套,就相当于一个孩子有2个母亲一样,社会关系的复杂,不利于程序后期的开 ...

  9. 读书笔记 effective c++ Item 43 了解如何访问模板化基类中的名字

    1. 问题的引入——派生类不会发现模板基类中的名字 假设我们需要写一个应用,使用它可以为不同的公司发送消息.消息可以以加密或者明文(未加密)的方式被发送.如果在编译阶段我们有足够的信息来确定哪个信息会 ...

  10. [原]C#与非托管——封送和自动封送

    之前说到了如何从C函数声明通过简单的查找替换生成一份C#的静态引用声明(C#与非托管——初体验),因为只是简单说明,所以全部采用的是基础类型匹配和自动封送.自动封送虽然能省去我们不少编码时间,但如果不 ...