oracle数据库学习总结,基础(1)

(oracle使用了11g版本,工具使用了pl/sql,oracle对单词大小写不敏感)

1.创建用户,常用命令

创建用户: create user 用户名 identified by 密码;

给用户赋予权限:grant 权限/角色名 to 用户名;

eg: grant connect to scott; --赋予scott数据库登陆链接权限

      grant resource to scott;--赋予用户资源操作权限

2.忘记密码(给用户修改密码):

sqlplus/nolog;

conn/as sysdba;

alter user 用户名 identified by 密码;

3.连接数据库时更改用户

conn 用户名/密码@全局数据库名

eg:

conn sys/change_on_install@orcl as sysdba;

conn scott/tiger@orcl;

4.sql查询:

--单表查询    

select * from 表名  ;--查询表中所有数据

select 字段名,字段名... from 表名  where 条件;--查询表中符合条件的指定字段

--别名:(as可以省略不写,其中别名中无特殊字符双引号也可以省略)

select  字段名   别名   from 表名

select  字段名  as  别名   from 表名

select  字段名   "别名"   from 表名

select  字段名  as " 别名"   from 表名

--连接符,连接查询字段

select 字段名||'xxxx'|| 字段名  from 表名

eg : select ename||'的工资'||sal from emp;

--去重复,(多行数据完全相同取其一)

select distinct 字段名 from 表名;

--排序(默认升序。desc降序)

select 字段名  from 表名 order by 字段名 desc/asc;

select 字段名  from 表名 order by 字段名1,字段名2 desc/asc;(多字段排序)

--字段的逻辑运算,运算的字段需要为数字

select 字段名+-*/运算 from 表名;

--where子句查询

--判断字段是否有值

字段名 is not null/is null;

--模糊查询,%表示任意长度任意字符,_表示一个任意字符

字段名 like '%%';

字段名 like '-%';

如果查询带下划线或其他特殊字符的使用escape将普通字符变为转义字符:

eg:(查询字段含_的)

字段名 like '%/_%'  escape '/';

--多条件查询

常用关键字:

like/and/or/is null/is not null/in /between and

不等于:<>  

and关键字的执行级别高于or,可以使用()提高条件的执行级别,使用()的执行级别最高。

--单行函数:

常用:

--字符函数

字段小写:lower(字段名)  

首字母大写:initcap(字段名)

连接字段:concat(字段1,字段2)

查看字符长度: length(字段名)

--伪表

不是真实存在的表,是为了方便进行数据的验证而临时存在的表dual

eg:查询当前系统时间

select sysdate from dual;

--日期函数,系统默认日期格式:日-月-年 eg:'06-2月-03'

返回两个日期之间的月份    months_between(日期1,日期2);

把月份数加到制定日期上    addmonths(日期,增加值)

返回制定日期所在的最后一天  last_day(日期)

--多行函数

常用:max/min/avg/sum/count

对多条语句进行修饰支取一个值,不能和字段直接混用。

--转换函数

--数值转字符 to_char(数字,格式)

eg: select to_char(123456,'$999,999,999') from dual

9表示占位,会将数字三个一组用逗号隔开,L表示人民币符号,$表示美元符号,若将9用0代替,那么不够的位数将会补0;

--字符转日期 to_date(要转换的字符,日期格式)

eg:to_date('1999-01-10','yyyy-mm-dd')

字符必须符合日期格式,oracle 默认转换格式为 日-月-年 eg:'06-2月-03'

--日期转字符to_char(要转换的日期, 被转换的日期格式)

常用转换格式: 'yyyy-mm-dd'        'yyyy/mm/dd'       'yyyy"年"mm"月"dd"日"'  

--其他函数

nvl(),nvl2(),decode()

nvl(字段,新值)如果字段值为null,则返回新值,不为null,则返回字段值

nvl2(字段,值1,值2)如果字段值为null,则返回值1,否则返回值2;

decode(字段,比较条件1,处理1,比较条件2,处理2,。。。,公共处理)

字段值和decode中的条件值相同在执行对应处理,否则执行公共处理

eg: decode(job,'manager','经理','saleman','销售','其他');

--分组查询

关键字:group by/having

使用:group by 分组字段名

使用了分组之后,在select语句中只允许出现分组字段和多行函数;如果是多字段分组,则先按照第一个字段分组,然后每个小组继续按照第二个字段分组,以此类推;

having:必须和分组结合使用,不允许单独使用。

where/having比较:

因为where执行顺序:from--where--group by--select--order by

having执行顺序: from--group by--select--having--order by

所有where子句中不能出现多行函数,having可以;均可使用普通字段直接进行筛选,但是where效率高

5.数据库的增删改以及数据备份

增删改的数据sql语句执行完毕后,不会立马进行数据的写入,还需要手动对数据进行提交,如果数据有问题还可以回滚。

--增加数据

insert into 表名(字段名,字段名。。。) values(值1,值2.。。);

如果时全字段插入,可以省略字段名

--删除数据

delete from 表名   where 条件;

delete from 表名;

truncate table 表名; (删除表中所有数据,效率高于delete)

--更新数据

update 表名 set 字段名=新值  (where 条件);

--数据的表级别备份(只备份了表结构及数据,没有备份约束)

create table 新表名 as select * from 表名;

create table 新表名 as select 字段名,字段名。。。 from 表名

数据的整体插入:

insert into 表名1 select  * from 表名2 ;

查询语句的结果字段数据必须和插入表的字段数量类型一致。

7.多表查询(sql99)

--查询表的笛卡儿积:cross join 

select 内容 from 表名1 cross join 表名2;

--外连接关键字:outer可省略

左外连接(左表为主表):表名1 left outer join 表名2 on 条件;

右外连接(右表为主表):表名1 right outer join 表名2 on 条件;

全外连接 :表名1 full outer join 表名2 on 条件;

多表连接: select 内容 from 表名1 inner join 表名2 on 条件 inner join 表名3 on 条件;

--多行子查询

关键字:any /all/in

<any表示小于最大值

in相当于=any;

8.账户管理

--orcale自带账户

system 管理账户,具备大部分操作权限,主要用来管理普通账户及Oracle数据

sys超级管理员账户,具备system账户的所有权限,同时又具备其他权限

--创建账户(使用system/sys账户,并使用dba身份,登陆orcale系统)

--创建用户

create user 用户名 identified by 密码;

--赋予权限

grant 权限/角色名 to 用户名;

--删除权限

revoke 权限/角色名 from 用户名;

--删除账户

drop user 用户名;

9.Oracle二维表管理

--创建表(字段常见类型number,varchar2,date)

create table 表名 (列名 类型,列名 类型。。。);

--删除表

drop table 表名;

--修改表名

rename 表名 to 新表名;

--添加字段

alter table 表名 add 字段名  类型;

--修改原有字段类型

alter table 表名 modify 字段名 新类型;

--修改字段名

alter table 表名  rename column 字段名 to 新字段名

--删除字段

alter table 表名 drop column 字段名

--表的约束创建方式均为三种

--删除约束:alter table 表名 drop constraints 约束名;

--主键:非空唯一

1.primary key

2.在创建表的语句最后使用:constraints 约束名 primary key(字段名)

3.建表完成后添加

alter table 表名 add constraints 约束名 primary key(字段名);

--非空约束  

1.not null;

2.constraints 约束名 check(字段名 is not null)

3.alter table 表名 add constraints 约束名 check(字段名 is not null)

--给字段设置取值范围约束

1.check(字段名<最大值 and 字段名>最小值);

--唯一约束

1.unique;

2,3同上;

--外键约束

当在子表中插入的数据在父表中不存在时会报错;

主动依赖的表成为子表,被依赖的表称为父表

1。references 父表名(字段名)

2.constraints 约束名  foreign key(字段名) references 父表名(字段名)

一般选取父表的主键作为子表的外键;

级联操作:

on delecte cascade/on delete set null;

猜你喜欢

转载自blog.csdn.net/qq_38735996/article/details/89074250