尚学堂马士兵Oracle学习笔记_第1页
尚学堂马士兵Oracle学习笔记_第2页
尚学堂马士兵Oracle学习笔记_第3页
尚学堂马士兵Oracle学习笔记_第4页
尚学堂马士兵Oracle学习笔记_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

尚学堂马士兵Oracle学习笔记words副本

01_sqlplus_introduction.avi

三种不一致的命令行的客户端

Oracle需要熟悉的第一个:sqlplus,当启动sqlplus需要让你输入,用户名口令字符串

Sqlplus是Oracle的一个客户端,Oracle大多数的东西都是在命令行执行,

输入用户名:scott口令:tiger,进入oracle命令行

3个界面:图形版界面,命令行界面,

有一个著名的oracle客户端叫toad

Oracle还有一个客户端plsqldevelement

命令行:

C:\DocunentsAndSettingsM)dninistrator/sqlplus

QL*Plus:Release10.2.0.1.H-Productionon星期日2月2509:52:592007

/opyri9nt<c>1982,2305,Oracle.Allrightsreserved.

谓领入用户名:scott

就入口令:

ERROR:

ORA-28001:thepasswordhasexpired

S«□令

食co:

新□

连接到:

OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production

WiththePartitioning.OLftPandDataMiningoptions

图形版界面:

快瑟然到

eclipse

装机人员工具

省理工具

附件

ACDSystems

R««l

JB动

游戏

展讯8

迅雷

Office2003

OutlookExpress

InternetExplorer

WindowsM«d)«Player

远程帆助

优化大牌

SynftnttcClitntStcwity

MySQL

Window*04«t,Or»clt-0rtX(me90

G设定程序访问球认值OracleIxkst*ll«tionProducts

CVS1H

紫光华宇拼音幡入法V5

啮程序0)

Moxill*Fxr«£ox

eMule

C«»tasi«

0*设置9

VMw*r«

Q触©JR讯软件

KTTPLook

蚣则和支拓01)BEAWebLogicPlatfornd.1

小丽3工具系列

・口运行⑥…

MyEclips«EnterpristYorkb«nch5.0GAOracl*Obj・c

AdobeReader7.0I组OracleObjec

:注物AMinistr.torQ)...

衽期兔子魔法设置OrachInstallationProducts►aOrachObjtc

回美渐十茸机…舞集成管理工A►0Or*cl«ODBC

Strv-V配置和移植工具►[OrtOLZBB联

“开始炉7e»片启Oracle-OrtDblOjhgel应用程序开发土产中

taeleSQL»Plus一i口X

,又件0编辑卷)携案以逢项9帮助里方

土OracleSQL*PLus

文件9编辑《)授索0选项⑪帮助QP

SQL«Plus:Release10.2.0.1.0-Productionon星期日2月2509:5H:242007

Copyright(c)1982,2005,Oracle.Allrightsreserved.

连接到:

OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production

WiththePartitioning,OLAPandDataMiningoptions

SQL>s|

网页版

严禁未蝮授权使用此站点,否则可能会面临民事和刑事起诉。

«表示必需的字段

・用户名isfott

•口令

连楼标识符

帮助

CoprrieM(c)2003,2005,OracleAllrightsreserv«d.

,“http//1270C1SSSO/ixqlplui/lu^jnu】x

ORACLG

zSQL*Plus

工作区

、执工).加装脚本),、保存脚本)|国取#

工作区।历史记录।法狙।首选项।瞿助

Copyr>eht(c)2003,200,OrtcUAHnehtsr«s«rv«4

02_unlock_user.avi

使用超级管理员登录到数据库上:sqlplussys/bjsxtassysdba->当成DBA登录到服务

器上

连上之后

更换user:alteruserscottaccountunlock;更换用户解除锁定

03_table_structures.avi

第二章SQL(structuredQueryLanguage)语言

Sql语言是在数据库地下进行操作的专门的语言,sql语言本身是一种标准语言,它是一个

国际标准,它定义了套标准SQL1922,SQL1999,SQL在大多数数据库上通用,或者许有轻

微的改变

包含四大语句:

1.查询语句

查询语句只有一种就是select语句

2.DML语句(数据操作/操纵语言)

DML语句包含Insert,Update,Delete等常用语句

3.DDL语句(数据定义语言)

DDL语句包含Create,Alter,Drop等常用语句

4.事务操纵语句

包含Commit,Rollback等常用语句

还有一大类语句:叫DCL语句(DataControlLanguage),要紧用于权限的分配与回收,由

于与开发关系不是十分密切,不做重点讲解

最重要的就是select语句,任何select语句全部要背过,select语句必考,不可能考其

它的

Select语句就是从表里把数据选出来

首先熟悉试验中的数据

第一条语句:descemp;->desc表名;列出表头=字段==列

Varchar2->可变字符串好支持国际化

NUMBER(7,2)97位的数字,2位的小数

每行显示的宽度setlinesize200;

显示的页数setpagesize30;

emp)雇员信息表

EMPNO雇员编号NOTNULLNUMBERS)

ENAME雇员姓名VARCI1AR2(1O)

JOB工作岗位VARCHAR2(9)

MGR该雇员经理人的编号NUMBER(4)

HIREDATE入职时间DATE

SAL薪水NUMBER(7,2)

COMM津贴NUMBER(7,2)

DEPTNO雇员所在部门编号NUMBER(2)

Varchar2:能够存放各国的语言,适合国际化;varchar:不能存放各国语言,有限定。

表内容:

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO

7369SMITHCLERK790217T2月-8080020

7499ALLENSALESMAN769820-2月-81160030030

7521WARDSALESMAN769822-2月-81125050030

7566JONESMANAGER783902-4月-81297520

7654MARTINSALESMAN769828-9月-811250140030

7698BLAKEMANAGER783901-5月-81285030

7782CLARKMANAGER783909-6月-81245010

7788SCOTTANALYST756619-4月-87300020

7839KINGPRESIDENT17Tl月-81500010

7844TURNERSALESMAN769808-9月-811500030

7876ADAMSCLERK778823-5月-87110020

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO

7900JAMESCLERK769803-12月-8195030

7902FORDANALYST75660372月-81300020

7934MILLERCLERK778223-1月-82130010

dept今部门信息表

DEPTNO部门编号NOTNULLNUMBER(2)

DNAME部门名字VARCHAR2(14)

LOC部门所在地VARCHAR2(13)

内容:

DEPTNODNAMELOC

10ACCOUNTINGNEWYORK

20RESEARCHDALLAS

30SALESCHICAGO

40OPERATIONSBOSTON

salgrade薪水等级表

GRADE薪水等级NUMBER

LOSAL该等级的最低薪水值NUMBER

HISAL该等级的最高薪水值NUMBER

内容:

GRADELOSALIIISAL

17001200

212011400

314012000

420013000

530019999

熟悉表里面的数据:

第一个select语句:select*from表名;

Select*fromemp;

04_select_l.avi

1.简单select语句:

例子1:取出一张表中所有的数据

Select*fromemp;

例子2:取出某些字段的值

Selectempno,ename,deptnofromemp;

2.包含算术表达式的sql语句

例子1:取出emp中所有人的年薪及名字

Selectename,sal*12fromemp;

例子2:在emp表中取出2*3的结果

Select2*3fromemp;

例子3:取出2*3的一条记录

Select2*3fromdual;一当我们需要显示一个结果的时候就用系统提供的dual虚表

SQL〉descdual

名称是否为空?类型

MJMMVUARCHAR2<1>

SQL〉select*fi*ondual;

D

:•:

SQL>select2*3fi»ondual;

2-3

例子4:取出当前系统时间

Selectsysdatefromdual;--sysdate在Oracle中表示当前系统时间

3.含有别名的sql语句

例子1:selectename,sal*12annual_salfromemp;

例子2:假如想让别名强制大小写混合能够使用双引号

Selectename,sal*12uAnnual_salwfromemp;

例子3:假如想让别名中有空格也使用双引号

Selectename,sal*12uAnnualsal“fromemp;

5.处理含有空值的字符串

例子1:算某人一年的年薪今含有任何null值的数学表达式最后的结果都为null

Selectename,sal*12+commfromemp

例子2:含有任何null值的字符串表达式中,null被当作空字符串处理

selectempno,ename|'andhismanagernumberis'|mgrfromemp;

字符串连接符:II

Select语句中用单引号表示字符串

6.在select中使用单引号

例子1:用两个单引号表示一个单引号

selectempno,ename|'''smanageris||mgrfromemp;

05_distinct.avi

7.消除重复值

例子l:selectdistinctdeptnofromemp;一用distinct消除结果集中的重复信息

例子2:用distinct修饰多个字段的时候,指的是消除后面所有字段的组合重复结果

Selectdistinctjob,deptnofromemp;一指jobdepui"都相同的删除

06_where.avi

使用where对数据库设定条件限制,where今过滤条件,过滤有关的数据

1.等值推断

例子1:显示部门编号为10的所有员工的全面信息

select*fromempwheredeptno=10;

例子2:显示名字为KING的员工的全面信息

推断字符串是否相等时,字符串要用单引号引起来,单引号中字符串内容是要区分大小写的

Select*fromempwhereename='KING';

2.非等值推断(><>=<=<>)

例子1:取出薪水大于2000的所有员工的名字与薪水

Selectename,salfromempwheresal>2000;

例子2:字符串大小比较:是比较字符串ASCH码值的比较,先比较第一字母,依次……

Selectename,salfromempwhereename>'DBA';

例子3:取出所有部门号不是10的雇员的名字与薪水

Selectename,salfromempwheredeptnoO10;

例子4:取出薪水位于800与1500之间的雇员名字与薪水

Selectename,salfromempwheresal>=800andsal=<1500;

Selectename,salfromempwheresalbetween800and1500;

注意:使用betweenand的时候,包含了最大值与最小值

3.空值的处理

例子1:取出津贴值为空的所有雇员的名字

Selectenamefromempwherecommisnull;

例子2:取出津贴不为空的所有雇员的名字

Selectenamefromempwherecommisnotnull;

尚学堂马士兵Oracle学习笔记“2

1.In语句:用于塞选某一个值

例子1:把薪水是800,1250,1500,2000的雇员信息取出来

Selectename,salfromempwheresalin(800,1250,1500,2000);

也能够用于字符串操作

例子2:把名字为SMITH,ALLEN,KING的雇员取出来

Selectename,salfromempwhereenamein('SMITH','ALLEN','KING');

2.日期处理

Oracle默认的日期格式为:DDT10N-RR

例子1:查询在81年2月20号以后入职的员工

Selectename,hiredatefromempwherehiredate>'20-2月-81';

Selectename,hiredatefromempwherehiredate>'20-2月T981'

假如想用自己定义的日期格式,能够使用tocharortodate函数,

3.AND,OR,NOT

例子1:查询部门标号为10同时薪水>1000的员工

Selectename,deptno,salfromempwheredeptno=10andsal>1000;

例子2:查询部门编号为10或者者工作岗位为CLERK的员工

Selectename,deptno,jobfromempwheredeptno=10orjob='CLEARK'

例子3:查询薪水没有位于800,1500,2000之中的员工

Selectename,salfromempwheresalnotin(800,1500,2000);

7.模糊查询

使用like关键字,与通配符%)表示。个或者多个字符,_表示1个字符

例子1:查询名字中含有ALL的人员

Selectenamefromempwhereenamelike<%ALL%>;

例子2:查询第二字母中含有A的雇员

Selectenamefromempwhereenamelike'_A%';

例子3:查询名字中含有%等通配符的数据时;使用转义字符\

Escape今自定义转移字符,系统默认的转义字符是'\'

Selectenamefromempwhereenamelike溉'escape'\';

Selectenamefromempwhereenamelikeescape'$';

07_order_by.avi

使用它orderby对数据进行排序

例子1:按照名字的升序进行排序

Selectename,salfromemporderbyename;

Selectename,salfromemporderbyenameasc;好用asc关键字指出按升序排列

例子2:按照雇员编号的升序排序

Selectename,deptnofromemporderbydeptno;

Selectename,deptnofromemporderbydeptnoasc;

例子3:按照名字降序排列

Selectename,deptnofromemporderbyenamedesc;

例子4:按照部门编号降序排列

Selectename,deptnofromemporderbydeptnodesc;

例子5:多个关键字排序,先按照部门编号升序排列,在再内部按照enamel降序排序

|sQL>selectenane,sal,deptnofromeraporderbydeptnoenanedesc;

ENAMESALDEPTMO

HILLER130010

KING500010

CLARK245010\

SMITH80020

SCOTT300020

JONES297520

FORD300020

ADAMS110020

UARD125830

TURNER150030

MARTIN125030

EHAMESALDEPTNO

JAMES95030

BLAKE285030

ALLEN160030

己选择14行。

08_sql_function_l.avi

常用SQL函数

1.Lower。函数少将字符串全部转换成小写

例子1:将雇员中名字含有‘A'或者'a'的人员全部显示出来

Selectenamefromempwhereenamelike,%A%rorenamelike<%a%;

Selectenamefromempwherelower(ename)like'%a%';

2.Upper0函数将字符串全部转换为大写

例子2:将雇员中名字含有‘A'或者'a'的人员全部显示出来

Selectenamefromempwhereupper(ename)like'%A%';

3.substr()函数

例子1:从第一字符开始共截3个子串

Selectsubstr('Hello',1,3)fromdual;->Hei

Substr9能够省略第三个参数

例子2:从第二个字符开始,截取到整个字符串结束

Selectsbustr(ename,2)fromemp;

4.Chr()函数

例子1:求一个与某个ASCH码值对应的字符

Selectchr(65)fromdual;

1.Ascii()函数

例子:求一个字符的ASCH码值

Selectascii('A')fromdual;

2.round。函数个对参数值进行四舍五入的操作

例子1:对23.652进行四舍五入操作

Selectround(23.652)fromdual;->24

能够指定四舍五入到小数点后几位

例子2:对23.652四舍五入到小数点后2位

Selectround(23.652,2)fromdual;->23.65

能够用负数指定小数点前面几位

例子3:对23.652四舍五入到小数点前1位

Selectround(23.652,-1)fromdual;20

*7.tochar()

用于将数字或者日期转换成特定的字符串,

To_char()有两个参数:

第一个参数:需要进行转换的日期或者数字

第二个参数:特定的转换格式,关于数字有一下几个格式能够指定:

9玲代表数字,若果该位没有数字则不进行显示,但关于小数点后面的部分仍会强制显示

u9代表一位数字,假如该位没有数字则强制显示0

$-»显示美元符号

Lf显示本地货币符号

.今显示小数点

,分显示千分位符号

例子1:selectto_char(sal,'$99,999.9999')salaryfromempwhereename=

'ALLEN'$1,600.0000

例子2:selecttochar(sal,'$00,000.0000')salaryfromempwhereename=

'ALLEN'$01,600.0000

关于日期:to_char()能够指定为下面的常用格式:

格式操纵符含义

YYYY,YY今代表4位,2位数字的年份

MM9用数字表示的月份

M0N--今月份的缩写对中文月份来说就是全称

DD9数字表示的日

DY9星期的缩写,对中文的星期来说就是全称

HH24、HH12->12小时或者者24小时进制下的时间

MI9分钟数

SS9秒数

有了这些格式,就能够把日期自定义为任何格式

例子1:selectto_char(sysdate,<YYYY-MM-DD-HH24:MI:SS,)fromdual;^2008-04-04

SQL>selectenane,sal*12annual_salfronenp

2whereenanenotlike*_Ax*andsal>800

3orderbysaldesc;

ENANEANNUAL.SAL

KING60000

SCOTT36000

FORD36000

JONES35700

1、把字段转换成小写

SQL>selectlower<enane>fronenp;

LOWER<ENAM

snith

Allen

vai*rl

Jones

FMirtin

blake\

clark

scott

king

turner

adams

LOVER<ENAM

janes

ford

miller

&择14行4

SQL>selectenamefi*omenp

2wherelower(enap>e>like*_ax*;

ENAME

WARD

WRTIN

JAMES

2、截子串substr(ename』,3)从第一个开始截,截取3个字符

SMI

ALL

unR

.JON

MAR

BLA

CLA

SCO

KIN

1UR

ADA

ISUBSTR

.rnn

FOR

MIL

己选择I行。

、把数字转换成相对应的字母

SQL>selectchr<65>fromdual;

A

3、把字母转换成相对应的ascii码

SQL>selectascii<*A*>fromdual;

ASCII('A'>

65

4、四舍五入

SQL>selectround<23.652>fromdual;

ROUND<23.652>

24

SQL>selecti*ound<23.652#2〉fromdual;

HOUND<23.652,2>

23.65

SQL>selectround<23.652»1>fromdual;

ROUND<23.652,1>

23.7

SQL>selectround<23.652v-1>frondual;

ROUND<23.652,-1>

20

5、把数字或者者日期转化成某种格式

1)对数字

SQL>selectto_char<sal,'$99,999.9999'〉fromenp;

TO_CHAR《SAL」

$800.0000

$lr600.0H00

$1,250.0000

$2,975.0000

$1,250.0000

$2,850.0000

$2>450.0000

$3.000.0900

$5,000.0000

$1^500.0000

$1>100.0000

TO_CHfiR<SAL^

$950.0砌

对齐格式,格式化

L:本地货币符号

SQL>selectto_char<sal^*L99,999.9999*>fromenp;

TO_CHAR《SAL」L99,999.9

Y800.0000

¥1,600.0000

Y1,250.0000

¥2,975.0000

¥1,250.0000

Y2,850.0000

?2,450.0,耽

¥3,000.0000

¥$,608.0000

Yl>500.«00«

?1.109.0000

ko_CHAR《SAL.'L99>999.9

Y950.0000

Y3>000.0000

?1,308.0000

己班”行。

SQL>selectto_chai«<sal>'.06加')f>*onenp;

TO_CHAR<SAL,»L00000.0

¥做皿制00

¥01600.0000

辛61250.6880

Y02975.0000

Y01250.0000

Y82850.0000

Y02450.

¥030挈.0000

Y08009.0000

Y01500.0000

Y01100.00BR

TO_CHAJKSAL,'LB0UW0.0

¥00950.0000

V03000.0000

y»1300.R0B0

三选择“行。

2)对日期时间格式操纵

SQL>selectto_char<hiredate.*VVVV-MM-DDHH:MI:SS*>fronenp;

TO_CHAR《HIREDATE,'Y

1980-12-1712:

[9*02-2012:

198f-02-2212:

1981-04-0212:

1981-09-2812:

1981-0S-0112:

1981-06-0912:

1987-04-1912:

1981-11-1712:

1981-09-0812:

1987-85-2312:

,

TO_CHAR<H1REDATE.V

1981-12-0312:00:00

1981-12-0312:00:60

1982-01-2312:00:00

己选择14行。

HH:12进制

HH24:24进制

SQL>selectto_char<sysdate•'YYYY-HH-DDHH:MI:SS>>fromdu«l;

TO_CHAR《SYSDATE.'YY

2007-02-2502:46:01

SQL>selectto.char<sysdAte.'YYYY-W1-DDHH24:MI:SS*>fromdual;

TO_CHAR《SYSDATE,'YY

2007-02-2514:46:14

09_sql_function_2.avi

*8.to_date()函数

将特定的字符串转换成日期格式,这个函数有两个参数

第一参数:自定义的日期字符串

第二参数:指定这个字符串的格式

例子1:将1981年3月2日中午以后入职的雇员信息取出:

Select*fromempwherehiredate>to_date(*1981-03-0212:00:00),'YYYY-MM-DD

HH12:MI:SS,);

*9.to_number()函数

讲指定的字符串转换成数字格式,这个函数有两个参数

第一参数:自定义的数字字符串

第二参数:指定这个字符串的格式

例子1:求薪水大于1200的员工信息

Select*fromempwheresal>tonumber('$1,200.00','$9,999.99');

*10.nvl()函数

用来处理空值,这个函数有两个参数:

第一参数:字段名或者表达式,假如这个参数值为null,就返回第二参数值,否则返回第

一参数值

例子:求每个员工每年的年收入(12个月的薪水+津贴)

由于comm的值为null,想要得到正确的结果,务必讲null值转换为0

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

SQL>selectenamehiredatef1*onenpwherehiredate>to_date<,1981-2-2012:34:5

6:rYVVV-HM-DDHH24:MI:SS>>;

EHAMEHIREDATE

WARD22-2月-81

JONES02-4S-81

MARTIN28-9月-81

BLAKE61-5月-81

CLARK09-68-81

SCOTT19-4月-87

KING17-11月-81

TURNERB8-9P,-81

ADAMS23-5月-87

JAMES83T2月-81

FORD03-12月-81

EH自HEHIREDATE■

MILLER23-1月-82

己选择12行。

SAL

125。mmgjuniiiiiijmm

isHW

iIOR

MH

[on

己选择13行.

SQL>selectsalf>*ORenp“heresal>$1.259.00;

selectsalfronenpwheresal>$1,250.00

:QL>selectsalfronenpwhereSA!>to_nunber<*$1,250.80*$9.999-99*>;

SAL

1600

297s

2850

24S0

3000

50007

1500A

3000

1300

己选择9行。

SQL>selectename*sal«12♦nuKconm,0>fromemp;

ENAMESAL*12«NUL<CO«MF0>

SMITH9600

ALLEN19500

WARD1SS00

JONES35700

MARTIN16400

BLAKE34200

CLARK29400

SCOTT36碘0

KING60000

TURNER18000

ADAMS13200Y

ENAMESnL*12*NUL<COMM,0>

JAMES11400

FORD366加

MILLER15600

己选择“行.

10_group_function.avi(重要,牢牢记住,一个都不能忘)

*11,组函数包含5个函数:

(l).avg():求平均值

(2).max():求最大值

(3).min():求最小值

(4).sum():求总与

(5).count():求记录的数量

例子1:求薪水的总与、平均值、最大值与最小值

Selectsum(sal),avg(sal),max(sal),min(sal)fromemp;

例子2:求emp表中记录的数量

Selectcount(*)fromemp;

Count()能够对单独字段使用,得到的是所有非空记录的数量

例子3:求comm字段中所有非空记录的数量

Selectcount(comm)fromemp;

Count()能够与distinct一起使用,得到所有唯一值记录的数量

例子4:求emp表中deptno唯一的数量

Selectcount(distinct,deptno)fromemp;

注意:函数名不是在所有数据库中通用

SQL>selectmax<sal>fromenp;

HAX<SAL>

50B0

SQL>selectRin<sal>fronenp;

MIN<SAL>

800

SQL>selectavg<sal>froraenp;

AUG<SAL>

2073£1429

SQL>selectto.char<av9<s«l>,*99999999.99*>fronenp;

TO_CHfiR<AUG<:

10、2073.21

:QL>selectround<aug<sal>>2>fronenp;

ROUND<AUG<SAL>.2>

2073.21

SQL>selectsun<sal>fromenp;

SUM<SAL>

29025

SQL>scttcctcount<«>Fromemp;

COUNT<*>

14

SQL>selectcount<*>fromempwheredcptno-10;

COUNT<*>

3

SQL〉selectcount<ename>fronenp;

COUHT<EHAME>

14

SQL>selectcount<conm>fi*omemp;

COURT<COHM>

4

SQL>selectcount<deptno>fronenp;

COUHT<DEPTNO>

14

SQL>selectcount<distin|^tdcptno>fronenp;

COUNT<DISTINCTDEPTNO>

3

1l_group_by.avi

对表中的数据进行分组

例子1:计算每个部门的平均工资

首先将现有数据按照部门进行分组,然后再计算每个组员工的平均薪水。

Selectdeptno,avg(sal)fromempgroupbydeptno;

例子2:计算每个部门的最大工资

Selectdeptno,max(sal)fromempgroupbydeptno;

例子3:按照部门,与职位的最大薪水进行分组

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

使用groupby的规律:出现在select列表中的字段,假如没有出现在组函数中,则务必

出现在groupby子句中

典型错误:selectename,deptno,max(sal)fromempgroupbydeptno;

例子4:求出每一个部门里赚钱最多的那个人的名字

Selectename,deptno,salfromempwheresalin(

Selectsalfrom(

Selectdeptno,max(sal)salfromempgroupbydeptno

)

)

例子4:选出所用部门里工资最高的人的名字

Selectename,salfromempwheresal=

(

Selectmax(sal)fromemp

);

SQL>selectau9<s«l>fromempgroupbydeptno;

AUG<SAL>

1S66.66667

2175

2916.66667

SQL>selectdeptno,au$f(sal>fronenpgroupbydeptno;

DEPTNOAUG<SAL>

301566.66667

202175

102916.666G7

SQL>selectdeptno,job*nax<sal>fronenpgroupbydeptno.Job;

DEPTNOJOBHAX<SAL>

20CLERK1100

30SALESMAN1600

20MANAGER2975

30CLERK950

IttPRESIDENT

34MANAGER2850

10CLERK1300

10MANAGER2450

20ANALVST3000

|已选择9行。

SQL>selectmax<$Al>fromenpgroupbydeptno.Job;

HAX(SAL>

1100

1600

2975

950

5g80

2450

3000

己选择9行。

SQL>selectename.ndx<$al>fenp;

selectename.nax<sal>fronenp

第1行出现辑误鼠、,一

t)RAMH937:术是单组分组函数

Ename可能有很多,max(sal)只有一行

pQL>selectenanefromenpwheresal■<selectwax<sal>fromemp>;

EHAHE

KING

SQL>selectename,nax<$al>fro«enpgroupbydeptno;

selectcnaneRn«x^«l>fronenpgroupbydeptno

笫1行后现绿吴:”

ORA-00979:不是GROUPBY表达式

12_having.avi

使用Having对分组进行限制

假如我们要从分组数据中把某些特定的剔除去的时候,使用Having关键字

例子1:将平均薪水大于1000的组的平均薪水从emp这张表中选出来

Selectavg(sal),deptnogroupbydeptnohavingavg(sal)>1000;

例子2:求薪水大于1200的雇员,按照部门进行分组,而且这些分分组后组内平均薪水务必

大于1500,要查询分组的平均工资

Selectavg(sal)fromempwheresal>1200groupbydeptnohavingavg(sal)>1500

Orderbyavg(sal);

SQL>selectcug"a】〉

2froncnp

3wheresal>1200

4groupbydeptno

Shavingau9<s«l>>1500

6orde^byaug<sal>desc;

AUG<SAL>

Q991.66667

h916.66667

1690

13一表连接.avi

在where子句中进行多表连接(SQL1992)

实际需要在很多表中取数据,

例子:把员工姓名及员工所在部门的名字同时显示出来

Selectename,dnamefromemp,dept;

第二天上午:

13_表连接一21:41

为什么启动慢?由于每次启动Oracle的服务都会启动(解决办法,把Oracle服务设置成“手

动”启动)

scott/tiger一>用户名密码能够直接这样输入

把第一天学的内容用一句话总结出来

问:从emp这张表里把平均工资与部门编号列出来,同时过滤掉大写是A的名字,把剩下

的数据按照部门编号进行分组,分组之后的平均薪水务必大于2000,按照部门编号的倒序排

selectavg(sal),deptnofromemp

whereenamenotlike'_A%>

groupbydeptno

havingavg(sal)>2000

orderbydeptno

这是一个单条的select语句,(只是从一张表里取数据)第一天已经讲完

今天讲:多表的连接

例子1:请你选出雇员的名字,与雇员在部门的名字?

错误写法:selectename,deptnofromemp;〃这里选的是部门的编号,问题里是让选部门

的名字

selectdname,deptnofromdeptwheredeptno=20;〃选出了编号是20的这个人所在部门

的名字

正确写法:selectename,dnamefromemp,deptwhereemp.deptno=dept,deptno;

务必明确的指出重复字段是哪个表的比如:

selectename,dname,dept,deptnofromemp,deptwhereemp.deptno=dept,deptno;

指定哪张表的deptno实际上对它有一个效率上的影响

例子2:求每个人的薪水值包含他的名字

selectename,salfromemp;

例子3:求每个人的薪水值,名字与他的薪水处于第几个级别(非等值连接)

selectename,sal,gradefromemp,salgrade

wheresalbetweenlosalandhisal;

selectename,sal,gradefromemp,salgrade

wheresal>=losalandsal<=hisal;

例子4:求出他的名字,求出他所在部门的名称,求出他的薪水等级

首先分析这几个数据在3张表里

Selectename,dname,gradefromempe,deptd,salgrades

Wheree.deptno=d.deptnoande.salbetweens.losalands.hisal;

例子5:求出职位除‘PRESIDENT'以外的所有雇员的名字,部门名称,薪水等级

selectename,dname,gradefromempe,deptd,salgrades

wheree.deptno=d.deptnoande.sal>=s.losalande.sal<=s.hisalandjob<>

'PRESIDENT,;

13_子查询

例子1:求谁挣的钱最多

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论