首页 达内oracle

达内oracle

举报
开通vip

达内oracle郭爱军guoaj@tarena.com.cn172.16.20.252oracle(商业数据库)oracle甲骨文IBMDB2IBMsqlserverMIC微软mysql(开源免费)sun甲骨文FILE增删改查数据效率数据维护恢复DBMS数据库管理系统DB数据库(基本单元表二维表)RDBMS关系型数据库管理系统RDB关系型数据库基于二维表的数据库表头行列字段名字段字段值sql语句分类structquerylanguageselect语句2selectddl语句数据定义语言createdropalterdml语句数据...

达内oracle
郭爱军guoaj@tarena.com.cn172.16.20.252oracle(商业数据库)oracle甲骨文IBMDB2IBMsqlserverMIC微软mysql(开源免费)sun甲骨文FILE增删改查数据效率数据维护恢复DBMS数据库管理系统DB数据库(基本单元 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 二维表)RDBMS关系型数据库管理系统RDB关系型数据库基于二维表的数据库表头行列字段名字段字段值sql语句分类structquerylanguageselect语句2selectddl语句数据定义语言createdropalterdml语句数据操作语言insertdeleteupdatetcl语句事务控制语句commitrollbacksavepointdcl语句数据控制语言grantrevoke(DBA)oracle登录到远程机数据库telnet192.168.0.23telnet192.168.0.20telnet192.168.0.26telnetIPopenlabopen123sun280%sqlplussqlplus是oracle公司提供的操作数据库的一个小工具负责输入sql语句返回操作结果。openlabopen123SQL>查询一张表的数据需要了解表的结构SQL>desc表名;descs_emp;SQL>!clearSQL>descs_emp;NameNull?Type--------------------------------------------------------------ID员工编号NOTNULLNUMBER(7)LAST_NAME姓NOTNULLVARCHAR2(25)FIRST_NAME名VARCHAR2(25)USERIDVARCHAR2(8)START_DATE入职日期DATECOMMENTS备注VARCHAR2(255)MANAGER_ID领导的员工编号NUMBER(7)TITLE职位VARCHAR2(25)DEPT_ID部门编号NUMBER(7)SALARY月薪NUMBER(11,2)COMMISSION_PCT提成NUMBER(4,2)select语句Afrom子句1.从表中查询一个字段的值出来select字段名from表名;selectsalaryfroms_emp;2.如何查询多个字段select字段名1,字段名2from表名;查询first_name,salaryselectfirst_name,salaryfroms_emp;3.如何把表中所有的字段对应的值查询出来selectid,first_name,last_name,userid,start_date,comments,manager_id,title,dept_id,salary,commission_pctfroms_emp;*号可以代表所有的字段名select*froms_emp;4.sql中字段数学运算+-*/selectsalary,salary+salary*0.2froms_emp;selectsalary,salary-salary*0.2froms_emp;小括号可以改变逻辑优先级selectsalary,100+salary*12froms_emp;selectsalary,((100+salary))*12froms_emp;注意/没有取整特性selectsalary,salary/30froms_emp;5.sql中字符串1.sql中的字符串是以单引号引起来的一串字符'''''a''helloworld'2.字符的拼接oracle字符串拼接符||selectfirst_name,last_namefroms_emp;selectfirst_name||last_namefroms_emp;在first_name和last_name之间拼接一个下划线_selectfirst_name||'_'||last_namefroms_emp;3.在first_name和last_name之间拼接一个'this'sSELECTfirst_name||'''||last_namefroms_emp;转义-------%d%%SELECTfirst_name||''''||last_namefroms_emp;在first_name和last_name之间拼接两个'this''sSELECTfirst_name||''''''||last_namefroms_emp;SELECTfirst_name||''''||''''||last_namefroms_emp;6.别名给字段或者表达式起另一个名字selectfirst_namenamefroms_emp;SQL>edit进入一个标准viZZ保存退出或者:wqselectsalary,salary*12yearsalfroms_emp;别名和字段名或者表达式都会被默认处理成大写selectsalarysal,salary*12yearsalfroms_emp;//error一个字段或者表达式的别名只能有一个为了让别名能原样显示------双引号selectsalarysal,salary*12"yearSal"froms_emp;7.NULL值的处理#defineNULL(void*)0if(pa==NULL){}int*pa=NULL;intpaa=NULL;NULL值这个字段上没有值就是NULLage1.salary*(1+commission_pct/100)*12selectcommission_pctfroms_emp;selectsalary,salary*12froms_emp;2.selectsalary,salary*12,salary*(1+commission_pct/100)*12yearsalfroms_emp;3.nvl空值处理函数nvl(par1,par2)当par1为NULL则返回par2的值如果par1不为NULL则返回par1的值可以处理任何类型但要求par1par2类型一致selectsalary,salary*12,nvl(salary*(1+commission_pct/100)*12,0)yearsalfroms_emp;//logicerrornull和任何值做运算都是NULLNULL要尽早处理否则结果是NULLselectsalary,salary*12,salary*(1+nvl(commission_pct,10)/100)*12yearsalfroms_emp;8.数据的排重显示------distinctselectsalaryfroms_emp;selectdistinctsalaryfroms_emp;selecttitle,salaryfroms_emp;联合排重当多个字段的值联合相同则排除selectdistincttitle,salaryfroms_emp;selectidfroms_emp;selectdistinctid,salaryfroms_emp;Bwhere子句对表中的数据进行限制返回----根据条件返回符合where条件就返回不符合where就被过滤掉1.selectid,salaryfroms_emp;selectid,salaryfroms_empwhere1=1;selectid,salaryfroms_empwhere1=2;--norowsselected/*注释*/2.找出工资大于1200的员工的idfirst_namesalaryselectid,first_name,salaryfroms_empwheresalary>1200;selectid,first_name,salaryfroms_empwheresalary<1200;3.找出first_name叫Carmen的员工的idsalarymanager_idselectid,salary,manager_idfroms_empwherefirst_name=Carmen;//errorselectid,salary,manager_idfroms_empwherefirst_name='Carmen';selectid,salary,manager_idfroms_empwherefirst_name='carmen';sql语句不区分大小写字符串的值要区分大小写数值类型值不用单引号字符串的值要加单引号4.逻辑比较运算符><>=<==!=5.sql中提供的运算符a.表达区间[a,b]where字段betweenaandb;1200<=salary<=1500//不能这么写selectid,first_name,salaryfroms_empwheresalarybetween1200and1500;b.表达一个字段在一个列表中inid是1或者3或者11selectid,first_namefroms_empwhereidin(1,3,11);找出部门编号是313350部门的员工的idfirst_namedept_idselectid,first_name,dept_idfroms_empwheredept_idin(31,33,50);把出现概率高的放前面c判断是不是NULL字段名isNULL;找出manager_id是NULL的员工的idfirst_namesalaryselectid,first_name,salaryfroms_empwheremanager_id=NULL;//logicerrorselectid,first_name,salaryfroms_empwheremanager_idisNULL;找出提成是NULL的员工的first_namesalaryselectid,first_name,salaryfroms_empwherecommission_pctisnull;d.模糊查询关键字1.where字段like'通配表达式'李王龙年成龙李小龙小龙女2.通配符ls*.txt*%0-n个任意字符_1个任意字符3.selectfirst_namefroms_emp;找出所有带a的first_name'%a%'selectfirst_namefroms_empwherefirst_namelike'%a%';找出倒数第二字符是a的first_nameselectfirst_namefroms_empwherefirst_namelike'%a_';4.user_tablesselecttable_namefromuser_tables;S_EMPS_DEPT找出S_开头的表/*ftpftp.tarena.com.cncsd1304tam_0426cdoraclecdsqlgetoracle-sql.pptput***.txt*/selecttable_namefromuser_tableswheretable_namelike'S_%';转义selecttable_namefromuser_tableswheretable_namelike'S\_%'escape'\';6.逻辑连接符and&&or||not!a>bandc>da>borc>d1.[1200,1400]selectid,first_name,salaryfroms_empwheresalary>=1200andsalary<=1400;(1200,1400)selectid,first_name,salaryfroms_empwheresalary>1200andsalary<1400;2.找出部门号是31或者是32或者是50的员工的dept_idfirst_namesalaryselectdept_id,first_name,salaryfroms_empwheredept_id=31ordept_id=32ordept_id=50;3.selectid,first_namefroms_empwheresalary>1200anddept_id=41ordept_id=42;selectid,first_namefroms_empwheresalary>1200and(dept_id=41ordept_id=42);可以通过小括号改变逻辑优先级4.运算符的对立面问题><=<>==!=<>^=betweenaandbnotbetweenaandbinnotin注意NULL值likenotlikeisnullisnotnullselectid,manager_idfroms_empwheremanager_idnotisnull;//errorselectid,manager_idfroms_empwheremanager_idisnotnull;andorC排序排序标准按照什么标准排序排序形式降序升序orderby排序标准排序形式orderby一定是出现在sql语句的最后升序的关键字asc默认就是升序字典顺序自然顺序降序的关键字desc反字典顺序反自然顺序selectid,salaryfroms_emp;selectid,salaryfroms_emporderbysalary;降序排selectid,salaryfroms_emporderbysalarydesc;按照manager_id排序显示id,manager_idselectid,manager_idfroms_emporderbymanager_id;selectid,manager_idfroms_emporderbymanager_iddesc;排序中把NULL当最大值处理多字段排序:先按照工资排序如果工资相同再按照first_name降序排列显示idfirst_namesalaryD单行函数E多表查询F组函数和分组G子查询C排序排序标准按照什么标准排序排序形式降序升序orderby排序标准排序形式orderby一定是出现在sql语句的最后升序的关键字asc默认就是升序字典顺序自然顺序降序的关键字desc反字典顺序反自然顺序selectid,salaryfroms_emp;selectid,salaryfroms_emporderbysalary;降序排selectid,salaryfroms_emporderbysalarydesc;按照manager_id排序显示id,manager_idselectid,manager_idfroms_emporderbymanager_id;selectid,manager_idfroms_emporderbymanager_iddesc;排序中把NULL当最大值处理多字段排序:先按照工资排序如果工资相同再按照first_name降序排列显示idfirst_namesalaryselectid,first_name,salaryfroms_emporderbysalary;selectid,first_name,salaryfroms_emporderbysalaryasc,first_namedesc;当第一排序字段值相同时才启用第二排序字段oracle10goracle11goracle9iD单行函数对sql语句影响的每一行都返回一个结果upperselectfirst_name,upper(first_name)froms_emp;selectfirst_name,upper(first_name)froms_empwhereid=-1;组函数无论sql语句影响多少行只返回一个结果selectcount(first_name)froms_emp;selectcount(first_name)froms_empwhereid=-1;单行函数的测试会因为数据量的不同测试变的复杂为了测试单行函数引入了dual表单行单列的表descdual;select*fromdual;单行函数处理字符串upper(n)lower(n)selectlower('HELLO')fromdual;concat(n1,n2)selectconcat('hello','world')fromdual;selectconcat(upper('hello'),'world')fromdual;这个函数用的比较少因为有字符串拼接符selectupper('hello')||'world'||'hello'fromdual;length(n)selectlength('hello')fromdual;initcap(n)将字符串中单词首字母改为大写selectinitcap('oneworldonedream')fromdual;nvl(n1,n2)selectnvl(NULL,'isnull')fromdual;substr(n1,n2,n3)n1要处理的字符串或者字段n2从什么位置开始处理从1开始编号可以负数-1n3截取多少个字符selectsubstr('hello',0,3)fromdual;selectsubstr('hello',1,3)fromdual;把s_emp表中first_name后三个字符显示出来selectfirst_namefroms_emp;selectfirst_name,substr(first_name,-3,3)froms_emp;能不能得到first_name的后三个字符从前向后处理字符串转换函数to_number(n1)selectto_number('123456')fromdual;selectid,first_namefroms_empwhereid=1;selectid,first_namefroms_empwhereid='1';selectid,first_namefroms_empwhereid=to_number('1');selectid,first_namefroms_empwhereid=to_number('abc');//logicerror数字处理函数round(n1,n2)四舍五入n1要处理的数字n2有默认值默认是0可以传别的数字selectround(2.48)fromdual;selectround(2.51)fromdual;selectround(2.48,0)fromdual;selectround(2.51,0)fromdual;selectround(2.48,1)fromdual;selectround(2.51,1)fromdual;selectround(2.558,2)fromdual;---------------selectround(12.88,-1)fromdual;selectround(12.88,-2)fromdual;----------------------------------trunc(n1,n2)截取selecttrunc(2.48)fromdual;selecttrunc(2.99)fromdual;selecttrunc(2.48,0)fromdual;selecttrunc(2.51,0)fromdual;selecttrunc(2.48,1)fromdual;selecttrunc(2.51,1)fromdual;selecttrunc(2.558,2)fromdual;---------------selecttrunc(12.88,-1)fromdual;selecttrunc(12.88,-2)fromdual;---------------------------格式显示函数to_char(n1,n2)n1要处理数字或者字段n2格式n2可以省略把数字变成字符串类型格式如果有就是字符串类型'fm'selectto_char(salary)froms_emp;把salary变成字符串类型格式:9任意的一位数字0强制显示前导012345.86012,345.00,分隔符.小数点$美元符号L本地货币符号¥RMBselectto_char(salary,'fm$999,999.99')froms_emp;selectto_char(salary,'fm$099,999.99')froms_emp;如果想显示小数的00位可以再小数点后使用00selectto_char(salary,'fm$099,999.00')froms_emp;selectto_char(12345.86,'fm$099,999.99')fromdual;selectto_char(12345,'fm$099,999.99')fromdual;selectto_char(12345.86,'fm$099,999.00')fromdual;selectto_char(12345,'fm$099,999.00')fromdual;selectto_char(salary,'fmL099,999.00')froms_emp;如何修改和oracle相关的系统语言环境selectuserenv('lang')fromdual;USZHS修改系统的环境变量1.如果不是bash切换shellbash2.修改环境变量的文件cdvi.bash_profileexportNLS_LANG='SIMPLIFIEDCHINESE_CHINA.ZHS16GBK'exportNLS_LANG='AMERICAN_AMERICA.ZHS16GBK'3.保存文件4.让文件生效source.bash_profile5.重新进入sqlplusopenlab/open1236.验证selectuserenv('lang')fromdual;函数嵌套从前向后处理字符串得到first_name后三个字符selectfirst_name,substr(first_name,-3,3)froms_emp;selectfirst_name,substr(first_name,length(first_name)-2,3)froms_emp;显示first_namemanager_id如果manager_id为NULL就显示成BOSSselectfirst_name,manager_idfroms_emp;selectfirst_name,nvl(manager_id,'BOSS')froms_emp;selectfirst_name,nvl(to_char(manager_id),'BOSS')froms_emp;selectfirst_name,nvl(to_char(manager_id),'''BOSS''')froms_emp;E多表查询a.s_dept部门表SQL>descs_dept;Name---------------------ID部门编号NAME部门名REGION_ID地区编号s_region地区表SQL>descs_region;Name-------------------------ID地区编号NAME地区名称1.查询每个员工的first_name和dept_idselectfirst_name,dept_idfroms_emp;2.查询每个员工的first_namedept_id部门名部门名没有在s_emp而是在s_deptselectfirst_name,dept_id,namefroms_emp,s_dept;3.25*13笛卡尔积4.selectfirst_name,dept_id,namefroms_emp,s_deptwheredept_id=id;//error当两张表中有相同的字段时需要做区分selectfirst_name,dept_id,namefroms_emp,s_deptwheredept_id=s_dept.id;selects_emp.id,first_name,dept_id,namefroms_emp,s_deptwheredept_id=s_dept.id;5.要做表连接首先要找出表和表之间的连接关系列出每个部门的名字和每个部门对应的地区名称s_depts_regionselects_dept.name,s_region.namefroms_dept,s_regionwheres_dept.region_id=s_region.id;6.为了简化表名的区分引入了表名的别名selects_dept.name,s_region.namefroms_deptd,s_regionrwheres_dept.region_id=s_region.id;//errorselectd.name,r.namefroms_deptd,s_regionrwhered.region_id=r.id;使用等号作为连接条件的运算符的这种连接我们称之等值连接。不使用等号做连接符号的连接叫非等值连接。b.非等值连接:SQL>descsalgrade;Name-------------------------GRADE工资级别LOSAL低工资HISAL高工资给你一个人的工资你可以判断出这个人的工资级别列出每个员工的first_namesalary和salary对应的工资级别a25004b8001c13002selectfirst_name,salary,gradefroms_emp,salgradewheresalarybetweenlosalandhisal;selectfirst_name,salary,gradefroms_emp,salgradewheresalary>=losalandsalary<=hisal;c.一种特殊的连接--------自连接一张表中放了多种不同含义的数据领导是不是员工是不是领导的员工也是员工s_emp即有领导也有不是领导的员工找出所有的领导?有员工的领导id是这个员工的id则这个员工是领导selectdistinctm.id,m.first_namefroms_empe,s_empmwheree.manager_id=m.id;等值非等值自连接符合连接条件数据就被选中不符合连接条件数据就被过滤掉;-----内连接------------------------------------------列出每个员工的first_name和员工的对应的部门名selects_emp.id,first_name,namefroms_emp,s_deptwheredept_id=s_dept.id;列出每个员工的first_name和员工的对应的部门名即使员工的部门id不出出现在部门表中也要列出这个员工部门名显示成nodepartmentupdates_empsetdept_id=NULLwhereid=2;commit;一个也不能少外连接:外连接的结果集等于内连接的结果集加匹配不上的记录selects_emp.id,first_name,namefroms_emp,s_deptwheredept_id=s_dept.id;selects_emp.id,first_name,namefroms_emp,s_deptwheredept_id=s_dept.id(+);(+)的字段对面的表的数据全部被匹配出来selects_emp.id,first_name,nvl(name,'nodepartment')froms_emp,s_deptwheredept_id=s_dept.id(+);使用外连接列出那些人没有部门selects_emp.id,first_name,nvl(name,'nodepartment')froms_emp,s_deptwheredept_id=s_dept.id(+)ands_dept.idisnull;列出每个部门和部门对应的地区名称selectd.id,d.name,r.namefroms_deptd,s_regionrwhered.region_id=r.id;colnamefora20;增加了新的部门insertintos_deptvalues(2013,'IOS',NULL);commit;要找出所有的部门信息则需要把(+)加在地区表的字段上selectd.id,d.name,r.namefroms_deptd,s_regionrwhered.region_id=r.id(+);-------------------------------------找出所有的领导?----内连接的自连接/*8个领导*/selectdistinctm.id,m.first_namefroms_empe,s_empmwheree.manager_id=m.id;25-8=17写一条sql找出所有的普通员工selectdistinctm.id,m.first_namefroms_empe,s_empmwheree.manager_id!=m.id;//25内连接selectdistinctm.id,m.first_namefroms_empe,s_empmwheree.manager_id(+)=m.id;找出那些是假领导selectdistinctm.id,m.first_namefroms_empe,s_empmwheree.manager_id(+)=m.idande.manager_idisnull;----------------------------------------------列出所有员工的first_namesalarygrade//25selectfirst_name,salary,gradefroms_emp,salgradewheresalarybetweenlosal(+)andhisal(+);selectfirst_name,salary,gradefroms_emp,salgradewheresalary>=losal(+)andsalary<=hisal(+);sql99的连接标准内连接joinajoinbon连接条件;innerjoinainnerjoinbon连接条件;selects_emp.id,first_name,namefroms_emp,s_deptwheredept_id=s_dept.id;selects_emp.id,first_name,namefroms_empjoins_deptondept_id=s_dept.id;selects_emp.id,first_name,namefroms_empinnerjoins_deptondept_id=s_dept.id;外连接:aleftouterjoinbon连接条件;arightouterjoinbon连接条件;afullouterjoinbon连接条件;selectfirst_name,salary,gradefroms_emp,salgradewheresalarybetweenlosal(+)andhisal(+);哪张表发起连接则把哪张表中的数据全部匹配出来.selectfirst_name,salary,gradefroms_empleftouterjoinsalgradeonsalarybetweenlosalandhisal;selectfirst_name,salary,gradefromsalgraderightouterjoins_emponsalarybetweenlosalandhisalwheregradeisnull;全外连接fullouterjoin全外连接的结果集等于左外连接连接的结果集加右外连接的结果集然后减去重复的记录oracle实现全外连接不是两端都加(+)union用来合并两个结果集排重unionall用来合并两个结果集selectidfroms_empunionselectidfroms_emp;selectidfroms_empunionallselectidfroms_emp; 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf :内连接:符合连接条件数据就被选中不符合连接条件就被过滤掉.等值连接非等值连接自连接外连接:外连接的结果集等于内连接的结果集加匹配不上的记录(一个也不能少)等值连接非等值连接自连接sql99中的内外连接内连接ajoinbon连接条件;ainnerjoinbon连接条件;外连接:aleftouterjoinbon连接条件;arightouterjoinbon连接条件;afullouterjoinbon连接条件;全外连接:左外加右外减去重复的记录oracle(+)不直接支持fullouterunionunionallF组函数和分组G子查询F.组函数和分组组函数:对一组数据处理之后得到一个结果count(字段)count(*)max统计最大值min统计最小值avg统计平均值sum统计和selectcount(salary),max(salary),min(salary)froms_emp;统计提成的平均值和提成的和commission_pctselectavg(commission_pct),sum(commission_pct)froms_emp;组函数对NULL值的处理是忽略的selectavg(distinctcommission_pct),sum(distinctcommission_pct)froms_emp;可以使用排重的方式进行统计分组:groupby分组标准(where后)性别分组标准部门号可不可以作为分组标准selectdept_id,count(id)froms_empgroupbydept_id;按照部门号分组统计每个部门的平均工资selectdept_id,avg(salary)froms_empgroupbydept_id;按照部门号分组统计每个部门的平均工资列出平均工资大于1200的部门selectdept_id,avg(salary)froms_empgroupbydept_id;对分组之后的数据进行过滤使用havingselectdept_id,avg(salary)froms_empgroupbydept_idhavingavg(salary)>1200;selectdept_id,avg(salary)asalfroms_empgroupbydept_idhavingasal>1200;//errorhaving执行的要早于selectselectdept_id,avg(salary)asalfroms_empgroupbydept_idhavingavg(salary)>1200orderbyasal;sql的执行顺序fromwheregroupbyhavingselectorderby分组中的表的连接selectdept_id,avg(salary)froms_empgroupbydept_idhavingavg(salary)>1200;按照部门号分组求平均工资列出工资大于1200列出部门名selectdept_id,avg(salary),namefroms_emp,s_deptwheredept_id=s_dept.id(+)groupbydept_idhavingavg(salary)>1200;//errorERRORatline1:ORA-00979:notaGROUPBYexpressionselectdept_id,avg(salary),namefroms_emp,s_deptwheredept_id=s_dept.id(+)groupbydept_id,namehavingavg(salary)>1200;selectdept_id,avg(salary),count(name)froms_emp,s_deptwheredept_id=s_dept.id(+)groupbydept_idhavingavg(salary)>1200;//logicerror在有分组语句中的sql中select后的字段要么是分组标准要么是经过合适的组函数处理过的.selectdept_id,avg(salary),max(name)froms_emp,s_deptwheredept_id=s_dept.id(+)groupbydept_idhavingavg(salary)>1200;按照部门号分组显示部门名和部门对应的地区名称s_depts_regionselectd.id,max(d.name)name,min(r.name)namefroms_deptd,s_regionrwhered.region_id=r.idgroupbyd.id;colnamefora20G.子查询把一条sql的执行结果做为另一条查询的基础a.where之后selectdistinctmanager_idfroms_emp;selectid,first_namefroms_empwhereidin(6,7,8,9,10,1,2,3,NULL);selectid,first_namefroms_empwhereidin((selectdistinctmanager_idfroms_emp));那些人是普通员工?selectid,first_namefroms_empwhereidnotin((selectdistinctmanager_idfroms_emp));//norowsselected使用notin是避免NULLselectid,first_namefroms_empwhereidnotin((selectdistinctmanager_idfroms_empwheremanager_idisnotnull));selectid,first_namefroms_empwhereidnotin((selectdistinctnvl(manager_id,-1)froms_emp));b.having后按照部门号分组求每个部门的平均工资列出平均工资大于等于32部门平均工资的部门selectdept_id,avg(salary)froms_empgroupbydept_idhavingavg(salary)>=(selectavg(salary)froms_empwheredept_id=32);selectdept_id,avg(salary)froms_empgroupbydept_idhavingavg(salary)>=(selectavg(salary)froms_empwheredept_id=32);selectdept_id,avg(salary)froms_empwheredept_id!=32groupbydept_idhavingavg(salary)>=(selectavg(salary)froms_empwheredept_id=32);c.from后任何的sql语句我们都可以看成一张内存表selectid,first_name,salaryfroms_emp;select*from(selectid,first_name,salaryfroms_emp)wheresalary>1200;--------------------------------------------------ddl1.建表语句createtable表名(字段名类型,字段名类型,字段名类型);类型:number数字类型number(7)number(7,2)charvar(n)字符串定长字符串varchar2var(n)变长字符串-----------------------date日期类型droptabletestemp;createtabletestemp(idnumber,fnamechar(10),snamevarchar(10));ERRORatline1:ORA-00955:nameisalreadyusedbyanexistingobject2.删除表droptabletestemp;如果表不存在ERRORatline1:ORA-00942:tableorviewdoesnotexist定长字符串和变长字符串的区别定长无论你存入的数据是多少都存n个字符不够n个就补空格变长字符串数据如果不够n个字符则就存存入的字符数insertintotestempvalues(1,'xsy','xsy');commit;selectlength(fname),length(sname)fromtestemp;空间时间结构体日期类型:datedroptablemyorder9527;createtablemyorder9527(onochar(30),onamevarchar2(30),omoneynumber,odatedate);SQL>descmyorder9527;NameNull?Type-----------------------------------------------------ONOCHARONAMEVARCHAR2(30)OMONEYNUMBMBERODATEDATE日期类型:和系统语言相关'dd-MON-yy''28-JUN-13''28-6月-13''dd-MON-yyyy'9999insertintomyorder9527values('o0001','zgzq',1,'28-JUN-13');commit;日期默认显示放入的格式都是dd-MON-yy改变默认格式可以使用to_charselectodate,to_char(odate,'yyyy-mm-ddhh24:mi:ss')frommyorder9527;yyyy四位年mm两位月dd两位天hh小时hh2424小时制mi分钟ss秒使用默认的日期格式只能插入年月日默认放入的时分秒都是0当前日期的插入可以使用sysdate代替insertintomyorder9527values('0002','test',0.01,sysdate);commit;selectodate,to_char(odate,'yyyy-mm-ddhh24:mi:ss')frommyorder9527whereono='0002';放入2008-08-0820:08:08AUG默认的日期格式没办法放入时分秒默认是0放入任何日期带时分秒信息to_date('日期格式字符串','日期格式')把一个日期字符串变成一个日期值'2008-08-0820:08:08'------>日期值yyyy四位年mm两位月dd两位天hh小时hh2424小时制mi分钟ss秒MON英文月的缩写MONTH英文月DAY星期几insertintomyorder9527values('0003','bjayh',2008,to_date('2008-08-0820:08:08','yyyy-mm-ddhh24:mi:ss'));commit;selectodatefrommyorder9527whereono='0003';selectodate,to_char(odate,'dd-mm-yyyyhh24:mi:ssday')frommyorder9527whereono='0003';--------------------------------------------日期的默认格式'dd-MON-yy'放入日期和显示都可以采用默认格式为了显示日期的时分秒信息我们可以格式化显示日期to_char(日期,'格式')日期格式yyyymmddhh24hhmissMONmonthday为了放入时分秒信息-------sysdate放入任意日期to_date('日期格式字符串','格式');--------------------------------------------日期的操作两个日期相减得到两个日期相差的天数selectsysdate-to_date('2008-08-0820:08:08','yyyy-mm-ddhh24:mi:ss')fromdual;日期可以加减一个整数selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss'),to_char(sysdate+1,'yyyy-mm-ddhh24:mi:ss')fromdual;selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss'),to_char(sysdate-1,'yyyy-mm-ddhh24:mi:ss')fromdual;selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss'),to_char(sysdate-1/24,'yyyy-mm-ddhh24:mi:ss')fromdual;按天小时分钟秒任意调整往前调一个月往后调2个月add_months(日期,多少个月)selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss'),to_char(add_months(sysdate,2),'yyyy-mm-ddhh24:mi:ss')fromdual;selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss'),to_char(add_months(sysdate,-7),'yyyy-mm-ddhh24:mi:ss')fromdual;----------算两个日期相差了多少个月months_between(date1,date2)selectmonths_between(sysdate,to_date('2008-08-0820:08:08','yyyy-mm-ddhh24:mi:ss'))mtwfromdual;---------当前时间对应月的最
本文档为【达内oracle】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
伊人
暂无简介~
格式:doc
大小:135KB
软件:Word
页数:0
分类:房地产
上传时间:2020-02-17
浏览量:7