Oracle学习笔记1文档格式.docx

上传人:b****5 文档编号:19663680 上传时间:2023-01-08 格式:DOCX 页数:33 大小:149.26KB
下载 相关 举报
Oracle学习笔记1文档格式.docx_第1页
第1页 / 共33页
Oracle学习笔记1文档格式.docx_第2页
第2页 / 共33页
Oracle学习笔记1文档格式.docx_第3页
第3页 / 共33页
Oracle学习笔记1文档格式.docx_第4页
第4页 / 共33页
Oracle学习笔记1文档格式.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

Oracle学习笔记1文档格式.docx

《Oracle学习笔记1文档格式.docx》由会员分享,可在线阅读,更多相关《Oracle学习笔记1文档格式.docx(33页珍藏版)》请在冰豆网上搜索。

Oracle学习笔记1文档格式.docx

区别,加双引号保持原大小写。

不加全变大写。

3.selectename||"

abcd"

如果连接字符串中含有单引号,用两个单引号代替一个单引号。

第五课:

distinct

selectdeptnofromemp;

selectdistinctdeptnofromemp;

selectdistinctdeptno,jobfromemp

去掉deptno,job两者组合的重复。

更多的项,就是这么多项的组合的不重复组合。

第六课:

Where

select*fromempwheredeptno=10;

select*fromempwheredeptno<

>

10;

不等于10 

select*fromempwhereename='

bike'

;

selectename,salfromempwheresalbetween800and1500(>

=800and<

=1500)

空值处理:

selectename,sal,commfromempwherecommis(not)null;

selectename,sal,commfromempwhereename(not)in('

smith'

'

king'

abc'

);

selectenamefromempwhereenamelike'

_A%'

_代表一个字母,%代表0个或多个字母.如果查询%

可用转义字符.\%.还可以用escape'

$'

比如:

selectenamefromempwhereenamelike'

%$a%'

escape'

第七课:

orderby

select*fromdept;

select*fromdeptorderbydeptdesc;

(默认:

asc)

selectename,sal,deptnofromemporderbydeptnoasc,enamedesc;

第八课:

sqlfunction1:

selectename,sal*12annual_salfromemp

whereenamenotlike'

andsal>

800

orderbysaldesc;

selectlower(ename)fromemp;

selectenamefromemp

wherelower(ename)like'

_a%'

等同于

orenamelike'

selectsubstr(ename,2,3)fromemp;

从第二字符截,一共截三个字符.

selectchr(65)fromdual结果为:

A

selectascii('

a'

)fromdual结果为:

65

selectround(23.652,1)fromdual;

结果为:

23.7

selectround(23.652,-1)fromdual;

20

selectto_char(sal,'

$99,999,999'

)fromemp;

L99,999,999'

人民币符号,L:

代表本地符号

这个需要掌握牢:

selectbirthdatefromemp;

显示为:

BIRTHDATE

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

17-12月-80

改为:

selectto_char(birthdate,'

YYYY-MM-DDHH:

MI:

SS'

显示:

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

1980-12-1712:

00:

00

selectto_char(sysdate,'

YYYY-MM-DDHH24:

)fromdual;

//也可以改为:

HH12

TO_CHAR(SYSDATE,'

YY

2007-02-2514:

46:

14

to_date函数:

selectename,birthdatefromempwherebirthdate>

to_date('

1981-2-2012:

34:

56'

如果直接写birthdate>

'

会出现格式不匹配,因为表中的格式为:

DD-MM月-YY.

selectsalfromempwheresal>

888.88无错.但

$1,250,00;

会出现无效字符错误.

to_number('

$1.250.00'

$9,999,99'

把空值改为0

selectename,sal*12+nvl(comm,0)fromemp;

这样可以防止comm为空时,sal*12相加也为空的情况.

第九课:

Groupfunction组函数

max,min,avg,count,sum函数

selectto_char(avg(sal),'

99999999,99'

selectround(avg(sal),2)fromemp;

结果:

2073.21

selectcount(*)fromempwheredeptno=10;

selectcount(ename)fromempwheredeptno=10;

count某个字段,如果这个字段不为空就算一个.

selectcount(distinctdeptno)fromemp;

selectsum(sal)fromemp;

第十课:

Groupby语句

需求:

现在想求,求每个部门的平均薪水.

selectavg(sal)fromempgroupbydeptno;

selectdeptnoavg(sal)fromempgroupbydeptno;

selectdeptno,job,max(sal)fromempgroupbydeptno,job;

求薪水值最高的人的名字.

selectename,max(sal)fromemp;

出错,因为max只有一个值,但等于max值的人可能好几个,不能匹配.

应如下求:

selectenamefromempwheresal=(selectmax(sal)fromemp);

Groupby语句应注意,

出现在select中的字段,如果没出现在组函数中,必须出现在Groupby语句中.

第十一课:

Having对分组结果筛选

Where是对单条纪录进行筛选,Having是对分组结果进行筛选.

selectavg(sal),deptnofromemp

groupbydeptno

havingavg(sal)>

2000;

查询工资大于1200雇员,按部门编号进行分组,分组后平均薪水大于1500,按工薪倒充排列.

select*fromemp

wheresal>

1200

1500

orderbyavg(sal)desc;

第十二课:

字查询

谁挣的钱最多(谁:

这个人的名字, 

钱最多)

select语句中嵌套select语句,可以在where,from后.

问那些人工资,在平均工资之上.

selectename,salfromempwheresal>

(selectavg(sal)fromemp);

查找每个部门挣钱最多的那个人的名字.

selectename,deptnofromempwheresalin(selectmax(sal)fromenamegroupbydeptno)查询会多值.

应该如下:

select 

max(sal),deptnofromempgroupbydeptno;

当成一个表.语句如下:

selectename,salfromempjoin(select 

max(sal)max_sal,deptnofromempgroup

bydeptno)ton(emp.sal=t.max_salandemp.deptno=t.deptno);

每个部门的平均薪水的等级.

分析:

首先求平均薪水(当成表),把平均薪水和另外一张表连接.

第十四课:

self_table_connection

把某个人的名字以及他的经理人的名字求出来(经理人及这个人在表中同处一行)

首先求出这个人的名字,取他的编号,然后从另一张表与其相对应编号,然后找到经理的名字.

selecte1.ename,e2.enamefromempe1,empe2wheree1.mgr=e2.empno.

empno编号和MGR都是编号.

第十15课:

SQL1999_table_connections 

selectename,dname,gradefromempe,deptd,sqlgrades

wheree.deptno=d.deptnoande.sqlbetweens.losalands.hisaland

job<

CLERK'

有没有办法把过滤条件和连接条件分开来?

出于这样考虑,Sql1999标准推出来了.有许多人用的还是

旧的语法,所以得看懂这种语句.

selectename,dnamefromemp,dept;

(旧标准).

selectename,dnamefromempcrossjoindept;

(1999标准)

selectename,dnamefromemp,deptwhereemp.deptno=dept.deptno(旧)

selectename,dnamefromempjoindepton(emp.deptno=dept.deptno);

1999标准.没有Where语句.

selectename,dnamefromempjoindeptusing(deptno);

等同上句,但不推荐使用.

selectename,gradefromempejoinsalgradeson(e.salbetweens.losalands.hisal);

join连接语句,on过滤条件。

连接,条件一眼分开。

如果用Where语句较长时,连接语句和过滤语句混在一起。

三张表连接:

selectename,dname,gradefrom

empejoindeptdon(e.deptno=d.deptno)

joinsalgradeson(e.salbetweens.losalands.hisal)

把每张表连接条件不混在一起,然后数据过滤条件全部区分开来。

读起来更清晰,更容易懂一点。

selecte1.ename,e2.enamefromempe1joinempe2on(e1.mgr=e2.emptno);

左外连接:

会把左边这张表多余数据显示出来。

selecte1.ename,e2,enamefromempe1leftjoinempe2on(e1.mgr=e2.empno);

left后可加outer

右外连接:

selectename,dnamefromemperightouterjoindeptdon(e.deptno=d.deptno);

outer可以取掉。

即把左边多余数据,也把右边多余数据拿出来,全外连接。

selectename,dnamefromempefulljoindeptdon(e.deptno=d.deptno);

16-23课:

求部门平均薪水的等级

A.求部门平均薪水的等级。

selectdeptno,avg_sal,gradefrom

(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t

joinsalgradeson(t.avg_salbetweens.losalands.hisal)

B.求部门平均的薪水等级

selectdeptno,avg(grade)from

(selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losaland

s.hisal))t

C.那些人是经理

selectenamefromempwhereempnoin(selectmgrfromemp);

selectenamefromempwhereempnoin(selectdistinctmgrfromemp);

D.不准用组函数,求薪水的最高值(面试题)

selectdistinctsalfromempwheresalnotin(

selectdistincte1.salfromempe1joinempe2on(e1.sal<

e2.sal));

E.平均薪水最高的部门编号

selectdeptno,avg_salfrom

(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)

whereavg_sal=

(selectmax(avg_sal)from

(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)

F.平均薪水最高的部门名称

selectdnamefromdeptwheredeptno=

selectdeptnofrom

G.求平均薪水的等级最低的部门的部门名称

组函数嵌套

如:

平均薪水最高的部门编号,可以E.更简单的方法如下:

whereavg_sal=

(selectmax(avg(sal))fromempgroupbydeptno)

组函数最多嵌套两层

分析:

首先求

1.平均薪水:

selectavg(sal)fromgroupbydeptno;

2.平均薪水等级:

把平均薪水当做一张表,需要和另外一张表连接salgrade

deptno,gradeavg_salfrom

(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t

上面结果又可当成一张表。

DEPTNO 

GRADE 

AVG_SAL

-------- 

------- 

----------

30 

1566.66667

20 

2175

10 

2916.66667

3.求上表平均等级最低值

selectmin(grade)from

selectdeptno,grade,avg_salfrom

joinsalgradeson(t.avg_salbetweens.losalands.hisa)

4.把最低值对应的2结果的那张表的对应那张表的deptno,然后把2对应的表和另外一张表做连接。

selectdname,deptno,grade,avg_salfrom

 

joinsalgrad

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1