尚学堂Oracle视频笔记全是我自己做的笔记,供大家一起分享和探讨:第一课:客户端1.Dos命令行下:sqlplus用户名:scott密码:tiger,sqlplusscott/tiger2.开始-运行-sqlplus图形版的SQLPLUS3.http://localhost:5560/isqlplusToad:管理PlsqlDeveloper第二课:更改用户1.sqlplussys/bjsxtassysdba2.alteruserscottaccountunlock;(解锁)第三课:table_structures1.desc表名//描述表2.select*from表名//查看表数据第四课:select语句1.selectename,sal*12annual_salfromemp;//annual_sal为sal*12的名称selectenamesal*12annualsalfromemp;双引号可以保持原大小写,并且中间可以加空格,不加全变为大写2.descdual,select2*3fromdual,dual是系统自带的一张空表,计算数据时可以使用该表3.任何含有空值的算术表达式的计算结果是空值4.selectename||salfromemp;5.selectename||'abcdefg'fromemp;6.selectename||'abcd''efg'fromemp;当字符串中含有单引号时,可用两个单引号代表一个单引号7.setlinesize200;--用于设定每行显示的宽度8.setpagesize30;--设置显示的页数9.selectsysdatefromdual;//显示系统时间第五课:distinct1.selectdistinctdeptnofromemp;//把deptno值重复的不显示出来2.selectdistinctdeptno,jobfromemp;//把deptno,job都重复的都不显示出来;第六课:where1.select*fromempwhereempno=10;2.select*fromempwhereempno10;//是不等于3.select*fromempwhereename='hebe';//字符串要加单引号;比较的按字母顺序4.select*fromempwheresal(not)between800and1500;//包含800和15005.select*fromempwherecommis(not)null;//为空值的表项查询6.select*fromempwhereename(not)in('smith','philip','jay');//显示值为'smith','philip','jay'的项7.select*fromempwherehiredate'20-2月1820';//20-2月1820后的时间8.select*fromempwhereenamelike'_A%';//-为一个字符,?为0个或1个,%为0个或多个,9.select*fromempwhereenamelike'_\%a%';系统默认转义符是\,可以自己指定转义符select*fromempwhereenamelike'_$%a%'escape'$';第七课:orderby1.select*fromdept;2.select*fromdeptorderbydeptdesc;(默认为asc)//desc为降序排列,asc为升序3.selectename,sal,deptnofromempwheresal2000orderbydeptnoasc,enamedesc;第八课:sql_function1.selectename,sal*12annual_salfromempwhereenamenotlike'_A%'andsal1500orderbysaldesc;2.selectlower(ename)fromemp;//把ename转换为小写值3.selectenamefromempwherelower(ename)like'_a%';//把ename的值第二个字母为A或a输出4.selectsubstr(ename,2,3)fromemp;从第二字符截,一共截三个字符。5.selectchr(65)fromdual;结果为A6.selectascii('a')fromdual;结果为657.selectround(35.572)fromdual;结果为368.selectround(35.572,2)fromdual;结果为35.579.selectround(35.572,-1)fromdual;结果为4010.selectto_char(sal,'$99,999.9999')fromemp;to_char函数主要用于对日期和数字格式化$16,000.000010.selectto_char(sal,'$0000,000.0000')fromemp;//结果$0016,000.000011.selectto_char(sal,'L99,999.9999')fromemp;人民币符号,L代表本地符号。12.selectbirthdatefromemp;显示为:BIRTHDATE---------------------22-3月-87改为:selectto_char(birthdate,'YYYY-MM-DDHH24:MI:SS')fromemp;//24制的没有24为12制的13.to_data函数selectename,birthdatefromempwherebirthdateto_date('1987-3-2211:22:33','YYYY-MM-DDHH24:MI:SS');不能直接写birthdate'1987-2-2211:22:33'会出现格式不匹配,因为表中格式为DD-MM月-YY,14.selectsalfromempwheresalto_number('$12,444.99','$99,999.99');15.selectename,sal*12+nvl(comm,0)from这样防止comm为空时,sal*12相加也为空的情况第九课:Groupfunction组函数1.selectmax(sal)fromemp;2.selectmin(sal)fromemp;3.selectto_char(avg(sal),'$999,999,999.99')fromemp;4.selectround(sum(sal),2)fromemp;5.selectcount(*)fromempwheresal1500;6.selectcount(comm)fromemp;7.selectcount(distinctdeptno)fromemp;第十课:Groupby语句1.selectavg(sal)fromempgroupbydeptno;2.selectdeptno,avg(sal)fromempgroupbydeptno;3.selectdeptno,job,max(sal)fromempgroupbydeptno,job;4.求薪水值最高的人的名称selectename,max(sal)fromemp;出错,因为max只能有一个值,但是等于max的值可能有好几个,不能匹配。selectename,max(sal)fromempbyename就可以可以写成selectenamefromempwheresal=(selectmax(sal)fromemp);Groupby语句应注意,出现在select中的字段,如果没有出现在组函数中,必须出现在Groupby语句中。第十一课:Having对分组结果筛选1.where是对单条记录进行筛选,Having是对分组结果进行筛选selectavg(sal),deptnofromempgroupbydeptnohavingavg(sal)2000;2.查询工资大于2000的雇员,按照部门编号进行分组,分组后平均薪水大于1500,按工资倒序排列selectdeptno,avg(sal)fromempwheresal2000groupbydeptnohavingavg(sal)1500orderbyavg(sal)desc;///////select-where-groupby-having-orderby////////第十二课:子查询1.select语句中嵌套select语句,求哪些人工资在平均工资之上.selectename,salfromempwheresal(selectavg(sal)fromemp);2.查找每个部门挣钱最多的那个人的名字.selectename,deptnofromempwheresalin(selectmax(sal)fromempgroupbydeptno)查询会多值.正确写法是:应把selectmax(sal),deptnofromempgroupbydeptno当成一个表,语句如下:selectename,salfromempjoin(selectmax(sal)max_sal,deptnofromempgroupbydeptno)ton(emp.sal=t.max_salandemp.deptno=t.deptno);第十三课:self_table_connectionselecte1.ename,e2.enamefromempe1,empe2wheree1.mgr=e2.empno;第十四课:SQL1999_table_connection1.selectename,dname,gradefromempe,deptd,sqlgradeswheree.deptno=d.deptnoande.salbetweens.losalands.hisalandjob'CLERK';这种写法没有把过滤条件和连接条件分开来,由于这个原因,sql1999标准推出来了.2.selectename,dnamefromemp,dept;(旧标准)selectename,dnamefromempcrossjoindept;(1999标准)3.selectename,dnamefromemp,deptwhereemp.deptno=dept.deptno;(旧)selectename,dnamefromempjoindepton(emp.deptno=dept.deptno)4.selectename,gradefromempejoinsalgradeson(s.salbetweens.losaland`s.hisal);5.selectename,dname,gradefromempejoindeptdon(e.deptno=d.deptno)joinsalgradeson(e.salbetweens.losalands.hisal)whereenamenotlike'_A%';6.selecte1.ename,e2.enamefromempe1joinempe2on(e1.mgr=e2.deptno);7.selecte1.ename,e2.enamefromempe1left(outer)joinempe2on(e1.mgr=e2.empno);8.selectename,dnamefromemperightouterjoindeptdon(e.deptno=d.deptno);9.selectename,dnamefromempefulljoindeptdon(e.deptno=d.deptno);第十六至二十三课:求部门平均薪水等级1.A.求部门平均薪水的等级selectdeptno,avg_sal,gradefrom(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)tjoinsalgradeson(t.avg_salbet