上一主题下一主题
«12»Pages: 1/2     Go
关键字
主题 : [转贴]马士兵oracle视频学习笔记[pl/sql之前]
中金在线商城计划
级别: 终身会员


UID: 27150
精华: 0
发帖: 875
威望: 2797 点
学点: 1663 点
贡献: 29 点
好评: 0 点
学币: 58 个
注册时间: 2008-07-29
最后登录: 2018-03-01
楼主  发表于: 2008-10-05 09:13||

0 [转贴]马士兵oracle视频学习笔记[pl/sql之前]

管理提醒: 本帖被 amsizhuang 从 Oracle数据库学习 移动到本区(2008-10-09)
马士兵oracle视频学习笔记-pl/sql之前 F]O`3 e=!  
这是我看马老师的oracel视频时所****的笔记,pl/sql部分已经贴出,这是之前部分。其中有些东西,是我 @Md/Q~>  
`,< B Cu  
自己加上的,个人觉得比较重要。希望对大家有帮助 I3L<[-ZE  
------------------------------------------------------------------------------------------- T4Uev*A  
-------------------- e8a+2.!&\  
url访问:http://localhost/isqlplus Z"xvh81P  
解锁用户:alert user scott account unlock PO: { t  
用系统管理员账号登陆数据库:conn sys/sys as sysdba W a Rw05r  
conn scott/tiger 或者connect user/pwd 切换用户 &jJL"gq"  
ed或者edit//打****一个缓冲文件 rpha!h>w1%  
操作回滚:rollback,一旦提交则不可回滚; ~Fcm[eoC  
数据操纵语言dml,数据定义语句ddl,数据控制语言dcl m.rmM`  
V~3a!-m\  
显示表结构:desc emp _ ]ip ajT  
--单行注释 l ukB8  
/* M'O <h  
*/多行注释 P/eeC"  
SQL>@d:\student.sql //执行sql文件 cOJo3p;&  
-------------------------------------------------- CY5Z{qiX  
--创建雇员表emp &K#M*B ,*p  
create table emp b2Fe<~S{  
( %J?xRv!  
empno number(4) not null ,--员工号 ?);v`]  
ename varchar(10),--员工姓名 *w\W/Y  
job varchar(9),--工种 YK'<NE3 4  
mgr number(4),--所属经理编号 g*_&  
hiredate date,--入职日期 83_h J  
sal number(7,2),--薪水 kgP0x-Ap  
comm number(7,2),--奖金 45c$nuZ  
deptno number(2),--部门号 6A-|[(NS  
primary key(empno) +I|vzz`ZVr  
); EV%gF   
--创建部门表dept \~$#1D1f  
create table dept ;*Et[}3  
( kn 4`Fa;)O  
deptno number(2) not null ,--部门号 C_JNX9wv  
dname varchar(14),--部门名称 0S!K{xyR  
loc varchar(13),--部门位置 @RKryY)  
primary key(deptno) fIU#M]Xx  
); S4z;7z(8+  
--创建工资等级表salgrade %P|/A+Mg"  
create table salgrade  ZBp/sm  
( ?CPahU  
grade number not null ,--等级 <PH #[dH  
losal number,--最低薪水 on `3&0,.  
hisal number,--最高薪水 )3EY;  
primary key(grade) 2^ nxoye  
); @*( (1(q  
--------------------------------------------------------------------- z<?)Rq"  
select ename,sal*12 from emp; %IWPM"  
select 2*3 from emp; }K|oicpUg  
select 2*3 from dual;--计算表达式 h S&R(m  
select sysdate from dual;--获取系统当前时间 aqk!T%fg  
----------------------------------------------------------------------- 8{sGNCvU  
--字段取别名 vl:KF7:#m  
select ename, sal*12 anuual_sal from emp;--取别名 uK Hxe~  
select ename, sal*12 as anuual_sal from emp;--取别名 }o`76rDN  
select ename, sal*12 "anuual sal" from emp;--取别名,可以显示空格,保持大小写 4|?;TE5  
------------------------------------------------------------------------------- jNk%OrP]  
--连接符 ZD{LXJ{Vm  
select ename||'aa''aa' from emp;--"||"连接符号,两个单引号表示一个单引号 *$g-:ILRuZ  
----------------------------------------------------------------------------- &D*b|ilvc  
--distinct,不重复 oCz/HQoBk  
select distinct deptno,job from emp;--先查询,再排除重复记录 &tj!*k'  
------------------------------------------------------------------------------ Qvhl4-XjZa  
--between,范围之内 zTU0HR3A  
select * from emp where sal between 800 and 1500;--between相当于>= and <= Gk6iIK  
-------------------------------------------------------------------------------- 6=Otq=WH  
--null,空 PEZ!n.'S  
空值是指不可用来分配的值 5r ^ (P  
空值不等于空或空格 "^GGac.  
任何类型的数据都有空值 F:S}w   
空值相加任何数据还为空 IH+|}z4N?>  
select ename,sal from emp where comm=null; --没有记录,没有实际用处 0o&5 ]lEe  
select ename,sal from emp where comm is null; --为空,有记录 _H@DLhH|=  
select ename,sal from emp where comm is not null;--不为空 Z *x'+X  
------------------------------------------------------------------------- yJIscwF  
--in,在一个枚举的范围内 {+>-7 9b  
select ename,sal from emp where sal in(800,1500,1300); Iu=(qU  
select ename,sal from emp where sal not in(800,1500,1300); CU!Dhm/U  
-------------------------------------------------------------------------- o ^uA">GH  
--系统默认的日期格式 y?3; 06y|  
select ename,hiredate from emp where hiredate>'20-2月 -81'; `Urhy#LC  
-------------------------------------------------------------------------- _|`S3}q|d  
--通配符,"_"匹配一个字符,"%"匹配任意的字符串 S,8e lKH4  
select ename,sal from emp where ename like '%a%'; pd$[8Rmj_  
select ename,sal from emp where ename like '_a%'; UJ2U1H54h  
select ename,sal from emp where ename like '%\%%';--系统默认的转义字符为"\" GTHt'[t@;  
select ename,sal from emp where ename like '%$%%' escape '$';--escape,指定转义字符 MF'JeM;H  
-------------------------------------------------------------------------------------- gs`q6 f%(  
--order by,先查询,后排序,desc:降序,asc:升序(系统默认) /PKNLK  
select * from dept order by deptno desc; J<lW<:!3]  
select * from dept where deptno<>10 order by deptno asc; M"L=L5OH-  
select ename,sal,deptno from emp order by sal desc,deptno asc;--先按工资降序排列,工资相同的 CTmT@A{  
~"A0Rs =  
列,再按升序排列 nO-#Q=H,  
--------------------------------------------------------------------------------------- 0> \sQ,T  
--单行函数 Q,E o mt  
--lower(),将字符串转化为小写 t_1L L >R  
select ename from emp where lower(ename) like '%y%'; !8 b ^,  
select ename from emp where ename like '%y%' or ename like '%Y%'; N2o7%gJw  
--upper(),将字符串转化为大写 rvM{M/4  
select ename from emp where upper(ename) like '%Y%'; s>c=c-SP.  
--substr()字符串截取 ~}Pfu  
select substr(ename,1,3) from emp;--从ename中的第一个字符****始截取三个字符 FP>2C9:d  
--chr(),将数字转化其对应的ascii码字符 N$tGQ@  
select chr(65) from dual; ;9#KeA _  
--ascii(),将对应的字符转化为其ascii码对应的数字 !<F3d`a  
select ascii('A') from dual; \b>] 8Un"  
--round()四舍五入,默认精确到各位 E?@m?@*/  
select round(23.652) from dual; G!yP w:X  
select round(23.652,1) from dual; wuo,kM  
select round(23.652,-1) from dual; [D1Up  
--to_char()将数字或日期转化为字符串 \{YU wKK/A  
select to_char(sal) from emp; qg$ <oL@~~  
select to_char(sal,'$999,999,999.99') from emp;--将sal,安装相应的格式转化为字符串 {4PwLCy  
select to_char(sal,'L999,999,999.99') from emp; 2KZneS`  
select to_char(sal,'L000,000,000.00') from emp; E*lxVua  
$:美元,L或者l:本地货币 1.>m@Slr>  
select to_char(hiredate) from emp; SS2%q v  
select to_char(hiredate,'yyyy-mm-dd hh:mi:ss') from emp; C_Wc5{  
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from emp; "Y.y:Vv;  
--to_date(),将当前固定格式的字符串转化为日期 2A!FDr~cdT  
select ename,hiredate from emp where hiredate>=to_date('2008-09-03 00:00:00','yyyy-mm-dd phz&zl D  
5-A\9UC*@  
hh24:mi:ss'); Z30A{6}  
--to_number(),将当前的固定格式的字符串转化为数字 D/' dTrR  
select sal from emp where sal>to_number('$1,050.00','$9,999.99'); J~- 4C)  
--nvl(),对为空的字段进行**** }K9H^H@r!  
select ename,sal*12+nvl(comm,0) from emp;--不会空,则加comm,为空则加0; 6w77YTJ  
------------------------------------------------------------------------------- ##ANrG l  
--组函数 :zR!/5  
--max():最大值,min():最小值,****g():平均值,sum():求和,count():统计记录数 @o.I;}*N  
select max(sal) from emp; sR8"3b<qA  
select min(sal) from emp; #A.@i+Zv  
select ****g(sal) from emp; ?h2}#wg  
select sum(sal) from emp; paMa+jhQQ  
select count(*) from emp; XX~,>Q}H=  
select count(comm) from emp;--不统计字段为空的记录 ,u!sjx  
--group by分组 $od7;%  
select deptno,****g(sal) from emp group by deptno; :hA#m[  
select deptno,job,****g(sal) from emp group by deptno,job;--deptno,job相同的记录为一组 y?# Loe  
------------------------------------------------------------------------------------------- g,Y/M3>(  
tnIX:6  
--- .|=\z9_7S8  
--h****ing,对分组进行过滤 . ]M"# \  
select deptno,****g(sal) from emp group by deptno h****ing ****g(sal)>1000; t g/H2p^Y  
------------------------------------------------------------------------------------------- O H7FkR  
N uI9iU  
------ jFb?b6b  
select deptno,****g(sal) from emp (iGTACoF  
where sal>1000 3M=  
group by deptno .sA.C] f  
h****ing ****g(sal)>1200 =Runf +}  
order by ****g(sal) asc; < 7$1kGlA  
Vz[C=_m  
9ll~~zF99|  
--case when,分支 H:\k}*w  
统计empno<1003,empno<1005,和其他的记录的个数 6zn5UW#q  
select count(*), `,0}ZzaV&  
(case when empno<1003 then 1 ZG@q`<:j  
when empno<1005 then 2 3mni>*q7d  
else 3 |Ds=)S" K  
end) no :i7;w%B  
from emp &~w}_Fjk  
group by BPHW}F]X  
( ;=UsAB]  
case when empno<1003 then 1 8i,K~Bu=  
when empno<1005 then 2 iyog`s c  
else 3 -{+}@?  
end *9i{,I@  
); PxE3K-S)G  
---------------------------------------------------------------- >OK^D+ v"j  
--sql,1999新标准 IIqUZJ  
select ename,sal from emp &VcV$8k  
join (select max(sal) max_sal,deptno from emp group by deptno) t Q3SS/eNP  
on (emp.sal = t.max_sal and emp.deptno=t.deptno); fxIf|9Qi`  
--交叉连接 E.>4C[O  
select ename,dname from emp cross join dept; 'Z|mQZN  
--等值连接 m#F`] {  
select * from emp,salgrade where emp.sal between salgrade.losal and k $7Jj-+~  
salgrade.hisal; VD\=`r)nT  
select ename,dname from emp join dept on(emp.deptno=dept.deptno); cs'{5!i]  
select ename,dname from emp join dept using(deptno); cFWc<55aX6  
--非等值连接 a@*\o+Su  
select ename,dname,grade from Xs?o{]Fe  
emp e join dept d on (e.deptno=d.deptno) 5 u0HI  
join salgrade s on (e.sal between s.losal and s.hisal) $tS}LN_!  
where ename not like '_A%'; ]$_NyAoBb  
--自连接 ]g&TKm  
select e1.ename ,e2.ename from emp e1 GM<-&s!Uj  
join emp e2 on (e1.mgr=e2.empno) N.{D$"  
--外连接 alvrh'51  
select e1.ename,e2.ename from emp e1 left join emp e2 on(e1.mgr=e2.empno); vZoaT|3 G]  
select e1.ename,e2.ename from emp e1 right outer join emp e2 on(e1.mgr=e2.empno); veh<R]U  
select e1.ename,e2.ename from emp e1 full outer join emp e2 on(e1.mgr=e2.empno); ?I@W:#>o  
--------------------------------------------------------------------------------------- xZv#Es%#  
--导出导出数据 ZQ0F$J)2~  
drop user liuchao cascade;--****用户liuchao ;d9QAN&0}  
exp--导出当前用户的表结构,和数据,在cmd中执行 8ITdSg  
--创建一个用户liuchao,密码liuchao,数据存在默认的表空间users,在表空间users分配大小为10M的 E\,-XH  
e) O 4^#i  
空间 >oe]$r  
create user liuchao identified by liuchao default tablespace users quota 10M on users *`RkTc G  
grant create session,create table,create view to liuchao;--授权liuchao用户可以连接数据库,创 ]P?vdgEM&  
5[u]E~Fl}  
建表,创建视图 f`=-US  
imp--导入表结构 ox (%5c)b|  
create table emp2 as select * from emp;--****emp表的数据到新创建的表emp2 /~f'}]W  
------------------------------------------------------------------------------------------- J6aef ^>  
%-0t?/>  
---- 7x4PaX(  
--rownum,列号:每一个表都默认有一个显示列号的字段rownum qeZ? 7#Gf  
select rownum,emp.* from emp; KMjhZap %  
select rownum,ename from emp where rownum<=3; `^Em&6!!  
--运用虚列选出第n-m条的记录(效率较高) 7VFLJr t  
select * from hFl^\$Re  
( Fun^B;GA:  
select rownum row_num,emp.* from emp order by empno ';=O 0)u  
) %Qdn  
where row_num between 2 and 3; d4c8~L H-  
--利用分析函数:row_number() over ( partition by col1 order by col2 )选出第n-m条的记录 )f<z% :I+Z  
select * from ( 8q}q{8  
select row_number() over (order by empno) no,emp.* from emp  O+Y6N  
) c|@bwat4  
where no between 2 and 3; ~AT'[(6  
----------------------------------------------------------------------------------------- (c &mCJN  
--列约束条件 HqT#$}rv  
create table stu 6MMOf\   
( I75DUJqy]  
id number(6) primary key,--主键约束 EGF '"L  
name varchar2(20) constraint stu_name_nn not null,--不为空约束 l3I:Q^x@  
sex number(1) check(sex in(0,1)),--检查约束 U0N 60  
age number(3), X LOh7(  
sdate date, 'Xq| Kf (  
grade njmber(2) default 1,--默认约束 X!dYdWw*m  
class number(4) references class(id),--外键约束 ]>nk"K!%  
email varchar2(50) unique--唯一约束 f5VLw`m}.8  
) RO/FF<f  
wHMX=N1/  
create table stu \$T(t/$9  
( *VhL\IjN]  
id number(6), "8jf81V*  
name varchar2(20), 2?ez,*-[  
sex number(1), Oso#+  
age number(3), G.a bql  
sdate date, YvyNHW&  
grade number(2) default 1, JL }_72gs  
class number(4) , c>:wd@w  
email varchar2(50), T{ XS")Vw  
constaint stu_id_pk primary key(id), E GU 0)<  
constaint stu_name_email_uni unique(email,name) =BAW[%1b  
constaint stu_class_fk foreign key(class) ex (.=X 1  
) EF}\brD1  
--添加,****约束条件 [H^z-6x:0  
alert table stu add(addr varchar2(100)); ']z{{UNUN  
alert table stu add drop addr; V>-e y9Q\  
alert table stu modify(addr varchar2(150)); &n }f?  
alert table stu drop constraint stu_class_fk; `l){!rg8IC  
alert table stu add constraint stu_class_fk foreign key(class) reference class(id) ; e+ BQww  
----------------------------------------------------------------------------------------- ][h%UrV  
数据字典表的存储表(dictionary) Yz"#^j}Kg  
desc dictionary /saIs%(fU  
select tablename from dictionary; f:|1_j  
常用数据字典表(user_tables,user_views,user_constraints) /dQl)tL  
desc user_tables; Ed,~1GanY  
select table_name from user_tables; JZ*/,|1}EC  
select view_name from user_views; Gm.T;fc:  
select constraint_name from user_constraints; j9 4=hJVKi  
select constraint_name,table_name from user_constraints; \[_t]'p  
select index_name from user_indexes; "ZoRZ'i  
---------------------------------------------------------------- =eXU@B  
--索引(提高对经常访问的字段读取速度) cr?Q[8%t1  
create index idx_stu_email on stu(email);--创建索引 RD'Q :W  
drop index idx_stu_email;--****索引 5Y'qaIFR  
--视图(就是一个子查询) (%e .:W${  
create view v$_stu as select id,name,age from stu;--创建视图 D4-ifsP  
desc v$_dept_****g_sal_info;--显示表结构中的所有视图 E+R1 !.  
----------------------------------------------------------------------------- ith 3 =`3  
--序列(一般用于作为主键) foF({4q7b^  
create table article I{9QeR I  
( aS{n8P6vW  
id number, k,E{C{^M  
title varchar2(1024), 2"kLdD  
cont long bv9i*]  
); otl0J Ht*+  
create sequence seq;--创建序列 RO VW s/  
drop sequence seq;--****序列 % X+:o]T  
start with 1;--从1****始 lhz{1P]s  
select seq.nextval from dual;查询下一个序列值 YpZ+n*&+  
insert into article values (seq.nextval,'a','b');--将虚列作为主键 H*QIB_  
--------------------------------------------------------------------- .TMs bZ|j  
--思考题 5uNJx5g  
部门平均薪水的等级 uK#4(eY=W  
部门平均的薪水等级 C'+YQ]u  
哪些人是经理 !M]uL&:  
不用组函数求最高薪水 Lh"<XYY  
平均薪水最高的部门编号与名称 2LL'J7  
平均薪水的等级最低的部门名称 c74.< @w  
比普通员工的最高薪水还要高的经理人名称 1N^[.=  
求部门经理人中平均薪水最低的部门名称 *,)Md[  
求比普通员工的最高薪水还要高的经理人名称 @ ZwvBH  
求薪水最高的前五名雇员 `PdQX.wN  
求薪水最高的第六名的到十名雇员 FQ2  
-------------------------------------- VT%NO'0  
--三范式 P *Uwg&Qz)  
第一范式:要有主键,列不可分 V _/%b)*  
第二范式:不能存在部分依赖, wj<6kG  
第三范式:不能存在传递依赖 %@ODs6 R0  
[/post]
本帖最近评分记录:
  • 威望:+5(dm0412)
  • 中金在线商城
    级别: 终身会员

    UID: 767
    精华: 0
    发帖: 501
    威望: 1613 点
    学点: 953 点
    贡献: 15 点
    好评: 1 点
    学币: 0 个
    注册时间: 2008-05-14
    最后登录: 2013-07-14
    沙发(1楼)  发表于: 2008-10-05 09:47||

    谢谢啊
    馨月
    级别: 北风资深评论员

    UID: 442
    精华: 0
    发帖: 1456
    威望: 5960 点
    学点: 323 点
    贡献: 23 点
    好评: 0 点
    学币: 0 个
    注册时间: 2008-05-10
    最后登录: 2014-09-11
    板凳(2楼)  发表于: 2008-10-14 15:52||

    看看先
    主席语录第272页写道:zhou_xun同志是个好同志。
    级别: 北风爱好者

    UID: 72955
    精华: 0
    发帖: 7
    威望: 7 点
    学点: 14 点
    贡献: 0 点
    好评: 0 点
    学币: 0 个
    注册时间: 2008-11-11
    最后登录: 2010-04-09
    地板(3楼)  发表于: 2008-11-12 11:44||

    谢谢啊
    级别: 北风高级技术员

    UID: 13103
    精华: 0
    发帖: 312
    威望: 486 点
    学点: 39 点
    贡献: 0 点
    好评: 0 点
    学币: 0 个
    注册时间: 2008-06-25
    最后登录: 2016-11-09
    地下室(4楼)  发表于: 2008-11-26 12:41||

    多谢分享  ****下来看看
    小琦
    级别: VIP四级

    UID: 73876
    精华: 0
    发帖: 240
    威望: 555 点
    学点: 724 点
    贡献: 16 点
    好评: 0 点
    学币: 6 个
    注册时间: 2008-11-12
    最后登录: 2015-10-01
    下水道(5楼)  发表于: 2008-12-12 20:50||

    多谢分享
    级别: VIP六级

    UID: 86565
    精华: 0
    发帖: 80
    威望: 326 点
    学点: 26 点
    贡献: 0 点
    好评: 0 点
    学币: 0 个
    注册时间: 2008-12-01
    最后登录: 2016-07-02
    6楼  发表于: 2009-03-05 18:31||

    谢谢分享

    谢谢 U|QLc   
    学习中
    级别: VIP六级

    UID: 86565
    精华: 0
    发帖: 80
    威望: 326 点
    学点: 26 点
    贡献: 0 点
    好评: 0 点
    学币: 0 个
    注册时间: 2008-12-01
    最后登录: 2016-07-02
    7楼  发表于: 2009-03-05 18:35||

    2008-10-09

    aafafafaf
    级别: 北风爱好者

    UID: 124718
    精华: 0
    发帖: 4
    威望: 4 点
    学点: 12 点
    贡献: 0 点
    好评: 0 点
    学币: 0 个
    注册时间: 2009-02-24
    最后登录: 2009-04-06
    8楼  发表于: 2009-04-04 18:29||

    顶一下了
    级别: 北风高级技术员

    UID: 130235
    精华: 0
    发帖: 104
    威望: 984 点
    学点: -2 点
    贡献: 0 点
    好评: 0 点
    学币: 0 个
    注册时间: 2009-03-07
    最后登录: 2010-05-20
    9楼  发表于: 2009-05-22 21:11||

        
    上一主题下一主题
    «12»Pages: 1/2     Go