前段时间项目中需要做数据管理和迁移的工作,于是又重新拾起了数据库,在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. JDK中日期和时间的几个常用类浅析(三)

    java.text.SimpleDateFormat   SimpleDateFormat类是用于把字符串解析成日期时间和把日期时间格式化成字符串的工具类.该类主要和java.util.Date类配合 ...

  2. Java基础二:常量池

    目录: 自动装箱与拆箱 常量池 ==与equals()区别 1. 自动装箱与拆箱 Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成 ...

  3. Dreamweaver如何开启代码错误提示,报错代码。

    DW的代码错误即无效提示功能设置:在DW代码窗口左面有一列很小的功能按钮,在其中寻找"高亮显示无效代码",选中之后就可以看到无效的代码会被添加背景色,会让你容易辨识.改正后背景色会 ...

  4. ABC: Always Be Coding

    ABC: Always Be Coding (原地址:https://medium.com/@davidbyttow/abc-always-be-coding-d5f8051afce2)   Be h ...

  5. UT源码-124

    (1)设计三角形问题的程序 输入三个整数a.b.c,分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为等边三角形.等腰三角形.一般三角形(特殊的还有直角三角形),以及不构成三角形.(等 ...

  6. ELK整体方案

    # ELK日志搜集平台解决方案---------1. 硬件设备2. 系统环境3. elasticsearch 集群部署4. kibana 部署5. logstash 部署6. filebeat 部署7 ...

  7. JSTL标签用法 详解(转)

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  8. HTML的语义化,你需要深入了解

    有关HTML的一些基础课程,很多网站都有讲,于我而言,真正实践起来,我只要求我能够让它表现出我所想要的结果即可.然而,这种要求,对于后期的维护与测试,真的是......想起日前我们所做的这个项目,那里 ...

  9. exports和module.exports的区别

    总结:exports是module.exports的指向. 1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 ...

  10. 【G】开源的分布式部署解决方案文档 - Web Deploy

    G.系列导航 [G]开源的分布式部署解决方案 - 导航 微软官方部署方式 右键项目->发布 这个大家应该再熟悉不过,在部署前有个预览界面可以看本次更新到底更新哪些文件. 既然它可以预览部署结果, ...