1.外连接:
a.左外连接:当where e.deptno=d.deptno不成立的时候,等号左边的表任然被包含
写法:where e.deptno=d.deptno(+)
b.右外连接:当where e.deptno=d.deptno不成立的时候,等号右边的表任然被包含
写法:where e.deptno(+)=d.deptno
2.自连接不适合操作大表
3.层次查询:
select levle(伪列),empnoemp connect by prior empno=mgr start with mgr is null order by 1;
4.子查询解决的问题:不能一步求解
5.子查询注意的事项:
a.可以在主查询的where select having from后面放置子查询
b.不可以在group by中放置子查询
c.强调from后面的子查询
d.主查询和子查询可以不是同一张表:只要子查询返回的结果,主查询可以是使用即可
e.一般不在子查询中使用order by;但在TOP-N分析问题中,必须对子查询排序
f.一般先执行子查询,在执行主查询;但相关子查询例外
g.单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
6.在select中使用子查询
select empno,ename,(select job from emp where dentno=10) from emp;
在having后面放置子查询
select deptno,min(sal) from emp group by deptno having min(sal)>(select min(sal)
from emp where deptno=10)
7.两张表查询: 理论上,尽量使用多表查询
8.当行子查询:当子查询中查处的的是空,那么主查询查询出来的也是空
9.多行子查询:
any和集合中任意一个值做比较,all和集合中所有值做比较
10.not in中不能包含空的集合,in中就可以
11.并集:union/union all 交集:intersect 差集:minus
12.集合注意事项:
a.参与运算的各个集合必须要列数相同,且类型一致
b.采用第一个集合的表头作为最后一个表头
c.必须在最后一个几个使用order by
e.可以使用()定义先后秩序
13.尽量不要使用集合运算
14.打开sql执行的时间
set timing on
15.关于行号:
a.rownum永远是按照默认的循序生成
b.rownum只能使用<,<=;不能使用>,>=
分页语句
select * from
(select rownum r,empname sal from
(select * from emp odeber by sal desc) e1
where rownum<=8) e2 where r>=5;
16.练习:查询本部门大于平均薪水的员工
select e.empno,e.ename,e.sal,d.avgsal
from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d where e.deptno=d.deptno and
e.sal>d.avgsal
17.练习:查询1981,1982,1983的员工数
select count(*) total,sum(decode(to_char(hiredate,"yyyy"),"1981",1,0)) "1981" from emp;
18.SQL的类型
a.DML(Data Maipulation Language数据库操作语言):select insert update delete
b.DDL(Data Definition Language数据库定义语言):create alter drop truncate
c.DCL(Data Control Language 数据控制语言):grant revoke
19.批处理:
将部门为10的员工一次性插入新的表中:
insert into sale_res(id,ename) select employee(id,ename) from deptno=10
20.海量拷贝数据
a.可以使用数据泵
b.可以使用SQL*Loader
c.可以使用外部表
21.数据的完整性:指的就是表上的约束
22.delete和trucate的区别:
a.delete逐条删除,truncate先摧毁 再重建
b.deleteshDML(可以回滚),truncate是DDL(不可以回滚)
c.delete不会释放表空间,truncate会释放表空间
d.delete会产生碎片,truncate就不会产生碎片
e.delete可以闪回,truncate不可以
闪回:表示可以commit之后可以闪回
f.在orcale中delete比较快,truncate速度慢,mysql则相反
23.去掉碎片:
a.alter <表名> move
b.导出 导入
24.set feedback off --不打出回显信息
25.导入sql语句:@d:\a\test.sql
26.Orcale事务的标志
a.开始标志:事务中的第一条DML语句
b.结束标志:提交 : 显示 commit
隐式 正常退出exit
DDL语句
回滚:显示 rollback
隐式:非正常退出,掉电,宕机
27.回滚点:
savepoint a;--设置回滚点
rollback to savepoint a;--回滚到事务点a
28.orcale事务的隔离级别:3个
set transaction read only
29.rowid是Orcale数据库的伪列,是列的地址
30.create table emp10 as select * from emp where 1=2 --只想拷贝表的结构
31.修改表:
a.追加新的列:
alert table test add photo blob;
b.修改一个列:
alert table test modify name varchar2(40)
c.删除列:
alert table test drop column photo.
e.修改列名
alert table rename colunm name to username
f.重命名表
rename test1 to test2
32.drop表不是真的删除,而是到Orcale的回收站
33.查看回收站:show recyclebin 清空回收站: purge recylebin
34.select * from "<回收站表的别名>"可以查看回收站的表
35.管理员是没有回收站的
conn sys/password@192,168.1.1:1521/orcal as sysdba--切换到管理员身份
36.check 约束
gender varchar2(2) check(gender in('男',''女)),
sal number check(sal>0)
37.子表的外键不许是父表的主键
38.orcale的级联删除
on delete cascade
on delete set null
39.给约束取别名:
sal number constraint sal_name check(sal>0)
40.外键约束
deptno number constraint student_fk_references dept(deptno) on delete set null
2016.2.8 11:12
大年初一