Oracle 复习A

关于这些东西也不记得看了多少遍了,不经常用就会忘掉,还是写下来备忘吧。

1.字符函数:比如大写,小写,首字母大写等

大写:upper(字段名)

小写:lower(字段名)

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

2.数字函数

 四舍五入:round(操作数,小数位)

取模:mod(操作数1,操作数2)

截取:trunc (操作数,格式或位数)

trunc(123.345,2)
trunc(sysdate,'yyyymmdd')

trunc截取数字,只截取,不四舍五入,截取日志需要指定格式,yyyy为本年第一天,mm为本月第一天,dd为当前日期,d为本星期第一天,hh当前时间,精确到小时,mi当前时间,精确到分钟。

3.nvl函数

  判断是否为空:nvl(table.money,0)代表如果表table中的money为空,则赋值为0,如果不为空,则是本身的值

4.转换函数

  to_date(‘字符串’,'格式yyyymmdd') 将字符串转换为日期,一般用于where 比较日期的条件。

  to_char(字段,' '),将数字转换为字符串。

5.分组函数

  平均 avg 

  最大 max

  最小 min 

  求和 sum

  计数 count

 分组 group by

 分组过滤 一般和group by一起使用,having 子句

select a.deptno,max(a.sal) from emp a group by a.deptno having max(a.sal) > 3000

6. 多表连接

   内连接:等值连接

   外连接:左连接--返回左表的数据,右连接-返回右表的数据

  例子: 查询大于每个部门平均工资的员工

select * from emp b where b.sal > any
(
select avg(a.sal) from emp a group by a.deptno
)

 

 注意子查询  any 比子查询任何一个都怎么样的意思

 > all  大于最大值

< all  小于最小值

!=all   ---not in

< any  小于最大值

> any  大于最小值
= any   --in

 

DML语句  

增,删,改

首先,对于insert 语句。一般遇到的错误:a 对于有not null 约束的列 记住不要插入空值。 b 有唯一性约束,check约束,要按照约束的规则插入 c 数据类型要匹配  d  值不要超过列的范围。可以通过desc  表名  来查看表的结构,列的属性等

oralce的值类型 number,varchar2 ,date类型

比如: insert into dept values(333,'smith','xxxxx') ;  执行完后一定要提交,这是oracle的机制,和其他数据库不同

创建一张表的快捷方法:空数据的

create table test as select * from emp where 1=2;

其次: update语句

 update table  t set t.deptno = x where t.name=xxxx;

多列更新  update  emp t set (t.job,t.deptno) = (select a.job,a.deptno from emp a where a.empno=xxxx;)

第三: merge语句

 merge into   表1  a  

  using 表2  b

on (a.xx=b.xx)

when  matched then

update set a.xxxx= b.xxxx,a.xxx=b.xxx

when not matched then

insert (xxxx,xxx) values (b.xxxx,b.xxx,b.xx)

当满足的时候更新字段,不匹配不满足的时候插入新数据

数据控制语句  DCL

1.用户登录

  密码验证    sqlplus  scott/triggers  

  OS认证方式:  sqlplus  / as sysdba

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

   给用户解锁:alter user damon  identified by 密码  account unlock;  解锁后就可以用密码登录了

   查询  select * from dba_users; 

2.系统权限

    系统权限包括:连接权限 connect  create table  创建表的权限。  create  sequence  创建序列号的权限,create view  创建视图的权限。create procedure 创建存储过程的权限。

   可以通过PL Developer 查看user的树状结构来了解权限有哪些

   那么,新建的用户如何赋予权限呢?

   新建的用户必须赋予权限,否则无法登录连接到数据库,常用的方法是给用户常用的角色,角色是某些权限的结合。

   create role   名称  :创建角色

   grant  create session to  角色名   ;将创建会话的角色赋予给了某个角色。

   

SQL> create role test; #创建角色

Role created


SQL> grant create session to test; #将权限赋予给角色

Grant succeeded


SQL> grant test to damon  #将角色赋予给用户

  常用的角色:默认角色(保证使用数据库最基本的一些功能)connect,resource,只需要将这2个角色赋予给用户,用户就可以操作数据库了

  

SQL> grant connect,resource to damon;

Grant succeeded

  给用户赋予一些对象权限: grant select on scott.emp to 用户;  #给用户赋予scott用户的emp表的查询权限。

3.密码有效期

 

正常情况下,用户的profile属性是default ,密码有效期是180天

select * from dba_profiles where resource_name='PASSWORD_LIFE_TIME' and profile='DEFAULT';

将密码有效期设置为无限制

alter profile default limit password_life time unlimited;

DDL 数据定义语句

 表定义的时候不能使用oracle的关键字,尤其是v$reserved_words中 reserved=Y的关键字

必须以字母开头,特殊字符只能用_,$,# 三种

用户要建表,必须要有建表的权限,有存储空间即表空间。创建用户前创建表空间,创建用户时指定表空间tablespace 即可

创建表

create table test
(
deptno number(2) #2位整数,
deptname varchar2(40),
local varchar2(100) default '北京', #default 默认值
) TABLESPACE USERS #指定表空间

数据类型

 1.字符 char 固定长度 1-2000,  varchar2(n) 可变长度,  1<n<4000

 2.数字 number(p,s) p是精度,总有效位数,s是刻度,小数点后位数。这个类型包括零,正数,负数

 3.日期 date和时间值(timestamp),包括,世纪,年,月,日,小时,分,秒 timestamp(n),时间戳,表示日期和时间,比date更精准,n表示秒向下划分的精度范围,n取值0-9,默认6

select sysdate from dual;

select systimestamp from dual;

4.BLOB CLOB 大对象。

  给表增加一列

alter table  test  add (telephone,number11));

  修改列的长度

  

alter table test modify (telephone number(13));

  删除一列

   

alter table test drop column telephone  #生产环境不可用

alter table test SET UNUSED(LOC) #设置列不可用

alter table test drop unused columns;  #删除不可用的列

#顺序,先设置列不可用,然后在删除不可用的列

列重命名

 alter table dept01 rename  源列名 to 新列名

将表改为只读

 alter table dept01 read only 

alter table dept01 read write;

约束

非空(not null),唯一unique,主键,primary key,外键 foreign key,检查 check

非空

alter table 表名 modify 列名 not null;

视图:限制数据的访问,简化查询,数据的独立性,避免重复访问相同的数据

 1.类别: 静态视图 DBA_   ALL_, USER_ 开头的,动态视图 V$,存在于内存中,用户创建的视图

 2.案例

 2.1 创建简单视图

create or replace view 名字 as
select empno,ename,job from emp

 创建完成后,经常访问的数据就可以直接去查询视图

 

select * from 视图名

就相当于直接查表了,不同的是,视图中定义的特定的字段。

2.2 查看视图sql文本

select * from user_views d where d.view_name='视图名'  #注意视图名大写

查看TEXT就行了

select * from dba_users;
select * from  dba_tables;
select * from dba_tab_cols;

静态视图:DBA_ 数据库有用的所有对象,ALL_用户拥有及可以操作的其他用户的权限,USER_,用户拥有的对象。

动态视图V$:加载在内存中的,比如会话等。

创建外键时基表字段必须是主键

#创建主键
alter tableadd primary key (列名)
#创建外键
alter table 表名 add constraint 外键名 foreign key (子表列名) references 基表表名(基表字段)

   索引

  目的是加快oracle查询的速度,数据自动维护

  a  唯一索引   unique index 

# xxx是表名,abc是列名
create unique index  index_abc  xxx(abc);

  b  非唯一索引   index

  c  函数索引  index

  删除索引

drop  index 索引名

序列 sequence 

  可共享,不同的用户可共同调用,如果是number,可以顺序产生。

  创建序列

#创建序列,nocache不缓存,nocycle不循环
 create sequence 序列名  increment by 1 start with 100 maxvalue 9999 nocache  nocycle

查询序列,可以在数据字典user_sequence

#注意一定要大写
select * from user_sequences a where a.sequence_name='TEST_SEQ'

SQL> select * from user_sequences a where a.sequence_name = 'TEST_SEQ';


SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- ------------ ---------- ---------- ---------- -----------
TEST_SEQ 1 99 1 N N 0 88


SQL>

同义词

oracle当中,表名比较长,或者某个用户表经常被访问,简化对象的反问,可以创建同义词

类型:1  public 共有同义词  只要有权限的用户都可以访问 2  私有同义词 只能自己访问

grant create public synonym to 用户;

create public synonym  同义词名 to 表名

  需要赋予给用户权限才可以访问同义词,如果用户不能访问表,那么访问同义词也就无从谈起了

TCL 事务控制

1.属性  (ACID)

  原子性,事务必须都完成或者不完成。

  一致性,查询的结果必须与开始查询的状态一致

  隔离性,做出变更的会话,其他会话看不到未提交的记录

  持久性,事务一旦完成,所有的用户都可立即看到。

  

  

posted @ 2022-07-20 11:17  BlackData  阅读(41)  评论(0编辑  收藏  举报