(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;