PLSQL常用方法汇总
SQLPLUS下,实现-英字符集转换
alter session set nls_language='AMERICAN';
alter session set nls_language='SIMPLIFIED CHINESE';
主要知点:
一、有表的操作
1)建表
create table test as select * from dept; --从已知表制数据和
create table test as select * from dept where 1=2; --从已知表构但不包括数据
2)插入数据:
insert into test select * from dept;
二、运算符
运算符:+ - * / 可以在select 句中使用
接运算符:|| select deptno|| dname from dept;
运算符:> >= = != < <= like between is null in
逻辑运算符:not and or
集合运算符: intersect()union( 不重) union all( ) minus()
要求:对应集合的列数和数据型相同
查询中不能包含long
列的标签是第一个集合的标签
使用order by,必使用位置序号,不能使用列名
例:集合运算符的使用:
intersect union union all minus
select * from emp intersect select * from emp where deptno=10 ;
select * from emp minus select * from emp where deptno=10;
select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重
select * from emp where deptno=10 union all select * from emp where deptno in (10,20); --包括重行三,常用 ORACLE 函数
sysdate日期 dual虚表
一)日期函数[重点掌握前四个日期函数]
-----------------------------------------
TO_DATE格式
Day:
dd number 12
dy abbreviated fri
day spelled out friday
ddspth spelled out, ordinal twelfth
Month:
mm number 03
mon abbreviated mar
month spelled out march
 
Year:
yy two digits 98
yyyy four digits 1998
Time:
HH24:MI:SS
HH12:MI:SS
24格式下时间围为 0:00:00 - 23:
12格式下时间围为 1:00:00 - 12:59:59 ....
-----------------------------------------
1,add_months[返回日期加()指定月份后(trunc函数使用时间)的日期]
select sysdate S1, add_months(sysdate, 10) S2, add_months(sysdate, 5) S3
  from dual;
2,last_day [返回月最后一天的日期]
select sysdate,last_day(sysdate) from dual;
3,months_between[返回日期之的月份数]
select sysdate S1,
      months_between('1-4-04', sysdate) S2,
      months_between('1-4-04', '1-2-04') S3
  from dual
4,next_day(d,day): 返回下个星期的日期,day1-7或星期日-星期六,1表示星期日
select sysdate S1, next_day(sysdate, 1) S2, next_day(sysdate, '星期日') S3
  FROM DUAL
5,round[舍入到最接近的日期](day:舍入到最接近的星期日)
select sysdate S1,
      round(sysdate) S2,
      round(sysdate, 'year') YEAR,
      round(sysdate, 'month') MONTH,
      round(sysdate, 'day') DAY
  from dual
6,trunc[截断到最接近的日期]
select sysdate S1,
      trunc(sysdate) S2,
      trunc(sysdate, 'year') YEAR,
      trunc(sysdate, 'month') MONTH,
      trunc(sysdate, 'day') DAY
  from dual
7,返回日期列表中最日期
select greatest('01-1-04', '04-1-04', '10-2-04') from dual
二)字符函数(可用于字面字符或数据)
1,字符串截取
select substr('abcdef',1,3) from dual
2,子串位置
select instr('abcfdgfdhd','fd') from dual
3,字符串
select 'HELLO'||'hello world' from dual;
4, 1)去掉字符串中的空格
select ltrim(' abc') s1, rtrim('zhang ') s2, trim(' zhang ') s3 from dual
2)去掉前和后
select trim(leading 9 from 9998767999) s1,
      trim(trailing 9 from 9998767999) s2,
      trim(9 from 9998767999) s3
  from dual;
5,返回字符串首字母的Ascii
select ascii('a') from dual
6,返回ascii值对应的字母
select chr(97) from dual
7,算字符串
select length('abcdef') from dual
8,initcap(首字母大写) ,lower(小写),upper(大写)
select lower('ABC') s1,
upper('def') s2,
initcap('efg') s3 from dual;
9,Replace
select replace('abc','b','xy') from dual;
10,translate
select translate('abc','b','xx') from dual; -- x1
11,lpad [左添充] rpad [右填充](用于控制出格式)
select lpad('func',15,'=') s1, rpad('func',15,'-') s2 from dual;
select lpad(dname,14,'=') from dept;
12, decode[实现if ..then 逻辑]
select deptno,decode(deptno,10,'1',20,'2',30,'3','其他') from dept;
三)数字函数
1,取整函数(ceil 向上取整,floor 向下取整)
select ceil(66.6) N1,floor(66.6) N2 from dual;
2, (power) 求平方根(sqrt)
select power(3,2) N1,sqrt(9) N2 from dual;
3,求余
select mod(9,5) from dual;
4,返回固定小数位数 (round:四舍五入,trunc:直接截断)
select round(66.667,2) N1,trunc(66.667,2) N2 from dual;
5,返回的符号(正数返回1,-1)
select sign(-32),sign(293) from dual;
四)转换函数
1to_char()[将日期和数字转换成字符]
1) select to_char(sysdate) s1,
to_char(sysdate,'yyyy-mm-dd') s2,
to_char(sysdate,'yyyy') s3,
to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,
to_char(sysdate, 'hh24:mi:ss') s5,
to_char(sysdate,'DAY') s6 from dual;
2) select sal,to_char(sal,'99999') n1,to_char(sal,'99,999') n2 from emp
2, to_date()[将字符转换为日期]
insert into emp(empno,hiredate) values(8000,to_date('2004-10-10','yyyy-mm-dd'));
3, to_number() 转换为数字
select to_number(to_char(sysdate,'hh12')) from dual; //以数字示的小
五)其他函数
user:
返回登的用名称
select user from dual;
vsize:
返回表达式所需的字
select vsize('HELLO') from dual;
nvl(ex1,ex2):  
ex1值为返回ex2,返回该值本身ex1(常用)
例:如果雇没有佣金,将0,否则显示佣金
select comm,nvl(comm,0) from emp;
nullif(ex1,ex2):
相等返空,否返回第一个
例:如果工和佣金相等,则显示空,否则显示工
select nullif(sal,comm),sal,comm from emp;
coalesce:  
返回列表中第一个非空表达式
select comm,sal,coalesce(comm,sal,sal*10) from emp;
   nvl2(ex1,ex2,ex3) :
如果ex1空,ex2,则显ex3
如:看有佣金的雇姓名以及他的佣金
    select nvl2(comm,ename,'') as HaveCommName,comm from emp;
六)分函数
max min avg count sum
1,整个果集是一个
1) 求部30 的最高工,最低工,平均工人数,有工作的人数,工数量及工资总
select max(ename),max(sal),
min(ename),min(sal),
avg(sal),
count(*) ,count(job),count(distinct(job)) ,
sum(sal) from emp where deptno=30;
2, group by having 的分
1)按部求最高工,最低工人数,有工作的人数,工数量及工资总
select deptno, max(ename),max(sal),
min(ename),min(sal),
avg(sal),
count(*) ,count(job),count(distinct(job)) ,
sum(sal) from emp group by deptno;
2)30的最高工,最低工数,有工作的人数,工数量及工资总
select deptno, max(ename),max(sal),
min(ename),min(sal),
avg(sal),
count(*) ,count(job),count(distinct(job)) ,
sum(sal) from emp group by deptno having deptno=30;
3, stddev 返回一组值准偏差
select deptno,stddev(sal) from emp group by deptno;
variance 返回一组值的方差差
select deptno,variance(sal) from emp group by deptno;
4, rollupcube操作符的Group By
rollup 按分的第一个列统计和最后的小
cube 按分的所有列的统计和最后的小
select deptno,job ,sum(sal) from emp group by deptno,job;
select deptno,job ,sum(sal) from emp group by rollup(deptno,job);
cube 内所有列的统计和最后的小
select deptno,job ,sum(sal) from emp group by cube(deptno,job);七、临时
只在会或在事务处理期存在的表.
临时表在插入数据动态分配空
create global temporary table temp_dept
(dno number,
dname varchar2(10))
on commit delete rows;
insert into temp_dept values(10,'ABC');
commit;
select * from temp_dept; --无数据,数据自清除
on commit preserve rows:在会表一直可以存在(保留数据)
on commit delete rows:务结束清除数据(在事务结动删除表的数据)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。