尚學(xué)堂馬士兵Oracle學(xué)習(xí)筆記_第1頁
尚學(xué)堂馬士兵Oracle學(xué)習(xí)筆記_第2頁
尚學(xué)堂馬士兵Oracle學(xué)習(xí)筆記_第3頁
尚學(xué)堂馬士兵Oracle學(xué)習(xí)筆記_第4頁
尚學(xué)堂馬士兵Oracle學(xué)習(xí)筆記_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

尚學(xué)堂馬士兵Oracle學(xué)習(xí)筆記words副本

01_sqlplus_introduction.avi

三種不一致的命令行的客戶端

Oracle需要熟悉的第一個:sqlplus,當(dāng)啟動sqlplus需要讓你輸入,用戶名口令字符串

Sqlplus是Oracle的一個客戶端,Oracle大多數(shù)的東西都是在命令行執(zhí)行,

輸入用戶名: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.

謂領(lǐng)入用戶名: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

遠程帆助

優(yōu)化大牌

SynftnttcClitntStcwity

MySQL

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

G設(shè)定程序訪問球認值OracleIxkst*ll?tionProducts

CVS1H

紫光華宇拼音幡入法V5

嚙程序0)

Moxill*Fxr?£ox

eMule

C??tasi?

0*設(shè)置9

VMw*r?

Q觸?JR訊軟件

KTTPLook

蚣則和支拓01)BEAWebLogicPlatfornd.1

小麗3工具系列

?口運行⑥…

MyEclips?EnterpristYorkb?nch5.0GAOracl*Obj?c

AdobeReader7.0I組OracleObjec

:注物AMinistr.torQ)...

衽期兔子魔法設(shè)置OrachInstallationProducts?aOrachObjtc

回美漸十茸機…舞集成管理工A?0Or*cl?ODBC

Strv-V配置和移植工具?[OrtOLZBB聯(lián)

“開始爐7e?片啟Oracle-OrtDblOjhgel應(yīng)用程序開發(fā)土產(chǎn)中

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|

網(wǎng)頁版

嚴禁未蝮授權(quán)使用此站點,否則可能會面臨民事和刑事起訴。

?表示必需的字段

?用戶名isfott

?口令

連樓標識符

幫助

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

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

ORACLG

zSQL*Plus

工作區(qū)

、執(zhí)工).加裝腳本),、保存腳本)|國取#

工作區(qū)?歷史記錄?法狙?首選項?瞿助

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

02_unlock_user.avi

使用超級管理員登錄到數(shù)據(jù)庫上:sqlplussys/bjsxtassysdba->當(dāng)成DBA登錄到服務(wù)

器上

連上之后

更換user:alteruserscottaccountunlock;更換用戶解除鎖定

03_table_structures.avi

第二章SQL(structuredQueryLanguage)語言

Sql語言是在數(shù)據(jù)庫地下進行操作的專門的語言,sql語言本身是一種標準語言,它是一個

國際標準,它定義了套標準SQL1922,SQL1999,SQL在大多數(shù)數(shù)據(jù)庫上通用,或者許有輕

微的改變

包含四大語句:

1.查詢語句

查詢語句只有一種就是select語句

2.DML語句(數(shù)據(jù)操作/操縱語言)

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

3.DDL語句(數(shù)據(jù)定義語言)

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

4.事務(wù)操縱語句

包含Commit,Rollback等常用語句

還有一大類語句:叫DCL語句(DataControlLanguage),要緊用于權(quán)限的分配與回收,由

于與開發(fā)關(guān)系不是十分密切,不做重點講解

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

它的

Select語句就是從表里把數(shù)據(jù)選出來

首先熟悉試驗中的數(shù)據(jù)

第一條語句:descemp;->desc表名;列出表頭=字段==列

Varchar2->可變字符串好支持國際化

NUMBER(7,2)97位的數(shù)字,2位的小數(shù)

每行顯示的寬度setlinesize200;

顯示的頁數(shù)setpagesize30;

emp)雇員信息表

EMPNO雇員編號NOTNULLNUMBERS)

ENAME雇員姓名VARCI1AR2(1O)

JOB工作崗位VARCHAR2(9)

MGR該雇員經(jīng)理人的編號NUMBER(4)

HIREDATE入職時間DATE

SAL薪水NUMBER(7,2)

COMM津貼NUMBER(7,2)

DEPTNO雇員所在部門編號NUMBER(2)

Varchar2:能夠存放各國的語言,適合國際化;varchar:不能存放各國語言,有限定。

表內(nèi)容:

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)

內(nèi)容:

DEPTNODNAMELOC

10ACCOUNTINGNEWYORK

20RESEARCHDALLAS

30SALESCHICAGO

40OPERATIONSBOSTON

salgrade薪水等級表

GRADE薪水等級NUMBER

LOSAL該等級的最低薪水值NUMBER

HISAL該等級的最高薪水值NUMBER

內(nèi)容:

GRADELOSALIIISAL

17001200

212011400

314012000

420013000

530019999

熟悉表里面的數(shù)據(jù):

第一個select語句:select*from表名;

Select*fromemp;

04_select_l.avi

1.簡單select語句:

例子1:取出一張表中所有的數(shù)據(jù)

Select*fromemp;

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

Selectempno,ename,deptnofromemp;

2.包含算術(shù)表達式的sql語句

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

Selectename,sal*12fromemp;

例子2:在emp表中取出2*3的結(jié)果

Select2*3fromemp;

例子3:取出2*3的一條記錄

Select2*3fromdual;一當(dāng)我們需要顯示一個結(jié)果的時候就用系統(tǒng)提供的dual虛表

SQL〉descdual

名稱是否為空?類型

MJMMVUARCHAR2<1>

SQL〉select*fi*ondual;

D

:?:

SQL>select2*3fi?ondual;

2-3

例子4:取出當(dāng)前系統(tǒng)時間

Selectsysdatefromdual;--sysdate在Oracle中表示當(dāng)前系統(tǒng)時間

3.含有別名的sql語句

例子1:selectename,sal*12annual_salfromemp;

例子2:假如想讓別名強制大小寫混合能夠使用雙引號

Selectename,sal*12uAnnual_salwfromemp;

例子3:假如想讓別名中有空格也使用雙引號

Selectename,sal*12uAnnualsal“fromemp;

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

例子1:算某人一年的年薪今含有任何null值的數(shù)學(xué)表達式最后的結(jié)果都為null

Selectename,sal*12+commfromemp

例子2:含有任何null值的字符串表達式中,null被當(dāng)作空字符串處理

selectempno,ename|'andhismanagernumberis'|mgrfromemp;

字符串連接符:II

Select語句中用單引號表示字符串

6.在select中使用單引號

例子1:用兩個單引號表示一個單引號

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

05_distinct.avi

7.消除重復(fù)值

例子l:selectdistinctdeptnofromemp;一用distinct消除結(jié)果集中的重復(fù)信息

例子2:用distinct修飾多個字段的時候,指的是消除后面所有字段的組合重復(fù)結(jié)果

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

06_where.avi

使用where對數(shù)據(jù)庫設(shè)定條件限制,where今過濾條件,過濾有關(guān)的數(shù)據(jù)

1.等值推斷

例子1:顯示部門編號為10的所有員工的全面信息

select*fromempwheredeptno=10;

例子2:顯示名字為KING的員工的全面信息

推斷字符串是否相等時,字符串要用單引號引起來,單引號中字符串內(nèi)容是要區(qū)分大小寫的

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;

尚學(xué)堂馬士兵Oracle學(xué)習(xí)筆記“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函數(shù),

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關(guān)鍵字,與通配符%)表示。個或者多個字符,_表示1個字符

例子1:查詢名字中含有ALL的人員

Selectenamefromempwhereenamelike<%ALL%>;

例子2:查詢第二字母中含有A的雇員

Selectenamefromempwhereenamelike'_A%';

例子3:查詢名字中含有%等通配符的數(shù)據(jù)時;使用轉(zhuǎn)義字符\

Escape今自定義轉(zhuǎn)移字符,系統(tǒng)默認的轉(zhuǎn)義字符是'\'

Selectenamefromempwhereenamelike溉'escape'\';

Selectenamefromempwhereenamelikeescape'$';

07_order_by.avi

使用它orderby對數(shù)據(jù)進行排序

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

Selectename,salfromemporderbyename;

Selectename,salfromemporderbyenameasc;好用asc關(guān)鍵字指出按升序排列

例子2:按照雇員編號的升序排序

Selectename,deptnofromemporderbydeptno;

Selectename,deptnofromemporderbydeptnoasc;

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

Selectename,deptnofromemporderbyenamedesc;

例子4:按照部門編號降序排列

Selectename,deptnofromemporderbydeptnodesc;

例子5:多個關(guān)鍵字排序,先按照部門編號升序排列,在再內(nèi)部按照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函數(shù)

1.Lower。函數(shù)少將字符串全部轉(zhuǎn)換成小寫

例子1:將雇員中名字含有‘A'或者'a'的人員全部顯示出來

Selectenamefromempwhereenamelike,%A%rorenamelike<%a%;

Selectenamefromempwherelower(ename)like'%a%';

2.Upper0函數(shù)將字符串全部轉(zhuǎn)換為大寫

例子2:將雇員中名字含有‘A'或者'a'的人員全部顯示出來

Selectenamefromempwhereupper(ename)like'%A%';

3.substr()函數(shù)

例子1:從第一字符開始共截3個子串

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

Substr9能夠省略第三個參數(shù)

例子2:從第二個字符開始,截取到整個字符串結(jié)束

Selectsbustr(ename,2)fromemp;

4.Chr()函數(shù)

例子1:求一個與某個ASCH碼值對應(yīng)的字符

Selectchr(65)fromdual;

1.Ascii()函數(shù)

例子:求一個字符的ASCH碼值

Selectascii('A')fromdual;

2.round。函數(shù)個對參數(shù)值進行四舍五入的操作

例子1:對23.652進行四舍五入操作

Selectround(23.652)fromdual;->24

能夠指定四舍五入到小數(shù)點后幾位

例子2:對23.652四舍五入到小數(shù)點后2位

Selectround(23.652,2)fromdual;->23.65

能夠用負數(shù)指定小數(shù)點前面幾位

例子3:對23.652四舍五入到小數(shù)點前1位

Selectround(23.652,-1)fromdual;20

*7.tochar()

用于將數(shù)字或者日期轉(zhuǎn)換成特定的字符串,

To_char()有兩個參數(shù):

第一個參數(shù):需要進行轉(zhuǎn)換的日期或者數(shù)字

第二個參數(shù):特定的轉(zhuǎn)換格式,關(guān)于數(shù)字有一下幾個格式能夠指定:

9玲代表數(shù)字,若果該位沒有數(shù)字則不進行顯示,但關(guān)于小數(shù)點后面的部分仍會強制顯示

u9代表一位數(shù)字,假如該位沒有數(shù)字則強制顯示0

$-?顯示美元符號

Lf顯示本地貨幣符號

.今顯示小數(shù)點

,分顯示千分位符號

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

'ALLEN'$1,600.0000

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

'ALLEN'$01,600.0000

關(guān)于日期:to_char()能夠指定為下面的常用格式:

格式操縱符含義

YYYY,YY今代表4位,2位數(shù)字的年份

MM9用數(shù)字表示的月份

M0N--今月份的縮寫對中文月份來說就是全稱

DD9數(shù)字表示的日

DY9星期的縮寫,對中文的星期來說就是全稱

HH24、HH12->12小時或者者24小時進制下的時間

MI9分鐘數(shù)

SS9秒數(shù)

有了這些格式,就能夠把日期自定義為任何格式

例子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、把字段轉(zhuǎn)換成小寫

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行。

、把數(shù)字轉(zhuǎn)換成相對應(yīng)的字母

SQL>selectchr<65>fromdual;

A

3、把字母轉(zhuǎn)換成相對應(yīng)的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、把數(shù)字或者者日期轉(zhuǎn)化成某種格式

1)對數(shù)字

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()函數(shù)

將特定的字符串轉(zhuǎn)換成日期格式,這個函數(shù)有兩個參數(shù)

第一參數(shù):自定義的日期字符串

第二參數(shù):指定這個字符串的格式

例子1:將1981年3月2日中午以后入職的雇員信息取出:

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

HH12:MI:SS,);

*9.to_number()函數(shù)

講指定的字符串轉(zhuǎn)換成數(shù)字格式,這個函數(shù)有兩個參數(shù)

第一參數(shù):自定義的數(shù)字字符串

第二參數(shù):指定這個字符串的格式

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

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

*10.nvl()函數(shù)

用來處理空值,這個函數(shù)有兩個參數(shù):

第一參數(shù):字段名或者表達式,假如這個參數(shù)值為null,就返回第二參數(shù)值,否則返回第

一參數(shù)值

例子:求每個員工每年的年收入(12個月的薪水+津貼)

由于comm的值為null,想要得到正確的結(jié)果,務(wù)必講null值轉(zhuǎn)換為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,組函數(shù)包含5個函數(shù):

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

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

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

(4).sum():求總與

(5).count():求記錄的數(shù)量

例子1:求薪水的總與、平均值、最大值與最小值

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

例子2:求emp表中記錄的數(shù)量

Selectcount(*)fromemp;

Count()能夠?qū)为氉侄问褂茫玫降氖撬蟹强沼涗浀臄?shù)量

例子3:求comm字段中所有非空記錄的數(shù)量

Selectcount(comm)fromemp;

Count()能夠與distinct一起使用,得到所有唯一值記錄的數(shù)量

例子4:求emp表中deptno唯一的數(shù)量

Selectcount(distinct,deptno)fromemp;

注意:函數(shù)名不是在所有數(shù)據(jù)庫中通用

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

對表中的數(shù)據(jù)進行分組

例子1:計算每個部門的平均工資

首先將現(xiàn)有數(shù)據(jù)按照部門進行分組,然后再計算每個組員工的平均薪水。

Selectdeptno,avg(sal)fromempgroupbydeptno;

例子2:計算每個部門的最大工資

Selectdeptno,max(sal)fromempgroupbydeptno;

例子3:按照部門,與職位的最大薪水進行分組

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

使用groupby的規(guī)律:出現(xiàn)在select列表中的字段,假如沒有出現(xiàn)在組函數(shù)中,則務(wù)必

出現(xiàn)在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行出現(xiàn)輯誤鼠、,一

t)RAMH937:術(shù)是單組分組函數(shù)

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

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

EHAHE

KING

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

selectcnaneRn?x^?l>fronenpgroupbydeptno

笫1行后現(xiàn)綠吳:”

ORA-00979:不是GROUPBY表達式

12_having.avi

使用Having對分組進行限制

假如我們要從分組數(shù)據(jù)中把某些特定的剔除去的時候,使用Having關(guān)鍵字

例子1:將平均薪水大于1000的組的平均薪水從emp這張表中選出來

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

例子2:求薪水大于1200的雇員,按照部門進行分組,而且這些分分組后組內(nèi)平均薪水務(wù)必

大于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)

實際需要在很多表中取數(shù)據(jù),

例子:把員工姓名及員工所在部門的名字同時顯示出來

Selectename,dnamefromemp,dept;

第二天上午:

13_表連接一21:41

為什么啟動慢?由于每次啟動Oracle的服務(wù)都會啟動(解決辦法,把Oracle服務(wù)設(shè)置成“手

動”啟動)

scott/tiger一>用戶名密碼能夠直接這樣輸入

把第一天學(xué)的內(nèi)容用一句話總結(jié)出來

問:從emp這張表里把平均工資與部門編號列出來,同時過濾掉大寫是A的名字,把剩下

的數(shù)據(jù)按照部門編號進行分組,分組之后的平均薪水務(wù)必大于2000,按照部門編號的倒序排

selectavg(sal),deptnofromemp

whereenamenotlike'_A%>

groupbydeptno

havingavg(sal)>2000

orderbydeptno

這是一個單條的select語句,(只是從一張表里取數(shù)據(jù))第一天已經(jīng)講完

今天講:多表的連接

例子1:請你選出雇員的名字,與雇員在部門的名字?

錯誤寫法:selectename,deptnofromemp;〃這里選的是部門的編號,問題里是讓選部門

的名字

selectdname,deptnofromdeptwheredeptno=20;〃選出了編號是20的這個人所在部門

的名字

正確寫法:selectename,dnamefromemp,deptwhereemp.deptno=dept,deptno;

務(wù)必明確的指出重復(fù)字段是哪個表的比如:

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:求出他的名字,求出他所在部門的名稱,求出他的薪水等級

首先分析這幾個數(shù)據(jù)在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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論