It計(jì)算機(jī)課件 oracle sql基礎(chǔ)語(yǔ)句_第1頁(yè)
It計(jì)算機(jī)課件 oracle sql基礎(chǔ)語(yǔ)句_第2頁(yè)
It計(jì)算機(jī)課件 oracle sql基礎(chǔ)語(yǔ)句_第3頁(yè)
It計(jì)算機(jī)課件 oracle sql基礎(chǔ)語(yǔ)句_第4頁(yè)
It計(jì)算機(jī)課件 oracle sql基礎(chǔ)語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩153頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

SQL的學(xué)習(xí)資料

SELECT

名稱

SELECT—從表或視圖中取出若干行.

SELECT[ALLIDISTINCT[ON(expression[,...])]]

expression[ASname][,…]

INTO[TEMPORARYITEMP][TABLE]new_table]

[FROMtable[alias][,...]]

[WHEREcondition]

[GROUPBYcolumn[,...]]

[HAVINGcondition[,...]]

[{UNION[ALL]|INTERSECT|EXCEPT}select]

[ORDERBYcolumn[ASC|DESC|USINGoperator][,...]]

[FORUPDATE[OFclass_name[,...]]]

LIMIT{count|ALL}[{OFFSET|,)start]

輸入

expression

表的列/字段名或一個(gè)表達(dá)式.

name

使用AS子句為一個(gè)列/字段或一個(gè)表達(dá)式聲明另一個(gè)名稱.這個(gè)名稱主要用于標(biāo)記

輸出列。name不能在WHERE,GROUPBY或HAVING子句中使用。但是它可

以在與ORDERBY子句里引用。

TEMPORARY,TEMP

該表是在這次會(huì)話中唯一的,并且將在會(huì)話結(jié)束后自動(dòng)刪除。

new_table

如果聲明了INTOTABLE子句,查詢的結(jié)果將存儲(chǔ)在指出名稱的另一個(gè)表中.目

標(biāo)表(new_table)將被自動(dòng)創(chuàng)建并且在此命令執(zhí)行之前不應(yīng)該存在。請(qǐng)參考

SELECTINTO獲取更多信息.

注意:CREATETABLEAS語(yǔ)句也將從選擇查詢中創(chuàng)建新表.

table

FORM子句引用的一個(gè)現(xiàn)存的表的名稱.

alias

正在處理的表table的別名,用于縮寫或消除一個(gè)表內(nèi)部聯(lián)合時(shí)的含混.

condition

一個(gè)結(jié)果為真或假布爾表達(dá)式.參閱WHERE子句獲取更多信息.

column

表的列/字段的名稱.

select

一個(gè)可以有除ORDERBY子句外的所有特性的選擇語(yǔ)句.

輸出

Rows

查詢返回的所有結(jié)果集的行.

count

查詢返回的行的記數(shù).

描述

SELECT將從一個(gè)或更多表中返回記錄行。選擇的侯選行是滿足WHERE條件的所

有行?;蛘呷绻÷粤薟HERE語(yǔ)句則選擇表中的所有行.(參閱WHERE子句)

DISTINCT將從選擇出來(lái)的結(jié)果集中刪除所有的重復(fù)的行。ALL(缺?。⒎祷?/p>

所有侯選行,包括重復(fù)的行。

DISTINCTON刪除匹配所有表達(dá)式的行,只保留每個(gè)重復(fù)集的第一行。注意這里

每個(gè)重復(fù)集的"第一行”是不可預(yù)料的,除非我們用ORDERBY來(lái)保證我們希望的

行最先出現(xiàn)。例如,

SELECTDISTINCTON(location)location,time,report

FROMweatherReports

ORDERBYlocation,timeDESC;

檢索出每個(gè)地區(qū)的最近的天氣預(yù)報(bào)。但是如果我們沒(méi)有使用ORDERBY來(lái)強(qiáng)制每

個(gè)地區(qū)按時(shí)間值降續(xù)排列,我們得到的將是每個(gè)地區(qū)的不可預(yù)料的時(shí)間的報(bào)告。

GROUPBY子句允許用戶將一個(gè)表分成概念上的組.(參閱GROUPBY子句。)

HAVING子句聲明一個(gè)分組了的表,該表是從前面聲明的子句的結(jié)果集中去除了

一些組后生成的.(參閱HAVING子句。)

ORDERBY子句允許用戶根據(jù)模式操作符(ASCending或DESCending)來(lái)表明他

/她所希望的行的排序模式(參閱ORDERBY了句)。

UNION操作符允許結(jié)果集是那些涉及到的查詢所返回的行的集合。(參閱UNION

子句。)

INTERSECT給出兩個(gè)查詢公共的行。(參閱INTERSECT子句。)

EXCEPT給出存在于第一個(gè)查詢而不存在于第二個(gè)查詢的行。(參閱EXCEPT了

攵。)

FORUPDATE子句允許SELECT語(yǔ)句對(duì)選出的行執(zhí)行排他鎖。

LIMIT子句允許給用戶返回一個(gè)查詢生成的結(jié)果的子集。(參閱LIMIT)

你必須有SELECT權(quán)限用來(lái)從表中讀取數(shù)值(參閱GRANT/REVOKE語(yǔ)句).

WHERE子句

可選的WHERE條件有如下常見(jiàn)的形式:

WHEREboolean_expr

boolean_expr可以包含任意個(gè)得出布爾值的表達(dá)式。通常表達(dá)式會(huì)是

exprcond_opexpr

log_opexpr

這里cond_op可以是下面之一:=,<,<=,>,>=,<>或條件操作符象ALL,

ANY,IN,LIKE等,或者用戶定義的操作符,而log_op可以為:AND,OR,NOT.比

較返回的結(jié)果要么是TRUE要么是FALSET并且如果表達(dá)式的值是FALSE,所有

記錄都將被丟棄.

GROUPBY子句

GROUPBY聲明一個(gè)分了組的表,該表源于應(yīng)用使用下面的子句:

GROUPBYcolumn[,...]

GROUPBY將把所有在組合了的列上共享同樣的值的行壓縮成一行。如果存在聚

集函數(shù),這些聚集函數(shù)將計(jì)算每個(gè)組的所有行,并且為每個(gè)組計(jì)算一個(gè)獨(dú)立的值

(如果沒(méi)有GROUPBY,聚集函數(shù)對(duì)選出的所有行計(jì)算出一個(gè)數(shù)值)。存在GROUP

BY時(shí),除了在聚集函數(shù)里面,對(duì)任何非組合列的引用都是非法的,因?yàn)閷?duì)一個(gè)

非組合列會(huì)有多于一個(gè)可能的返回值。

HAVING子句

可選的HAVING條件有如下形式:

HAVINGcond_expr

這里cond_expr與為WHERE子句里聲明的相同.

HAVING子句聲明一個(gè)從前面的子句的結(jié)果集中去除了一些不符合cond_expr

組后分組的表.

在cond_expr里引用的每個(gè)列/字段應(yīng)該清晰地指明一個(gè)組的列/字段,除非引

用在一個(gè)聚集函數(shù)里。

ORDERBY子句

ORDERBYcolumn[ASC|DESC][,...]

column既可以是一個(gè)列/字段名也可以是一個(gè)序數(shù)。

序數(shù)指的是列/字段按順序(從左到右)的位置.這個(gè)特性可以使得對(duì)沒(méi)有一個(gè)

合適名稱的列/字段的排序成為可能.這一點(diǎn)可能永遠(yuǎn)沒(méi)有用,因?yàn)榭偸强梢酝?/p>

過(guò)AS子句給一個(gè)要計(jì)算的列/字段賦予一個(gè)名稱,例如:

SELECTtitle,date_prod+1ASnewlenFROMfilmsORDERBYnewlen;

從PostgreSQL版本6.4開始,還可以O(shè)RDERBY任意表達(dá)式,包括那些沒(méi)有

出現(xiàn)在SELECT結(jié)果列表里面的域。因此下面的語(yǔ)句現(xiàn)在是合法的:

SELECTnameFROMdistributorsORDERBYcode;

我們可以給ORDERBY子句里每個(gè)列/字段加一個(gè)關(guān)鍵字DESC(降序)或ASC

(升序).如果不聲明,ASC是缺省.我們還可以聲明一個(gè)排序操作符來(lái)實(shí)現(xiàn)排

序。ASC等效于使用而DESC等效于使用。

UNION子句

table_queryUNION[ALL]table_query

[ORDERBYcolumn[ASC|DESC][,...]]

這里table_query表明任何沒(méi)有ORDERBY子句的選擇表達(dá)式.

UNION操作符允許結(jié)果集是那些涉及到的查詢所返回的結(jié)果的集合。兩個(gè)做為

UNION直接操作數(shù)的SELECT必須生成相同數(shù)目的字段,并且對(duì)應(yīng)的字段必須有

兼容的數(shù)據(jù)類型。

缺省地,UNION的結(jié)果不包含任何重復(fù)的行,除非聲明了ALL子句.

同一SELECT語(yǔ)句中的多個(gè)UNION操作符是從左向右計(jì)算的.注意ALL關(guān)鍵字

不一定是全局的,只是應(yīng)用在當(dāng)前一對(duì)表的結(jié)果上.

INTERSECT子句

table_queryINTERSECTtable_query

[ORDERBYcolumn[ASC|DESC][,...]]

這里table_query聲明任何沒(méi)有ORDERBY子句的選擇表達(dá)式。

INTERSECT給出兩個(gè)查詢公共的行。兩個(gè)做為INTERSECT直接操作數(shù)的

SELECT的結(jié)果必須有相同數(shù)目的字段,并且對(duì)應(yīng)的字段必須有兼容的數(shù)據(jù)類型。

除非用圓括號(hào)指明順序,同一SELECT語(yǔ)句中的多個(gè)INTERSECT操作符是從左

向右計(jì)算的。

EXCEPT子句

table_queryEXCEPTtable_query

fORDERBYcolumn[ASCIDESC][,...]]

這里table_query聲明任何沒(méi)有ORDERBY子句的選擇表達(dá)式。

EXCEPT給出存在于第一個(gè)查詢而不存在于第二個(gè)查詢的行。(參閱EXCEPT子

句)。兩個(gè)做為EXCEPT直接操作數(shù)的SELECT的結(jié)果必須有相同數(shù)目的字段,

并且對(duì)應(yīng)的字段必須有兼容的數(shù)據(jù)類型。

除非用圓括號(hào)指明順序,同一SELECT語(yǔ)句中的多個(gè)EXCEPT操作符是從左向右

計(jì)算的。

LIMIT子句

LIMIT{count|ALL}[{OFFSET|,}start]

OFFSETstart

這里count聲明返回的最大行數(shù),而start聲明開始返回行之前忽略的行數(shù)。

LIMIT允許你檢索有查詢其他部分生成的行的某一部分。如果給出了限制計(jì)數(shù),

那么返回的行數(shù)不會(huì)超過(guò)哪個(gè)限制。如果給出了一個(gè)偏移量,那么開始返回行之

前會(huì)忽略那個(gè)數(shù)量的行。

在使用LIMIT時(shí),一個(gè)好習(xí)慣是使用一個(gè)ORDERBY子句把結(jié)果行限制成一個(gè)

唯一的順序。否則你會(huì)得到無(wú)法預(yù)料的查詢返回的子集--你可能想要第十行

到第二十行,但以什么順序?除非你聲明ORDERBY,否則你不知道什么順序。

在Postgres7.0,查詢優(yōu)化器在生成查詢規(guī)劃時(shí)把LIMIT考慮進(jìn)去了,所以你

很有可能因給出的LIMIT和OFFSET值不同而得到不同的規(guī)劃(生成不同的行

序)。因此用不同的LIMIT/OFFSET值選擇不同的查詢結(jié)果的子集將不會(huì)產(chǎn)生一

致的結(jié)果,除非你用ORDERBY強(qiáng)制生成一個(gè)可預(yù)計(jì)的結(jié)果順序。這可不是毛?。?/p>

這是SQL生來(lái)的特點(diǎn),因?yàn)槌怯昧薕RDERBYE約束順序,SQL不保證查詢生

成的結(jié)果有任何特定的順序。

用法

將表films和表distributors聯(lián)合在?起:

SELECTf.title,f.did,d.name,f.date_prod,f.kind

FROMdistributorsd,filmsf

WHEREf.did=d.did

title|did|name|date_prod|kind

?+——+-----------------+----------+-

TheThirdMan|101BritishLion|1949-12-23|Drama

TheAfricanQueen|101BritishLion11951-08-111Romantic

UneFemmeestuneFemme102JeanLucGodard|1961-03-12|Romantic

Vertigo103IParamount1958-11-14Action

Becket103Paramount|1964-02-03|Drama

48Hrs103Paramount1982-10-22Action

WarandPeace|104Mosfilm|1967-02-12|Drama

WestSideStory,105UnitedArtists|1961-01-03|Musical

Bananas105UnitedArtists|1971-07-13|Comedy

Yojimbo1106Toho11961-06-161Drama

There,saGirlinmySoup107Columbia|1970-06-11|Comedy

TaxiDriver107Columbia1975-05-15Action

AbsenceofMalice107Columbia|1981-11-15|Action

Storiadiunadonna108Westward|1970-08-15|Romantic

TheKingandI109|20thCenturyFox|1956-08-11|Musical

DasBoot,1101BavariaAtelier11981-11-111Drama

BedKnobsandBroomsticks111IWaltDisneyIMusical

統(tǒng)計(jì)用kind分組的所有電影和組的歹V字段的len(長(zhǎng)度)的和:

SELECTkind,SUM(len)AStotalFROMfilmsGROUPBYkind;

kind|total

Action|07:34

Comedy|02:58

Drama|14:28

Musical|06:42

Romantic|04:38

統(tǒng)計(jì)所有電影(films),組的列/字段len(長(zhǎng)度)的和,用kind分組并且

顯示小于5小時(shí)的組總和:

SELECTkind,SUM(len)AStotal

FROMfilms

GROUPBYkind

HAVINGSUM(len)<INTERVAL'5hour';

kind|total

Comedy|02:58

Romantic|04:38

下面兩個(gè)例子是根據(jù)第二列(name)的內(nèi)容對(duì)單獨(dú)的結(jié)果排序的經(jīng)典的方法.

SELECT*FROMdistributorsORDERBYname;

SELECT*FROMdistributorsORDERBY2;

didname

——+-----------------

109|20thCenturyFox

110IBavariaAtelier

101|BritishLion

107|Columbia

102|JeanLucGodard

113|Lusofilms

104|Mosfilm

103|Paramount

106|Toho

105|UnitedArtists

111|WaltDisney

112|WarnerBros.

108|Westward

這個(gè)例子演示如何獲得表distributors和actors的聯(lián)合,只將每個(gè)表中以字

母W開頭的取出來(lái).因?yàn)橹蝗×瞬幌嚓P(guān)的行,所以關(guān)鍵字ALL被省略了:

distributors:actors:

did|nameid|name

——+------------一一+---------------

108IWestward11WoodyAllen

111WaltDisney2|WarrenBeatty

112|WarnerBros.3|WalterMatthau

SELECTdistributors,name

FROMdistributors

WHEREdistributors,nameLIKE'W%'

UNION

SELECTactors,name

FROMactors

WHEREactors,nameLIKE'W%'

name

WaltDisney

WalterMatthau

WarnerBros.

WarrenBeatty

Westward

WoodyAllen

兼容性

擴(kuò)展

Postgres允許我們?cè)谝粋€(gè)查詢里省略FROM子句。這個(gè)特性是從最初的

PostQuel查詢語(yǔ)言里保留下來(lái)的:

SELECTdistributors.*WHEREname='Westwood';

did|name

108|Westward

SQL92

SELECT子句

在SQL92規(guī)范里,可選的關(guān)鍵字"AS”是多余的,可以忽略掉而不對(duì)語(yǔ)句產(chǎn)生

任何影響.Postgres分析器在重命名列/字段時(shí)需要這個(gè)關(guān)鍵字,因?yàn)轭愋蛿U(kuò)展

的特性會(huì)導(dǎo)致上下文語(yǔ)意不清.

DISTINCTON語(yǔ)法不是SQL92的標(biāo)準(zhǔn)。LIMIT和OFFSET也不是。

UNION子句

SQL92的UNION語(yǔ)法允許一個(gè)附加的CORRESPONDINGBY子句:

table_queryUNION[ALL]

[CORRESPONDING[BY(column[,...])]]

table_query

CORRESPONDINGBY目前還不被Postgres支持.

SELECTINTO

名稱

SELECTINTO一從當(dāng)前表或視圖中創(chuàng)建一個(gè)新表

SELECT[ALL|DISTINCT[ON(expression[,...])]]

expression[ASname][,...]

[INTO[TEMPORARY|TEMP][TABLE]new_table]

[FROMtable[alias][,...]]

[WHEREcondition]

[GROUPBYcolumn[,...]]

[HAVINGcondition[,...]]

[{UNION[ALL]|INTERSECT|EXCEPT}select]

[ORDERBYcolumn[ASC|DESC|USINGoperator][,…]

[FORUPDATE[OFclass_name[,...]]]

LIMIT{count|ALL}[{OFFSET|,)start]

輸入

所有輸入的域都在SELECT中有詳細(xì)描述.

輸出

所有輸入的域都在SELECT中有詳細(xì)描述.

描述

SELECTINTO從一個(gè)查詢中創(chuàng)建一個(gè)新表.比較典型的是這個(gè)查詢從一個(gè)現(xiàn)存的

表中提取數(shù)據(jù),但實(shí)際上任何SQL查詢都可以.

注意:CREATETABLEAS功能上和SELECTINTO命令相等.

CREATETABLE

名稱

CREATETABLE一創(chuàng)建一個(gè)新表

CREATE[TEMPORARY|TEMP]TABLEtable(

columntype

[NULL|NOTNULL][UNIQUE][DEFAULTvalue]

[column_constraint_clause\PRIMARYKEY}[...]]

[,PRIMARYKEY(column[,...])]

[,CHECK(condition)]

[,table_constraint_clause]

)[INHERITS(inherited_table[,???])]

輸入

TEMPORARY

此表只是為這次會(huì)話創(chuàng)建,并且在會(huì)話結(jié)束后自動(dòng)刪除。當(dāng)臨時(shí)表存在時(shí),同名的

永久表是不可見(jiàn)的。

table

將要?jiǎng)?chuàng)建的新表的名稱.

column

列/字段名.

type

列/字段類型.這里可以包括數(shù)組的聲明.請(qǐng)參考PostgreSQL用戶手冊(cè)獲取關(guān)于數(shù)

據(jù)類型和數(shù)組的詳細(xì)信息.

DEFAULTvalue

一個(gè)列/字段的缺省值.請(qǐng)參考DEFAULT子句獲取更多信息.

column_constraint_clause

可選的列/字段約束子句,聲明一系列整合的約束和測(cè)試,當(dāng)對(duì)表進(jìn)行更新或插入操

作時(shí)必須滿足這些約束條件才能成功.每個(gè)約束必須生成一個(gè)布爾式.盡管SQL92

需要column_constraint_clause用于指定某一行,Postgres允許在用■?個(gè)列/

字段的約束索引多個(gè)列.請(qǐng)/考列約束子句獲取更多信息.

table_constraint_clause

可選的表(約束)CONSTRAINT子句,聲明一系列整合的約束,當(dāng)對(duì)表進(jìn)行更新

或插入時(shí)必須滿足這些約束.每個(gè)約束必須生成一個(gè)布爾表達(dá)式.可以對(duì)多列使用

同一個(gè)約束.一個(gè)表只能聲明一個(gè)PRIMARYKEY子句:PRIMARYKEYcolumn

(表約束)和PRIMARYKEY(列/字段約束)是互斥的.請(qǐng)參考表約束子句獲取

更多信息.

INHERITSinherited_table

可選的(繼承)INHERITS子句聲明一系列表名,這個(gè)表將自動(dòng)從這些表繼承所有

字段.如果任何繼承域出現(xiàn)的次數(shù)超過(guò)一次,Postgres將報(bào)告一個(gè)錯(cuò)誤.Postgres自

動(dòng)地允許所創(chuàng)建的表繼承所有其父表的函數(shù).

另外:函數(shù)的繼承是按照通用Lisp對(duì)象系統(tǒng)(CLOS)的習(xí)慣進(jìn)行的.

輸出

CREATE

成功創(chuàng)建表后的返回信息.

ERROR

如果創(chuàng)建表失敗,返回此信息.通常還跟隨一些描述文本,例如:ERROR:Relation

'tabl^alreadyexists在運(yùn)行時(shí)出現(xiàn),因?yàn)樗暶鞯谋硪呀?jīng)在數(shù)據(jù)庫(kù)中存在.

ERROR:DEFAULT:typemismatched

如果缺省數(shù)值的類型和字段定義的類型不一樣,返回此錯(cuò)誤.

描述

CREATETABLE將向當(dāng)前數(shù)據(jù)庫(kù)中追加一個(gè)表.表將為執(zhí)行命令者''所有

每個(gè)type可以是簡(jiǎn)單類型,復(fù)合(集)類型或者一個(gè)數(shù)組類型。每個(gè)屬性都可

以聲明為非空并且每個(gè)都可以有一個(gè)缺省值,用DEFAULT子句聲明。

注意:對(duì)于Postgresv6.0,一個(gè)屬性內(nèi)的數(shù)組唯數(shù)的一致性不是強(qiáng)制的。這一

點(diǎn)在以后的版本中將改變。

可選的INHERITS子句聲明一個(gè)表集合,所創(chuàng)建的表自動(dòng)從這個(gè)表集合里的表繼

承所有字段。如果任何繼承的字段出現(xiàn)次數(shù)多于一次,Postgres報(bào)告一個(gè)錯(cuò)誤。

Postgres自動(dòng)允許所創(chuàng)建的表繼承那些在繼承分級(jí)中級(jí)別比它高的表的函數(shù)。

函數(shù)的繼承是根據(jù)公共Lisp對(duì)象系統(tǒng)(CommonLispObjectSystem(CLOS))

的習(xí)慣進(jìn)行的。

每個(gè)新表或表table自動(dòng)被創(chuàng)建為一個(gè)類型。因此表中的一條或更多實(shí)例自動(dòng)

就是一個(gè)類型,因而可以用于ALTERTABLE或其他CREATETABLE語(yǔ)句。

新表將作為一個(gè)沒(méi)有初始值的堆創(chuàng)建.一個(gè)表可以有不超過(guò)1600(事實(shí)上,這

是因?yàn)槭茏侄未笮”仨毿∮?192字節(jié)的限制)歹U,但是這個(gè)限制在一些節(jié)點(diǎn)上

可以通過(guò)配置降低.一個(gè)表不能和系統(tǒng)表同名.

DEFAULT子句

DEFAULTvalue

輸入

value

缺省的表達(dá)式值可以是:

?一個(gè)文本值

?一個(gè)用戶函數(shù)

?a(譯注:?不會(huì)翻譯)niladicfunction

輸出

無(wú)

描述

DEFAULT子句向某列賦一個(gè)初始值.(通過(guò)在CREATETABLE語(yǔ)句里面定義).缺

省值的類型必須和列/字段定義的數(shù)據(jù)類型.

一個(gè)INSERT操作如果包括一個(gè)沒(méi)有缺省值的列/字段,這時(shí)如果沒(méi)有顯式地提

供該/列字段的數(shù)據(jù)值,將用一個(gè)NULL代替.缺省的literal意味著缺省值是

聲明的常量.缺省的niladic-function或user-function意味著缺省值是在

INSERT時(shí)聲明的函數(shù)值.

有兩類(?)niladic函數(shù):

niladicUSER

CURRENT_USER/USER

參閱CURRENTUSER函數(shù)

SESSION_USER

還不支持

SYSTEM_USER

還不支持

niladicdatetime

CURRENTDATE

參閱CURRENT_DATE函數(shù)

CURRENTTIME

參閱CURRENTDATE函數(shù)

CURRENT_TIMESTAMP

參閱CURRENTTIMESTAMP函數(shù)

在當(dāng)前的版本(v6.5),Postgres在定義表的時(shí)候就計(jì)算所有缺省表達(dá)式的

值.因?yàn)檫@樣一些"不可緩存"的函數(shù)像CURRENT」IMESTAMP可能不會(huì)產(chǎn)生預(yù)期

的結(jié)果.對(duì)于日期/時(shí)間類型的一些特殊情況,馥們可以通過(guò)使用一些手段繞過(guò)

這些情況,象用“DEFAULTTEXT'now'”代替"DEFAULT'now'"或

“DEFAULTCURRENT/IMESTAMP”.這就強(qiáng)制Postgres把日期/時(shí)間類型看成字

符串常量然后在運(yùn)行時(shí)將它們轉(zhuǎn)換成(時(shí)標(biāo))timestamp值.

用法

給列/字段did和number賦予一個(gè)常量值作為缺省值,一個(gè)字串賦予列/字段

did:

CREATETABLEvideo_sales(

didVARCHAR(40)DEFAULT'lusofilms),

numberINTEGERDEFAULT0,

totalCASHDEFAULT'$0.0'

);

將…個(gè)現(xiàn)有的序列作為列did的缺省值,并且給列/字段name一個(gè)字符串值:

CREATETABLEdistributors(

didDECIMAL(3)DEFAULTNEXTVAL('serial'),

nameVARCHAR(40)DEFAULT'lusofilms)

);

歹”字段CONSTRAINT子句

[CONSTRAINTname]{[

NULL|NOTNULL]|UNIQUE|PRIMARYKEY|CHECKconstraint}

輸入

name

賦予整個(gè)約束的任意名稱.如果沒(méi)有聲明name,將從表和列名稱中生成一個(gè)唯一

的名稱用于name.

NULL

列允許包含NULL值。這是缺省值。

NOTNULL

列不允許包含NULL值.與包含CHECK的列/字段相同(C。/“而aNOTNULL).

UNIQUE

列/字段必須有一個(gè)唯一值.在Postgres這是通過(guò)在表上隱含地創(chuàng)建?個(gè)唯一索引實(shí)

現(xiàn)的.

PRIMARYKEY

本列是一個(gè)主鍵,暗示著其唯一性是由系統(tǒng)強(qiáng)制提供的而且其他表可能依賴此列/

字段作為行標(biāo)識(shí).請(qǐng)參考PRIMARYKEY獲取更多的信息.

constraint

約束的定義.

描述

可選的約束子句聲明某種約束或者測(cè)試,當(dāng)進(jìn)行插入或者更新操作時(shí),新的或者

更新的記錄必須滿足這個(gè)約束或測(cè)試時(shí)操作才能成功。每個(gè)約束必須得出一個(gè)布

爾表達(dá)式。多個(gè)字段/屬性可以在一個(gè)約束里面引用。作為表約束的PRIMARYKEY

的使用是與作為列約束的PRIMARYKEY互相沖突不可兼容的。

約束是一個(gè)命名的規(guī)則:它是一個(gè)SQL對(duì)象,它通過(guò)對(duì)INSERT,UPDATE或

DELETE等對(duì)基本表的操作結(jié)果進(jìn)行限制,進(jìn)而可以獲得有效的結(jié)果集.

有兩種方法定義整合約束:表約束(隨后提到),歹U/字段約束(將在這里說(shuō)明).

一個(gè)列/字段約束是作為列定義的一部分定義的一個(gè)整合約束,而且邏輯上一旦

創(chuàng)建就會(huì)成為表約束.可用的列約束:

PRIMARYKEY

REFERENCES

UNIQUE

CHECK

NOTNULL

注意:Postgres還不支持(版本6.5)REFERENCES整合約束.分析器接受

REFERENCES語(yǔ)法,但將忽略之.

NOTNULL約束

[CONSTRAINTname]NOTNULL

NOTNULL約束表明一個(gè)列只能包含非空(non-null)數(shù)值的規(guī)則.NOTNULL約

束只是一個(gè)列約束,不允許作為一個(gè)表約束.

輸出

status

ERROR:ExecAppend:Failtoaddnullvalueinnotnullattribute

“columrt'.

當(dāng)試圖向一個(gè)有NOTNULL約束的列插入一個(gè)空值時(shí)返回此運(yùn)行時(shí)錯(cuò)誤.

描述

用法

在表distributors上定義兩個(gè)(非空)NOTNULL列約束,其中一個(gè)是命名約

束:

CREATETABLEdistributors(

didDECIMAL(3)CONSTRAINTno_nullNOTNULL,

nameVARCHAR(40)NOTNULL

);

UNIQUE約束

[CONSTRAINTname]UNIQUE

輸入

CONSTRAINTname

賦予一個(gè)約束的任意標(biāo)記.

輸出

status

ERROR:Cannotinsertaduplicatekeyintoauniqueindex.

如果試圖向列/字段中插入一個(gè)重復(fù)數(shù)值,返回此運(yùn)行時(shí)錯(cuò)誤.

描述

UNIQUE約束表明一個(gè)這樣的規(guī)則:表中一組由一個(gè)或多個(gè)獨(dú)立列組成的集合中

只能包含一個(gè)唯一的數(shù)值.

一個(gè)列/字段定義包含了UNIQUE約束,不一定要包含NOTNULL約束.在一個(gè)

沒(méi)有NOTNULL約束的列/字段列如果有多個(gè)空值并不違反UNIQUE約束.(這

與SQL92定義不一致,但卻是更有意義的習(xí)慣.請(qǐng)參閱兼容性部分獲取更多細(xì)

節(jié).)

每個(gè)UNIQUE列約束必須賦予一個(gè)該表中沒(méi)有被其他UNIQUE或PRIMARYKEY

約束定義過(guò)的列/字段上.

注意:Postgres自動(dòng)為每個(gè)UNIQUE約束創(chuàng)建…個(gè)唯一索引,以保證數(shù)據(jù)完整

性.請(qǐng)參閱CREATEINDEX獲取更多信息.

用法

為表distributors定義一個(gè)UNIQUE列約束.UNIQUE列約束只能給表中一個(gè)

列定義:

CREATETABLEdistributors(

didDECIMALS),

nameVARCHAR(40)UNIQUE

);

與下面的表約束相同:

CREATETABLEdistributors(

didDECIMAL(3),

nameVARCHAR(40),

UNIQUE(name)

);

CHECK(檢查)約束

[CONSTRAINTname]CHECK

(condition[,...1)

輸入

name

賦予約束的任意名稱.

condition

任何有效的產(chǎn)生一個(gè)布爾值的條件表達(dá)式.

輸出

status

ERROR:ExecAppend:rejectedduetoCHECKconstraint〃table_columri\

如果試圖向列/字段中插入一個(gè)違反CHECK約束的數(shù)值,生成此運(yùn)行時(shí)錯(cuò)誤.

描述

CHECK約束聲明一個(gè)列中允許的數(shù)據(jù)的限制.CHECK約束也可以做表約束.

SQL92CHECK列約束只能對(duì)表中的一列/字段進(jìn)行定義或使用.Postgres沒(méi)有這

個(gè)限制.

PRIMARYKEY約束

[CONSTRAINTname]PRIMARYKEY

輸入

CONSTRAINTname

約束的任意名稱.

輸出

ERROR:Cannotinsertaduplicatekeyintoauniqueindex.

當(dāng)你試圖向一個(gè)有PRIMARYKEY約束的列插入一個(gè)重復(fù)的數(shù)值時(shí),將返回這個(gè)運(yùn)

行時(shí)信息.

描述

PRIMARYKEY列約束表明表中的一個(gè)列/字段只能包含唯一的(不重復(fù)),非空

的數(shù)值.在該列/字段的PRIMARYKEY約束定義中不需要顯式的包括NOTNULL約

束.

一個(gè)表只能聲明一個(gè)PRIMARYKEY.

注意

Postgres自動(dòng)創(chuàng)建一個(gè)唯一索引以保證數(shù)據(jù)的完整性.(參閱CREATEINDEX語(yǔ)句)

在同一個(gè)表中PRIMARYKEY約束定義的列應(yīng)該應(yīng)該和其他定義了UNIQUE約束

的列不同名(不是同一列).因?yàn)檫@會(huì)導(dǎo)致等價(jià)索引的重復(fù)和增加不必要的處

理.然而,Postgres并沒(méi)有明文禁止這些.

表(約束)CONSTRAINT子句

[CONSTRAINTname]{PRIMARYKEY|UNIQUE}(column[,...])

[CONSTRAINTname]CHECK(constraint)

輸入

CONSTRAINTname

整合約束的任意名稱.

column

用于定義唯一索引,或PRIMARYKEY,或NOTNULL約束的列/字段名.

CHECK(constraint)

要作為約束進(jìn)行估值的布爾表達(dá)式.

輸出

表約束子句的可能輸出和對(duì)應(yīng)的列/字段約束的輸出一樣.

描述

表約束是對(duì)一個(gè)基本表的一個(gè)或多個(gè)列/字段定義的整合約束.”表約束”的四個(gè)

元素是:

UNIQUE

CHECK

PRIMARYKEY

FOREIGNKEY

注意:Postgres目前(版本6.5)還不支持FOREIGNKEY整合約束.分析器

可以理解FOREIGNKEY語(yǔ)法,但只是打印一個(gè)聲明或者是忽略這個(gè)子句.外部

鍵字(Foreignkeys)可以部分的用觸發(fā)器防真.(參考CREATETRIGGER語(yǔ)

句).(譯注:在版本7.0中已經(jīng)支持外鍵了。Y2K-03-13)

UNIQUE約束

[CONSTRAINTname]UNIQUE(column[,...])

輸入

CONSTRAINTname

賦予約束的任意名稱.

column

某表中的列/字段名.

輸出

status

ERROR:Cannotinsertaduplicatekeyintoauniqueindex

如果試圖向列中插入個(gè)重復(fù)的值,將返回此錯(cuò)誤.

描述

UNIQUE約束表明表中由一個(gè)或若干個(gè)獨(dú)立的列/字段組成的集合只能包含唯一

的數(shù)值.表的UNIQUE約束和對(duì)應(yīng)的列/字段約束的特性是一樣的,區(qū)別是表約

束可以跨越多個(gè)列/字段.

請(qǐng)參考列/字段的UNIQUE約束獲取更多細(xì)節(jié).

用法

給一個(gè)表distributors定義一個(gè)UNIQUE表約束:

CREATETABLEdistributors(

didDECIMAL(03),

nameVARCHAR(40),

UNIQUE(name)

);

PRIMARYKEY約束

[CONSTRAINTname]PRIMARYKEY(column[,...])

輸入

CONSTRAINTname

賦予約束的任意名稱.

column[,...]

表中的一個(gè)或者多個(gè)列.

輸出

status

ERROR:Cannotinsertaduplicatekeyintoauniqueindex.

如果試圖向一個(gè)有PRIMARYKEY約束的表中插入重復(fù)值,返回這個(gè)運(yùn)行時(shí)命令。

描述

PRIMARYKEY約束表明某個(gè)表的由一個(gè)或多個(gè)列/字段組成的集合只能包含唯

一,(不重復(fù)),非空數(shù)值.對(duì)聲明的列定義的PRIMARYKEY約束不需要包括NOT

NULL約束.

PRIMARYKEY表約束與歹!J/字段約束相似,區(qū)別是它具有控制多歹U/字段的能力.

請(qǐng)參考PRIMARYKEY歹U/字段約束部分獲取更多信息.

用法

創(chuàng)建表films和表distributors:

CREATETABLEfilms(

codeCHARACTER(5)CONSTRAINTfirstkeyPRIMARYKEY,

titleCHARACTERVARYING(40)NOTNULL,

didDECIMALS)NOTNULL,

date_prodDATE,

kindCHAR(10),

lenINTERVALHOURTOMINUTE

);

CREATETABLEdistributors(

didDECIMAL(03)PRIMARYKEYDEFAULTNEXTVALfserial*),

nameVARCHAR(40)NOTNULLCHECK(name<>'')

);

創(chuàng)建一個(gè)有2維數(shù)組的表:

CREATETABLEarray(

vectorINT[][]

);

給films表定義一個(gè)UNIQUE表約束.UNIQUE可以定義在表的一?個(gè)或多個(gè)列/

字段上:

CREATETABLEfilms(

codeCHAR(5),

titleVARCHAR(40),

didDECIMAL(03),

date_prodDATE,

kindCHAR(10),

lenINTERVALHOURTOMINUTE,

CONSTRAINTproductionUNIQUE(date_prod)

);

定義一個(gè)CHECK列約束:

CREATETABLEdistributors(

didDECIMAL(3)CHECK(did>100),

nameVARCHAR(40)

定義一個(gè)CHECK表約束:

CREATETABLEdistributors(

didDECIMAL(3),

nameVARCHAR(40)

CONSTRAINTconiCHECK(did>100ANDname>'')

);

為表films定義一個(gè)PRIMARYKEY表約束.PRIMARYKEY表約束可以對(duì)一個(gè)或

多個(gè)列/字段進(jìn)行定義:

CREATETABLEfilms(

codeCHAR(05),

titleVARCHAR(40),

didDECIMAL(03),

date_prodDATE,

kindCHAR(10),

lenINTERVALHOURTOMINUTE,

CONSTRAINTcode_titlePRIMARYKEY(code,title)

);

為表distributors定義一個(gè)PRIMARYKEY列約束.PRIMARYKEY列約束只能

對(duì)表中的一個(gè)列/字段定義.(下面兩個(gè)例子是相當(dāng)?shù)模?/p>

CREATETABLEdistributors(

didDECIMAL(03),

nameCHARVARYING(40),

PRIMARYKEY(did)

);

CREATETABLEdistributors(

didDECIMAL(03)PRIMARYKEY,

nameVARCHAR(40)

);

注意

CREATETABLE/INHERITS是Postgres語(yǔ)言擴(kuò)展.

兼容性

SQL92

除了本地可見(jiàn)的臨時(shí)表外,SQL92還定義了一條CREATEGLOBALTEMPORARYTABLE

語(yǔ)句,和一個(gè)可選的ONCOMMIT子句:

CREATEGLOBALTEMPORARYTABLEtable(columntype[

DEFAULTvalue][CONSTRAINTcolumn_constraint][,...])

[CONSTRAINTtable_constraint][ONCOMMIT{DELETE|PRESERVE}

ROWS]

對(duì)于臨時(shí)表,CREATETEMPORARYTABLE語(yǔ)句定義一個(gè)其他客戶端可見(jiàn)的新表和

定義表的列/字段和約束。

CREATETEMPORARYTABLE可選的ONCOMMIT子句用于聲明當(dāng)COMMIT事務(wù)時(shí),

是否需要將臨時(shí)表的行清空.如果ONCOMMIT子句省略了,(缺省值),就設(shè)

為ONCOMMITDELETEROWS(當(dāng)COMMIT時(shí)清空).

要?jiǎng)?chuàng)建一個(gè)臨時(shí)表:

CREATETEMPORARYTABLEactors(

idDECIMAL(03),

nameVARCHAR(40),

CONSTRAINTactor_idCHECK(id<150)

)ONCOMMITDELETEROWS;

UNIQUE子句

SQL92對(duì)UNIQUE定義了一些附加的功能.

表約束定義:

[CONSTRAINTname]UNIQUE(column[,...])

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

列/字段約束定義:

[CONSTRAINTname]UNIQUE

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

NULL子句

NULL"約束"(實(shí)際上不是一個(gè)約束)是一?個(gè)Postgres對(duì)SQL92的擴(kuò)展,把它

包含進(jìn)來(lái)是為了和NOTNULL子句對(duì)稱。因?yàn)檫@是任何列的缺省,它的出現(xiàn)只是

添亂。

[CONSTRAINTname]NULL

NOTNULL子句

SQL92對(duì)NOTNULL聲明了一些附加的功能:

[CONSTRAINTname]NOTNULL

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

CONSTRAINT子句

SQL92對(duì)約束聲明了一些附加的功能,并且還定義了斷言和域(domain)約束.

注意:Postgres還不支持域(domain)和斷言.

一個(gè)斷言是一種特殊類型的整合約束,并且和其他約束共享相同的名字空間

(namespace).不過(guò),一個(gè)斷言不象約束那樣必須依賴于某個(gè)基本表,所以

SQL-92提供了一個(gè)CREATEASSERTION語(yǔ)句作為定義約束的一個(gè)可選的手段:

CREATEASSERTIONnameCHECK(condition)

域約束是用CREATEDOMAIN或ALTERDOMAIN語(yǔ)句定義的:

域約束:

[CONSTRAINTname]CHECKconstraint

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

表約束定義:

[CONSTRAINTname]{PRIMARYKEY(column,...)|FOREIGNKEYconstraint

IUNIQUEconstraint|CHECKconstraint}

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

列約束定義:

[CONSTRAINTname]{NOTNULL|PRIMARYKEY|FOREIGNKEYconstraint|

UNIQUE|CHECKconstraint}

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

一個(gè)CONSTRAINT(約束)定義可以包含一個(gè)任意順序的延遲屬性的子句和/或

一個(gè)初始化約束式子句.

NOTDEFERRABLE

意味著每條SQL語(yǔ)句執(zhí)行后都必須校驗(yàn)是否違反約束規(guī)則.

DEFERRABLE

意味著,當(dāng)事務(wù)開始后,對(duì)約束的檢查可以推遲到晚些時(shí)候,但不晚于當(dāng)前事務(wù)的

結(jié)束

每個(gè)約束的約束模式總是有一個(gè)初始化缺省值,該值在事務(wù)開始時(shí)為該約束設(shè)

定。

INITIALLYIMMEDIATE

意思是,從事務(wù)開始時(shí)開始,在每條SQL語(yǔ)句執(zhí)行后約束都必須對(duì)其規(guī)則進(jìn)行合

法性檢查,看看有無(wú)違反。

INITIALLYDEFERRED

意思是,從事務(wù)開始時(shí)開始,對(duì)約束的檢查可以推遲到稍后進(jìn)行,但是不遲于本次

事務(wù)的結(jié)束。

CHECK子句

SQL92對(duì)CHECK聲明了一些附加功能,不管是表約束還是列/字段約束.

表約束定義:

[CONSTRAINTname]CHECK(VALUEcondition)

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

列約束定義:

[CONSTRAINTname]CHECK(VALUEcondition)

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE)]

[[NOT]DEFERRABLE]

PRIMARYKEY子句

SQL92為PRIMARYKEY聲明了一些附加的功能:

表約束定義:

[CONSTRAINTname]PRIMARYKEY(column[,...])

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

列約束定義:

[CONSTRAINTname]PRIMARYKEY

[{INITIALLYDEFERRED|INITIALLYIMMEDIATE}]

[[NOT]DEFERRABLE]

4.1ORACLE的SQL介紹

SQL成了關(guān)系數(shù)據(jù)庫(kù)事實(shí)上的工業(yè)標(biāo)準(zhǔn)。全部主要的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)都

支持SQL的某些型式,大多數(shù)RDBMS開發(fā)商打算ANSI標(biāo)準(zhǔn)去完善自己的產(chǎn)

品,Oracle也不例外。

一、SQL命令集

命令說(shuō)明

SELECT這是用得最普遍的命令,它用來(lái)從數(shù)據(jù)庫(kù)查索數(shù)據(jù)。

INSERT這三個(gè)命令分別用來(lái)在數(shù)據(jù)庫(kù)表中插入

UPDATE新行(ROWS)、改變已存在的行和去掉

DELETE不需要的行。它們有時(shí)被統(tǒng)稱為DML,即數(shù)據(jù)操縱語(yǔ)言

命令。

CREATE這三個(gè)命令用來(lái)動(dòng)態(tài)地創(chuàng)建、改變和去掉。

ALTER任何數(shù)據(jù)結(jié)構(gòu),例如表、視圖和索引等。

DROP有時(shí)被統(tǒng)稱為DDL,即數(shù)據(jù)定義語(yǔ)言命令。

GRANT這兩個(gè)命令用來(lái)對(duì)ORACLE數(shù)據(jù)庫(kù)。

REVOKE和其中的結(jié)構(gòu)授與或去掉訪問(wèn)權(quán)限。

注意:還有更多的其它SQL命令詳見(jiàn)ORACLE軟件的幫助。

二、基本的查詢語(yǔ)句

SELECT語(yǔ)句從數(shù)據(jù)庫(kù)中查索信息,執(zhí)行全部關(guān)系代數(shù)的運(yùn)算符。

其最簡(jiǎn)單的語(yǔ)句型式必須包括:

(1)一個(gè)SELECT子句,列出要顯示的列(Columns)0

(2)一個(gè)FROM子句,指定所包含的表。

例4.1:顯示EMP表中的部門號(hào)、雇員名和員工號(hào),可用如下語(yǔ)句:

SELECT部門號(hào),雇員名,員工號(hào)

FROMEMP;

部門號(hào)雇員名員工號(hào)

20劉炎6801

10郭潔6702

10周敏6705

30郭丹丹7008

30局山7018

注意:列名由逗號(hào)分隔開。

三、ORDERBY子句

通常查詢結(jié)果行的順序沒(méi)有限定。ORDERBY子句可以用來(lái)排序行。使用時(shí),

ORDERBY子句必須總是放在SELECT語(yǔ)句的最后。

例4.2:以員工號(hào)排序,可用如下語(yǔ)句:

SELECT員工號(hào),雇員名,職務(wù),工資

FROMEMP

ORDERBY員工號(hào);

員工號(hào)雇員名職務(wù)工資*12

6702郭潔秘書6000

6705周敏高級(jí)工程師12000

6801劉炎軟件工程師7200

7008郭丹丹硬件工程師7200

7018局山辦事員6000

數(shù)據(jù)的默認(rèn)排序是升序(ASCENDING):

.最小的數(shù)值放最前面。

.最早的日期放最前面。

.字符值按字母順序。

四、WHERE子句

WHERE子句與關(guān)系代數(shù)的限制(Restriction)運(yùn)算符對(duì)應(yīng),它包括將顯示的行

必須滿足的條件。使用時(shí),WHERE子句必須跟在FROM子句后面,

其格式如下:

SELECT〈查詢的列〉

FROM〈表)

[WHERE〈條件〉]

這里WHERE子句表示要滿足一定的條件,即可以比較列中的值、文字值、算

術(shù)表達(dá)式或函數(shù)。WHERE子句一般要求三個(gè)部分:

(1)一個(gè)列名。

⑵比較運(yùn)算符。

(3)一個(gè)列名、常數(shù)或值的列表。

在WHERE子句中使用的比較運(yùn)算符分為邏輯和SQL兩類。

五、SQL運(yùn)算符

有四個(gè)SQL運(yùn)算符用于全部數(shù)據(jù)類型的操作:

運(yùn)算符意義

BETWEEN...AND...在兩個(gè)值之間(包含兩值)。

IN(list)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論