美图欣赏 | 设为首页 | 加入收藏 | 网站地图

当前位置:电脑中国 > 数据库 > oracel >

PLSQL指令总结 v1.0

2018-01-28 15:06|来源:未知 |作者:dnzg |点击:

一、基本查询

(表:emp  列:ename ,depton,sal  、表示换行)

1.查当前用户  SQL> show user

2.查表结构  SQL> desc emp  (emp:表名)  --查询出名称、类型、是否为空

3.清屏  SQL> host cls

4.设置行宽  SQL> show linesize 、 set linesize 120     设置列宽  SQL> col ename for a8 、 col sal for 9999

5.包含 null 的表达式都为 null 。

   解决办法:nvl(a,b)  --如果 a为null 则返回 b;不为空返回 a

   --nvl(a,b,c)  如果 a为null 则返回 b;否则返回 c

6.distinct:去掉重复记录  SQL> select distinct depton from emp

7.||:连接符 、concat:连接函数

   SQL> select concat('hello','  world') from emp       --注:select函数后面必须要有from关键字

8.伪表:dual

   SQL> select 'hello' || '  world' 字符串 from dual 、 SQL> select ename||'的薪水是'||sal 信息 from emp

 

二、过滤,排序

1.注意:字符串的大小写严格区分、日期格式敏感 如  DD-MON-RR:'17-11月-81'

2.修改日期格式  SQL > alter session set NLS_DATE_FORMAT='yyyy-mm-dd'  --修改格式为2017-11-81

3.设置区间:between and  --小值在前大值在后

4.在设置集合中:in    SQL> select * from emp where deptno in (10,20)     

   --对应的,不在就是 not in    另外,如果及合作含有 null 则不能使用 not in 仅可使用 in

   SQL> select * from emp where deptno in (10,20,null)

5.模糊查询

   查询名字以 S 开头的员工    SQL> select * from emp where ename like 'S%'    --'%’表示n个字符

   查询名字是四个字的员工    SQL> select * from emp where ename like '----'    --'_'表示单个字符

   查询名字中含有下划线的    SQL> select * from emp where wname like '%\_%'    --'\'表示转义字符

6.排序:order by    desc:降序  asc:升序    --by后参数可以直接写数字,对应select列表中的列

   多列排序  SQL> select * from emp order by deptno desc , sal desc    --desc只作用于它前面的列

   为保证空值在后面可以添加 nulls last    --默认null是最大的值

 

三、函数

1.字符函数    

   1)SQL> select lower('Hello World') 转小写,upper('Hello World') 转大写,initcap('hello world') 首字母大写

  2)substr  --取子字符串    SQL> select substr ('hello world',4) 子串 from dual

   3)length/lengthb 字符/字节 数  SQL> select length('hello world') 字符,lengthb('hello world') 字节 from dual

   4)instr(a,b)  --在a中查找b    SQL> select instr('hello world','ll') 位置 from dual

   5)lpad/rpad  --左/右 填充    SQL> select lpad('abcd',10,'*')  --在abcd左填充6个*使串达到10位

   6)trim  --去掉前后指定的字符    SQL> select trim('H' from 'Hello WorldH') from dual  --取两个H中间部分

   7)replace  --不显示某字符    SQL> select replace('hello world','l','*') from dual    --用*代替 l

2.四舍五入 round 

   SQL> select round(45.926,1) 1,round(45.926,0) 2,round(45.926,-1) 3,round(45.926,-2)

   1--45.9  、2--46  、 3--50 、 4--0

3.当前时间  sysdate    10个月后:add_months(sysdate,10)

4.根据job不同进行不同操作

1) select ename,job,sal,

    case job when 'yuangong' then sal+800

                 when 'jingli' then sal+1000

                 else sal+500

    from emp

2) select ename,job,sal,

         decode(job,'yuangong',sal+800,

                            'jingli',sal+1000,

                            sal+500)

    from emp

5.求和:sum(列名)   求记录数:count(*/列名)  求平均:avg(列名)

6.having:可以使用多行函数而where不行

   select deptno,avg(sal) from emp group by deptno having deptno=10

 

四、多表联查

1.外连    SQL> select d.deptno,d.dname,count(e.empno) from emp e,dept d where ~

  左外连会把最后不成立的左表项包含在结果中,右外连则包含右表

2.子查询

  1)可以在主查询的 where select having from 后使用子查询

  2.除top-n问题外一般不在子查询中排序

 

五、对表的操作

1.取另表数据创表    SQL> create table emp00 as select * from emp where deptno=20

  SQL> create table empinfo as 

                select e.empno,e.ename,e.sal,d.dname from emp e,dept where e.deptno=d.deptno

2.修改列    SQL> alter table emp modify ename varchar2(40)

   删除列    SQL> alter table emp drop column photo

   重命名列    SQL> alter table emp rename column tname to username

   重命名表    SQL> rename text1 to text2

(责任编辑:dnzg)