还剩44页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
尚学堂马士兵学习笔记一Oracle1三种不同的命令行的客户端Oracle需要了解的第一个sqlplus,当启动sqlplus需要让你输入,用户名口令字符串Sqlplus是Oracle的一个客户端,Oracle大多数的东西都是在命令行执行,输入用户名:scott口令:tiger,进入oracle命令行3个界面图形版界面,命令行界面,网页界面isqlplus:在浏览器地址栏输入http:〃
127.
0.1:5560/isqlplus/输入用户名scott口令tiger进入有一个著名的oracle客户端叫toadOracle还有一个客户端plsql develement命令行C\Docunents andSettingsMdninistratorsqlplus星期日月SQL*PlusRelease
10.
2.
0.
1.H-Production on22509:52:592007Copyright c1982,2805,Oracle.All rightsrescrued.向人用户名i scott降入口令:ERROR:先改册断口口令新里新入口令更改loRA-28001:the passwordhas expired怛接到braele Database10g EnterpriseEdition Release
10.
2.
0.
1.0-ProductionWith the Partitioning^OLAP and Data Mining options图形版界面:co••«
7.模糊查询使用like关键字,和通配符%表示0个或多个字符,_表示1个字符例子1查询名字中含有ALL的人员Select ename from emp where enamelike%ALL%’;例子2查询第二字母中含有A的雇员Select ename from emp where enamelike A%;例子3查询名字中含有%等通配符的数据时,使用转义字符\Escape自定义转移字符,系统默认的转义字符是\Select ename from emp where enamelike escape\Select ename from emp where enamelike‘%$%%escape使用它order by对数据进行排序例子L按照名字的升序进行排序Select ename,salfrom emp order byename;Select ename,salfrom emp order byename asc;用asc关键字指出按升序排列例子2按照雇员编号的升序排序Select ename,deptno from emp order by deptno;Select ename,deptnofrom emp order by deptno asc;例子3按照名字降序排列Select ename,deptnofrom emp order byename desc;例子4按照部门编号降序排列Select ename,deptnofrom emp order by deptno desc;例子5多个关键字排序,先按照部门编号升序排列,在再内部按照enamel降序排序SQL select enane saldeptno from enp order by deptnoasc»enane desc;ENAME SALDEPTNOMILLER130010KING S00010CLARK245010\SMITH80020SCOTT300920JONES297520FORD300020ADAHS110020UARD125030TURNER150030MARTIN12S030ENAME SALDEPTNOJAMES9S030BLAKE285030ALLEN30160已选择昭1常用SQL函数
1.Lower函数将字符串全部转换成小写例子1将雇员中名字含有A,或a,的人员全部显示出来Select ename from emp where enamelike/A%orename like%a%Select ename from emp where lowerenamelike;
2.Upper函数将字符串全部转换为大写例子2将雇员中名字含有‘A或a的人员全部显示出来Select ename from emp where upperenamelike;
3.substr函数例子1从第一字符开始共截3个子串Select substrHello,1,3from dual;HeiSubstr可以省略第三个参数例子2从第二个字符开始,截取到整个字符串结束Select sbustrename,2from emp;
4.Chr函数例子1求一个与某个ASCH码值对应的字符Select chr65from dual;
1.Ascii函数例子求一个字符的ASCH码值Select asciiAfrom dual;Select round
23.652from dual;24可以指定四舍五入到小数点后几位Select round
23.652,2from dual;可以用负数指定小数点前面几位Select round
23.652,-1from dual;20*
7.to_char用于将数字或日期转换成特定的字符串,Tochar有两个参数第一个参数需要进行转换的日期或数字第二个参数特定的转换格式,对于数字有一下几个格式可以指定9代表数字,若果该位没有数字则不进行显示,但对于小数点后面的局部仍会强制显示表一位数字,如果该位没有数字则强制显示0I——-——i-:_尊——I■显示美元符号
1.显示本地货币符号11显示小数点11显示千分位符号例子1select to_charsal,$99,
999.9999salary from emp where ename=ALLEN例子2select tochar sal,$00,
000.0000salary from emp where ename=ALLEN;对于日期to_char可以指定为下面的常用格式格式控制符含义YYYY、YY-----------------------------------------------------代表4位,2位数字的年份MM----------------------------------------------------用数字表示的月份M0N----------------------------------------------------月份的缩写对中文月份来说就是全称DD----------------------------------------------------数字表示的日DY----------------------------------------------------星期的缩写,对中文的星期来说就是全称HH
24、HH12--------------------------------------------------12小时或者24小时进制下的时间MI----------------------------------------------------分钟数ss秒数有了这些格式,就可以把日期自定义为任何格式例子1select to_charsysdate,YYYY-MM-DD-HH24:MI:SSfrom dual;2008-04-04|SQL select enane,salM2annual sal frow and sal enp800M2where enanenot likeby sal3order desc;EHAHE ANNUAL_SALKING60000;COTT36000FORD3660JONES
357001、把字段转换成小写SQL selectlowerenane fron enp;LOWERCENAMifiith♦lien riardjones krtin blake\:lai*k;cott kingturner iidamsLOUERENAMJanesford miller已选择行14SQL select enamc from emp2“here louet*enaire like*;EH AHEJARD1ARTIN JAMES
2、截子串substr ename,1,3从第一个开始截,截取3个字符SQLse lect;subst;i*enair»e,;3Fi*omempSUBSTRSMIQLLkJUNMAR BLASCOKI N1UR ADAISUBSTR己选择行,
143、把数字转换成相对应的字母SQL selectchr65from dual;
3、把字母转换成相对应的ascii码SQL selectA*from dual;ASCIIUA
4、四舍五入SQL selectround
23.652from dual;ROUND
23.652L___________24SQL selectround
23.652,2fi*on dual;KOUND
23.652,
223.65SQL selectround
23.652,1fFOR dual;,OUND23・
652.
123.SQL selectround
23.652»-1from dual;pOUND
23.652,-l
205、把数字或者日期转化成某种格式1)对数字《」TO_CHAR SAL$
800.0000$1,
600.0000$1,
250.0000$2,
975.0000$1,
250.0000$
29850.0000$2,
458.0gl$
3.
000.0930$5,
000.0000$1,
500.0000$
1.
10.0000TO_CHARSAL,一二$
950.0000对齐格式,格式化L本地货币符号SQL selectto_chai*sal^J L99,
999.9999*from enp;」TO CHAJKSALL99,
999.9萌辛Y
800.0000¥
1.
600.00*1,
250.
00002.
975.0000Y
1250.0000Y2,
850.0000X
2450.0000¥
3.
000.0000Y5,
000.0000二1,50M00《TO_CHAR SAL.L99,
999.9¥.他Y
950.0000肌阳
0.0X1,300,0000己选择行.14TO_CHARCSALJ L
00800.0*梁.萌萌¥
00800.0090Y
01600.8000Y
01250.0000^
02975.0000¥
81250.0000Y
02850.0000X
02450.0000300Y
05000.0000V
01500.
0000011.0000《供地.]o_CHAR SALJ L600¥
00950.0000Y
03000.B000Y
01300.R000己选择行142)对日期时间格式控制|SQL selectto_charhiredate,*VVVV-MM-DD HHM1SSfron enp;HO CHARHIREDATE.*V1980727712:00198L-02-2012:00198J-W2-2212:001981-04-M212:001981-09-2812:001981-0S-0112:001981-W6-M12:001987-04-1912:801981-11-1712:001981-09-0«12:001987-05-2312:00rTO_CHftKHIREDATE,JY萌1981-12-0312:00:001981-12-8312:601982-B1-2312:00:00己选择行,14HH12进制HH24:24进制QL selectto_charsysdatc•YVYY-HH-DD HHMI SSfrom dual;《」O-CHAR SYSDATEYY»■OB OBMB fllMV007-02-2502:46:01QL selectto_chorsysdate•Y¥¥¥-MM-DD HH24MI SS*from dual;《O_CHAR SYSDAIEJYY007-02-2514:46:14将特定的字符串转换成日期格式,这个函数有两个参数第一参数自定义的日期字符串第二参数指定这个字符串的格式例子1将1981年3月2日中午以后入职的雇员信息取出Select*from empwhere hiredateto_date1981-03-0212:00:00,YYYY-MM-DD HH12:MI:SS;*
9.to number函数讲指定的字符串转换成数字格式,这个函数有两个参数第一参数自定义的数字字符串第二参数指定这个字符串的格式例子1求薪水大于1200的员工信息Select*from empwhere salto number$1,
200.00,$9,
999.99;*
10.nvl函数用来处理空值,这个函数有两个参数第一参数字段名或表达式,如果这个参数值为null,就返回第二参数值,否则返回第一参数值例子求每个员工每年的年收入12个月的薪水+津贴因为comni的值为null,想要得到正确的结果,必须讲null值转换为0Select ename,sal*12+nvlcomm,0from emp;cvQL select ename hiredatefenp“herehiredateto_date*1981-2-2012:34:5kl TYYY-HM-DD HH24MI SS;#ENAME HIREDATE月ARD22-2-81JONES02-4-81月MARTIN28-9-81BLAKE月-8101-SCLARK09-6G-81月SCOTT19-4-87月XING UITURNER08-9-81ADAMS23-5-87月JANES B3T2FORD月83-12-111ENA HEHIREDATE月MILLER23T-82己选择行12QL select sal fron enp where sal
888.88;SAL160012502975125028502450300050001SU011RR950SAL30001300己选择行13月行出现曾於*QL selectsal f*OR enp“heresal$1,
250.00;electsal from enp where sal$
1.
258.001无效字符RA-00911QL selectsalfrow enp where salto_nunber$l
250.00,f$9,
999.991;SALF160029752850245039605000=矽1500X3601300己选择行9〉|SQL select ename sal*12♦nulconn0from emp;#ENA NESAL*12*HULCOHM,0SMITH9600ALLEN19500WARD15500JONES35700MARTIN16400BLAKE34200CLARK29400SCOTT36000KING60000TURNER18000ADAMS
13200.ENAM£SfiL*12*NULCOHH0AMES11400FORD36008MILLER15600一…重要,牢牢记住,一个都不能忘*
11.组函数包括5个函数
1.avg:求平均值
2.max求最大值
3.min求最小值
4.sum求总和
5.count求记录的数量例子1求薪水的总和、平均值、最大值和最小值Select sumsal,avgsal,max sal,min sal from emp;例子2求emp表中记录的数量Select count*fromemp;Count可以对单独字段使用,得到的是所有非空记录的数量例子3求comm字段中所有非空记录的数量Select countcommfrom emp;Count可以和distinct一起使用,得到所有唯一值记录的数量例子4求emp表中deptno唯一的数量Select countdistinct,deptno from emp;注意函数名不是在所有数据库中通用-in xOracle SQL・Plus:文件包)谓辑g)挖南选项箱助年
⑥同区土OracleSQL♦PLus文件9骗辑
⑥拽索
⑤选项帮助
⑥|星期日月SQL«Plus:Release
10.
2.
0.
1.0-Production on22509:5U:242007Copyright c1982,20Oracle.All rightsreserved.连接到Oracle Database10g EnterpriseEdition Release
10.
2.
0.
1.0-Production WiththePartitioning^OLAP andData MiningoptionsSQL s|氐JQL select naxsal fromenp;MAXSAL5000SQL select minsal fron enp;MINSAL800SQL selectavssal fromenp;AUGSAL MBIM■■孝20731429〉SQL selectto_char«ugsil99999999・99f ron enp;FTO_CHARAUG
10、
2073.21SQL selectroundavgsal2fron enp;#ROUNDAUGSAL,
22073.213QL selectsunsal fromenp;SUMSAL29025SQL selectcount*fron emp;COUNT*14SQL selectcount••fromenpwhere deptno-10;COUNT*3SQL selectcountenane fron enp;COUMTENAME14SQL selectcountconm from emp;COUHTCOhM4§QL selectcountdeptno fron emp;COUNTDEPTNO14SQL selectcountdistin|^t dcptnofronenp;COUNTDISTINCTDEPTNO3对表中的数据进行分组例子1计算每个部门的平均工资首先将现有数据按照部门进行分组,然后再计算每个组员工的平均薪水Select deptno,avgsal from emp group by deptno;例子2计算每个部门的最大工资Select deptno,maxsal from emp group by deptno;例子3按照部门,和职位的最大薪水进行分组Select deptno,job,maxsal from emp group by deptno,job;使用group by的规律出现在select列表中的字段,如果没有出现在组函数中,则必须出现在group by子句中典型错误select ename,deptno,max sal from emp group by deptno;例子4求出每一个部门里赚钱最多的那个人的名字Select ename,deptno,sal from emp where sal inSelect sal from Selectdeptno,maxsal sal from emp group by deptno例子4选出所用部门里工资最高的人的名字Select ename,salfrom emp where sal=Select maxsal from emp〉|SQL selectGugs^l fron emp group by deptno;AUGSAL
1566.
666621752916.66667SQL select deptno-augsal fronemp group by deptno;DEPTHO AUGSAL
301566.
66667202175102916.66667SQL select deptno job.naxs«l fronenp group by deptno*job;FDEPTNOJOB MAXSAL20CLERK110030SALESMAN160020MANAGER297530CLERK950稣PRESI DENTS0003小MANAGER285010CLERK130010MANAGER245020ANALYST3000己选择行9SQL selectnaxs«lfrom emp group by deptno,job;MAXSAL110016002975950S00024S03080第行向现辑误SQL select ename«Raxsal F*onenp;select cnane naxsal fronenp1F下亮单组分组函数ORA-00937Ename可能有很多,max sal只有一行SQL select ename fromenpwhere501■select maxsal from emp;ENA HEKINGSQL select enane,naxsal fronenp gmitpby deptno;select cn^nenax^«l fronenp group by deptnoF二行二现鳍误”.1不是表达式ORA-00979GROUP BY使用Having对分组进行限制如果我们要从分组数据中把某些特定的剔除去的时候,使用Having关键字例子1将平均薪水大于1000的组的平均薪水从emp这张表中选出来Select avgsal,deptno group by deptno having avgsal1000;例子2求薪水大于1200的雇员,按照部门进行分组,而且这些分分组后组内平均薪水必须大于1500,要查询分组的平均工资Select avgsal from emp where sal1200group by deptnohaving avgsal1500Order byavgsal;SQL select avgsal2fron cnp3where sal12904group by deptno5havingavgsal15006orde^u byaugsal desc;AUGSALr
2991.
666672916.666671690在where子句中进行多表连接SQL1992实际需要在很多表中取数据,例子把员工姓名及员工所在部门的名字同时显示出来Select ename,dnamefrom emp,dept;第二天上午13_表连接一21:41为什么启动慢?因为每次启动Oracle的效劳都会启动(解决方法,把Oracle效劳设置成“手动〃启动)scott/tiger—用户名密码可以直接这样输入把第一天学的内容用一句话总结出来问从emp这张表里把平均工资和部门编号列出来,并且过滤掉大写是A的名字,把剩下的数据按照部门编号进行分组,分组之后的平均薪水必须大于2000,按照部门编号的倒序排列select avg(sal),deptno from empwhere enamenot like_A%groupby deptnohaving avg(sal)2000order bydeptno这是一个单条的select语句,(只是从一张表里取数据)第一天已经讲完今天讲多表的连接例子1请你选出雇员的名字,和雇员在部门的名字?错误写法select ename,deptno from emp;〃这里选的是部门的编号,问题里是让选部门的名字select dname,deptno from deptwhere deptno=20;//选出了编号是20的这个人所在部门的名字正确写法select ename,dname from emp,dept whereemp.deptno=dept,deptno;必须明确的指出重复字段是哪个表的例如select ename,dname,dept,deptno from emp,dept whereemp.deptno=dept,deptno;指定哪张表的deptno实际上对它有一个效率上的影响例子2求每个人的薪水值包括他的名字select ename,salfrom emp;例子3求每个人的薪水值,名字和他的薪水处于第几个级别(非等值连接)select ename,sal,grade from emp,salgradewhere sal between losal and hisal;select ename,sal,gradefrom emp,salgradewhere sal=losal and sal=hisal;例子4求出他的名字,求出他所在部门的名称,求出他的薪水等级首先分析这几个数据在3张表里Select ename,dname,grade from emp e,dept d,salgrade sWheree.deptno=d.deptno ande.sal betweens.losal ands.hisal;例子5求出职位除PRESIDENT以外的所有雇员的名字,部门名称,薪水等级select ename,dname,grade from emp e,dept d,salgrade swheree.deptno=d.deptno ande.sal=s.losal ande.sal=s.hisal andjobPRESIDENT’;13_子查询例子L求谁挣的钱最多?错误的写法select ename,max sal from emp;正确的写法select ename,sal from empwhere sal=select maxsalfrom emp;例子2求出来有哪些工资位于所有人平均工资之上selectename,sal from empwhere salselect avgsal from emp;例子3按照部门进行分组之后挣钱最多的那个人的名字,部门编号?select ename,sal,t.deptno fromempjoinselect maxsal maxsal,deptno fromemp groupbydeptno tonemp.sal=t.max_saland emp.deptno=t.deptno;****理解子查询的关键一〉把它当成一张表例子4练习求每个部门的平均薪水等级是多少?Select t・avg_sal,grade,t.deptno from salgrade sJoin select avgsal avg sal,deptno fromemp groupbydeptno tOnt.avg_sal betweens.losal ands.hisal;SQL select enane,sal fronenp2jo in selectnaxsaloax_sal.deptno fnonenp groupbydeptno3onemp«sal■t・mand enp.deptno■t.deptno;ENA ME SALBLAKE2850FORD3slmpCOTT3R0AKING5600尚学堂马士兵学习笔记Oracle3例子i求这个人的名字和他经理人的名字(自连接)select el.ename,e
2.ename fromemp el,emp e2where el.mgr=e
2.empno;自连接为同一张表起不同的别名,然后当成两张表来用SQL1992是在where语句里直接写表连接的条件,新的语法是把表连接语句拿出来,where里只写过滤条件有一个小小的问题select ename,dname,grade fromemp e,deptd,salgrade swheree.deptno=d.deptno ande.sal betweens.losal ands.hisal and一两个表的连接条件jobCLERK,;—过滤条件连接条件和过滤条件混在一起让人读起来SQL语句会困难一些,不太容易清楚怎么把连接条件和过滤条件分开来呢?原来的交叉连接select ename,dname fromemp,dept;--笛卡尔乘积56行1999年标准的语法(写法)select ename,dename fromemp cross join dept;crossjoin--叫做交叉连接(新语法定义的比较明确,也是56行,笛卡尔乘积)原来的等值连接select ename,dname fromemp,dept whereemp.deptno=dept.deptno;新语法的等值连接select ename,dname fromemp join dept onemp.deptno=dept,deptno;等值连接的简单的写法select ename,dname fromemp joindept usingdeptnousingdeptno-->是说我这个表的deptno等于你这个表的deptno*using的用法不推荐使用一〉两张表中要有相同的字段,类型必须相同非等值连接例子1:取出雇员名I称和薪水等级select ename,grade fromemp e join salgrade son e.sal betweens.losal ands.hisal;三个表连接在一起的例子2取出雇员名字,他的部门名称,和薪水等级其中名字第二个字母包含A的不要取出select ename,dname,grade fromemp ejoindept done.deptno=d.deptnojoin salgrade s one.sal betweens.losal andwhere enamenot like_A%’;例子3自连接新语法求这个人的名字,他经理人的名字select el.ename,e
2.ename fromemp eljoinemp e2on el.mgr=e
2.empno;King如果想显示出来该怎么办呢?外连接左外连接可以把左边这张表的多余的数据不能产生连接的数据给拿出来选出雇员名字和它经理人的名字可以将没有经理人的那个人取出来select el.ename,e
2.enamefromemp elleft outerjoin emp e2onel.mgr=e
2.empno;例子4求每个雇员的名字,他所在部门的名称,全部选出来,并且把多余的部门也选出来?select ename,dname fromemp eright outerjoindeptd one.deptno=d.deptno;全外连接即把左边的多余的数据拿出来,又把右边的多余的数据拿出来,彳列:select ename,dname fromempefull joindeptd one.deptno=d.deptno;1,求部门平均薪水等级?select deptno,avg_sal,grade fromselect deptno,avgsal avg_sal fromempgroupbydeptno t join salgrade s on t.avg_sal betweens.losal ands.hisal;、QL select deptno^aug_sal,grade front〈2select depCno9tvgsal fromenp groupbydeptno t3join salgrades on t.avg_sal betweens.losal ands.hisal;DEPTNO AUG.SAL GRADE
301566.
6666732021754102916.666674SQL ed己写入f ileaf iedt.buf b1select deptno,aug_sal,grade from〈2select deptno^«vgsal cug.sal fromenp groupbydeptnot3*join salgrades on t.aug_sal betweens.losal ands.hisal SQLselect ename,sal fromempjoin select maxsalmax sal,deptno fromempgroupbydeptnotonemp.sal=t.max salandemp.deptno=t.deptno;例子1:求出每个人的薪水等级,然后再平均求出的就是平均薪水等级selectdeptno,ename,grade fromempjoin salgrades onemp.sal betweens.losaland s.hisal;selectdeptno,avggrade fromselectdeptno,ename,grade fromempjoin salgrade son emp.sal betweens.losal ands.hisal tgroupbydeptno;select enamefromemp where empnoin selectmgr fromemp;select enamefrom mepwhere empnoinselect distinct mgr fromemp;面试题,考虑使用“自连接〃select distinctsal fromemp wheresal not inselect distinctel.sal fromemp eljoinempe2on el.sale
2.sal;select avgsal,deptno fromempgroup bydeptno;select maxavg_sal fromselect avgsal avgsal,deptno from empgroup bydeptno;结果selectdeptno,avg_sal fromselectavgsal avg_sal,deptno fromempgroupbydeptnowhere avg_sal=select maxavg sal fromselectavgsal avg_sal,deptno fromempgroupbydeptno selectdeptno,avg_sal fromselectavgsal avgsal,deptno fromempgroup bydeptnowhere avg_sal=select maxavgsal fromempgroupbydeptno一>组函数可以嵌套,但最多只能嵌套两层乂rr旦伯《J▼予刈qj PH坦J JLKE电4Phttp//
127.
0.
0.l:5560/isql^lus/ORACLG登录/SQL*Plus严禁未蛭授权使用此站点,否则可能会面临民事和刑事起诉表示必需的字段•Copy rieh!c2003,2005,Oracle.All rightsreserveORACLE/SQL*Plus.http//
127.
0.
0.1:556O/islplus/locin.uix工作区工作区历史记录法逍首选项典Copyneht c2003,
2005.Oracle.AH nshtsr«s«rv«d使用超级管理员登录到数据库上sqlplus sys/bjsxt assysdba当成DBA登录到效劳器上
1.先求平均薪水selectavgsal fromempgroupbydeptno;i D执(加依脚吊)、保存脚本)低取才把上面看成是一张表,另外一张表与它做连接selectdeptno,grade,avg_sal fromselectdeptno,avgsal avgsal fromempgroup bydeptnot joinsalgradesont.avg_sal betweens.losal ands.hisal;select mingradefromselectdeptno,grade,avgsal fromselectdeptno,avgsal avg_salfrom empgroupbydeptnot joinsalgradesont.avg_sal betweens.losal ands.hisal;最后结果select dname,tl.deptno,avgsal,grade fromselectavg_sal,grade,deptno fromselectavgsal avg_sal,deptno fromempgroupbydeptnotjoinsalgrade sont.avg_sal betweens.losal ands.hisaltljoin deptdon tl.deptno=d.deptnowheretl.grade=selectmingrade from selectavg_sal,grade,deptno fromselectavgsal avgsal,deptno fromempgroup bydeptno tjoinsalgradesont.avg_salbetweens.losal ands.hisal权限问题Conn sys/bjsxt assysdba;grant create table,create viewto scott;conn scott/tiger创立视图Create viewv$_dept_avg_sal_info asselectdeptno,grade,avg_sal fromselectdeptno,avgsalavgsal fromempgroupbydeptno tjoinsalgradesont.avg_sal betweens.losal ands.hisal;视图是什么东西?就是一个子查询或者就是一张表,视图中的表叫虚表,实际数据依然在实际当中的表里面从视图里面取数据select*from v$deptvag salinfo;视图的作用首先建一个虚表,给一个别名,然后在虚表的基础上取数据就方便多了第二天下午例子1:求比普通员工的最高薪水还要高的经理人名称先求普通员工的最高薪水?selectmaxsalfromemp where empnonotinselectdistinct mgr fromemp where mgr is not null;求比这个值还要大而且他本身必须是经理人select enamefromempwhere empnoinselectmgr fromemp wheremgris not null andsal selectmaxsalfromempwhere empnonotinselect distinctmgrfromempwheremgrisnotnull;之前学的select语句全部掌握住一面试题比较效率
1、select*fromempwhere deptno二10andename like;
10.
2.
8.
1.0-Production on2H261603212007Copyright c
1982.2005Oracle.All rightsreserved«用户名1iuchao/1iuchao连接到Ordc leDatabase10g EnterpriseEdit ionRelease
10.
2.
0.
1.0-Production UiththePartit ioning OLAPandData,Miningoptions导入文件EXPDAT.DMP植人插入缓冲区大小最小为819230720经由常规路径由创建的导出文件EXPORT U
10.
02.01警告这些对象由导出.而不是当前用户SCOTT已经完成字符集和字符集中的导入ZHS16GBK AL16UTF16NCHAR只列出导入文件的内容yes/no:no由干对■象己存在.弱略创建雄吴i ves/nono已经完成字符集和字符集中的导入只列出导ZHS16GBK AL16UTF16NCHAR入文件的内杳<yes/no>no>由于对象已存在.忽略创建错天i<yes/no>no>导入权限yes/no:yes导人表数据〉<yes/rw yes>导入整个导出文件用户<yes/no>no>名scott力入表或分区名称的所有表<T><TP>输入装或分区的名称<T><TP>表袤袤重8的对象导入到LIUCHAO_人入入入束入导入了“BOMUS”导耳导将在导入工在在在加在正“DEPT”正正正启终正”导入了“EMP曹.......芳导入了“SALGRADE”开始学习DML语句
1.desc dept;insert intodept values50,‘game,bj;对数据进行备份的简单方法L首先写rollback刚刚插入了一段数据,懊悔了,不想插了create tableemp2as select*fromemp;create tabledept2as select*from dept;create tablesalgrade2as select*fromsalgrade;create tableemp3as select*fromemp;第一种形式:不写字段的名字,直接按照字段的顺序挨着排的往里插insert intodept2values50,‘game,bj;TT^!..,S第二种形式指定某些字段往里插,其他不插的字段默认都是空值insert intodept2deptno,dname values60,game2;第三种形式:可以用一个子查询,把子查询拿出来的数据,挨着排的都插入到表里,前提是子查询拿出来的东西和这张表的结构必须完全一样select*是选出4个值,这4个值会挨着排的插入的dept2里面insert intodept2select*fromdept;敲数据库代码要按照思路,从里敲到外,不是背过求薪水最高的前5名雇员select empno,enamefromemp;当你没有进行排序的时候,它默认的顺序是先导进去的先选出来,后导进去的后显示出来在Oracle里面有一个尾字段叫--rownum它是按照1,2,
3...进行排列的,它不显示select empno,enamefromempwhererownum=5;〃取前5行一共有14行,求10行以后的后4行怎么求?select empno,enamefromempwhererownum10;〃这样的写法不成立未选定行SQL select empno.enane fi*onenpwhere rownun10;根选定行SQL selectenpno^enane fronenpwhere rownun«10;SQL select rownun r.enanc fronenp;R EHAHE1SMITH2ALLEN3WARD4JONES5HARTIN6BLAKE7CLARK8SCOTT9KING10TURNER11ADAHSR ENAHE12JAMES13FORD14HILLER已选择行◊14QLselectenamc Fromselectrownunr,enamc fromempwherer10;ENAMEDAHSAHESORDI1LLERQL selectengine.salfromemporder by sal desc;SALENAMEKING5000FORDSCOTT3000JONES2975BLAKE28S0CLARK2450ALLEN1600TURNER1500MILLER1300UARD1250MARTIN1250SALENAME■■V.ADAHSJAMES950SMITH800已选择行.14正确的写法select empno,ename fromselect rownum r,enamefromempwhere r10;*记住rownum只能和or=一块用,不能〉,也不能二选第10行这个人的名字?1--selectrownum r,enamefromemp;2--select enamefromselect rownumr,enamefromempwherer=10;select ename,salfromemporder by saldesc;求薪水最高的前5个人,首先要对薪水最高的人进行倒序排列错误写法:selectename,salfromempwhererownum=5orderbysal desc;〃先取出数,后排序正确写法:selectename,sal fromselect ename,salfromemporderby saldescwhererownum=5;〃首先按倒序排好,然后取前5个ENA HESALJONES29751600MARTIN1250“ARD1250SMITH800SQL selectename.$al2selectenaneF sal desc whereroimun-S;ENA HESALKINGSCOTT30ARFORD JONES|3000X975BLAKE285SQL selectename,sal fronempwhe1*e Founun=5orderbysaldesc;求取薪水最高的第6个人-一第10个人重点掌握--》不管是哪种数据库,这个应用非常广泛selectename,salfromselectename,sal,rownumrfromselectename,salfromemporderbysal descfrom fromemporderby salwherer=6and r=10;以上写法是在Oracle里面效率最高的写法SQL selectenamc*sal fron2selectenane-salfromenp orderbysal desc13whererownun=6and gunum=10;下匹定仃T〉SQL selectro*nuR rfrom enpename,sal»orderby“1desc;ENAMERSALKING50009FORD300013IpCOTT83000JONES29754BLAKE28S06CLARK24507ALLEN16002TURNER1S0010MILLER130014WARD12503MRTIN12505EHArtE SALRADANS110011JAMES95012SMITH8001已选择行141selectenamc^sal.rownun i*fron2*selectenanesal fi*onenporderbysaldescSQL/ENAME SALRKING50001FORD30002SCOTT30003JONES29754BLAKE28505CLARK24586ALLEN16007TURNER15068MILLER13009如WARD1250A CMARTIN1250EH AMESALRADAHS110H12JANES95013SMITH80014己选择行,14第三天上午:面试题有3个表S,C,SCSSNO,SNAME代表(学号,姓名)C CNO,CNAME,CTEACHER)代表(课号,课名,教师)连上之后更改useralter userscott accountunlock;更改用户解除锁定第二章SQL structuredQuery Language语言Sql语言是在数据库地下进行操作的专门的语言,sql语言本身是一种标准语言,它是一个国际标准,它定义了套标准SQL1922,SQL1999,SQL在大多数数据库上通用,或许有轻微的改变包含四大语句
1.查询语句查询语句只有一种就是select语句
2.DML语句数据操作/操纵语言DML语句包含Insert,Update,Delete等常用语句
3.DDL语句数据定义语言DDL语句包含Create,Alter,Drop等常用语句
4.事务控制语句包含Commit,Rollback等常用语句还有一大类语句叫DCL语句Data ControlLanguage,主要用于权限的分配与回收,由于与开发关系不是十分密切,不做重点讲解最重要的就是select语句,任何select语句全部要背过,select语句必考,不会考其它的Select语句就是从表里把数据选出来首先熟悉试验中的数据第一条语句desc emp;desc表名;列出表头二二字段二二列Varchar2可变字符串支持国际化NUMBER7,27位的数字,2位的小数每行显示的宽度setlinesize200;显示的页数setpagesize30;emp雇员信息表EMPN0雇员编号NOT NULLNUMBER4SC SNO,CNO,SCGRADE代表学号,课号,成绩问题1,找出没有选过〃黎明〃老师的所有学生姓名select snamefromsjoin scon s.sno=sc.sno joinc c.eno=sc.eno wherec.cteacherliming’;2,列出2门以上含2门不及格学生姓名及平均成绩select snamewhere snoinselect snofrom scwhere segrade60groupbysno havingcount*=2;3,即学过1号课程也学过2号课程所有学生的姓名select snamefromswhere snoinselect snofrom scwhere eno=1and cnoinselectdistinct snofrom scwhere eno=2请用标准SQL语言写出答案,方言也行请说明用什么方言update更新表中的数据把emp2这张表里,编号为10的,所有人的薪水提1倍update emp2set sal=sal*2,ename=enamel where deptno=10;delete删除表中的数据四条语句讲完了背过语法格式DDL—数据定义语言,建表,建视图,建其他一些东西
1.仓II立表一create tablecreate table ta varchar210;
2.删除表drop tabledrop table xx;跳过此阶段,先讲事务控制语句事务transaction—〉就是一系列的操作要么同时完成,要么不完成有点像同步synchronized注意与程序员交流的时候要说Transaction不要说“事务〃两个线程同时访问资源为什么会产生冲突的现象?是因为你应该把他们的操作当成一个Transaction,每个线程自己单独一系列的动作都当成一个Transaction要不同时完成,要么不完成从一个帐户把钱转到另一个帐户,需要2条Update语句,两条语句必须同时完成Oracle认为我在其中的一系列的操作就是一个事务Transaction所以,对于Oracle来说,一个Transaction起始于一条DML语句那么它什么时候结束呢?第一,敲rollback的时候,它回到最原始的状态算是结束,除此之外它还有几个会结束,第二,Commit----------显示提交第三,DML语句结束,碰到DCL或者DDL自动提交事务-一隐式提交第四,正常断开连接exit,非正常断开如断电会执行rollback第五,书P23第三章数据库常用对象为什么有变长字符串Varchar2还要有定长字符串Char呢?因为存在效率问题,用Char效率高,但浪费空间,这就是拿空间换时间Hashtable也是拿空间换时间创立一张表,并往里插入一条数据create table stu idnumber6,name varchar220,sex number1,age number3,sdate date,grade number2default1,class number4,email varchar50-->最后没有”,〃
1.非空约束create table stu idnumber6,name varchar220not null,一>加上约束条件非空sex number1,age number3,sdate date,grade number2default1,class number4,email varchar50一〉最后没有“,〃约束条件本身也是一个对象,本身约束条件你个可以为它起一个名字用constraint stu_name_nn not null一〉为约束条件not null起名字为stu_name_nn如果不给约束条件起名字,系统会默认的给约束条件起一个名字〉SQL create table stu23id nunber64name uarchar220constr^wnt stu_nane_nn not null,5sex nunberl^$6age nunbcr3^7sdate date,8gyade nunbei*C2default1〃9class nunber4^10email warehar2501112/表己创建.
2.唯一约束一》在这个字段里面所有的记录不能取重复的值,每个值必须是唯一的唯一约束后面+unique,当然也可以用constraint+名字create table stu idnumber69⑴name uarchar220constraint stunane nn notnull,sex number.age nunber3sdate date,grade number2default1,class nunber4f wenailuarchar250uniquerw字段级的约束把约束条件+在字段名的后面表级的约束+在所有字段名的最后面constraint stu_name_email_uni uniqueemail,name表示的是这两个字段的组合不能重复fcQL insert into stunair*e et%ail valuesCb..null;己创建行\1》•〉;SQL insert into stunane«enail valuesnullcreate tablestuid nunber6name uat*chai*220constraint stu_jiane_nn notnull,sex nunbcrlage nunber3sdate date*grade nunber2#default
1.class nunbei*4,email uarchar250constraint stu-ndne-enail.uni uniquecnail^nane$QL insertinto stuenailvalues孱己创建已创建行1SQL insertinto stuname■enailvalues a,b;已创建行1《,SQL insertinto stuname^enailvalues b己创建行.1《《行出现错送SQL insertinto stuname,enailvalues b.#b;insertinto stu nane,emailvalues b,*b*fe1违反唔一约束条件主键PRIMARY KEY叫做可以唯一标识整条记录的这样的一个东西kRA-00001SCOTT.STU^NAME_EHAIL4NI从语法上来说主键的约束可以理解为非空,唯一两个的组合主键约束在逻辑意义上代表着单独的,每一条记录,看到主键就知道你是一条单独的不同的记录是唯一的代表的记录我们可以用两个字段的组合作为主键createtablestu idnumber6prinary keyvndmeuarchar220constraint stunanenn notnull,sex nunber19⑺age nunber3sdate date,grade numt er2default1,class number.fenail uarchar250,constraint stunameenailuni uniqueenail name9一一一createtablestuid number69natne uarchar220constraint stunanenn notnull,sex nunber1age nunber399sdate datefgradenumter2default1»class number4tenail uarchar2509constraint stu id pkprinary kepid name|99constraint stu_name_enail__uniuniqueenailnamevQ1111sL234567890123外键最麻烦的约束建立于一张表的两个字段,或者两张表的两个字段constraint stu_class_fk foreignkey classreferences class id外键关系是建立在两个字段上,某一个字段会参考另外一个字段里面的值,如果另外一个字段里面没有这个值,你不能够把这个字段里面的值,设置成为其他的值被参考的字段必须是主键被其他人参考的字段不能作为删除条件.的SQL deletefrom class where id«10;delete fronclasswhereid=1000飞行出现蛰送1违尽完整约束条件《己找到子记录ORA-02292:SCOTT.STU_CLASS_FK-主键约束和外键约束非常重要,老牢牢掌握其概念SQL createtable class2C3id nunber4primary key,4name uarcha»*220notnull表已创建.SQL createtablestu3id nunbei*6name varcha*220constraint stu_nane_nnnotnull,sex4nunbcrlage nunber3sdate date9grade nunber2default
1.F5class nunber4references classid^email uaFchai«250X#6constraint stu.id_pk primarykey id,constraint stu__nane en»ail_uni_7uniqueenail nanc8910111213康己创建〉SQL insertintostuid,nane class*eneiil values
1.a.1080,*a*;insertintostuid-nan»e,class,email values1,F,a*
1000.a行出现便送:L1违反完整约束条件未找到父项关榜字ORA-02291SCOTT.SVS^C00S446-createtablestuid nunber6^name uarchai«220constraint stu_nane_nnnot2null,sex nunbei*l,age nunber3F34567sdate date,nunbei*2default
1.8grade nunber4^uarchar
250.9class10email11constraint stu_class_fk foreignkey classreferences classidconstraint$tu_id_pk primarykey£d.#12constraint stu_nane_enail_uni uniquecnail*nanc131415表己创建明.《〉SQLinsertintostuid.n«neFCIGSS.en«ilvalues
1.o,10*a1;insertintostu id,name,classemail ualues1,a,
1600.*a*行出现第送心一八a5M违反完整约束条件未找到父项关键字ORA-02291SCOTT.STU_CLASSJK-面试题check约束本身用的非常少,大多数对于数据的检验在java中已经校验过了修改表结构已经有一张表了,但是往了某一条字段,使用alter修改现有表的结构添加addr字段--------addalter tablestu addaddrvarchar2100;删除某一个字段--------drop alter tablestu dropaddr;修改某个字段--modify altertablestumodifyaddr varchar250;*修改后的新的精度必须能够容纳原来有的数据删除或者增加约束条件去掉约束条件-------drop constraintxxxalter tablestudropconstraintstu_class_fk;修改约束条件一般很少去修改约束条件,修改的方法是把原来的删掉,然后再添加个新的添加altertablestu addconstraint stu_class_fk foreignkey classreferencesclassid;怎么去修改非空约束自己看P31怎么去删除一张表droptablexxx;键设计任何表都要有主键第二范式的要求当一张表里面有多个字段作为主键的时候,非主键的这些字段,不能依赖于局部主键只能依赖整个组合的主键,不能依赖局部叫做不能存在局部依赖第三范式的要求不能存在传递依赖除了主键之外的任何其他字段必须直接依赖于主键ENAME雇员姓名VARCHAR210JOB工作岗位VARCHAR29MGR该雇员经理人的编号NUMBER4HIREDATE入职时间DATESAL薪水NUMBER7,2COMM津贴NUMBER7,2DEPTNO雇员所在部门编号NUMBER2Varchar2可以存放各国的语言,适合国际化;varchar不能存放各国语言,有限定表内容EMPNO ENAMEJOB MGRHIREDATE SALCOMM DEPTNO7369SMITH CLERK790217-12月-80800207499ALLEN SALESMAN769820-2月-811600300307521WARD SALESMAN769822-2月-811250500307566JONES MANAGER783902-4月-812975207654MARTIN SALESMAN769828-9月-8112501400307698BLAKE MANAGER783901-5月-812850307782CLARK MANAGER783909-6月-812450107788SCOTT ANALYST756619-4月-873000207839KING PRESIDENT17-11月-815000107844TURNER SALESMAN769808-9月-8115000307876ADAMS CLERK778823-5月-87110020EMPNO ENAMEJOB MGRHIREDATE SALCOMM DEPTNO7900JAMES CLERK769803T2月-81950307902FORD ANALYST756603T2月-813000207934MILLER CLERK778223-1月-82130010dept部门信息表DEPTN0部门编号NOT NULLNUMBER2DNAME部门名字VARCHAR214LOC部门所在地VARCHAR213内容DEPTNO DNAMELOC10ACCOUNTING NEWYORK20RESEARCH DALLAS30SALES CHICAGO40OPERATIONS BOSTONsalgrade薪水等级表GRADE薪水等级NUMBERLOSAL该等级的最低薪水值NUMBERHISAL该等级的最高薪水值NUMBER内容GRADE LOSALHISAL熟悉表里面的数据第一个select语句select*from表名;Select*fromemp;例子1:取出一张表中所有的数据Select*fromemp;例子2取出某些字段的值Select empno,ename,deptno fromemp;例子1取出emp中所有人的年薪及名字Select ename,sal*12fromemp;例子2在emp表中取出2*3的结果Select2*3fromemp;例子3取出2*3的一条记录Select2*3from dual;一当我们需要显示一个结果的时候就用系统提供的dual虚表名称是否为空?类型SQL descdualDUMMV UARCHAR21SQL select*from dual;〉D XSQL select2*3fro tndual;2~36例子4取出当前系统时间Select sysdatefrom dual;一sysdate在Oracle中表示当前系统时间例子1selectename,sal*12annual salfromemp;例子2如果想让别名强制大小写混合可以使用双引号Select ename,sal*12“Annual_sal〃fromemp;例子3如果想让别名中有空格也使用双引号Select ename,sal*12uAnnual sal“fromemp;例子1算某人一年的年薪含有任何null值的数学表达式最后的结果都为nullSelect ename,sal*12+comm fromemp例子2含有任何null值的字符串表达式中,nuH被当作空字符串处理select empno,ename||and hismanager numberis||mgrfrom emp;字符串连接符IISelect语句中用单引号表示字符串例子1:用两个单引号表示一个单引号selectempno,ename||,飞manager is||mgrfromemp;例子l:selectdistinctdeptno fromemp;一用distinct消除结果集中的重复信息例子2用distinct修饰多个字段的时候,指的是消除后面所有字段的组合重复结果Select distinctjob,deptno fromemp;--指job和deptno都相同的删除使用where对数据库设定条件限制,where过滤条件,过滤相关的数据
1.等值判断例子1显示部门编号为10的所有员工的详细信息select*fromempwheredeptno=10;例子2显示名字为KING的员工的详细信息判断字符串是否相等时,字符串要用单引号引起来,单引号中字符串内容是要区分大小写的Select*fromempwhereename=KING;
2.非等值判断==例子1取出薪水大于2000的所有员工的名字和薪水Select ename,salfromempwheresal2000;例子2字符串大小比较是比较字符串ASCH码值的比较,先比较第一字母,依次……Select ename,salfromempwhereenameDBA;例子3取出所有部门号不是10的雇员的名字和薪水例子4取出薪水位于800和1500之间的雇员名字和薪水Select ename,salfrom empwheresal=800andsal=1500;Select ename,salfromempwheresalbetween800and1500;注意使用betweenand的时候,包含了最大值和最小值
3.空值的处理例子1取出津贴值为空的所有雇员的名字Select enamefromemp wherecomm isnull;例子2取出津贴不为空的所有雇员的名字Select enamefromemp wherecomm isnotnull;尚学堂马士兵学习笔记一Oracle
21.In语句用于塞选某一个值例子1把薪水是800,1250,1500,2000的雇员信息取出来Select ename,salfromempwheresal in800,1250,1500,2000;也可以用于字符串操作例子2把名字为SMITH,ALLEN,KING的雇员取出来Select ename,salfromempwhereename inSMITH,ALLEN,KING;
2.日期处理Oracle默认的日期格式为DD-MON-RR例子1查询在81年2月20号以后入职的员工Select ename,hiredate fromemp wherehiredate20-2月-81’;Select ename,hiredate fromemp wherehiredate20-2月-1981;如果想用自己定义的日期格式,可以使用to_char orto_date函数,
3.AND,OR,NOT例子1查询部门标号为10并且薪水1000的员工Select ename,deptno,salfromemp wheredeptno=10andsal1000;例子2查询部门编号为10或者工作岗位为CLERK的员工Select ename,deptno,job fromempwheredeptno=10or job=CLEARK’;例子3查询薪水没有位于800,1500,2000之中的员工。
个人认证
优秀文档
获得点赞 0