、、一、、
1、登录dba用户:sqlplus / as sysdba,两个重要的服务:OracleService ORCL实例主服务,OracleOraDb11g_home1TNSListener监听服务。
2、oracle体系结构:数据库文件+实例(instance实例+dbfiles)
3、RAC(real application cluster);集群的好处:负载均衡;失败迁移。
4、逻辑概念:表空间,由多个数据文件组成,位于实例上,在内存中。
5、物理概念:数据文件,位于硬盘之上,后缀为DBF。
6、段-->区-->数据块-->磁盘块
7、修改密码:alter user 用户名 account unlock;(解锁),alter user 用户名 identified by 新密码;
8、select * from tab;数据字典,记录当前用户下的所有表。
9、desc 表名;查看表结构。
10、set linesize 140(设置每行宽度)或pagesize (设置页宽)。
11、null与表达式计算结果为空,可以使用滤空函数nvl(a,b),若a为null,结果为b,若a不为空,结果为a。
12、distinct,去重,作用域:整行(即查询后的每一条记录而非某一列)。
13、tip:select* 与select 列的区别:推荐写指定列,效率高。
14、若报错,可以使用“edit”或者“ed”调用记事本查看sql语句,再输入“/”执行。
15、输出计算表达式,显示当前日期:select sysdate from dual。伪表,伪列。
16、sqlplus与sql命令的区别:数据库需要与实例instance交互的:sql;本地不需要与实例交互的:sqlplus。“?topic”查看sqlplus指令。
、、二、、
1、between and闭区间,“”别名,‘’字符串,查询字符串时大小写敏感。
2、查询日期型:DD-MoN-Year,格式敏感,查看日期设置:select* from $nls_parameters;日期格式:NLS_DATE_FORMAT
3、修改日期格式:alter session set NLS_DATE_FORMAT='yyyy-mm-dd'。
4、查询为Null,不能使用=,!=,即columnname=null永远为假,正确使用:where xxx is/is not null。
5、多个条件时,怎么优化查询:多个条件先过滤右边的条件,and易假的放左边,or条件相反。
6、not in(10,20,null)永远为假,注意not in的集合不能有null。
7、like模糊查询:‘%’匹配任意多个字符,‘’匹配一个字符,转义:esacpe,select * from emp where ename like '%\%' escape '';指定‘\’为转义字符。
8、null总结:①null在表达式:结果为null,要用滤空函数nvl(a,b),若a为null,结果为b否则为a;②not in 的集合不能有null,否则一个记录也没有。③null不能使用=,!=,<>,永远为假。
9、order by 列名字|别名|查询结果集的序号,默认是升序asc,降序为desc。
10、多列排序原则:就近原则,注意:asc,desc的作用域是前一个字段,有null,null代表无穷大,排序默认排在最后,可以使用nullslast或者滤空函数nvl。
11、单行函数:只对一行进行变换,产生一个结果,可以没有参数,但必须要有返回值,如concat,nvl
12、字符函数:lower()小写,upper()大写,initcap()首字母大写。concat()字符连接(||),只支持两个参数。length()元素个数,lengthb()占用字节数,substr('',start,个数),start可正可负,instr('a','b')查找b是否在a中。lpad('hello',10,' ')左填充补位,用空格填充hello不够10的地方,rpad右填充补位。trim()去左右空格,中间不去;trim(c from str)去掉str首位为c的字符。replace(str,str1,str2)替换字符串。
13、数值函数:round(num1数,num2保留几位小数)四舍五入;trunc(num1数,num2保留几位小数)直接去掉不四舍五入;mod(num1,num2)取余,ceil()上取整,floor()下取整.
14、转换函数:
图片说明
字符转换格式:‘9’数字,‘0’零,'L'本地货币符号,'.'小数点,‘,’千位符:slect to_char(sal,'L9,999') from emp。
15、日期转换:可以将字符串转为date:to_date('1981-11-17','yyyy-mm-dd'),也可以将data转为字符串:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss "今天是" day')from dual。
16、日期函数:months_between(date1,date2)计算两个日期之间的月数,last_day()给定月份的最后一天,next_day(sysdate,'星期六')给定日期的下一个星期几。
、、三、、、
1、条件表达式:CASE expr WHEN xxx THEN return_expr1
[WHEN xxx THEN return_expr2
ELSE else_expr]
END
例如:
select empno,ename,job,sal "涨前工资",case job
when 'PRESIDENT' then sal+1000
when 'MANAGER' then sal+800
else sal+400
end "涨后工资"
from emp
/
2、decode函数:oracle特有:
DECODE(col|expression,search1,resullt1[,search2,result2.....][,default])
例如:decode(job,'PRESIDENT',sal+1000,'MANAGER',sal+800,400) "涨后薪水";
3、分组函数:max,min,avg,sum,count,可以用distinct修饰,分组函数有自动滤空功能,where之后不能使用分组函数。count()不滤空。
4、在select中出现的非组函数的列,必须在group by中出现。
5、having函数,对分组函数进行过滤。having与where的区别,若都能用的情况下,优先使用where先过滤后分组效率高。
6、多表查询:理论基础L笛卡尔积:全集的行数=表1的行数表2的行数,全集的列数=表1的列数表2的列数。N张表的连接条件至少是N-1。
7、外连接:要保留的字段在等号另一侧“(+)”。
8、自连接使用条件:1、数据都在一个表中2、数据不在同一行。自连接的弊端:数量级是平方地增长。
、、四、、、
1、子查询:select语句的嵌套使用,一个查询不能完成时使用。
2、可以在主查询的where,select,having,from后都可以放置子查询。
3、不能在group by和order by之后嵌套子查询。
4、单行子查询只能使用单行操作符,多行子查询只能使用多行操作符,多行操作符有IN ANY ALL=>可以使用分组函数转换成单行子查询。
5、一般先执行子查询(内查询),再执行主查询(外查询),但是相关子查询除外。
6、一般不在子查询你中使用order by,但是在top-N分析问题中必须使用order by。
7、并集union和union all的区别:union是集合有交集只保留一份,union all是保留全部。交集intersec 差集:minus。
8、注意:参与运算的各个集合必须列数相同,且列类型一致。采用第一个集合的表头作为最终使用的表头。(别名也只能在第一个集合上起)可以使用括号先执行后面的语句。
9、报表的例子:break on deptno skip 2;恢复:break on null;
select deptno,job,sum(sal) from emp group by deptno,job union
select deptno,to_char(null),sum(sal) from emp group by deptno union
select to_number(null),to_char(null),sum(sal) from emp;
图片说明
、、五、、、
1、sql语言类型:DML data manipulation language 数据操纵语言(select,delete,insert,update....);
DDL data definition language 数据库模型定义语言 (create,truncate...)
DCL data control language 数据库控制语言 (grant/revoke...)
2、插入:insert into table[(column,....)] values(value,[...]);value要与column对应,可以插入全部列。
3、“&”的作用:输入操作,直接替换。如:insert into dept values(&dpt,&dnm,'&loc')
4、批量新增数据:复制emp的表结构,利用1=2条件永远不会成立:create table new_emp as select
from emp where 1=2;批量插入10号部门的员工信息:insert into emp10 select* from emp where deptno=10;
5、更新数据update,对于更新操作,一般会有where条件,如果没有限制条件,更新的就是整张表。语法:update tablename set column=val1... where cond;
6、子查询规则和注意事项在DML语句中都适用。
7、delete删除:语法delete from tablename where cond... delete不会删除表
8、事务的相关概念:若干个操作指令的集合(DML),事务特点:要么一起成功,要么一起失败(银行转账)原子操作。commit/rollback
9、事务开启的标志:提交结束:显示提交commit,隐式提交执行DDL正常退出(quit);回滚结束:显示回滚rollback,隐式回滚异常退出,掉电,宕机。
10、事务的4大特性(ACID):原子性(Atomicitity)、一致性(consistency)、隔离性(Isolation)、持久性(Durability)
11、脏读:读取未提交数据。A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。如银行转账与取款业务,取款时发生错误回滚。
12、不可重复读(前后多次读取,数据内容不一致):对于事务A,B,事务A读取了一个字段,然后事务B更新了该字段,之后事务A再读同一字段,值就不同了也就是值不重复了。
13、幻读:前后多次读取,数据总量不一致。事务A从一个表中统计一个字段,事务B在该表中插入了一些新行,之后事务A再读同一张表,会多出几行。
14、不可重复读和幻读到底有什么区别呢?
(1)不可重复读是读取了其他事务更改的数据,针对insert与update操作
解决:使用行级锁,锁定该行,事务A多次读取操作完成后才释放该锁,这个时候才允许其他事务更改刚才的数据。
(2)幻读是读取了其他事务新增的数据,针对insert与delete操作
解决:使用表级锁,锁定整张表,事务A多次读取数据总量之后才释放该锁,这个时候才允许其他事务新增数据。
15、四个隔离级别:(1)read uncommitted 读未提交数据;(2)read commited 读已提交数据;(3)repeatable read可重复读;(4)serializable 序列化,串行化,查询也要等前一个事务结束。sql99为(1),oracle默认级别是(2),支持2,4;mysql默认级别3,都支持。
图片说明
16、控制事务,保存点(savepoint)可以防止错误操作影响整个事务,方便进行事务控制。
17、delete和truncate的时效性:delete是逐条删除数据,truncate是先摧毁表,再重建。当数据量小的时候,delete更快,当数据量大的时候,truncate更快。delete会产生碎片,truncate不会产生碎片。delete不会释放空间,truncate会释放空间。delete可以回滚,truncate不可以回滚。
18、runum行号:永远按照默认顺序生成,只能使用<,<=符号,不能使用>,>=符号。
19、多表查询与子查询都可以解决时,哪个更好?多表查询(以空间换时间);一般和数据交互的次数越少越好。set feedback on/off;set timing on/off;
、、六、、、
1、管理表。创建表数据类型:varchar2、char/number、date、long、clob、blob、bfile(存储外部去文件的二进制数据)、RowID行地址。
2、表空间权限:create table t1(id number(4),tablename,varchar2(30),hiredate date default sysdate);
3、修改表:增加一列:alter table t1 add email varchar2(30);
4、重命名列:alter table t1 rename column email to address;
5、修改字段属性:alter table t1 modify email varchar2(40);
6、删除列:alter table t1 drop column email;
7、重命名表:rename t1 to t1;
8、删除表:drop table t2;oracle有回收站机制(show recyclebin),flashback table t2 to before drop; 闪回表。
9、不经过回收站:drop table t1 purge;清空回收站:purge recyclebin
10、表的约束:(1)主键,唯一非空,primary key;(2)外键references (3)唯一性unique;(4)检查:如男/女,check(5)非空 not null。
11、例如:create table student(sid number(4)(constraint) stuudent_pk primary key,sname varchar2(20) not null,sex varchar(20) check(sex in ('男','女')),sal number(4) check(sal>10001),deptno number(2) references dept(deptno) on delete cascade);
12、外键references 指定参数:on delete cascade:级联删除子表引用记录。on delete set null:父表删除时,先把子表中对应的外键值置为空,再删除父表。多数情况下使用set null方法,防止子表列被删除,数据出错。推荐使用的外键方式:默认先删除子表,再删除主表。
13、查看约束:select constraint_name,constraint_type,search_condition from user_contraints where table_name='STUDENT';
、、七、、、
1、数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数、触发器,包,包体,数据库链路(datalink)快照
2、序列:给主键字段使用可以理解为数组,默认从[1]开始,长度20
3、创建序列:create sequence myseq;删除序列:drop sequence mysql;
4、使用:insert into dept values(myseq.nextval,myseq.nextval||'name');
5、什么情况下主键不连续:一个序列多个表使用,数据删除,执行rollback序列不进行回滚,因其在实例中。
6、视图:从表中抽出的逻辑上相关的集合。(1)视图基于表(2)视图是逻辑概念(3)视图本身没有数据。
7、创建视图:create view empincomeview as select .....
8、注:若出错提示权限不足,因为创建视图需要“create view”的权限,默认scott没有该权限,加之:(1)使用管理员登录sqlplus / as sysdba(2)给scott用户增加权限;grant create view to scott;
9、视图本身没有数据,逻辑概念,数据依赖于表。作用:简化复杂查询,隔离数据访问。
10、同义词:给对象取别名。作用:简化数据查询,隔离数据访问。
11、有的用户要访问其他用户的表如:scott访问hr表下的emplyoees表;(1)登录hr给scott授权:grant create sysnonym employees for hr.employees。即可以用employees代替hr.employyes。删除同义词:drop sysnonym xxxx。
12、索引。占用空间,需要权限。作用:提高查询效率,有序。通过索引,确定行地址(rowid)通过地址获得数据。
13、语法:create index indexname on tablename (columnname);
14、索引一旦创建,由oracle自行维护,默认btree索引(位图索引),删除索引:drop index indexname;使用:在查询条件里有索引的条件。
15、下列情况可以创建索引:(1)列中数据值分布范围很广(2)列经常在where子句或连接条件中出现(3)表经常被访问且数据量大,访问的数据大概占数据总量的%2-4%
16、下列情况不要创建索引:(1)表很小(2)列不经常作为连接条件或出现在where子句中(3)查询的数据大于2%-4%,表经常更新。
17、oracle认证的级别:oca、ocp、ocm