Oracle基础

一、Oracle简单介绍

Oracle Database,又名Oracle RDBMS,简称Oracle。是甲骨文公司推出的一款关系数据库管理系统。 Oracle数据库系统是目前世界上流行的关系数据库管理系统,拥有可移植性好、使用方便、功能强等优点,在各类大、中、小、微机环境中都适用。 Oracle是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。 Oracle数据库会创建一个表空间,再创建用户,用户去创建表。

Oracle数据库增、删、改、查中查是一个小关键,也是四个里面最为繁琐和有意思的一个。

注:小白介绍,大牛们直接略过吧。

本文章多数以文字的方式介绍。

二、基础查询语句

select * from 表名;--这里就是一个基础的查询表

如图所示:(这里的表名是数据库里自带的表,有下过Oracle的里面都会有,此表包括以下所有查询语句)

select name,sex from 表名; --这是根据字段查询,而上面的*是代表查询表中所有字段。

select * from 表名 where 条件; --这是条件查询,where 后面的就是要查询的条件。

select * from 表名 where name like '%A%'; --根据字段查询表中名字中带有A的人。

select * from emp where sal>2000; --根据条件判断了工资(按照上图数据库表所做出)

三、select 的稍微高级点的查询语法

排序语法:select 字段列表/* from表名 where 条件 order by 列名 asc(升序)/desc(降序)

分组语法:select 分组函数/分组字段 from 表名 where 条件 group by 字段

查询最高分组函数:max()

select max(sal),deptno from emp group by deptno; --查询每个部门工资最高的

查询最低分组函数:min()

select min(sal),deptno from emp group by deptno; --查询每个部门工资最低的

查询平均数分组函数:avg()

select avg(sal),deptno from emp group by deptno; --查询每个部门中工资平均数

查询总和分组函数:sum()

select sum(sal),deptno from emp where sal>2000 group by job; --查询每个部门,工资大于2000的工资总和。使用sum() 分组函数

as别名

as别名可以简单的理解为给字段换一个名字,而添加的方式有三种:

select 字段名 as “新字段名” from 表名;

select 字段名 as 新字段名 from 表名;

select 字段名 新字段名 from 表名;

distinct 运算符 取出重复的数据。

--判断空和非空 (判断奖金是否为空)

select * from emp where comm is null;

select * from emp where comm is not null;

having 通常用于和分组函数配合使用,用于对分组后的数据进行限定获取。

语法:select 字段列表 from 表名 where 条件 group by 字段 having order by 字段 asc/desc;

四、虚拟表

虚拟表就很好理解了,虚拟表就是一个不存在的表,但是还可以引用的表。

例如:select * from dual;

这个就是查询了一个虚拟表,当然表里是什么都没有的,他的作用就是在查询的过程中用它来代替一下自己的表,一般也是用于多表查询。

五、多表查询

这个时候就会用到多个表一起查询在给大家一个新的表:如图下所示

多表查询还有一个关键点那就是这两个表的关系,要有一定的关系,可以看一下第一个表和第二个表的字段,其中的DEPTNO字段在两个表中都有出现。

1.单行子查询

select * from emp where deptno=(select * from dept where dname='SALES');--通过代码演示单行自查询的语法,查询了通过部门名称查询员工信息。

2.多行子查询

--查询部门名称为:SALES,ACCOUNTING的员工信息

下面直接上演示代码和思路:

思路:通过部门名称查询部门编号

select deptno from dept where dname='SALES' or dname='ACCOUNTING';

--继续通过部门编号查询员工信息

select * from emp where deptno in (20,30);

--两条合为一条便是多行子查询

select * from emp where deptrno in (select deptno from dept where dname='SALES' or dname='ACCOUNTING');

3.多行子查询

oracle子查询一般都是返回单列,实际上数据库对此并没有进行限制,子查询也可以返回多列;

在select后显示字段的位置加入就可以了。

4.单行函数

下述部分为字符串相关方法,其中的参数可以是字符串也可以是字段名。

(1).lower() 把字符串中的字母变为小写。 把emp表中的人名全部显示为小写 Select lower(ename) from emp

(2).upper()

把字符串中的字母变为大写。 Select upper(ename) from emp;

select upper('aBCd') from dual;

(3).length()

取得给定字符串的长度

Select length(ename) from emp;

select length('aBCd') from dual;

(4).substr()

取得给定字符串的部分字符串,第一个数字表示字符位置,第二个数字表示截取的长度。对于英文字符和中文字符都分别当做单个字符对待。

Select substr(ename, 2, 3) from emp; 经常使用length()方法和substr配合使用来截取字符串。

(5).replace()

替换字符串中的给定内容

select replace(ename, '我', 'I') from emp

(6).initcap

使得首字母大写

select initcap(ename) from emp

(7).trim()

去除字符串开始和结束处的空白。

select trim(ename) from emp

(8).ltrim()

去除字符串左侧(开始处)的空白 select ltrim(' a v c ') from dual;

(9).rtrim()

去除字符串右侧(结尾处)的空白 select rtrim(' a v c ') from dual;

下述部分为数值相关方法,其中的参数可以是字符串也可以是字段名。

(10).数学方法

·cos()求余弦、sin()求正弦、acos()求反余弦、asin()求反正弦,其中参数是使用的弧度,如果需要角度,可以(弧度数 * 3.14159265359 / 180)。 select cos(1) from dual;

select sin(90 * 3.14159265 / 180) from dual; ·round(n , m),执行四舍五入,如果省略了m参数,四舍五入到整数,无论正负都是向靠近的整数四舍五入。如果没有省略m参数,m为正数时,表示四舍五入到小数点后几位即保留几位小数,如果m是负数,表示从小数点前几位四舍五入。 select round(10.6235) from dual; -- 结果是11 select round(10.25) from dual; -- 结果是10 select round(-10.25) from dual; -- 结果是 -10 select round(-10.55) from dual; -- 结果是-11

select round(-15.554612, -1) from dual; --结果是-20 select round(-12.554612, -1) from dual; -- 结果是-10

select round(12.554612, 3) from dual; -- 结果是12.555 select round(-12.554612, 2) from dual; -- 结果是12.55 ·trunc(n, m),截取数字,如果省略掉m参数,就截取小数部分,如果有m参数,当m是正数时,截取小数点后的指定位数,如果是负数,截取小数点前的位数。不论何种情况下都不会产生四舍五入。 select trunc(12.545) from dual; select trunc(12.245) from dual; -- 两者结果都是12

select trunc(-12.245) from dual; select trunc(-12.545) from dual;-- 两者结果都是-12

select trunc(12.241, 2) from dual; select trunc(12.245, 2) from dual; -- 两者结果是12.24

select trunc(-12.241, 2) from dual; select trunc(-12.245, 2) from dual; -- 两者结果是-12.24

select trunc(12.245, -1) from dual; select trunc(16.245, -1) from dual;-- 两者结果是10

select trunc(-12.245, -1) from dual; select trunc(-16.245, -1) from dual;-- 两者结果是-10 ·floor(n),返回小于或等于n的最大整数。 select floor(10.53) from dual; select floor(10.23) from dual; --两者结果是10

select floor(-10.23) from dual; select floor(-10.53) from dual; --两者结果是-11

·ceil(n),返回大于或等于n的最小整数 select ceil(10.53) from dual; select ceil(10.23) from dual; --两者结果是11

select ceil(-10.23) from dual; select ceil(-10.53) from dual; --两者结果是-10 范例: 求一个员工的日薪,结果保留到元,本月假设有30天。 select trunc(sal / 30) as daysal from emp order by daysal; Order by中可以使用别名。 你的朋友过生日了,你计划送份礼物,大概花了多少钱?(礼物包含:iphone5 一部 5288,苹果耳机299, 保护膜 99, 壳 234, 刷卡利率:3‰)。 ·mod(n, m),求 n除以m后的余数。 select mod(10,2) from dual; -- 结果是0 select mod(10,3) from dual; -- 结果是1

select mod(-10,3) from dual;-- 结果是-1 select mod(-10,2) from dual;-- 结果是0

select mod(10.4, 2) from dual; --结果是0.4 select mod(10.4, 3) from dual; --结果是1.4

select mod(-10.4, 2) from dual; --结果是-0.4 select mod(-10.4, 3) from dual; --结果是-1.4

select mod(10.4, -2) from dual; --结果是0.4 select mod(10.4, -3) from dual; --结果是1.4

select mod(-10.4, 2) from dual; --结果是-0.4 select mod(-10.4, 3) from dual; --结果是-1.4

select mod(10.4, -2) from dual; --结果是0.4 select mod(10.4, -3) from dual; --结果是1.4

select mod(-10.4, -3) from dual; --结果是-1.4 select mod(-10.4, -2) from dual; --结果是-0.4 使用mod()时,结果的符号由n决定。 ·abs(),取绝对值。 select abs(12) from dual; select abs(-12) from dual;

select abs(16) from dual; select abs(-16) from dual;

select abs(12.56) from dual; select abs(-12.56) from dual; (11). 日期方法 下面是一些和日期相关函数。 ·sysdate(),返回当前的系统时间。 select sysdate from dual; ·last_day(),返回指定日期所在月份的最后一天。 select last_day('1-3月-2013') from dual; ·to_day(),把指定字符串按照指定的格式返回日期。 select to_date('2013-3-1', 'yyyy-mm-dd') from dual; ·add_months(d, n),和指定的日期d相距n个月的日期 select * from emp where sysdate >= add_months(hiredate, 12 * 10 * 3.5) order by hiredate; -- 取得入职超过35年的员工

select * from emp where sysdate >= add_months(hiredate, 3.2) order by hiredate; --取得入职查过3.2个月的 如果是需要查找大于1年的可以使用12 * 年数,月份可以使用小数表示。 练习: 显示每个员工的入职天数 select trunc(sysdate - hiredate) from emp; 显示每个每个月倒数9天入职的员工 select * from emp where hiredate = last_day(hiredate) - 8 ·next_day(),求从指定日期开始的指定星期的日期 select next_day('2013-1-1','星期六') from dual; select next_day('2013-1-1',7) from dual; -- 两者返回的结果都是2013-1-5

·months_between(n, m),求n和m相差几个月 select trunc(months_between(sysdate, hiredate)), hiredate, ename from emp;

(12).转换函数

以下是一下转换函数。

·to_char(),把日期类型或数值型的数据转换成可变长的字符类型,转变数值型时,指定的格式可以实现四舍五入。 select ename, to_char(hiredate, 'yyyy-mm-dd hh24:mi:ss'), sal from emp;

select ename, to_char(sal, '999999.9'), sal from emp; 转换时用到的格式符 9 表示数字 0 表示0 $ 美元 L 本地货币符号 . 小数点 , 千位符 举例: select to_char(sal, 'L99,999.9') from emp; ·to_number(),把字符串转变成数值。。 select (to_number('1,234.56', '9999.99') + 12) from dual; (13). 通用函数 ·nvl(exp1, exp2),如果exp1为空(null),返回exp2的值 select nvl(comm, 0) from emp; ·nvl2(exp1, exp2, exp3),如果exp1为空(null),nvl2返回exp2,如果exp1为空,nvl2返回exp3,参数exp1可以是任意数据类型。

六、连表查询

链表查询分为四种:内连接(inner join)、外连接:外连接有分两种:右连接(right join)左连接(left join)、全连接(full outer join)、自连接。、


因为查询的语法很多也不固定需要一定的逻辑思维上面就一直在介绍查询的问题,下面我们看一下增、删、改的语法,增删改的语法基本固定没有什么太大的变化。

七.增加、删除、修改表中数据

首先咱们自己也要学会通过代码来创建表。

--创建表语法:

create table 表名(字段名 定义类型 not null,字段名 定义类型,字段名 定义类型...)

--修改表数据语法:

updata 表名 set name=‘更改的数据’,sex=‘更改的数据’;

--删除表语法:

delete grom 表名 where 删除的条件(和查询添加的条件一样);

--修改表结构语法:

create table 表名(

id varchar2(10) not null, -- 定义字符型长度为10不能为空的id字段 student varchar2(20) not null, -- 定义字符型长度为10不能为空的student字段 score number(4,1)-- 定义数值型长度为41位小数能为空的score字段

);

commit; --提交事务按钮

--往表中插入数据语法:

insert into 表名(字段或列名称的列表)values(值列表);

alter table 语句 修改表 调整表的结构。

语法:alter table 表名 操作 操作内容;

--添加字段 类型

alter table 表名

add 字段名 字段类型;

commit;

--修改字段

alter table 表名

modify (字段名 字段类型);

--删除字段 类型

alter table 表名

drop (字段名)

--重命名:可以更改一个表,视图,序列,等名字

--修改表名称

rename 表名 to 新表名;

--删除表

drop table 表名;

--删除某表中的第一行

delete from 表名 where id=1;

 

这些就是Oracle数据库的简单的增删改查,其中有什么求余弦,求正弦的那些东西去做一个基本的了解就可以了,不用刻意的去背这个东西,用到的时候拿出来看一下就可以了。

今天的文章到此结束,后面会有更深入的介绍,如有不足请原谅。洗洗睡觉~~~~

更多推荐

Oracle初学基础知识