Oracle和Linux命令.docx

上传人:b****6 文档编号:8752606 上传时间:2023-05-14 格式:DOCX 页数:33 大小:82.10KB
下载 相关 举报
Oracle和Linux命令.docx_第1页
第1页 / 共33页
Oracle和Linux命令.docx_第2页
第2页 / 共33页
Oracle和Linux命令.docx_第3页
第3页 / 共33页
Oracle和Linux命令.docx_第4页
第4页 / 共33页
Oracle和Linux命令.docx_第5页
第5页 / 共33页
Oracle和Linux命令.docx_第6页
第6页 / 共33页
Oracle和Linux命令.docx_第7页
第7页 / 共33页
Oracle和Linux命令.docx_第8页
第8页 / 共33页
Oracle和Linux命令.docx_第9页
第9页 / 共33页
Oracle和Linux命令.docx_第10页
第10页 / 共33页
Oracle和Linux命令.docx_第11页
第11页 / 共33页
Oracle和Linux命令.docx_第12页
第12页 / 共33页
Oracle和Linux命令.docx_第13页
第13页 / 共33页
Oracle和Linux命令.docx_第14页
第14页 / 共33页
Oracle和Linux命令.docx_第15页
第15页 / 共33页
Oracle和Linux命令.docx_第16页
第16页 / 共33页
Oracle和Linux命令.docx_第17页
第17页 / 共33页
Oracle和Linux命令.docx_第18页
第18页 / 共33页
Oracle和Linux命令.docx_第19页
第19页 / 共33页
Oracle和Linux命令.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Oracle和Linux命令.docx

《Oracle和Linux命令.docx》由会员分享,可在线阅读,更多相关《Oracle和Linux命令.docx(33页珍藏版)》请在冰点文库上搜索。

Oracle和Linux命令.docx

Oracle和Linux命令

目录

目录1

一、Oracle篇2

1.1.select2

1.2.where条件查询3

1.3orderby排序5

1.4DML:

数据操纵语言6

1.5函数7

1.6子查询10

1.7分组函数、groupby11

1.8提高练习与秘诀13

1.9创建表16

1.10伪列、胜负题17

1.11rank()over()的用法19

1.12存储过程20

1.12.1declare20

1.12.2test2多个参数21

1.12.3test3单个参数21

1.12.4游标22

二、Linux篇23

2.1最最基本命令23

2.2目录24

2.3文件系统25

2.4VI编辑器27

2.5压缩27

2.6进程29

2.7挂载和安装29

一、Oracle篇

1.1.select

Ø语法

select字段from表

Ø查询一个字段

selectenamefromemp;

Ø查询多个字段

selectename,job,sal,commfromemp;

--多个字段之间逗号分隔

--最后一个字段没有逗号******

Ø查询全部字段

select*fromemp;

--注意:

*,如果是平时的查询,可以用,但是写在代码里面,尽量不要用。

--关键字全部大写(全大写风格)

Ø列上做运算或连接

selectsal,sal*12fromemp;--年薪

selectsal,comm,sal+nvl(comm,0)fromemp;

--nvl函数(如果comm列有值,则用此值;如果没有,值为0)

Ø列别名,表别名

selectsal,sal*12y_sakfromemp;

--1、不用中文

--2、别名要取得有意义,和原来字段相对,用_分隔

selectt.empno,t.enamefromempt;

--工作中,很多时候都是先写from表别名,然后再select表.字段(.自动弹出这个表有哪些字段)

1.2.where条件查询

Øselect字段from表

where条件

select*fromempwhereempno=7788;

selectename,job,salfromempwhereename='KING';

select*fromempwhereempno>7788;

selectename,job,salfromempwhereename>'KING';--工作中没有人这样用,或者叫很少人这样用

Ø<>不等于

select*fromempwhereempno!

=7788;

select*fromempwhereempno<>7788;--工作中的人都用这种比较多一些。

装B

Øbetween...and...

select*fromempwhereempnobetween7788and7876;

select*fromempwhereempno>=7788andempno<=7876;

selectename,job,salfromempwhereenamebetween'KING'and'SCOTT';

Ølike:

%:

匹配0个或者多个字符

_:

匹配一个字符

select*fromempwhereenamelike'%L%';--工作中N多情况都用这个。

(查询名字中包含L字母的记录)

select*fromempwhereenamenotlike'%L%';--工作中N多情况都用这个

__L%第三位是L的

%L_倒数第二位是L的

Øin:

--********

select*fromempwhereenamein('KING','scott','凤姐','犀利哥');

select*fromempwhereenamenotin('KING','scott','凤姐','犀利哥');

例题:

有表table1(fid,fclass,fscore),table2(fid,fclass,fscore),写一个SQL查询出存在于table1但是不存在table2的所有记录。

select*fromtable1wherefidnotin(selectfidfromtable2);

ØNULL:

--******

select*fromempwherecommisnull;

select*fromempwherecommisnotnull;

Øand和or

select*fromempwhereenamelike'%L%'andjob='MANAGER'

--and和or可以取无数个

select*fromempwhereenamelike'%L%'orjob='MANAGER'

--如果把多个条件做为一个条件来处理,用()括起来

select*

fromemp

where(deptno=10andjob='MAANAGER')

or(deptno=20andjob='CLERK')

1.3orderby排序

排序:

不会动数据

规则已经写好了,数据也是我要的数据,只是这些数据的顺序不是我想要的,于是排序。

排序是放在最后一步来做。

ØORDERBY子句

select*fromemporderbysal;

select*fromemporderbysalasc;

--默认是升序,asc,工作中没人写,因此你也别写

Ø降序排序

select*fromemporderbysaldesc;

--desc

Ø按别名排序

selectsal*12new_salfromemporderbynew_sal;

按字段位置排序

select*fromemporderby6;

--工作中不用这个,这个仅仅是理论层面的知识。

--因此你可以忘记它。

Ø多个列排序--********

**如果有相同的项,继续往后排。

如果没有相同的项,不继续往后排。

select*fromemporderbysal,commdesc,job,enamedesc;

select*fromemporderbyempno,ename,job;

1.4DML:

数据操纵语言

insert

update

delete(truncate)

都要提交事务才有效

Øinsert语法:

insertinto表(字段)values(值)

例:

insertintodept(deptno,dname,loc)values(51,'测试部','凤姐活动中心');

Øupdate语法:

update表

set字段='新值',字段='新值'

where条件--工作中必须where,严重事件

updatedept

setdname='凤姐开发部'

wheredeptnoin(50,51)

Ødelete语法:

deletefrom表where条件(和select是完全一样的)

deletefromdeptwheredeptno=50ordeptno=51

Øtruncatetable清空表数据--**********

truncate和delete的区别

delete

truncate(截断表)

带条件删

不带条件删

可删部分/全部数据

全部删除数据

删除相对慢

删除相对快

必须提交事务

不需要提交事务

删除后可找回

删除后不可找回

1.5函数

ØTO_CHAR--*************

selectto_char(hiredate,'yyyy')years,

to_char(hiredate,'mm')yues,

to_char(hiredate,'dd')ris

fromemp;

--1、默认日期为:

yyyy-mm-ddhh24:

mi:

ss

--2、反向看

ØTO_DATE--*************

insertintoemp(empno,hiredate)values(9999,to_date('1990-01-13','yyyy-mm-dd'));

select*fromemp;

ØSYSDATE--*************

--oracle系统时间

selectsysdatefromdual;--

selectto_char(sysdate,'yyyy')years,

to_char(sysdate,'mm')yues,

to_char(sysdate,'dd')ris,

to_char(sysdate,'hh24')shis,

to_char(sysdate,'mi')fens,

to_char(sysdate,'ss')miaos

fromdual;

--dual,oracle独有的表

--dual的各种用法,非常非常灵活.触发器*******,序列(seq),时间

ØTO_NUMBER转换为数值类型

selectto_number('123.43')fromdual;

ØMOD求余

selectmod(24,5)fromdual;

ØROUND--*************四舍五入

selectround(12453.33656,-5)fromdual;

--正数,小数点后开始数

--负数,小数点前开始数*****

ØTRIM抠去空格

select*fromempwhereenamelike'%'||trim('L')||'%';

ØREPLACE替换,要替换的放前面,替换内容放后面

selectreplace(ename,'A','cai')fromemp;

ØLOWER将字母全部转化为小写

selectlower(ename),job,sal,commfromemp;

ØUPPER将字母全部转化为大写

select*fromemp

whereenamelike'%'||trim(upper('l'))||'%';

ØINITCAP将字母全部转化为首字母大写(initcapital的缩写)

selectinitcap(ename),job,sal,commfromemp;

ØLENGTH求字符串长度

select*fromempwherelength(sal)>=4;

ØSUBSTR截取字符串

例:

SUBSTR('HelloWorld',1,5)从第1位开始截,截5位,结果是Hello。

selectsubstr(to_char(hiredate,'yyyy-mm-ddhh24:

mi:

ss'),1,4),

substr(to_char(hiredate,'yyyy-mm-ddhh24:

mi:

ss'),-14,2)

fromemp;

Øcase和decode

case和decode可以相互转化

select*fromemp;

selectjob,

sal,

case

whenjob='MANAGER'then

sal+1000

whenjob='SALESMAN'then

sal*1.1

else

sal+10

end

fromemp;

selectjob,sal,decode(job,'MANAGER',sal+1000,'SALESMAN',sal*1.1,'',sal+10)

fromemp;

——————————————————————

selectjob,

sal,

case

whensal>=3000then

'土豪'

whensal>=1500andsal<3000then

'高富帅'

else

'屌丝'

enddengji

fromemp;

这里dengji是新的列名。

1.6子查询

把一个查询的结果,做为另外一个查询的条件。

select、from、where

3者可以相互转化

select*fromempwheresal>(selectavg(sal)fromemp);

select*fromempwheresal>2073.21428571429;

select*

fromempe,(selectavg(sal)avg_salfromemp)t

wheree.sal>t.avg_sal;

select*fromemp,dept;

selectename,dname

fromemp,dept

whereemp.deptno=dept.deptno;

selecte.ename,(selectdnamefromdeptwheree.deptno=dept.deptno)dname

fromempe

1.7分组函数、groupby

分组查询:

什么是分组函数?

分组函数作用于一组数据,并对一组数据返回一个值。

组函数类型

ØAVG求平均值

selectavg(sal)fromemp;

select*fromempwheresal>avg(sal)

--分组函数不能作用在where子句中

select*fromempwheresal>(selectavg(sal)fromemp)

ØCOUNT求记录数

selectcount(ename)fromemp;

--count不统计null

selectcount(comm)fromemp;

扩展:

查询表中共有多少条记录:

selectcount(*)from表名;

COUNT(*)--尽量不要这样写.×最好用主键列

ØMAX求最大值

求最高薪金:

selectmax(sal)fromemp;

求最高薪金的那一条记录(子查询):

select*fromempwheresal=(selectmax(sal)fromemp);

ØMIN求最小值

ØSUM--求和

selectsum(comm>2000)fromemp;

--参数个数只能是1,相当于这个括号里面只能是一列

--这个列里面不能带有表达式*******

组函数语法

分组数据

ØGROUPBY

selectjob,enamefromempgroupbyjob,ename;**先保证名字的不同,再保证job的不同

select*fromempwheregroupbyjob;--*********

selectjob,min(sal),enamefromempgroupbyjob,ename;

--如果列上有组函数,除组函数以外全部参与分组

selectjob,min(sal)fromempgroupbyjob;

ØHAVING过滤分组

selectjob,min(sal)fromempgroupbyjobhavingmin(sal)>1500;

having--*******

having--对分组后的数据再次过滤

--组函数可以用在having子句中

--和where的关系

where先过滤再分组

having先分组再过滤

ØDISTINCT

selectdistinctmgrfromempwheremgrisnotnull;--distinct后面跟你要去除重复的那个列

××××××××××××××××

顺序:

selectxxxx

fromxxxxx

wherexxx

groupbyxxxx

havingxxx

orderbyxxxxx

1.8提高练习与秘诀

秘诀:

1、“的”为分界,右边就是要select的字段

2、这些字段来自什么表呢?

找出来,马上from

3、如果是多表,马上写出他们的关系,一般,这个关系为a.id=b.id

即:

2个表有相同字段的名字,马上相等--****************

4、用拍大腿的精神思考问题,自然翻译。

1.SELECTE.DEPTNOFROMEMPE,DEPTDWHEREE.DEPTNO=D.DEPTNO

GROUPBYE.DEPTNO;(myself)

2、列出薪金比"SMITH"多的所有雇员

selectename

fromemp

wheresal>(selectsalfromempwhereename='SMITH')

--一列对一列****************

3、列出所有雇员的姓名及其直接上级的姓名

selecte.ename,ee.ename

fromempe,empee

wheree.mgr=ee.empno(+);

selecte.ename,ee.ename

fromempeleftjoinempee

one.mgr=ee.empno

4、列出入职日期早于其直接上级的所有雇员

selecte.ename

fromempe

wheree.hiredate<(selectee.hiredatefromempeewhereee.empno=e.mgr);

--------------------------

selecte.ename

fromempe,empee

wheree.mgr=ee.empno

ande.hiredate

5、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门

selectd.dname,e.ename

fromdeptd,empe

whered.deptno=e.deptno(+)

6、列出所有“CLERK”(办事员)的姓名及其部门名称

selectename,dname

fromemp,dept

whereemp.deptno=dept.deptno

andjob='CLERK'

7、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录

selectjob,min(sal)

fromemp

groupbyjob

havingmin(sal)>1500

8、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号

selectename

fromemp

wheredeptno=(selectdeptnofromdeptwheredname='SALES')

10、列出与“SCOTT”从事相同工作的所有雇员

selectename

fromemp

wherejob=(selectjobfromempwhereename='SCOTT')

11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金

selectename,sal

fromemp

wheresalin(selectsalfromempwheredeptno=30)

12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金

selectename,sal

fromemp

wheresal>(selectmax(sal)fromempwheredeptno=30)

13、列出每个部门的信息以及该部门中雇员的数量

selectdept.deptno,dname,loc,count(empno)

fromdept,emp

wheredept.deptno=emp.deptno(+)

groupbydept.deptno,dname,loc

orderbydept.deptno

16、列出各个部门的MANAGER(经理)的最低薪金

selectdeptno,min(sal)

fromemp

wherejob='MANAGER'

groupbydeptno;

排名:

rownum--

rowid

伪列

1.9创建表

新建commandwindow

editor编辑

CREATETABLEBB1(

IDNUMBER

(2),

NAMEVARCHAR2(10),

BRITHDATE

);

dialog执行界面

/先执行

setserveroutputon;针对有输出语句(dbms_output.put_line)

/再/就输出结果

1.10伪列、胜负题

Ø胜负题

1.用COUNT来做

selectid,

count(decode(value,'胜',1,'负',null))win,

count(decode(value,'胜',null,'负',1))lose

fromtests

groupbyid

——————————————————

selectid,

decode(value,'胜',1,'负',null)win,

decode(value,'胜',null,'负',1)lose

fromtests

groupbyid

————————————————————

2.用SUM来做

SELECTSFDATE,

SUM(DECODE(SHENGF,'胜',1,'负',0))SHENG,

SUM(DECODE(SHENGF,'胜',0,'负',1))FU

FROMSF

GROUPBYSFDATE;

Ø伪列

rowid用来存放物理地址

rownum即最左边的1,2,3,4,5...那一列,可以用来取前多少条记录。

rownum不能大于等于,只能小于或小于等于

selectt.*,t.rowidfromempt;可以用来开锁,开锁后可以编辑表中数据,如添加,修改,删除

select*fromempforupdate;(开锁,侵略性太强)

select*fromem

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2