Oracle数据库学习课件_第1页
Oracle数据库学习课件_第2页
Oracle数据库学习课件_第3页
Oracle数据库学习课件_第4页
Oracle数据库学习课件_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oracle的历史?Oracle公司(甲骨文)创始人:LarryEllison32岁,公司提供数据库服务?公司成立于1977年,83年公司更名为Oracle,原名为”软件开发实验室”?Oracle数据库适用于大型企业?竞争对手- 微软的SQLServer- IBM的DB2?目前的版本- 2.07.0,8.0,8i,9i,10gOracle的服务:我的电脑右键选择管理-服务和应用程序一服务OracleServer<ORACLE_SID>数据库服务,进程为ORACLE.exeOracle<HOME_NAME>TNSListener监听器服务,进程TNSLSNR.ex默认端口

2、1521、1526OracleDBConsole<ORACLE_SID>对应用于OEMOracle<HOME_NAME>iSQL*Plus对HiSQL*Plus<ORACLE_SID>-是数据库或例程的系统标识符<HOME_NAME>是Oracle主目录名称这几个服务之间的关系:启动顺序:1、Oracle<HOME_NAME>TNSListene必须启动2、OracleServer<ORACLE_SID>必须启动3、OracleDBConsole<ORACLE_SID相动依赖于OracleServer<ORAC

3、LE_SID>SqlPlusSqlPlus是Oracle任何版本都自带的数据库操作工具,使用它可以完成大部分的数据库操作。SqlPlus可以“开始程序Oracle”启动,也可以命令行启动(互动)1.命令行启动sqlPlussqlplus用户名/密码orcl或sqlplus用户名orcl如果用户是管理员要在sqlplus用户名/密码机机字符串assysdba“/”是用户名和密码分隔符号“是密码和数据库的分隔符号“orcl”是数据库的名称,在安装时指定±OrscleSQL*Plus二j叵文件宴编辑如I搜索选项帮助迎人SQL*P1U5:Release10.2.C,1.0-Produc

4、tionon星期一5月111。;收:252Q09Copyright(c)1982,2B05,Oracle.Allrightsreserued.连接到:,OracleDatabase10gEinterpriseEditioinRelease-ProductionWiththePartitioning,ULftPwndDwtwMiningcaptionsSQL>shouuser;USER为"SYS"SQL>disc从OracleDatabdSf10gEnterpriseEditionRuled占e10.2.0-1.O-ProductionWiththe

5、Partitioning,OLfiPandDataMiningoptions断开S(JL>shouuserUSER为.SQL?connscott/tigcreoracle己连接,SQL>shouuser;USER为"SCOTT*'SQL>y|<Iiu3曲常用命令(互动)connect切换用户showuser显示当前用户setlinesize1000设置行显示长度setpagesize1000设置分页长度descdept查看表结构selecttable_namefromuser_tables查询当前用户的表/运行上一条SQL语句clearscreen清除

6、屏幕edit编辑spoold:/a保存输出结果到某个位置spooloff保存结束quit退出list查看最后一条语句文件名.sql运行外部文件中的SQL语句Sql*plus的常用命令是一个oracle提供的工具,使用此工具可以完成数据库的操作和管理。SQL*Plus有两种工作方式:1、 基于图形界面的-sqlplusw2、 基于命令行的-sqlplusSql*plus中可以执行3种类型的命令:1、 SQ断句SELECT*FROMtab;2、 PL/SQL语句CREATETABLEtest(xnumber,infovarchar(20);Commit;编写一个存储过程,向test表中插入20条记

7、录。DECLARExnumber:=10;BEGINFORIIN1.20LOOPINSERTINTOtestVALUES(x,'测试数据');x=x+i;ENDLOOP;END;3、 SQL*Plus内部命令这些命令用于设置SQL*Plus的环境或格式化输出结果。例如:改变EMP1里SA例的输出格式COLUMNSALFORMAT$99,99HEADING薪水';使用SQL*Plus可以执行操作系统本身的命令:例如:在windows下的记事本notepad.exeHOSTnotepad.exe;退出SQL*Plus返回操作系统:EXIT(QUIT)帮助提示:HELPSET

8、;HELP;HELPED;清除屏幕:CLEARSRC;SQL*Plus编辑命令命令缩写作用APPENDtextAtext将text加到当前行末端CHANGE/old/newC/old/new将当前行中的01d改为newCHANGE/textC/text从当前行中删除textCLEARBUFFERCLBUFF清除全部行DEL删除当前行INPUTI加入一行或多行INPUTtextItext加入由text组成的行LISTL列出缓冲区中的全部行LISTnLn或n列出n行LISTlastLlast列出最后一行LISTmnLmn列出nfijn行运行缓冲区的命令:RUN或/保存缓冲区中的内容为.sql文件:

9、SAVEf:test;编辑或者读取命令文件.sqlEDIT文件名;在SQl±件中的注释有3种方法:使用SQL*Plus的REMARK令;使用SQ注释分界符/*/使用ANSI/SQL的“-”型注释读取命令文件在SQL*PLU阱:GETf:test.sql;运行.sql文件中的指令:STAR成碘用更多建议:尽量使用记事本编写代码,这样有利于修改。所需要的表在所有的讲解中所要使用到的表全部都是scott用户下的表,所以必须了解在此用户下有那几张表,以及每张表的作用是什么。避免出现汉字,因为实际开发中容易出现乱码问题。雇员表(em成雇员表中记录的是一个个的雇员的基本信息。雇员表(EMPNo.

10、字段类型描述1EMPNONUMBER(4)表示雇员编号,是唯一编号2ENAMEVARCHAR2(10)表示雇员姓名3JOBVARCHAR2(9)表示工作职位4MGRNUMBER(4)表示一个雇员的领导编号5HIREDATEDATE表示雇佣日期6SALNUMBER(7,2)表示月薪,工资7COMMNUMBER(7,2)表示奖金,或者称为佣金8DEPTNONUMBER(2)部门编号部门表(dept)表示一个个具体的部门信息首B门表(dept)No.字段类型描述1DEPTNONUMBER(2)部门编号,是唯一编号2DNAMEVARCHAR2(14)部门名称3LOCVARCHAR2(13)部门位置工资

11、等级表(SALGRADE一个公司工资是有等级制度,那么用此表表示一个工资的等级工资等级表(SALGRADENo.字段类型描述1GRADENUMBER等级名称2LOSALNUMBER此等级的最低工资3HISALNUMBER此等级的最高工资奖金表(BONUS十OracleSQL*Plus文件编辑搜索)选项Q)帮助SQL>descbonus;名称是否为空多类型ENfihlE JOB SfiL COMMSQL> |URRCHA用2(10)UftRGHARZC?)HUHBERKIHBER表示的是一个雇员的工资及奖金奖金表(BONUSNo.字段类型描述1ENAMEVARCHAR2(10)雇员姓

12、名2JOBVARCHAR2(9)雇员工作3SALNUMBER雇员工资4COMMNUMBER雇员奖金(佣金)范例:查询每月可以得到奖金的雇员信息 奖金是commE:段 只要字段中存在内容,则表示此内容不为空(null),如果存在内容,则会显示具体的值。 不为空的表示:字段ISNOTNULLSELECT-FROM-emp-wHERE-comm-ls-NOT-NULL"范例:查询没有奖金的雇员没有奖金则comm字段的内容肯定是null,格式:字段ISNULLSELECT*FROMempWHEREcommISNULL;范例:要求查询出,基本工资大于_1500,同时可以领取奖金的雇员信息。 此

13、时应该是两个条件,而且两个条件必须同时满足 既然要求两个条件全部满足,则必须使用ANDB作符进行条件的连接。SELECT'*'FROM'emp'WHERE-sal>1500'AND'comm'lS'NOT'NULL'同时指定了两个条件,两个条件必须同时满足才可以查询出结果。范例:要求查询出,基本工资大于1500,或者可以领取奖金的雇员信息。 如果要表现出或者的概念使用OR进行连接,表示两个条件有一个满足即可。SELECT*FROMempWHEREsal>1500ORcommISNOTNULL;之前使用N

14、OTT以取反,把真的条件变为假的,假的变为真的。范例:要求查询出,基本工资不大于1500,同时不可以领取奖金的雇员信息。 此时相当于是整体的条件取反。SELECT*FROMempWHERENOT(sal>1500ORcommISNOTNULL);等价于SELECT*FROMempWHEREsal<=1500andcommisnull;从程序中可以发现,通过括号表示一组的条件。范例:查询基本工资大于1500,但是小于3000的全部雇员信息。 满足两个:sal>1500,sal<3000SELECT*FROMempWHEREsal>1500ANDsal<3000

15、;在SQL法中,提供了一个专门的指定范围查询的过滤语句:BETWEENANED-语法格式:字段BETWEEN小值AND最大值例:使用BETWEENANDI改之前的操作SELECT*FROMempWHEREsalBETWEEN1500AND3000;实际上BETWEEN-ANDt作等价:sal>=1500ANDsal<=3000,包含了等于的功能。范例:查询出在1981年雇佣的全部雇员信息 1981年1月1日1981年12月31日之间雇佣的雇员 日期表示的时候要加“”SELECT*FROMempWHEREhiredateBETWEEN'1-1月-81'AND'

16、31-12月-81'结论:BETWEEN-AN而询除了可以支持数字之外,也可以支持日期的查询 随着深入的学习会发现,日期实际上也是以数字的形式表示出来。范例:要求查询出姓名是smith的雇员信息 此时告诉了要查询的名字,条件:ename='smith'SELECT*FROMempWHEREename='smith'执行以上的查询语句之后,并不会返回查询结果,再次查询数据库表的信息,发现smith是采用大写的形式表示的,在Oracle中是对大小写敏感的,所以此时在查询的时候必须以大写的形式进行条件的编写。代码修改如下:SELECT*FROMempWHERE

17、ename='SMITH'范例:要求查询出雇员编号是7369、7499、7521的雇员的具体信息 如果此时按照之前的做法,则设置条件要使用。琏接:empno=7369ORempno=7499ORempno=7521SELECT*FROMempWHEREempno=7369ORempno=7499ORempno=7521;实际上,此时是指定了查询的范围,那么既然有范围了在SQ用法中就可以使用IN操作符完成。语法格式:字段IN(值1,彳12,.,值n)如果现在要求查询的内容不在此范围之中,则可以使用NOTIN,语法如下:字段NOTIN(值1,彳宜2,.,值n)范例:使用以上的格式进

18、行修改SELECT*FROMempWHEREempnoIN(7369,7499,7521);范例:要求查询出雇员编号不是7369二7499/7521的雇员的具体信息SELECT*FROMempWHEREempnoNOTIN(7369,7499,7521);另外,需要说明的是,使用IN操作符不光可以用在数字上,也可以用在字符串的信息上。范例:要求查询出姓名是SMITHALLENKING勺雇员信息SELECT*FROMempWHEREenameIN('SMITH','ALLEN','KING');如果在指定的查询范围中指定了额外的内容,则不影响程序运

19、行。SELECT*FROMempWHEREenameIN('SMITH','ALLEN','KING','$#VC');在一般的日常见到的站点中经常发现有模糊查找功能,即:输入一个指定的关键字,""把符合的内容全部查询出来,在SQ叶使用LIKE语句完成。在使用LIKE语句的时候要注意通配符的问题,在LIKE语句中主要使用以下两种通配符: "%:可以匹配任意长度的内容 “_":可以匹配一个长度的内容范例:查询出所有雇员姓名中第二个字母包含“M的雇员信息SELECT*FROMempWHEREen

20、ameLIKE'_M%'范例:查询出雇员姓名中包含字母M勺雇员信息 此时,表示可以在任意的位置上出现字母MSELECTVFROM_emp-WHERE-ename_LIKE-'%M%'"但是,要提醒大家的是:“如果在使用LIKE的时候没有指定查询的关键字,则表示查询全部”SELECT*FROMempWHEREenameLIKE'%'使用LIKE还可以方便的进行日期的查找功能。范例:要求查询出在1981年雇佣的雇员信息SELECT*FROMempWHEREhiredateLIKE'%81%'范例:查询工资中包含6的雇员信息S

21、ELECT*FROMempWHEREsalLIKE'%6%'在操作条件中还可以使用:>、>=、=、<、<=等计算符号不等于符号:在SQ叶如果要想使用不等于符号,可以有两种形式:“<>"、"!=范例:查询雇员编号不是7369的雇员信息使用“<>”完成SELECTVFROM_emp-WHERE-empno<>7369"使用"!=”完成SELECT_*_FROM_emp_WHERE-empno!=7369_;对结果进行排序(ORDERB仔句)(重点)在SQ冲可以使用ORDERBY句对查

22、询的结果进行排序,例如,现在使用查询全部的语句:SELECTvFROM-emp"此时,从查询结果可以发现,是按照雇员的编号进行排序的,那么此时如果要对使用指定的列进行排序,则就必须使用ORDERBY句,语法格式如下:SELECTDISTINCT*|具体的列别名FRO般名称WHERE条件(s)ORDERBY排序的字段1,排序的字段2ASC|DESCASC!示升序、DESC!示降序范例:要求按照工资由低到高排序SELECT-FROM-emp-ORDER-BY'sal'之前是按照由低到高的顺序完成,是采用的升序的形式,现在要求使用降序的形式完成。W际上如果在排序的时候没有指

23、定排序规则,则默认的排序规则是升序排列。SELECT*FROMempORDERBYsalASC;要想使用降序的方式完成,则使用DES卸可。SELECT"FROM-emp-ORDER-BY-sal-DESC"于OracleSQL*Plus文件旧铜辑搜索)选项Q)帮助如SQL>select*fronemp42orderbysaldesc;EHPNOENAHEJOBMGRHIREDfHE8HL7839K1HGPRESIDENT17Tl月-815。皿7902FORDfiMALVST75"M-12F-81360677RSSCOTTANALYST了5“19-UB7300

24、0了566JONESMANAGER7839毗一印月-8129757698BLAKEMANAGER7839e1T月-81285。“82CLARKMANAGER7839的Y月-812班©749gALLENSALESilON7698*2月-8116007844TURNERSALESMAN7698酶-9月isoeMILLERCLERH7782如T月-8213007521MRDSALESNAN萼-2月e-i12507A5NMARTINSALESHON769628-9J-8112567876ADANSCLERH77R823-5月-871-1007900JANESCLERK7698GST2月-M9

25、5G7369SMITHCLERH79fl217T2月T®80。范例:要求查询出10部门的所有雇员信息,查询的信息按照工资由高到低排序,如果工资相等,则按照雇佣日期由早到晚排序。此时存在两个排序条件,第一个是降序,第二个升序SELECT*FROMempWHEREdeptno=10ORDERBYsalDESC,hiredateASC;排序的操作肯定是放在整个SQ用句的最后执行。单行函数(重点)数据库系统中,每个数据库之间唯一不同的最大区别点就在与函数的支持上,使用函数可以完成一系列的操作功能。单行函数语法:function_name(column|expression,arg1,arg2

26、,)参数说明: function_name:函数名称 column:数据库列名 expression:字符串或计算表达式 arg1,arg2:在函数中使用参数单行函数分类: 字符函数:接受字符输入并且返回字符或数值 数值函数:接受数值输入并返回数值 日期函数:对日期型数据进行操作 转换函数:从一种数据类型转换为另一种数据类型 通用函数:NVLS数、DECOD函数字符函数Oracle中的dual表Dual是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。这是因为ORACLED

27、UA展的操作做了一些内部处理,尽量保证DUA院中只返回一条记录.当然这写内部操作是不可见的.以下是dual的一些使用方法:1、查看当前用户,可以在SQLPlus中执行下面语句selectuserfromdual;2、用来调用系统函数selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')fromdual;-获得当前系统时间selectSYS_CONTEXT('USERENV','TERMINAL')fromdual;-获得主机名selectSYS_CONTEXT('USERENV','la

28、nguage')fromdual;-获得当前localeselectdbms_random.randomfromdual;-获得一个随机数3、可以用做计算器select7*9fromdual;1. ACII(x)返回字符x的ASCII码selectascii('a')fromdual;2. 求ACSII('a'),ASCII('A"),ASCII('0'),ASCII('XYZ)'的值3. CHR(X)返回ASCII码为X的字符4. CONCAT(x,y)字符串拼接函数selectconcat(conca

29、t(ename,'isa'),job)fromemp;5. INITCAP(x)首字母大写selectinitcap(ename)fromemp;6. INSTR(x,y,n,m)确定y在x中的位置。n是起始查找的位置,m第几次出现的位置。selectinstr('HelloWorld!','l',2)fromdual;selectinstr('HelloWorld!','l',2,3)fromdual;7. LENGTH(x序符串长度selectename,length(ename)fromempwhereemp

30、no=7698;8. LOWER(x)专换小写selectlower(ename)fromemp;9. UPPER(x联换大写10. LPAD(x,n,y)在字符串x的左边补充字符串y,得到总长为n个字符的字符串。可选参数y用于指定在x左边补充的字符串;省略参数y,默认值为空串。selectlpad(ename,15,'$#')fromemp;11. RPAD(x,n,y)selectrpad(ename,15,'#$')fromemp;12. LTRIM(x,y)""从字符串x的左边截去包含在字符串""y中的字符。如果不

31、指定参数""y,则默认截去空格。selectltrim('abcdab','a')fromdual;13.RTIME(x,y)14.trim(x)去除左右空格15.SUNSTR(x,n,m)返回字符串x中的一个子串,这个子串从字符串x的第n字符开始,截取参数m个字符。selectsubstr('abcsdfsdwfg',3,4)fromdual;16.replace(x,y,z)将字符串x中所具有的子串y用子串z替换selectreplace('jackandjue','j','bl&#

32、39;)fromdual;19. TRANSLATE(string,if,then)根据“if”中字符的位置,并检查“""then”的相同位置,然后用该位置的字符替换“string”中的字符。selecttranslate(ename,'AE','12')fromemp;是专门处理字符的,例如,可以将大写字符变为小,还能求出字符的长度。范例:将小写字母变为大写字母SELECTUPPER('smith')FROMDUAL;范例:一般用户在查询一个人姓名的时候有可能考虑到这个人的姓名是大写字母存的还是小写字母保存的呢? 那么此时,

33、为了方便用户的使用就可以使用upper函数完成。SELECTvFROM_emp-WHERE-ename=UPPER('Smith')"还可以使用lower()函数将一个字符串变为小写字母表示。SELECT-LOWERCHELLO-wORLD'fFROM-duaP;还可以使用initcap()函数将单词的第一个字母大写SELECT-|NITCAP('HELLO-WORLD')"FROM_duar;范例;使用此函数将雇员表中的雇员姓名变为开头字母大写SELECTINITCAP(ename)FROMemp;字符串除了可以使用“|”连接之外,

34、还可以使用CONCAT(强数进行连接操作。SELECTCONCAT('hello','world')FROMDUAL;此时已经完成了连接,但是此种方式肯定不如“|”好使。在字符函数中可以进行字符串的截取、求出字符串的长度、进行指定内容的替换 字符串截取:substr() 字符串长度:length() 内容替换:replace()SELECTsubstr('hello',1,3)-截取字符串,length('hello')-字符串长度,replace('hello','l','x')-

35、字符串替换FROMDUAL;但是在substr()函数的时候有一点需要提醒大家注意,跟面试有关: Oracle中substr()函数的截取点是从0还是从1开始。|-从0或从1开始效果是一1¥的,因为Oracle比较智能。范例:要求显示所有雇员的姓名及姓名的后三个字符 因为雇员姓名的字符串长度不一样,所以只能求出整个的长度再减去2,这样进行截取操作。SELECTename,SUBSTR(ename,LENGTH(ename)-2)FROMemp;此时,功能已经实现了,但是操作比较麻烦。实际上在substr()函数中提供了一种非常方便的机制,可以采用倒着截取的方式,只要输入的位置是负数就

36、表示倒着进行。SELECT-ename,SUBSTR(ename,-3,3)-FROM_emp"数值函数数值函数只要是包含以下几种: 四舍五入:ROUND() 截断小数位:TRUNC() 取余(取模):MOD范例:执行四舍五入操作SELECTROUND(789.536)FROMdual;当然,在ROUND(两数中也可以指定四舍五入的位数范例:保留两位小数SELECT-ROUND(789.536,2)-FROM_duar;在使用ROUND(两数中还有一点非常有意思,可以直接对整数进行四舍五入的进位。SELECTROUND(789.536,-2)FROMdual;TRUNC(河ROUND

37、(不同的是,在TRUNC(臊作中,不会保留任何的小数,而且小数点也不会执行四舍五入的操作。范例:验证TRUNC(两数SELECT-TRUNC(789.536)-FROM_DUAL"范例:通过TRUNC(也可以指定小数点的保留位数SELECTTRUNC(789.536,2)FROMDUAL;范例:使用负数表示位数SELECT-TRUNC(789.536,-2)-FROM_DUAL"范例:使用MOD()函数可以进行取余的操作SELECTMOD(10,3)FROMDUAL;日期函数函数功能Add_months(x,n)返回日期x加上n个月所对应的日期。N为正数,则返回值表示x之后

38、的日期;n为负数,则返回值表示x之前的日期。current_date返回当前会话时区所对应的日期时间curren_timestamp(x)返回当前会话时区所对应的日期时间,可选参数x表示精度,如果不指定参数x,则默认精度值为6dbtimezone返回数据库所在的时区extract(year|month|dayfromx)从日期x中摘取所需要的年或月或日数据last_day(x)返回日期x所在月份的最后一天的日期localtimestamp(x)返回当前会话时区所对应的日期时间,可选参数x表示精度,如果不指定参数x,则默认精度值为6months_between(x,y)返回日期x和日期y两个日期

39、之间相差的月数next_day(x,week)返回日期x后的由week指定的星期几所对应的日期round(x,fmt)返回日期x的四舍五入结果。Fmt可以取'YEAR,'MONTH,'DAY三者之一sysdate返回当前系统的日期时间systimestamp返回当前系统的日期时间trunk(x,fmt)返回截断日期x时间数据。Fmt可以取'YEAR,'MONTH,'DAY三者之一1.SYSDATE返回当前的日期和时间SQL>selectsysdatefromdual;2.add_months(x,y)在x上力口上y个月SQL>sele

40、cthiredate,add_months(hiredate,1)fromemp2whereename='SMITH'3.last_day(时间)返回当前时间所在月的最后一天SQL>selectsysdate,last_day(sysdate)fromdual;4 .months_between(d1,d2)返回日期d1和d2之间的月份数。如果d1晚于d2,结果为正,否则返回负数SQL>selectmonths_between(sysdate,hiredate)fromemp;5 .next_date(x,week)返回x后由week指定的第一个工作日SQL>

41、selectsysdate,next_day(sysdate,'星期三')fromdual;SQL>selectsysdate,next_day(sysdate,3)fromdual6 .extract(year|month|dayfromx)抓取日期的指定部分SQL>selectextract(yearfromsysdate)fromdual;SQL>selectextract(monthfromsysdate)fromdual;SQL>selectextract(dayfromto_date('23-03-2010','dd-

42、mm-yy')fromdual7 .round(x,fmt)日期的四舍五入月-08'),year) from dual;月-08'),'month') from dual;月-08'),'day') from dual;SQL>selectround(to_date('16-3SQL>selectround(to_date('16-3SQL>selectround(to_date('16-3格式符说明举例yyyy年份2008mmmonthmon月份02dd天28day星期几星期五am/pm

43、上午/下午hh/hh12Zhh24小时2:30mi分钟30ss秒rr可以把yy替换成rr有小同的效果fm去掉数子前回的零 观察结果selectto_char(sysdate,'yyyy-mm-ddhh:mi:sspm')fromdual;selectto_char(sysdate,'yyyy-mon-ddhh24:mi:sspm')fromdual;selectto_char(sysdate,'yyyy-month-dddayhh24:mi:ss')fromdual;selectto_char(sysdate,'"公元"

44、;yyyy"年"-month-dd"日"dayhh24:mi:ss')fromdual;selectto_char(sysdate,'fmyyyy-mm-ddhh:mi:sspm')fromdual;selectto_char(to_date('98-02-23','rr-mm-dd'),'yyyy-mm-dd')fromdual;在Oracle中提供了很多与日期操作相关的函数,包括加减日期等等。但是在日期进行加或减结果的时候有一些规律: 日期-数字=日期 日期+数字=日期 日期-日

45、期=数字(天数)范例:显示10部门雇员进入公司的星期数 如果要想完成此操作,则首先必须知道当前的日期,在Oracle中可以通过以下的操作求出当前日期,使用sysdate表示。SELECTSYSDATEFROMDUAL; 求出星期数:当前日期-雇佣日期=天数/7=""星期数SELECT-empnG,ename,ROUND(SYSDATE-hiredate)Z7)-FROM_emp-;在Oracle中提供了以下的日期函数支持: MONTHS_BETWEEN(作出给定日期范围的月数 ADD_MONTHS()在指定日期上力口上指定的月数,求出之后的日期 NEXT_DAY():下一个

46、的今天是那一个日期 LAST_DAY():求出给定日期的最后一天日期范例:验证MONTHSBETWEEN()SELECTempno,ename,MONTHS_BETWEEN(sysdate,hiredate)FROMemp;程序查询时包含了小数点,可以使用ROUND(进行四舍五入的操作。范例:验证ADDMONTHS8数SELECTADD_MONTHS(SYSDATE,4)FROMDUAL;范例:验证NEXTDAY()1数 此函数求出下一次给定日期数SELECTNEXT_DAY(SYSDATE|期一,)FROMDUAL;范例:验证LASTDAY()函数 求出一个日期的最后一天SELECTLAST

47、_DAY(SYSDATE)FROMDUAL;转换函数转换函数主要有以下几种: TO_CHAR():转换成字符串 TO_NUMBER()转换成数字 TO_DATE():转换成日期范例:查询所有雇员的雇员编号、姓名、雇佣日期SELECTempno,ename,hiredateFROMemp;但是现在要求可以将年、月、日进行分开,此时就可以使用TO_CHAR(pi数进行拆分,拆分的时候必须指定拆分的通配符: 年:y,年是四位的数字,所以使用yyyy表示 月:m,月是二位的数字,所以使用mmt示 日:d,日是二位的数字,所以使用dd表示还可以使用to_char()函数进行日期显示的转换功能。 Orac

48、le中默认的日期格式:19-4月-87 中国的喜欢格式:1987-04-19从运行结果中可以发现,如果是5月,则会使用05表示。那么这个0称为前导0,如果不希望显示前导0的话,则可以使用fm去掉这些0。to_char()函数除了可以用在日期上,也可以用在数字上。双引号("):在Oracle中单双引号含义区别双引号被用来将包含特定或者空格列别名括起来SELECTempno"",ename,salas"工资"FROMemp;双引号还被用来将文本放入日期格式SELECTTO_CHAR(sysdate,'fmyyyy"年"m

49、m月"dd"日"')FROMDUAL;例如:要查询全部的雇员编号、姓名、工资SELECTempno,ename,salFROMemp;最好在数字中加入一些符号,以分割太长的数字,一般中国使用“,:所以,此时,可以使用to_char()函数进行格式化:,9:表示一位数字SELECTempno,ename,TO_CHAR(sal,'99,999')FROMemp;如果,此时,希望数字可以明确的表示出区域,可以使用以下两种符号:,$:表示美元SELECTempno,ename,TO_CHAR(sal,'$99,999')FROMe

50、mp;L:表示Local的缩写,以本地的语言进行金额的显示SELECTempno,ename,TO_CHAR(sal,'l99,999')FROMemp;TO_NUMBERT以将字符串变为数字的一种函数。SELECTTO_NUMBER('123')+TO_NUMBER('123')FROMDUAL;以上就表示把字符串变为数字,之后进行数字的加法操作。TO_DATE(两数可以将一个字符串变为DAT四1的数据。 例如:有2009-2-16是一个字符串,现在要变为DAT软型。SELECTTO_DATE('2009-02-16','

51、;yyyy-mm-dd')FROMDUAL;SELECTTO_CHAR(TO_DATE('2009-02-16','yyyy-mm-dd'),'yyyy"年"mm"月"dd"日"')FROMDUAL通用函数范例:要求求出每个雇员的年薪 求出年薪的时候应该加上奖金的,格式(sal+comm)*12SELECTempno,ename,(sal+comm)*12FROMemp;之所以造成这样的结果,是因为有些雇员的奖金是NULLNULL直计算之后结果还是NULL所以,面对这样的情况,就

52、可以使用NV画数,可以将一个指定的null值变为指定的内容。SELECTempno,ename,NVL(comm,0),(sal+NVL(comm,0)*12incomeFROMemp;如果需要进行计算的时候,对于null必须使用NVL()函数进行一个转换操作。NVL(x,y)如果x为null,则返回y值;否则返回x的值。selectename,sal+nvl(comm,0)fromemp;NVL2(x,y,z)如果x不为空返回y的值,否则返回z的值selectename,nvl2(comm,'奖金:'|comm,'无奖金')fromempDECODE(两数,此

53、函数是在面试最有可能问到的问题。DECODE(类似于IFELSEIFELSE语句。语法:DECODE(col/expression,search1,result1,search2,result2,儿default)麻col/expression:为歹U名或表达式search1、search2searchi:为用于比较的条件result1、result2-resulti为返回值如果col/expression和searchi相比较,结果相同的话,贝U返回resulti,如果没有与col/expression相匹配的结果,则返回默认枝defaulto范例:验证DECODE(两数SELECTDECO

54、DE(1,1,'内容是1',2,'""内容是2',3,'内容是3')FROMDUAL;从运行结果上看,程序将内容进行更改,显示的结果变了。可以直接在em味上使用此函数,例如,现在有如下的要求: 雇员的工作:|-CLERK:业务员|-SALESMAN:销售人员|-MANAGER经理|-ANALYST:分析员|-PRESIDENT:总裁范例:要求查询出雇员的编号,姓名,雇佣日期及工作,将工作替换成以上的信息SELECTempno雇员编号,ename雇员姓名,hiredate雇佣日期,DECODE(job,'CLERK

55、9;,'业务员,'SALESMAN',销售人员','MANAGER','经理','ANALYST','分析员,'PRESIDENT','总裁')职位FROMemp;从运行结果上发现,使用DECODE数已经让输出的职位信息有所更改。总结1、Oracle的主要用户: 超级管理员:sys/change_on_install 普通管理员:system/manager 普通用户:scott/tiger2、sqlplusw的一些常用命令 设置行显示数量:setlinesize长度 设置页

56、显示数量:setpagesize长度 ed及旨令连接:conn用户名/密码ASSYSDBA3、SQL基础语法的格式4、单行函数,这些函数应该随着开发的增长逐步掌握,DECODE(画数最重要。补充oracle运算符使用用于where比较条件有::=、=、=、包含:in、notinexists、notexists范围:betweenand、notbetween.and匹配测试:like、notlikeNull测试:isnull、isnotnull布尔链接:and、or、notoracle通配符:在查询数据时,会出现这样一种情况数据本身含有”%或者“_”符号,如果此时我们查询含有"%的数据

57、,我们要把”%进行转义,让他失去原先的通配符的含义,而仅仅表现字面的意思。在Oracle中没有转义符号"”这个字符,需要我们用ESCAP设行定义,比如“ESCAPE#'"这时#符号就是转义字符了,对于转义字符我们最好选用一些不常用的字符。任何字符前出现#符号,那么这个字符将被转义,比如A#%'第一个蹴转义代表字面意义的“而第二个是通配符。在where子句中通配符可和like条件起使用在Oracle中:%(百分号):用来表示任意数量或者可能根本没有_(下划线):表示确切未知?(问号):用来表示确切未知#(井号):用来表示确切阿拉伯数字0到9a-d(方括号):用来表示范围在这里是从a到d单引号('):在Oracle中应该只使用单引号将文本和和日期括起来,不能使用引号(包括单双引号)将数字括起来双引号("):在Oracle中单双引号含义区别双引号被用来将包含

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论