plsql常用方法在SQLPLUS下,实现中-英字符集转换altersessionsetnls_language='AMERICAN';altersessionsetnls_language='SIMPLIFIEDCHINESE';主要知识点:一、有关表的操作1)建表createtabletestasselect*fromdept;--从已知表复制数据和结构createtabletestasselect*fromdeptwhere1=2;--从已知表复制结构但不包括数据2)插入数据:insertintotestselect*fromdept;二、运算符算术运算符:+-*/可以在select语句中使用连接运算符:||selectdeptno||dnamefromdept;比较运算符:==!==likebetweenisnullin逻辑运算符:notandor集合运算符:intersect,union,unionall,minus要求:对应集合的列数和数据类型相同查询中不能包含long列列的标签是第一个集合的标签使用orderby时,必须使用位置序号,不能使用列名例:集合运算符的使用:intersect,union,unionall,minusselect*fromempintersectselect*fromempwheredeptno=10;select*fromempminusselect*fromempwheredeptno=10;select*fromempwheredeptno=10unionselect*fromempwheredeptnoin(10,20);--不包括重复行select*fromempwheredeptno=10unionallselect*fromempwheredeptnoin(10,20);--包括重复行三,常用ORACLE函数sysdate为系统日期dual为虚表一)日期函数[重点掌握前四个日期函数]1,add_months[返回日期加(减)指定月份后(前)的日期]selectsysdateS1,add_months(sysdate,10)S2,add_months(sysdate,5)S3fromdual;2,last_day[返回该月最后一天的日期]selectlast_day(sysdate)fromdual;3,months_between[返回日期之间的月份数]selectsysdateS1,months_between('1-4月-04',sysdate)S2,months_between('1-4月-04','1-2月-04')S3fromdual4,next_day(d,day):返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日selectsysdateS1,next_day(sysdate,1)S2,next_day(sysdate,'星期日')S3FROMDUAL5,round[舍入到最接近的日期](day:舍入到最接近的星期日)selectsysdateS1,round(sysdate)S2,round(sysdate,'year')YEAR,round(sysdate,'month')MONTH,round(sysdate,'day')DAYfromdual6,trunc[截断到最接近的日期]selectsysdateS1,trunc(sysdate)S2,trunc(sysdate,'year')YEAR,trunc(sysdate,'month')MONTH,trunc(sysdate,'day')DAYfromdual7,返回日期列表中最晚日期selectgreatest('01-1月-04','04-1月-04','10-2月-04')fromdual二)字符函数(可用于字面字符或数据库列)1,字符串截取selectsubstr('abcdef',1,3)fromdual2,查找子串位置selectinstr('abcfdgfdhd','fd')fromdual3,字符串连接select'HELLO'||'helloworld'fromdual;4,1)去掉字符串中的空格selectltrim('abc')s1,rtrim('zhang')s2,trim('zhang')s3fromdual2)去掉前导和后缀selecttrim(leading9from9998767999)s1,trim(trailing9from9998767999)s2,trim(9from9998767999)s3fromdual;5,返回字符串首字母的Ascii值selectascii('a')fromdual6,返回ascii值对应的字母selectchr(97)fromdual7,计算字符串长度selectlength('abcdef')fromdual8,initcap(首字母变大写),lower(变小写),upper(变大写)selectlower('ABC')s1,upper('def')s2,initcap('efg')s3fromdual;9,Replaceselectreplace('abc','b','xy')fromdual;10,translateselecttranslate('abc','b','xx')fromdual;--x是1位11,lpad[左添充]rpad[右填充](用于控制输出格式)selectlpad('func',15,'=')s1,rpad('func',15,'-')s2fromdual;selectlpad(dname,14,'=')fromdept;12,decode[实现if..then逻辑]selectdeptno,decode(deptno,10,'1',20,'2',30,'3','其他')fromdept;三)数字函数1,取整函数(ceil向上取整,floor向下取整)selectceil(66.6)N1,floor(66.6)N2fromdual;2,取幂(power)和求平方根(sqrt)selectpower(3,2)N1,sqrt(9)N2fromdual;3,求余selectmod(9,5)fromdual;4,返回固定小数位数(round:四舍五入,trunc:直接截断)selectround(66.667,2)N1,trunc(66.667,2)N2fromdual;5,返回值的符号(正数返回为1,负数为-1)selectsign(-32),sign(293)fromdual;四)转换函数1,to_char()[将日期和数字类型转换成字符类型]1)selectto_char(sysdate)s1,to_char(sysdate,'yyyy-mm-dd')s2,to_char(sysdate,'yyyy')s3,to_char(sysdate,'yyyy-mm-ddhh12:mi:ss')s4,to_char(sysdate,'hh24:mi:ss')s5,to_char(sysdate,'DAY')s6fromdual;2)selectsal,to_char(sal,'$99999')n1,to_char(sal,'$99,999')n2fromemp2,to_date()[将字符类型转换为日期类型]insertintoemp(empno,hiredate)values(8000,to_date('2004-10-10','yyyy-mm-dd'));3,to_number()转换为数字类型selectto_number(to_char(sysdate,'hh12'))fromdual;//以数字显示的小时数五)其他函数user:返回登录的用户名称selectuserfromdual;vsize:返回表达式所需的字节数selectvsize('HELLO')fromdual;nvl(ex1,ex2):ex1值为空则返回ex2,否则返回该值本身ex1(常用)例:如果雇员没有佣金,将显示0,否则显示佣金selectcomm,nvl(comm,0)fromemp;nullif(ex1,ex2):值相等返空,否则返回第一个值例:如果工资和佣金相等,则显示空,否则显示工资selectnullif(sal,comm),sal,commfromemp;coalesce:返回列表中第一个非空表达式selectcomm,sal,coalesce(comm,sal,sal*10)fromemp;nvl2(ex1,ex2,ex3):如果ex1不为空,显示ex2,否则显示ex3如:查看有佣金的雇员姓名以及他们的佣金selectnvl2(comm,ename,')asHaveCommName,commfromemp;六)分组函数maxminavgcountsum1,整个结果集是一个组1)求部门30的最高工资,最低工资,平均工资,总人数,有工作的人数,工种数量及工资总和selectmax(ename),max(sal),min(ename),min(sal),avg(sal),count(*),count(job),count(distinct(job)),sum(sal)fromempwheredeptno=30;2,带groupby和having的分组1)按部门分组求最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和selectdeptno,max(ename),max(sal),min(ename),min(sal),avg(sal),count(*),count(job),count(distinct(job)),sum(sal)fromempgroupbydeptno;2)部门30的最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和selectdeptno,max(ename),max(sal),min(ename),min(sal),avg(sal),count(*),count(job),count(distinct(job)),sum(sal)fromempgroupbydeptnohavingdeptno=30;3,stddev返回一组值的标准偏差selectdeptno,stddev(sal)fromempgroupbydeptno;variance返回一组值的方差差selectdeptno,variance(sal)fromempgroupbydeptno;4,带有rollup和cube操作符的GroupByrollup按分组的第一个列进行统计和最后的小计cube按分组的所有列的进行统计和最后的小计selectdeptno,job,sum(sal)fromempgroupbydeptno,job;selectdeptno,job,sum(sal)fromempgroupbyrollup(deptno,job);cube产生组内所有列的统计和最后的小计selectdeptno,job,sum(sal)fromempgroupbycube(deptno,job);七、临时表只在会话期间或在事务处理期间存在的表.临时表在插入数据时,动态分配空间createglobaltemporarytabletemp_dept(dnonumber,dnamevarchar2(10))oncommitdeleterows;insertintotemp_deptvalues(10,'ABC');commit;select*fromtemp_dept;--无数据显示,数据自动清除oncommitpreserverows:在会话期间表一直可以存在(保留数据)oncommitdeleterows:事务结束清除数据(在事务结束时自动删除表的数据)1.0摘要//简要说明该文档内容SQL是用来访问关系型数据库一种通用语言,其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相