1、单行函数字符,数字,日期,转换,通用1,字符lower() upper() initcap()replace(字段,目标字符,替换字符) substr(字段,开始数字,结束数字)也可以用负数表示从后面截取length()2,数字 round(数字,保留的位数字)四舍五入trunc(数字,保留的数字)不对数字进行四舍五入 主要是记不住单词名字mod()求余数3,日期日期+数字 该日期后的数字天数日期-数字 该日期前的数字天数日期-日期 两日期间的天数(大日期 -小日期)?last_day(日期) 该月最后一天netx_day(日期,星期 x) 求出下一个指定星期 x 的日期 ?select ne
2、xt_day(sysdate,星期三) from dual;months_between(日期,日期 ) 两日期间的月份?求出每个雇员到今天为止雇佣的天数select ename ,trunc(months_between(sysdate,hiredate) from emp;add_months(日期,数字) 日期+数字月数4,转换to_char()转换成字符,fmyyyy-mm-dd hh24:mi:ss(L)999,999,999 加 L 表示当地的钱to_date()to_date(1987-08-17,yyyy-mm-dd)to_number()5,通用nvl(含有 null 字段,
3、0)decode(字段, 数字 1, 名字 , 数字 2, 名字 2 )想不起来具体的实例select decode(deptno,10,十号,20,二十,30,sanshi,40,ywu),deptno from emp;限定查询, =, 不等于判断查询?Between andBetween 数值 and 数值Between 日期 and 日期 ?对数字日期也同样适用,如查在 1981 年Select * from empWhere hiredate between 01-1 月-1981 and 31-12 月-1981;使用在日期上是不太熟悉And Or 限定范围In In(数值 1,数
4、值 2,.数值 3)表示在数值 1 到数值 n 的范围中Not in (数值 1,数值 2,数值 3)表示不数值 1 到数值 n 的范围中模糊查询Like |-_可以替换一个|-%可以替换 0,1n 个空NullNvl(数字,0) 表示处理 null 为零当字段中包含 null 是不能使用 not null,否则数包漏洞创建表Create table 表名(字段 1 类型 default 默认名称,字段 2 类型 default 默认名称 ,)表的复制Create table 表名称 as (子查询)复制带数据的 相应子查询为 select * from 表名 where 条件;复制只带表结构
5、的相应子查询为 select* from 表名 where 不成立的条件(如 where 1=2) ;只是 oracle 数据库支持的操作!表的重命名Rename 旧表名称 to 新表名称: 没有 table删除表Drop table 表名;Flashback (闪回技术)这样删除表并没有删除干净,因为每个用户都有一个回收站查看回收站; show recyclebin;还原删除表:falshback table 原表名称 to before drop; 对,主要记不住语法删除回收站中的表; purge table 表名称;?同样记住不住语法清空回收站; purge recyclebin;右上可
6、知删除一个表的方法为: drop table 表名称 purge;表的截断删除表中一个字段的数据,还可以使用 rollback 还原回来,那是因为删除的字段并没有真正提交给后台数据库,只是暂时放到缓存中,截断表就是用来清空缓存,释放空间Truncate table 表名称; 修改表增加:Alter table 表名称 add(字段 1 类型 default 默认名称,字段 2 类型 default 默认名称 ,)修改; alter table 表名称 modify (字段 1 类型 default 默认名称 ,字段 1 类型 default 默认名称 )增加和修改表结构不一样一个仅仅是增加字段
7、,alter table 表名称 add/modify(字段 1 类型 default 默认名称,)一个是对表结构的修改Alter table 表名称 add/drop constraint 约束名称 约束类型 (字段)例如:增加一个主键约束Alter table meber add constraint pk_mid primary keyi(mid);这里的约束名称 位 UK/CK/NK/PK/FK_字段名 约束类型为:unique/check/foreig key/primary key ( 字段名 ) 这个还是记不清楚啊约束NKNot nullCreate table 表名称(字段 1
8、 类型 not null )?Not null 与 default 的顺序Not null 与 default 不能同时出现,否者出错 记住顺序没有记住UK唯一约束 ;Unique Create table 表名称(字段 1 类型 default 默认名称 unique ,字段 2 类型 default 默认名称 ,Constraint uk_字段 unique(字段 ) 已经记住 unique 这个英文字母)如果约束直接放到 字段后则不用加字段,放到最后的话要在约束中加字段 CK检查约束;cherkCreate table 表名 (字段 1 类型 default 默认名称,字段 2 类型 d
9、efault 默认名称 ,Constraint ck_字段 cherk(字段 in (数字 1, 数字 2,数字 n) ))PK主键约束;primary keyCreate table 表名(字段 1 类型 default 默认名称,字段 2 类型 default 默认名称 ,Constraint pk_字段 primary key (字段)) FK外键约束:forign key Create table 表名(字段 1 类型 default 默认名称,字段 2 类型 default 默认名称 ,Constraint fk_字段 forign key(字段)references 父表名(字段)
10、)删除主表之前必须要先删除子表Drop table 子表名;Drop table 父表名;加入级联设置删除父表也删除子表Create table 表名(字段 1 类型 not null default 默认名称,字段 1 类型 not null default 默认名称,Constraint fk_字段 forign key (字段) references 父表(字段) on delete cascade)删除父表设置子表相关字段为 nullCreate table 表名(字段 1 类型 not null default 默认名称,字段 1 类型 not null default 默认名称,C
11、onstraint fk_字段 forign key(字段) references 父表名(字段)on delete set null )快速删除字段Drop table tablename cascade constraint purge: 主要是删除关联的位置没有记清楚约束条件的修改 ? 这个还是没有记住太清楚Create table 表名称 ( 字段 类型 not null/default 默认名称,字段 2 类型 2 not null/default 默认名称Constraint fk_bname Forign key(字段) references 表名(字段) on delete c
12、ascade/set null)Drop table bname coscade constraint purge;Alter table 表名 add constraint 约束名称 , 约束类型(字段)Alter table 表名 drop constraint 约束名称这与修改表结构不一样,修改约束是修改 CKUK PK FK NK 的约束而修改表结构是修改创建表示的 数据类型,字段名,和默认值范例 create table test2 ( mid number,name varchar2(10),age number(3);增加主键约束Alter table test2 add con
13、straint pk_mid primary key(mid);增加检查约束Alter table test2 add constraint ck_age check(age between 0 and 150);insert into test2 (mid,age,name) values(2,223,aa2aa);SQL select * from test2;MID NAME AGE- - -1 aaaa 23查询约束名数据字典 user_constraintsUser_cons_columms 记不住字母Owner :用户名 scottTable_name:表名 empConstrai
14、nt_name:约束名 pk_empnoColumm_name:字段 empno其中从 user_constraints 中找到 owner ,table_name,constraint_name从 user_cons_columms 中可以找到 columms主要是记住几个表当让也可以记住一个查询语句Select owner,constraint_name, table_name, columm_name from user_cons_columms:序列创建序列:Cretae sequence 表名 increment by 增量值 不是 increatmentstart with 开始值
15、Maxvalue 数值 n/noMaxvalue 数值 nMinvalue 数值 n/noMinvalue 数值 nCycle/nocycle Cache/nocache主要记不住语法查询序列:nextval 下一个序列,Currval 当前序列Create sequence mycy;select mycy.nextval from dual;select mycy.currval from dual;在使用自动增长序列是,都必须提前建立一个序列学列表,序列和表联合起来使用create sequence 序列名;create table 表名 (id number primary key,n
16、ame varchar2(10) not null);insert into 表名 (ID,NAME) values (序列名.nextval,AAA);创建一个表从 10 开始每次增长 2;Drop sequence myseq;Create sequence myseq increment by 2 start with 10;Select myseq.nextval from dual;创建一个表从 1、3、5、7、9 循环出现Error:Create sequence myeseq incretment by 2 start with 1 还是记不住单词Maxvalue 10 minv
17、alue 1 cycle nocache;Drop sequence myseq;Create sequence myseq increment by 2 start with 1Maxvalue 10 minvalue 1 cycle nocache;select myseq.nextval from dual;可以实现从 1 到 9 不间断的循环创建一个表,其编号从 1 到 9 不停地循环Create sequence myseq increment by 2 start with 1Maxvalue 10 minvalue 1 cycle nocache;create table tes
18、t (id number not null,name varchar2(10) not null);insert into test(id,name) values(myseq.nextval,AA);QL select * from test;ID NAME- -1 AA3 AA5 AA7 AA9 AA1 AA3 AA5 AA7 AA连接Union 并相同部分只显示一个ju:nenUnion all 并全部Intersect 相同部分 相交Minus 不同部分 maines这个没有记 视图Create or replayce view 视图名称 as 子查询With check option
19、/with read onlyOr replayce 为创建视图时,如果有重复着不创建,没有在创建With check option 限制的是创建视图时使用的条件,然后更新的创建时的条件Create or replayce view bname as 子查询With check option/with read only;With check option 限制创建条件和修改条件都是同一个时,不能修改创建条件,但是其他数值是可以修改的With read only 完全限制视图不能被修改例如;创建条件部门 20Create or replace view myview as select * f
20、rom emp where deptno=20;Update myview set deptno=20;这样是错误的,创建条件是 20 部门,更新条件也是部门 20create or replace view myview as select * from emp where deptno=20;虽然创建条件不能更新,但是其他的条件可以更新create or replace view myview as select * from emp where sal=9000;With read only 限值视图中的任何值都不允许更新!如更新公职为 9000 将会提示错误create or repl
21、ace view myview as select * from emp where sal=9000;如果视图时统计条件创建的,那么视图就字段数值不可能更改的同义词创建同义词表 Create public synonym 名称 for 用户.表名;删除同义词表 drop synonym 名称;记不住单词索引?用户权限Grant 授权Revoke 撤销需要登录 dba 创建用户Conn sys/sys as sysdba;Create user 用户名 identified by 密码; 记不住单词Grant create session to 用户名; 创建回环给用户Grant create
22、 table to 用户名; 创建表给用户Grant connect , resource to 用户名;把 connect, resource 角色给用户修改用户Alter user 用户名 identified by 新密码;identifided 确认Aleter user 用户名 password expire; expire 期满Alter user 用户名 account lock/unlock;account 把什么认为Grant select ,delete ,update,insert on 查询的用户.表名 to 创建的用户回收权限Revoke select,delete,
23、update ,insert on 查询的用户.表名 from 创建的用户Revoke connect ,resource , create table,create session from 创建的用户; 删除用户 Drop user 用户名 cascade; cascade 少了个 s上机操作创建一个用户 dog 密码 wangwangConn sys/sys as sysdba;create user dog identified by wangwang;创建一张表 myscott,从 scott.emp 表中的所有信息create table mydog as selcet * fro
24、m scott.emp;Grant RevokeCreate user 用户名 identified by 密码;Grant create session to 用户名 ;Grant create table to 用户名;Grant conncet ,resource to 用户名;Alter user 用户名 indentified by 新密码;Alter user 用户名 password expire;Alter user 用户名 account lock/unlock;Grant select ,delete,update,insert on 查询的用户.表名 to 用户; 子查询
25、Select table1.columm, table2.columm from table1 cross join table2 natural join table2join table2 using(columm_name)join table2 on ( table1.columm.name=table2.columm.name )left|right|full outer join table2 on ( table1.columm.name=table2.columm.name)1.交叉连接Cross join table2 是产生笛卡尔集,有两个及多个记录是相同的,且都存在查询结
26、果中2.自然连接Natural join table2 是自然连接,如果结果中有两个相同的部分,则合二为一,结果中之存在一个3.JOIN .USINGJoin table2 using(columm_name)4.JOIN.ONJoin table2 on( table1.columm_name = table2.columm_name)例句Select * from emp join dept on (emp.deptno=detp.deptno );5.LEFT|RTGHT|FULL OUTER JOIN table2 on (table1.columm.name = table2.col
27、umm.name)=限定查询复习时间 12/9/151.关系运算一个条件多个条件用 and or 链接范例 1 selec* from emp where sal=1500 and sal1200; 2.范围判断1)对数值有用 Between 最小值 and 最大值 范围判断2) 对日期同样适用 between01-12 月-1988 and 31-12 月-1988注意判断日期值的格式为dd-mm 月-yyyy3.判断是否为空 is(not)null空和零是不同的概念 ,4.指点范围判断 IN (数值 1,数值 2,数值 3)范例 select * from emp where empno in (7369.7566,7799)注意 在 in 中有 null 不影响查询结果但是在 not in 中有 null 则不返回任何结果5.模糊查询 Like 子句配合使用的匹配字符