oracle
Posted ki1616
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle相关的知识,希望对你有一定的参考价值。
1.0 安装
2.0 初始化
1.使用 sqlplus 连接oracle数据库
1)在cmd中输入sqlplus /nolog
2)使用管理员账户登录orcl数据库实例
conn sys/gzsxt@orcl as sysdba
3)解锁scott账户
alter user scott account unlock;
4)通过scott账户登录
conn scott/tiger@orcl
修改新的密码:
新密码:tiger(输入是不可见的)
确认新密码:tiger(输入是不可见的)
5)已连接
2.使用 可视化工具 连接oracle数据库
3.0 SQL
3.1 select关键字
select关键字
作用:检索“列”
注意:1.select后面的列可以起别名(查询的显示结果)
1) 列名后面一个空格后添加别名(别名中不许有“空格”)
2) 列名后面一个空格后使用双引号添加别名
3) 列名后面一个空格后使用as关键字,在as后面添加别名
2.distinct用于对显示结果的去重
1) distinct必须放在select后面
2) 如果查询有多列,必须满足多列值都相同时,方可去重。
from关键字
作用:检索“表”
注意:检索的表后可以添加别名(别名不需要被双引号引起)
3.2 where关键字
select ename,job,sal from emp;
--例:查询工资大于2000的员工信息
select * from emp where sal >2000
-- =,!=,<>,<,>,<=,>=,any,some,all
--查询员工信息,条件:薪水要大于1000,薪水还要大于1500,薪水还要大于2000
select * from emp where sal > any(1000,1500,2000);
-- is null,is not null
select * from emp where comm is not null;
--错误:select * from emp where comm = null;
--查询员工薪水在2000-3000的员工信息
-- between x and y
select * from emp where sal between 2000 and 3000
--and,or,not
select * from emp where sal >=2000 and sal <=3000
-- in(list),not in(list)
--查询职务为 MANAGER 和 ANALYST 的员工信息
select * from emp where job = \'MANAGER\' or job = \'ANALYST\'
select * from emp where job in(\'MANAGER\',\'ANALYST\')
--查询工资为3000到50000的员工信息
select * from emp where sal in (3000,5000);
select * from emp where sal not in (3000,5000);
-- exists(sub-query)、not exists(sub-query)
select * from emp where exists(select * from dept where deptno =10)
select * from emp where not exists(select * from dept where deptno !=10)
-- like _ ,%,escape ‘\\‘ _\\% escape ‘\\’
--模糊查询
--查询:员工姓名中含有“M”的员工信息
select * from emp where ename like \'%M%\'
select * from emp where ename like \'_M%\'
select * from emp where ename like \'__O%\'
select * from emp where ename like \'%E_\'
select * from emp where ename like \'%\\%%\' escape \'\\\'
“%”:匹配零个或若干个字符
“_”:匹配一个字符
在模糊查询中,如果查询的数据中有“%”,“_”时,可以使用escape自定义转义字符
3.3 order by关键字
order by关键字
作用:用于对查询结果进行排序
用法:
1.利用asc 、desc对排序列进行升序或降序
2.order by后可以添加多个列(逗号分隔),当一个列的值相同时,在按第二列进行排序,依次类推
例子:
显示所有的姓名、工种、工资和奖金,按工种降序排列,若工种相同则按工资升序排列。
select ename,job,sal,comm from emp order by job desc,sal asc
3.4集合操作
- union 并集(相同显示一次)
select * from emp where deptno = 20
union
select * from emp where sal >2000;
- union all 全集( 相同显示多次)
select * from emp where deptno = 20
union all
select * from emp where sal >2000;
- intersect 交集
select * from emp where deptno = 20
intersect
select * from emp where sal >2000;
- minus 差集
select * from emp where deptno = 20
minus
select * from emp where sal >2000;
注意:
1.保证两个sql查询的列数是个数一致的
2.保证两个sql查询的列的数据类型是一致的
3.保证两个sql查询的列是相同的,否则查询的结果是无意义的
3.5函数
3.5.1单行函数
单行函数:对单个数值进行操作,并返回一个值。
分类:
1.字符函数
1)concat(a,b) 拼接a,b两个字符串数据
2)initcap(x) 将每个单词x首字母大写
3)lower() / upper() 将字符串小写/将字符串大写
4)length() 获取字符串的长度
5)lpad(a,b,c) /rpad() 将a字符串左边填充至b长度,用c字符填充,如果c字符不填写,默认用空格填充
6)ltrim(a,b) / rtrim() 去除a字符串左边的b字符,如果b不传参,默认去除空格
7)replace(a,b,c) 将a中的b字符串替换为c
8)substr(a,b,c) 将a的字符串,从b位置开始截取,截c个长度
9)trim( a from b) 将b左右两边的a字符去除掉
2.数字函数
abs() 求取绝对值
ceil() 向上取整
floor() 向下取整
round() 四舍五入
power(x,y) x的y次幂
3.日期函数
sysdate 返回系统当前日期,注意没有括号
add_months(d1,d2) 在d1日期上,增加d2个月份
months_between(d1,d2) 返回d1和d2之间的相隔月份
last_day(d) 返回d日期所在月份最后一天的日期
next_day(d,X) 返回下一个“星期X”的日期
4.转换函数
to_char() 将数字、或日期转化为字符串
to_date() 将字符串转化为日期
to_number() 将字符串转化为数字
5.其他函数
nvl(x,y) 如果x为null,则显示为y,x和y的类型保持一致
sys_guid() 生成一个的32位随机字符串
decode() 条件取值,类同java的switch
case when then else end 条件取值,类同java的if-else if-else
3.5.2组函数
组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果
avg()求平均值,只能对数字类型进行处理,不处理空字段
sum()求和,只能对数字类型进行处理
count()计数,对任何类型生效,不处理空字段
max() 求最大值,对任何类型生效
min() 求最小值,对任何类型生效
3.6 group by关键字
作用:对查询结果进行分组处理
用法:
1.分组之后,不能将除分组字段之外的字段放在select后面
2.group by 后面可以跟多个字段,则这多个字段值都相同时,才分为一组
3.分组之后,可以使用组函数对每个组进行数据处理
having 关键字
作用:用于对分组数据进行过滤
用法:
类似于where的用法
3.7 sql语句顺序
sql顺序分为两类:
1.sql的书写顺序
select from where group by having order by [asc/desc]
2.sql的执行顺序
from where group by having select order by [asc/desc]
3.8 连表查询
3.8.1 sql1992
sql分类
1.笛卡尔积 (表乘表)
2.等值连接 表的连接条件使用“=”
3.非等值连接 表的连接条件使用“>、>=、 <、<=、!=、any等”
4.自连接 自己连接自己
5.外连接
1.左外连接,“(+)”在等号右边
2.右外连接,“(+)”在等号左边
3.“(+)”在哪一边的列,该表就补充null
3.8.2 sql1999
sql分类
1.cross join 交叉连接 (笛卡尔积) ,不需要on关键字
2.natural join 自然连接 (找两个表中相同的列,进行等值匹配),不需要on关键字
3.inner join 内连接
1)必须有on关键字,on表示连接条件
2)inner关键字可以省略
4.outer join 外连接,outer关键字可以省略
1) left outer join
2) right outer join
3) full outer join
3.9 DML
insert关键字
作用:往表中插入一条(多条)数据
语法1:元祖值式的插入
语法1:insert into tablename(column1,column2,...,columnN) values(value1,value2,...,valueN);
语法2:查询结果式的插入
语法2:insert into tablename sub-query
delete关键字
作用:从表中删除数据
语法:delete [from] tablename [where condition]
update关键字
作用:更新表中的数据
语法:update tablename set column1=value1,column2=value2,...,columnN=valueN [where condition]
3.10事务
事务(Transaction)是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。
目的:保证数据库的完整性
特点:事务不能嵌套
如何开启事务:
一个DML语句(insert、delete、update)的执行
如何关闭事务:
1.显示的调用commit或rollback
2.当执行DDL(Create、Alter、Drop)语句事务自动提交
3.用户正常断开连接时,事务自动提交。
4.系统崩溃或断电时事务自动回滚
3.11序列
一、概念:
序列(sequence):oracle专有的专有对象
二、作用:
产生一个自动递增的数列
三、创建一个序列:
create sequence seq_name
increment by 1
start with 1
四、使用序列:
序列名.nextval
序列名.currval
3.12视图
一、定义:
视图(view):一种不占用物理空间的虚表。
二、作用:
将一些查询复杂的SQL语句变为视图,便于查询
三、语法:
create [or replace] view v$_name
as sub-query
[with read only]
四、需要注意的点:
1.视图也可以从视图中产生
2.我们把用于产生视图的表称之为基表
3.我们对视图进行数据修改就是对基表进行数据修改,反之亦然
4.不能对多张表的数据,通过视图进行修改。
五、使用视图需要注意
1.一般来讲,只有重复出现非常多次的SQL语句,才会创建视图
2.数据库迁移,视图也得随之迁移,否则在新数据中是不能用的
3.创建视图时,尽量不要带or replace
3.13数据类型
数据类型分类:
1.number(x,y) 数字类型,x表示最大长度,y表示精度
2.varchar2(x) 可变字符串,x表示最大长度
3.char(x) 定长字符串,x表示最大长度
4.long 长字符串,最大2G
5.Date,日期(年月日时分秒)
6.TIMESTAMP 时间戳,精确到微秒
要掌握oracle数据类型,在java中的对应数据类型
https://www.cnblogs.com/softidea/p/7101091.html
3.14 DDL
1.create关键字
作用:用于创建数据库对象(表、视图、序列等)
语法: create table tablename(column1 dataType, column2 dataType,...,columnN dataType)
语法2:create table tablename as subquery
2.alert关键字
作用:用于修改数据库对象(表、视图、序列等)
语法:
1)alter table tablename add(columnname dataType)
2)alter table tablename modify( columnname dataType)
3)alter table tablename drop [column] columnname
3.drop关键字
作用:用于删除数据库对象(表、视图、序列等)
语法:
drop table tablename
3.15约束
一、定义
约束(constraint):在建表时,为某些列添加一些特定的规则,保证数据库的数据满足某种用户的要求。添加约束之后,在往表中(插入、更新)数据时,如果数据不满足约束,则该条语句不能执行
二、约束的分类
①非空约束 not null
②唯一约束 unique
③自定义检查约束 check
④主键约束 primary key
⑤外键约束 foreign key
三、如何添加约束
1)在建表的同时,可以为某一列添加约束
①在列后面直接追加约束
②在填写完所有列之后,添加约束
2) 在建表之后,通过修改表结构来添加约束
3.16三范式
第一范式
列不可分
第二范式
不能部分依赖
第三范式
不能存在传递依赖
3.17 索引
索引:类似于“书”的目录,索引可以加快对表的查询速度。
作用:在数据库中用来加速对表的查询,通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O
使用:
CREATE INDEX index ON table (column[, column]...);
条件:
1.当数据量非常大的时候
2.当该列的值不经常重复的情况下
3.当该列的值不容易发生变化的情况下
重点:数据库会为我们的表自动创建索引,为表中的唯一键列自动的添加索引
以上是关于oracle的主要内容,如果未能解决你的问题,请参考以下文章