SQL璇硶
鍙戝竷: 2008-7-01 14:16 | 浣滆: 缃戠粶杞浇 | 鏉ユ簮: 缃戠粶杞浇 | 鏌ョ湅: 42娆
Chapter 4. SQL 璇硶
Table of Contents
4.1. 璇嶆硶缁撴瀯
4.1.1. 鏍囪瘑绗﹀拰鍏抽敭瀛
4.1.2. 甯搁噺
4.1.3. 鎿嶄綔绗
4.1.4. 鐗规畩瀛楃
4.1.5. 娉ㄩ噴
4.1.6. 璇嶆硶浼樺厛绾
4.2. 鍊艰〃杈惧紡
4.2.1. 瀛楁寮曠敤
4.2.2. 浣嶇疆鍙傛暟
4.2.3. 涓嬫爣
4.2.4. 瀛楁閫夋嫨
4.2.5. 鎿嶄綔绗﹁皟鐢
4.2.6. 鍑芥暟璋冪敤
4.2.7. 鑱氶泦琛ㄨ揪寮
4.2.8. 绫诲瀷杞崲
4.2.9. 鏍囬噺瀛愭煡璇
4.2.10. 鏁扮粍鏋勯犲櫒
4.2.11. 琛屾瀯閫
4.2.12. 琛ㄨ揪寮忚绠楄鍒
鏈珷鎻忚堪 SQL 鐨勮娉曘 杩欎簺鍐呭鏄悊瑙i殢鍚庡悇绔犵殑鍩虹锛岄偅浜涚珷閲岄潰灏嗚缁嗕粙缁 SQL 鍛戒护濡備綍鐢ㄤ簬瀹氫箟鍜屼慨鏀规暟鎹
鎴戜滑涔熷缓璁偅浜涘凡缁忓緢鐔熸倝 SQL 鐨勭敤鎴蜂粩缁嗛槄璇绘湰绔狅紝鍥犱负鏈変竴浜涜鍒欏拰姒傚康鍦 SQL 鏁版嵁搴撲箣闂村疄鐜板緱骞朵笉涓鑷达紝鎴栬呮槸鏈変簺涓滆タ鏄 PostgreSQL 鐗规湁鐨勩
4.1. 璇嶆硶缁撴瀯
SQL 杈撳叆鐢变竴绯诲垪鍛戒护缁勬垚銆 涓鏉″懡浠ゆ槸鐢变竴绯诲垪璁板彿鏋勬垚锛 鐢ㄤ竴涓垎鍙凤紙";"锛夌粨灏俱 杈撳叆娴佺殑缁堟涔熺粨鏉熶竴鏉″懡浠ゃ傚摢浜涜鍙锋槸鍚堟硶鐨勫彇鍐充簬鐗瑰畾鍛戒护鐨勮娉曘
璁板彿鍙互鏄竴涓叧閿瓧锛 涓涓爣璇嗙锛屼竴涓 寮曞彿鍖呭洿鐨勬爣璇嗙锛 涓涓枃鏈紙鎴栧父閲忥級锛屾垨鑰呮槸鐗规畩鐨勫瓧绗︾鍙枫 璁板彿閫氬父鐢辩┖鐧藉垎闅旓紙绌烘牸锛宼ab锛屾崲琛岀锛夛紝浣嗗鏋滀笉瀛樺湪娣锋穯鐨勬椂鍊欎篃鍙互涓嶇敤 锛堥氬父鍙槸涓涓壒娈婂瓧绗︿笌涓浜涘叾瀹冭鍙风被鍨嬬浉鑱旂殑鏃跺欙級銆
鍙﹀锛屽湪 SQL 杈撳叆閲屽彲浠ユ湁娉ㄩ噴銆 瀹冧滑涓嶆槸璁板彿锛屽畠浠疄闄呬笂绛夋晥浜庣┖鐧姐
姣斿锛屼笅鍒楀懡浠ゆ槸锛堣娉曚笂锛夊悎娉曠殑 SQL 杈撳叆锛
SELECT * FROM MY_TABLE;
UPDATE MY_TABLE SET A = 5;
INSERT INTO MY_TABLE VALUES (3, 'hi there');
杩欓噷鏄笁鏉″懡浠ょ殑搴忓垪锛屾瘡鏉′竴琛岋紙灏界骞朵笉瑕佹眰杩欎箞鍋氾紱 澶氭潯鍛戒护鍙互鍦ㄤ竴琛岄噷锛屽苟涓斿懡浠ゅ彲浠ュ悎鐞嗗湴鍒嗚鎴愬涓锛夈
濡傛灉浠庡摢浜涜鍙锋爣璇嗗懡浠わ紝鍝簺鏄搷浣滄暟鎴栧弬鏁扮殑瑙掑害鑰冭檻锛 SQL 璇硶骞朵笉鏄潪甯镐竴鑷淬傞氬父澶村嚑涓鍙锋槸鍛戒护鍚嶅瓧锛屽洜姝や笂闈㈢殑渚嬪瓙鎴戜滑閫氬父鍙互璇存槸涓涓"SELECT"锛 涓涓"UPDATE"锛屽拰涓涓"INSERT"鍛戒护銆 涓嶈繃锛 UPDATE 鍛戒护鎬绘槸瑕佹眰涓涓 SET 鍦ㄦ煇涓綅缃嚭鐜帮紝骞朵笖杩欎釜鍙樹綋鐨 INSERT 杩樿姹傛湁涓涓 VALUES 鎵嶅畬鏁淬傛瘡鏉″懡浠ょ殑鍑嗙‘璇硶瑙勫垯閮藉湪 Part VI 閲屾弿鍐欍
4.1.1. 鏍囪瘑绗﹀拰鍏抽敭瀛
璞′笂闈㈢殑渚嬪瓙閲岀殑 SELECT锛孶PDATE锛 鎴 VALUES 杩欐牱鐨勮鍙烽兘鏄叧閿瓧鐨勪緥瀛愶紝 涔熷氨鏄偅浜涘湪 SQL 璇█閲屾湁鍥哄畾鍚箟鐨勫崟璇嶃 璁板彿 MY_TABLE 鍜 A 鏄爣璇嗙鐨勪緥瀛愩傛牴鎹娇鐢ㄥ畠浠殑鍛戒护鐨勪笉鍚岋紝瀹冧滑鏍囪瘑琛紝瀛楁锛屾垨鑰呭叾瀹冩暟鎹簱瀵硅薄鐨勫悕瀛椼 鍥犳锛屾湁鏃跺欏彧鏄畝鍗曞湴鍙畠浠"鍚嶅瓧"銆傚叧閿瓧鍜屾爣璇嗙鏈夌潃鍚屾牱鐨勮瘝娉曠粨鏋勶紝鎰忔濇槸鎴戜滑鍦ㄦ病鏈夎璇嗚繖绉嶈瑷涔嬪墠鏄棤娉曞尯鍒嗕竴涓鍙锋槸鏍囪瘑绗﹁繕鏄悕瀛椼 浣犲彲浠ュ湪 Appendix C 閲屾壘鍒颁竴涓叧閿瓧鐨勫畬鏁村垪琛ㄣ
SQL 鏍囪瘑绗﹀拰鍏抽敭瀛楀繀椤讳互涓涓瓧姣嶅紑澶 锛坅-z 浠ュ強甯﹀彲鍖哄埆鏍囪鐨勫瓧姣嶄互鍙婇潪鎷変竵瀛楁瘝 锛夋垨涓嬪垝绾垮紑澶 锛坃锛夊紑澶淬傛爣璇嗙鍜屽叧閿瓧閲岄殢鍚庣殑瀛楃鍙互鏄瓧姣嶏紝鏁板瓧锛0-9锛夛紝 鎴栬呬笅鍒掔嚎锛屼絾 SQL 鏍囧噯涓嶄細瀹氫箟鍖呭惈鏁板瓧鎴栬呬互涓嬪垝绾垮紑澶存垨缁撳熬鐨勫叧閿瓧銆
绯荤粺浣跨敤涓嶈秴杩 NAMEDATALEN-1 涓瓧绗︿綔涓烘爣璇嗙锛 浣犲彲浠ュ湪鍛戒护涓啓鏇撮暱鐨勫悕瀛楋紝浣嗗畠浠細琚埅鏂傜己鐪佹椂锛 NAMEDATALEN 鏄 64锛屽洜姝ゆ爣璇嗙鏈澶ч暱搴︽槸 63 濡傛灉瑙夊緱杩欎釜闄愬埗鏈夐棶棰橈紝閭d箞浣犲彲浠ュ湪 src/include/postgres_ext.h 閲屼慨鏀 NAMEDATALEN 鏉ユ敼鍙樺畠銆
鏍囪瘑绗﹀拰鍏抽敭瀛楀悕瀛楅兘鏄ぇ灏忓啓鏃犲叧鐨勩傚洜姝
UPDATE MY_TABLE SET A = 5;
涔熷彲浠ョ瓑鏁堝湴鍐欐垚
uPDaTE my_TabLE SeT a = 5;
涓绉嶅ソ涔犳儻鏄妸鍏抽敭瀛楀啓鎴愬ぇ鍐欙紝鑰屽悕瀛楃瓑鐢ㄥ皬鍐欍
UPDATE my_table SET a = 5;
杩樻湁绗簩绉嶆爣璇嗙锛氬垎闅旀爣璇嗙 鎴栧紩鍙峰寘鍥寸殑鏍囪瘑绗︺ 瀹冩槸閫氳繃鍦ㄥ弻寮曞彿锛" 锛 閲屽寘鍥翠换鎰忓瓧绗﹀簭鍒楀舰鎴愮殑銆傚垎闅旀爣璇嗙鎬绘槸涓涓爣璇嗙锛岃屼笉鏄叧閿瓧銆傚洜姝わ紝浣犲彲浠ョ敤 "SELECT" 琛ㄧず涓涓瓧娈靛悕瀛楁垨鑰呭悕瀛楀彨 "SELECT" 鐨勮〃锛岃屼竴涓病鏈夊紩鍙风殑 SELECT 灏嗚褰撳仛涓鏉″懡浠ょ殑涓閮ㄥ垎锛屽洜姝ゅ鏋滄妸瀹冨綋鍋氫竴涓〃鐨勫悕瀛楁垨鑰呭瓧娈靛悕瀛楃敤鐨勮瘽灏变細浜х敓涓涓垎鏋愰敊璇備笂闈㈢殑渚嬪瓙鍙互鐢ㄥ紩璧风殑鏍囪瘑绗﹁繖涔堝啓锛
UPDATE "my_table" SET "a" = 5;
寮曞彿鍖呭洿鐨勬爣璇嗙鍙互鍖呭惈闄ゅ紩鍙锋湰韬互澶栫殑浠讳綍鍏跺畠瀛楃銆 瑕佸寘鍚竴涓弻寮曞彿锛屾垜浠彲浠ュ啓涓や釜鍙屽紩鍙枫 杩欐牱鎴戜滑灏卞彲浠ユ瀯閫犻偅浜涘師鏈槸涓嶅厑璁哥殑琛ㄦ垨鑰呭瓧娈靛悕瀛楋紝 姣斿閭d簺鍖呭惈绌虹櫧鎴栦笌鍙风殑鍚嶅瓧銆備絾闀垮害闄愬埗渚濇棫銆
鎶婁竴涓爣璇嗙鐢ㄥ紩鍙峰寘鍥寸殑璧锋潵鍚屾椂涔熶护瀹冨ぇ灏忓啓鐩稿叧锛岃屾病鏈夊紩鍙峰寘鍥磋捣鏉ョ殑鍚嶅瓧鎬绘槸杞垚灏忓啓銆 姣斿锛屾垜浠涓烘爣璇嗙 FOO锛宖oo 鍜 "foo" 鏄竴鏍风殑 PostgreSQL鍚嶅瓧锛 浣 "Foo" 鍜 "FOO" 涓庝笂闈笁涓互鍙婂畠浠箣闂撮兘鏄笉鍚岀殑銆 锛圥ostgreSQL 閲屽鏈姞寮曞彿鐨勫悕瀛愭绘槸杞崲鎴愬皬鍐欙紝 杩欏拰 SQL 鏄笉鍏煎鐨勶紝SQL 閲岃姹傛湭鐢ㄥ紩鍙峰寘鍥磋捣鏉ョ殑鍚嶅瓧鎬绘槸杞垚澶у啓銆 鍥犳 foo 绛変簬 "FOO"銆 濡傛灉浣犳兂鍐欏彲绉绘鐨勭▼搴忥紝閭d箞鎴戜滑寤鸿浣犺涔堝氨鎬绘槸寮曞彿鍖呭洿鐨勬煇涓悕瀛楋紝瑕佷箞灏卞潥鍐充笉寮曘傦級
4.1.2. 甯搁噺
鍦 PostgreSQL 閲屾湁涓夌闅愬惈绫诲瀷鐨勫父閲忥細 瀛楃涓诧紝浣嶄覆锛屽拰鏁板笺 甯搁噺涔熷彲浠ュ0鏄庝负鏄庣‘鐨勭被鍨嬶紝杩欐牱灏卞彲浠ヤ娇鐢ㄦ洿鍑嗙‘鐨勮〃鐜板舰寮忎互鍙婂彲浠ラ氳繃绯荤粺鏇存湁鏁堝湴澶勭悊銆 杩欎簺鍊欓夌殑鍦ㄥ悗闈㈢殑灏忚妭鎻忚堪銆
4.1.2.1. 瀛楃涓插父閲
SQL 閲岀殑涓涓瓧涓叉枃鏈槸鐢ㄥ崟寮曞彿锛'锛夊寘鍥寸殑浠绘剰瀛楃搴忓垪锛 姣斿锛'This is a string'銆 杩欑澹版槑瀛椾覆甯搁噺鐨勬柟娉曟槸 SQL 鏍囧噯瀹氫箟鐨勩 鍦ㄨ繖绉嶇被鍨嬬殑瀛椾覆甯搁噺閲屽祵鍏ュ崟寮曞彿鐨勬爣鍑嗗吋瀹圭殑鍋氭硶鏄暡鍏ヤ袱涓繛缁殑鍗曞紩鍙锋瘮濡傦紝'Dianne''s horse'銆傚彟澶栵紝PostgreSQL 鍏佽鐢ㄧ敤涓涓弽鏂滄潬锛"\'"锛夋潵閫冮稿崟寮曞彿锛 鍥犳鍚屼竴涓瓧涓插彲浠ュ啓鎴'Dianne\'s horse'銆備笉杩囷紝灏嗘潵鐗堟湰鐨 PostgreSQL 灏嗕笉鍏佽杩欎箞鐢紝 鎵浠ヤ娇鐢ㄥ弽鏂滄墰鐨勫簲鐢ㄥ簲璇ヨ浆鎹㈡垚涓婇潰璇寸殑鏍囧噯鍏煎鐨勬柟娉曘
鍙﹀涓涓 PostgreSQL 鎵╁睍鏄繕鍙互浣跨敤 C-椋庢牸鐨勫弽鏂滄潬閫冮革細 \b 鏄竴涓鏍硷紝\f 鏄竴涓繘绾革紝\n 鏄竴涓崲琛岀锛 \r 鏄竴涓洖杞︼紝\t 鏄竴涓按骞冲埗琛ㄧ銆 杩樻敮鎸 \digits锛 杩欓噷 digits 鏄竴涓叓杩涘埗瀛楄妭鏁板硷紝 杩樻敮鎸 \xhexdigits锛岃繖閲岀殑 hexdigits 浠h〃鍗佸叚杩涘埗瀛楄妭鍊笺 锛堜綘鍒涘缓鐨勫瓧鑺傚簭鍒楁槸鍚︽湇鍔″櫒鐨勫瓧绗﹂泦缂栫爜鑳芥帴鍙楃殑姝g‘瀛楃锛屾槸浣犺嚜宸辩殑璐d换銆傦級浠讳綍鍏跺畠璺熷湪鍙嶆枩鏉犲悗闈㈢殑瀛楃閮藉綋鍋氭枃鏈湅寰呫 鍥犳锛岃鍦ㄥ瓧绗︿覆甯搁噺閲屽寘鍚弽鏂滄潬锛屽垯鍐欎袱涓弽鏂滄潬銆
娉ㄦ剰: 铏界劧鐜板湪鐨勬櫘閫氬瓧涓叉敮鎸 C 椋庢牸鐨勫弽鏂滄墰閫冮革紝 灏嗘潵鐗堟湰璁插杩欐牱浣跨敤鍙戝嚭璀﹀憡锛屽苟涓旀渶鍚庡皢璁や负鍙嶆枩鎵涙槸鏍囧噯鍏煎鐨勬枃鏈瓧绗︺傚0鏄庨冮稿鐞嗙殑姣旇緝濂界殑鏂规硶鏄娇鐢ㄩ冮稿瓧涓茶娉曪紝琛ㄧず闇瑕佽繘琛岄冮稿鐞嗐 閫冮稿瓧涓茶娉曟槸閫氳繃鍦ㄥ瓧涓插墠鍐欏瓧姣 E 锛堝ぇ鍐欐垨鑰呭皬鍐欙級鐨勬柟娉曞0鏄庣殑銆傛瘮濡傦紝E'\041'銆傝繖涓柟娉曞皢鍦ㄦ墍鏈夊皢鏉ョ増鏈殑 PostgreSQL 閲岃捣浣滅敤銆
缂栫爜涓洪浂鐨勫瓧绗︿笉鑳藉嚭鐜板湪瀛楃涓插父閲忎腑銆
涓や釜鍙槸閫氳繃鑷冲皯鏈変竴涓崲琛岀鐨勭┖鐧藉垎闅旂殑瀛楃涓插父閲忎細琚繛鎺ュ湪涓璧凤紝骞跺綋鍋氬畠浠槸鍐欐垚涓涓父閲忓鐞嗐 姣斿锛
SELECT 'foo'
'bar';
绛夋晥浜
SELECT 'foobar';
鑰
SELECT 'foo' 'bar';
鏄潪娉曠殑璇硶锛岋紙杩欎釜鐣ュ井鏈変簺鎬紓鐨勮涓烘槸 SQL 澹版槑鐨勶紱 PostgreSQL 閬靛惊鏍囧噯銆傦級
4.1.2.2. 缇庡厓绗﹀寘鍥村瓧涓插父閲
灏界澹版槑瀛椾覆甯搁噺鐨勬爣鍑嗘柟娉曢氬父閮藉緢鏂逛究锛屼絾鏄鏋滃瓧涓插寘鍚緢澶氬崟寮曞彿鎴栬呭弽鏂滄潬锛岄偅涔堢悊瑙e瓧涓茬殑鍐呭鍙兘灏变細鍙樺緱寰堣嫤娑╋紝鍥犱负姣忎釜鍗曞紩鍙烽兘瑕佸姞鍊嶃 涓轰簡璁╄繖绉嶅満鍚堜笅鐨勬煡璇㈡洿鍏峰彲璇绘э紝PostgreSQL 鍏佽鍙﹀涓绉嶇О浣"缇庡厓绗﹀寘鍥"鐨勫瓧涓插父閲忓0鏄庡姙娉曘 涓涓氳繃缇庡厓绗﹀寘鍥村0鏄庣殑瀛椾覆甯搁噺鐢变竴涓編鍏冪鍙凤紙$锛夛紝涓涓彲閫夌殑闆朵釜鎴栧涓瓧绗"璁板彿"锛屽彟澶栦竴涓編鍏冪鍙凤紝涓涓粍鎴愬瓧涓插父閲忕殑浠绘剰瀛楃鐨勫簭鍒楋紝涓涓編鍏冪鍙凤紝浠ュ強涓涓拰寮濮嬭繖涓編鍏冪鍖呭洿鐨勮鍙风浉鍚岀殑璁板彿锛屽拰涓涓編鍏冪鍙风粍鎴愩傛瘮濡傦紝涓嬮潰鏄袱涓笉鍚岀殑鏂规硶锛岀敤缇庡厓绗﹀寘鍥村0鏄庝簡鍓嶉潰鐨勪緥瀛愶細
$$Dianne's horse$$
$SomeTag$Dianne's horse$SomeTag$
璇锋敞鎰忥紝鍦ㄧ編鍏冪鍖呭洿鐨勫瓧涓查噷锛屽崟寮曞彿鍙互涓嶇敤閫冮镐娇鐢ㄣ 瀹為檯涓婏紝鍦ㄤ竴涓編鍏冪鍖呭洿鐨勫瓧涓查噷锛屾病鏈変粈涔堝瓧绗﹂渶瑕侀冮革細 瀛椾覆鍐呭鎬绘槸鎸夌収瀛楅潰鍐呭鍐欍傚弽鏂滄潬涓嶆槸鐗规畩鐨勶紝 缇庡厓绗﹁嚜宸变篃涓嶆槸鐗规畩鐨勶紝闄ら潪瀹冧滑鍜屽紑鏍囩鐨勪竴閮ㄥ垎鍖归厤銆
鎴戜滑鍙互閫氳繃鍦ㄤ笉鍚屽祵濂楃骇鍒娇鐢ㄤ笉鍚岀殑缇庡厓绗﹀紩鍙峰瓧涓插父閲忔潵瀹炵幇宓屽銆 鏈甯歌鐨勬槸鍐欏嚱鏁板畾涔夌殑鏃跺欍傛瘮濡傦細
$function$
BEGIN
RETURN ($1 ~ $q$[\t\r\n\v\\]$q$);
END;
$function$
杩欓噷锛屽簭鍒 $q$[\t\r\n\v\\]$q$ 琛ㄧず涓涓編鍏冪鍖呭洿鐨勫瓧涓叉枃鏈 [\t\r\n\v\\]锛 鍦ㄥ嚱鏁颁綋琚 PostgreSQL 鎵ц鐨勬椂鍊欙紝瀹冨皢琚瘑鍒嚭鏉ャ 浣嗘槸鍥犱负杩欎釜搴忓垪涓嶅尮閰嶅灞傜殑缇庡厓绗﹀垎闅旂$function$锛屾墍浠ュ彧瑕佽冭檻浜嗗灞傚瓧涓诧紝瀹冨氨鍙槸甯搁噺閲岄潰鐨勪竴浜涢澶栫殑瀛楃鑰屽凡銆
濡傛灉鏈夋爣绛剧殑璇濓紝涓涓編鍏冪鍖呭洿鐨勫瓧涓查伒寰拰鏃犲紩鍙峰寘鍥寸殑鏍囪瘑绗︾浉鍚岀殑瑙勫垯锛 鍙槸瀹冧笉鑳藉寘鍚編鍏冪銆傛爣绛炬槸澶у皬鍐欑浉鍏崇殑锛屽洜姝 $tag$String content$tag$ 鏄纭殑锛岃 $TAG$String content$tag$ 涓嶅銆
涓涓悗闈㈣窡鐫鍏抽敭瀛楁垨鑰呮爣璇嗙鐨勭編鍏冨寘鍥寸殑瀛椾覆蹇呴』鐢ㄧ┖鐧介殧寮锛 鍚﹀垯缇庡厓绗﹀寘鍥村垎闅旂灏嗕細琚涓哄墠闈㈡爣璇嗙鐨勪竴閮ㄥ垎銆
缇庡厓绗﹀寘鍥翠笉鏄 SQL 鏍囧噯锛屼絾鏄湪鍐欏鏉傜殑瀛椾覆鏂囨湰鐨勬椂鍊欙紝瀹冮氬父姣旀爣鍑嗙殑鍗曞紩鍙疯娉曟洿鏂逛究銆傚挨鍏舵槸鍦ㄥ叾瀹冨父閲忛噷琛ㄧ幇瀛椾覆甯搁噺鐨勬椂鍊欐洿鏈夌敤锛屾瘮濡傜粡甯稿湪杩囩▼鍑芥暟瀹氫箟閲岄潰鐨勩傚鏋滅敤鍗曞紩鍙疯娉曪紝姣忎釜涓婇潰渚嬪瓙閲岀殑鍙嶆枩鏉犻兘蹇呴』鍐欏洓涓紝瀹冧滑鍦ㄤ綔涓哄瓧涓叉枃鏈垎鏋愮殑鏃跺欎細鍑忓皯涓轰袱涓紝鐒跺悗鍦ㄥ嚱鏁版墽琛岀殑鏃跺欏湪鍐呭眰瀛椾覆甯搁噺閲屼細鍐嶆琚В鏋愪负涓涓
4.1.2.3. 浣嶄覆甯搁噺
浣嶄覆甯搁噺鐪嬭捣鏉ュ緢璞″湪寮寮曞彿鍓嶉潰鏈変竴涓 B 锛堝ぇ鍐欐垨灏忓啓锛夌殑鏅氬瓧绗︿覆锛堝畠浠箣闂存病鏈夌┖鐧斤級锛 姣斿 B'1001'銆備綅涓插父閲忛噷鍙互鐢ㄧ殑瀛楃鍙湁 0 鍜 1銆
鍙﹀锛屼綅涓插父閲忓彲浠ョ敤鍗佸叚杩涘埗琛ㄧず娉曞0鏄庯紝鏂规硶鏄娇鐢ㄥ墠缂鐨 X 锛堝ぇ鍐欐垨鑰呭皬鍐欙級锛屾瘮濡傦紝X'1FF'銆 杩欑琛ㄧず娉曠瓑鏁堜簬涓涓瘡涓崄鍏繘鍒朵綅鍥涗釜浜岃繘鍒朵綅鐨勪綅涓插父閲忋
涓ょ褰㈠紡鐨勪綅涓插父閲忛兘鍙互璞℃櫘閫氬瓧涓插父閲忛偅鏍疯法琛岃繛缁 缇庡厓绗﹀寘鍥翠笉鑳界敤浜庝綅涓插父閲忋
4.1.2.4. 鏁板煎父閲
鏁板煎父閲忔帴鍙椾笅鍒楅氱敤鐨勫舰寮忥細
digits
digits.[digits][e[+-]digits]
[digits].digits[e[+-]digits]
digitse[+-]digits
杩欓噷鐨 digits 鏄竴涓垨澶氫釜鍗佽繘鍒朵綅锛0 鍒 9锛夈傚鏋滄湁灏忔暟鐐癸紝閭d箞鑷冲皯鏈変竴浣嶅湪灏忔暟鐐瑰墠闈㈡垨鍚庨潰銆傚鏋滃嚭鐜颁簡鎸囨暟鍒嗛殧绗︼紙e锛夛紝閭d箞鑷冲皯鏈変竴涓綅璺熷湪瀹冨悗闈€傚湪甯搁噺閲屼笉鑳芥湁绌烘牸鎴栬呭叾浠栧瓧绗﹀祵鍏ュ湪鍐呫 璇锋敞鎰忎换浣曞墠瀵煎湴姝e彿鎴栬呰礋鍙峰疄闄呬笂閮戒笉璁や负鏄父閲忕殑涓閮ㄥ垎锛 瀹冩槸鏂藉姞浜庡父閲忕殑涓涓搷浣滅銆
杩欓噷鏄竴浜涘悎娉曠殑鏁板煎父閲忕殑渚嬪瓙锛
42
3.5
4.
.001
5e2
1.925e-3
濡傛灉涓涓暟鍊煎父閲忔棦涓嶅寘鍚皬鏁扮偣锛屼篃涓嶅寘鍚寚鏁版搷浣滅锛 閭d箞濡傛灉瀹冪殑鏁板煎彲浠ユ斁鍦╥nteger绫诲瀷涓紙32浣嶏級锛屽垯璁や负瀹冩槸integer绫诲瀷锛涘鏋滃畠鐨勬暟鍊煎彲浠ユ斁鍦 bigint涓紙64浣嶏級锛屽垯璁や负瀹冩槸 bigint锛 鍚﹀垯璁や负瀹冩槸 numeric绫诲瀷銆傚寘鍚皬鏁扮偣鍜/鎴栨寚鏁版搷浣滅鐨勫父閲忔绘槸琚涓烘槸numeric绫诲瀷銆
缁欎竴涓暟鍊煎父閲忚祴浜堝垵濮嬫暟鎹被鍨嬪彧鏄被鍨嬭В鏋愮畻娉曠殑寮绔 鍦ㄥぇ澶氭暟鎯呭喌涓嬭甯搁噺浼氭牴鎹幆澧冭鑷姩寮哄埗杞崲鎴愭渶鍚堥傜殑绫诲瀷銆傚繀瑕佹椂锛屼綘鍙互閫氳繃寮哄埗绫诲瀷杞崲鎶婁竴涓暟鍊艰В鏋愭垚鐗瑰畾鐨勬暟鎹被鍨嬨傛瘮濡傦紝浣犲彲浠ュ己鍒惰姹傛妸涓涓暟鍊煎綋浣滅被鍨媟eal锛坒loat4锛夋潵鐪嬶紝鏂规硶鏄繖涔堝啓锛
REAL '1.23' -- 瀛椾覆椋庢牸
'1.23'::REAL -- PostgreSQL 锛堝巻鍙插師鍥狅級椋庢牸
杩欎簺瀹為檯涓婂彧鏄笅闈㈣璁虹殑閫氱敤杞崲鐨勭壒渚嬨
4.1.2.5. 鍏跺畠绫诲瀷鐨勫父閲
浠绘剰绫讳技鐨勫父閲忓彲浠ョ敤涓嬪垪琛ㄧず娉曚腑鐨勪换浣曚竴绉嶆潵杈撳叆锛
type 'string'
'string'::type
CAST ( 'string' AS type )
鍦ㄥ瓧涓插父閲忕殑鏂囨湰灏嗕紶閫掔粰閭g鍙 type 鐨勭被鍨嬬殑杈撳叆杞崲杩囩▼銆 缁撴灉鏄繖绉嶇被鍨嬬殑涓涓父閲忋傚鏋滀笉瀛樺湪璇ュ父閲忔墍灞炵被鍨嬬殑姝т箟锛 閭d箞鏄庣‘鐨勭被鍨嬫槧灏勫彲浠ョ渷鐣ワ紙姣斿锛屽綋浣犳妸瀹冪洿鎺ヨ祴浜堜竴涓〃瀛楁鐨勬椂鍊欙級锛 杩欑鎯呭喌涓嬪畠浼氳嚜鍔ㄨ浆鎹€
瀛椾覆甯搁噺鍙互鐢ㄦ櫘閫 SQL 琛ㄧず娉曟垨鑰呯編鍏冪鍖呭洿鏉ヤ功鍐欍
鎴戜滑杩樺彲浠ョ敤鍑芥暟鏍风殑璇硶鏉ュ0鏄庣被鍨嬭浆鎹細
typename ( 'string' )
涓嶈繃骞堕潪鎵鏈夌被鍨嬪悕鍙互杩欐牱浣跨敤锛涘弬闃 Section 4.2.8 鑾峰彇缁嗚妭銆
::锛孋AST()锛屽拰鍑芥暟璋冪敤璇硶涔熷彲浠ョ敤浜庡0鏄庝换鎰忚〃杈惧紡鐨勮繍琛屾椂绫诲瀷杞崲锛 濡 Section 4.2.8 涓璁虹殑閭f牱銆 浣嗘槸 type 'string' 鐨勫舰寮忓彧鑳界敤浜庡0鏄庝竴涓枃鏈父閲忕殑绫诲瀷銆 type 'string' 鐨勫彟澶栦竴涓檺鍒舵槸瀹冧笉鑳界敤浜庢暟缁勭被鍨嬶紱瑕佺敤 :: 鎴栬 CAST() 澹版槑涓涓暟缁勫父閲忕殑绫诲瀷銆
CAST() 璇硶閬靛惊 SQL銆 type 'string' 璇硶鏄爣鍑嗙殑涓涓帹骞匡細SQL 鍙槸缁欏皯鏁板嚑绉嶆暟鎹被鍨嬪0鏄庝簡杩欎釜璇硶锛 浣 PostgreSQL 鍏佽灏嗗叾鐢ㄤ簬鎵鏈夌被鍨嬨傚甫 :: 鐨勮娉曟槸 PostgreSQL 鐨勫巻鍙茬敤娉曪紝鍑芥暟璋冪敤璇硶涔熸槸銆
4.1.3. 鎿嶄綔绗
涓涓搷浣滅鏄渶澶 NAMEDATALEN-1 锛堢己鐪 63 涓瓧绗︼級涓笅鍒楀瓧绗︾殑搴忓垪锛
+ - * / < > = ~ ! @ # % ^ & | ` ?
涓嶈繃锛屽鎿嶄綔绗﹀悕瀛楁湁鍑犱釜闄愬埗锛
-- 鍜 /* 涓嶈兘鍑虹幇鍦ㄦ搷浣滅鍚嶅瓧涓殑浠讳綍鍦版柟锛屽洜涓哄畠浠細琚綋鍋氭敞閲婂紑濮嬪寰呫
澶氬瓧绗︽搷浣滅涓嶈兘浠 + 鎴 - 缁撴潫锛 闄ら潪鍏跺悕瀛楄嚦灏戣繕鍖呭惈涓嬪垪鎿嶄綔绗︿箣涓锛
~ ! @ # % ^ & | ` ?
姣斿锛孈- 鏄厑璁哥殑鎿嶄綔绗﹀悕瀛楋紝 浣 *- 涓嶆槸銆傝繖涓檺鍒跺厑璁 PostgreSQL 鍦ㄤ笉瑕佹眰璁板彿涔嬮棿鏈夌┖鐧界殑鎯呭喌涓嬪垎鏋 SQL 鍏煎鐨勬煡璇€
褰撲綘浣跨敤闈 SQL 鏍囧噯鐨勬搷浣滅鍚嶅瓧鐨勬椂鍊欙紝浣犻氬父闇瑕佺敤绌虹櫧鍒嗛殧鐩搁偦鐨勬搷浣滅浠ラ伩鍏嶆涔夈 姣斿锛屽鏋滀綘瀹氫箟浜嗕竴涓彨 "@" 鐨勫乏鍗曠洰鎿嶄綔绗︼紝閭d箞浣犲氨涓嶈兘鍐 X*@Y锛涜屾槸瑕佸啓鎴 X* @Y 浠ョ‘淇 PostgreSQL 鎶婂畠璇绘垚涓や釜鎿嶄綔绗︼紝鑰屼笉鏄竴涓
4.1.4. 鐗规畩瀛楃
鏈変簺闈炲瓧姣嶆暟瀛楀瓧绗︽湁涓浜涚壒娈婂惈涔夛紝鍥犳涓嶈兘鐢ㄥ仛鎿嶄綔绗︺ 瀹冧滑鐨勭敤娉曠殑缁嗚妭鍙互鍦ㄧ浉搴旂殑鎻忚堪璇硶鍏冪礌鐨勫湴鏂规壘鍒般 鏈妭鍙槸鎻忚堪瀹冧滑鐨勫瓨鍦ㄥ拰姒傛嫭涓涓嬭繖浜涘瓧绗︾殑鐩殑銆
缇庡厓绗﹀彿锛$锛夊悗闈㈣窡鐫鏁板瓧鐢ㄤ簬鍦ㄤ竴涓嚱鏁颁綋瀹氫箟鎴栬呭噯澶囧ソ鐨勮鍙ヤ腑 琛ㄧず鍙傛暟鐨勪綅缃傚湪鍏朵粬鐜閲岀編鍏冪鍙峰彲鑳芥槸涓涓爣璇嗙鍚嶅瓧鎴栬呮槸涓涓編鍏冪鍖呭洿鐨勫瓧涓插父閲忕殑涓閮ㄥ垎銆
鍦嗘嫭寮э紙()锛夌敤浜庡垎缁勫拰寮哄埗浼樺厛绾х殑鏃跺欏惈涔変笌骞冲父涓鏍枫 鏈変簺鍦哄悎閲屽渾鎷姬鏄綔涓轰竴涓壒瀹 SQL 鍛戒护鐨勫浐瀹氳娉曠殑涓閮ㄥ垎瑕佹眰鐨勩
鏂规嫭寮э紙[]锛夌敤浜庨夊彇鏁扮粍鍏冪礌銆 鍙傞槄 Section 8.10 鑾峰彇鏇村淇℃伅銆
閫楀彿锛,鍦ㄤ竴浜涜娉曟瀯閫犻噷鐢ㄤ簬鍒嗛殧涓涓垪琛ㄧ殑鍏冪礌銆
鍒嗗彿锛;锛夌粨鏉熶竴鏉 SQL 鍛戒护銆 瀹冧笉鑳藉嚭鐜板湪涓鏉″懡浠ら噷鐨勪换浣曞湴鏂癸紝闄ら潪寮曞彿鍖呭洿鐨勬潵褰撳仛瀛楃涓插父閲忔垨鑰呮爣璇嗙鐢ㄣ
鍐掑彿 锛:锛夌敤浜庝粠鏁扮粍涓夊彇"鐗囨"銆傦紙鍙傞槄 Section 8.10銆傦級鍦ㄤ竴浜 SQL 鏂硅█閲岋紙姣斿宓屽叆 SQL 锛夛紝 鍐掑彿鐢ㄤ簬鍓嶇紑鍙橀噺鍚嶃
鏄熷彿 锛* 鍦ㄦ煇浜涚幆澧冮噷琛ㄧず涓涓〃琛屾垨鑰呬竴涓鍚堢被鍨嬪肩殑鍏ㄩ儴瀛楁銆 鍦ㄧ敤浣滆仛闆嗗嚱鏁 COUNT 鐨勫弬鏁版椂杩樻湁鐗规畩鍚箟銆
鍙ョ偣 锛.鐢ㄥ湪鏁板瓧甯搁噺閲岋紝骞剁敤浜庡垎闅旀ā寮忥紝琛ㄥ拰瀛楁鍚嶅瓧銆
4.1.5. 娉ㄩ噴
娉ㄩ噴鏄换鎰忎互鍙屽垝绾垮紑澶村苟寤朵几鍒拌灏剧殑浠绘剰瀛楃搴忓垪锛屾瘮濡傦細
-- 杩欐槸鏍囧噯鐨 SQL92 娉ㄩ噴
鍙﹀锛岃繕鍙互浣跨敤 C-椋庢牸鐨勫潡娉ㄩ噴锛
/* 澶氳娉ㄩ噴
* 鍙互宓屽鈭/* 宓屽鐨勫潡娉ㄩ噴 */
*/
杩欓噷娉ㄩ噴浠 /* 寮澶村苟鎵╁睍鍒板搴旂殑 */銆傝繖浜涘潡娉ㄩ噴鍙互宓屽锛屽氨璞 SQL99 閲岃鐨勯偅鏍凤紝 浣嗗拰 C 涓嶄竴鏍凤紝鍥犳鎴戜滑鍙互娉ㄩ噴鎺変竴澶у潡宸茬粡鍖呭惈鍧楁敞閲婄殑浠g爜銆
娉ㄩ噴鍦ㄨ繘涓姝ョ殑璇硶鍒嗘瀽涔嬪墠琚粠杈撳叆娴佸垹闄ゅ苟鐢ㄧ┖鐧戒唬鏇裤
4.1.6. 璇嶆硶浼樺厛绾
Table 4-1 鏄剧ず浜 PostgreSQL 閲岄潰鐨勬搷浣滅鐨勪紭鍏堢骇鍜屽叧鑱旀с 澶у鏁版搷浣滅閮芥湁鐩稿悓鐨勪紭鍏堢骇骞朵笖閮芥槸宸﹀叧鑱旂殑銆傝繖绉嶆儏鍐靛彲鑳戒細鏈変笉閭d箞鐩磋鐨勮涓猴紱姣斿锛屽竷灏旀搷浣滅 < 鍜 > 鍜屽竷灏旀搷浣滅 <= 鍜 >= 涔嬮棿鏈夌潃涓嶅悓鐨勪紭鍏堢骇銆傚悓鏍凤紝褰撲綘鎶婂弻鐩拰鍗曠洰鎿嶄綔绗︾粍鍚堜娇鐢ㄧ殑鏃跺欙紝 鏈夋椂鍊欎篃闇瑕佸姞鍦嗘嫭寮с傛瘮濡
SELECT 5 ! - 6;
浼氳鍒嗘瀽鎴
SELECT 5 ! (- 6);
鍥犱负鍒嗘瀽鍣ㄤ笉鐭ラ亾 ! 瀹氫箟鎴愪簡鍚庣紑鎿嶄綔绗︼紝 鑰屼笉鏄腑缂鎿嶄綔绗︺傗 鐭ラ亾鐨勬椂鍊欏彧鑳芥槸澶櫄浜 鈥 瑕佸湪鏈緥涓幏寰椾綘闇瑕佺殑鐗规э紝浣犺鍐欐垚
SELECT (5 !) - 6;
杩欐槸鎴戜滑涓烘墿灞曟т粯鍑虹殑浠d环銆
Table 4-1. 鎿嶄綔绗︿紭鍏堢骇锛堥掑噺锛
鎿嶄綔绗/鍏冪礌 鍏宠仈鎬 鎻忚堪
. 宸 琛/瀛楁鍚嶅垎闅旂
:: 宸 PostgreSQL-鐗规湁鐨勭被鍨嬭浆鎹㈡搷浣滅
[ ] 宸 鏁扮粍鍏冪礌閫夊垯
- 鍙 鍗曠洰璐熷彿
^ 宸 骞傛搷浣
* / % 宸 涔橈紝闄わ紝妯
+ - 宸 鍔狅紝鍑
IS 绌 IS TRUE, IS FALSE, IS UNKNOWN, IS NULL
ISNULL 绌 娴嬭瘯鏄惁涓虹┖鍊
NOTNULL 绌 娴嬭瘯鏄惁涓洪潪绌哄
锛堜换浣曞叾瀹冪殑锛 宸 鎵鏈夊叾瀹冪殑鏈湴鍜岀敤鎴峰畾涔夋搷浣滅
IN 绌 闆嗗悎鎴愬憳
BETWEEN 绌 鑼冨洿鍖呭惈
OVERLAPS 绌 鏃堕棿闂撮殧閲嶅彔
LIKE ILIKE SIMILAR 绌 瀛楃涓叉ā寮忓尮閰
< > 绌 灏忎簬锛屽ぇ浜
= 鍙 绛変簬锛岃祴鍊
NOT 鍙 閫昏緫鍙
AND 宸 閫昏緫涓
OR 宸 閫昏緫鎴
璇锋敞鎰忔搷浣滅浼樺厛绾т篃閫傜敤浜庡拰涓婇潰鎻愬埌鐨勫悓鍚嶇殑鍐呯疆鎿嶄綔绗︾敤鎴峰畾涔夋搷浣滅銆 姣斿锛屽鏋滀綘涓轰竴浜涘鎴锋暟鎹被鍨嬪畾涔変竴涓 "+" 鎿嶄綔绗︼紝 閭d箞瀹冨拰鍐呯疆鐨 "+" 鎿嶄綔绗︽湁鍚屾牱鐨勪紭鍏堢骇锛屼笉绠′綘骞蹭簡浠涔堛
濡傛灉鍦 OPERATOR 璇硶閲屼娇鐢ㄤ簡妯″紡淇グ鐨勬搷浣滅鍚嶏紝 姣斿
SELECT 3 OPERATOR(pg_catalog.+) 4;
閭d箞 OPERATOR 鏋勯犲氨浼氭湁 Table 4-1 琛ㄩ噷闈负"浠讳綍鍏跺畠"鎿嶄綔绗︽樉绀虹殑缂虹渷浼樺厛绾с 涓嶇浠涔堢壒瀹氱殑鎿嶄綔绗﹀嚭鐜板湪 OPERATOR()閲岋紝閮芥槸杩欐牱銆
SQL璇硶
4.2. 鍊艰〃杈惧紡
鍊艰〃杈惧紡鐢ㄥ湪鍚勭璇硶鐜涓紝姣斿鍦 SELECT 鍛戒护鐨勭洰鏍囧垪琛ㄤ腑锛屽湪 INSERT 鎴 UPDATE 涓敤鍋氭柊鐨勫垪鍊硷紝鎴栬呭湪璁稿鍛戒护涓殑鎼滅储鏉′欢涓娇鐢ㄣ 鎴戜滑鏈夋椂鍊欐妸鍊艰〃杈惧紡鐨勭粨鏋滃彨鍋氭爣閲忥紝浠ヤ究涓庝竴涓〃琛ㄨ揪寮忕殑缁撴灉鐩稿尯鍒紙鏄竴涓〃锛夈傚洜姝ゅ艰〃杈惧紡涔熷彨鍋氭爣閲忚〃杈惧紡锛堟垨鑰呮洿绠鍗曠殑琛ㄨ揪寮忥級銆傝〃杈惧紡璇硶鍏佽瀵规潵鑷熀鏈儴鍒嗙殑鏁板艰繘琛岀畻鏈紝閫昏緫锛岄泦鍚堬紝鍜屽叾瀹冩搷浣滅殑杩愮畻銆
鍊艰〃杈惧紡鏄笅鍒楀唴瀹逛箣涓锛
涓涓父閲忔垨鑰呮枃鏈笺
涓涓瓧娈靛紩鐢ㄣ
涓涓綅缃弬鏁板紩鐢紝鍦ㄥ嚱鏁板0鏄庝綋涓
涓涓搷浣滅璋冪敤銆
涓涓嚱鏁拌皟鐢ㄣ
涓涓仛闆嗚〃杈惧紡銆
涓涓被鍨嬭浆鎹€
涓涓爣閲忓瓙鏌ヨ銆
涓涓鏋勯犲櫒銆
鍙﹀涓涓湪鍦嗘嫭寮ч噷闈㈢殑鍊艰〃杈惧紡锛屽彲浠ョ敤浜庡瓙琛ㄨ揪寮忓垎缁勫拰瑕嗙洊浼樺厛绾с
闄や簡杩欎釜鍒楄〃浠ュ锛岃繕鏈夎澶氭瀯閫犲彲浠ュ綊绫讳负琛ㄨ揪寮忥紝浣嗘槸涓嶉伒寰换浣曢氱敤鐨勮娉曡鍒欍 瀹冧滑閫氬父鏈夊嚱鏁版垨鎿嶄綔绗︾殑璇箟锛屽苟涓斿湪 Chapter 9 閲屽悎閫傜殑浣嶇疆鎻忚堪銆 涓涓緥瀛愭槸 IS NULL 瀛愬彞銆
鎴戜滑宸茬粡鍦 Section 4.1.2 閲屾湁璁ㄨ杩囩殑鍐呭浜嗐備笅闈㈢殑鑺傝璁哄墿涓嬬殑閫夐」銆
4.2.1. 瀛楁寮曠敤
涓涓瓧娈靛彲浠ョ敤涓嬮潰褰㈠紡鐨勫紩鐢細
correlation.columnname
correlation 鏄竴涓〃鐨勫悕瀛楋紙鍙兘鏈夋ā寮忎慨楗帮級锛 鎴栬呮槸鐢‵ROM瀛愬彞杩欐牱鐨勬柟娉曞畾涔夌殑琛ㄧ殑鍒悕锛屾垨鑰呮槸鍏抽敭瀛 NEW 鎴 OLD銆 锛圢EW鍜 OLD鍙兘鍑虹幇鍦ㄤ竴鏉℃敼鍐欒鍒欎腑锛 鑰屽叾浠栫浉鍏崇殑鍚嶅瓧鍙互鐢ㄤ簬浠绘剰 SQL 璇彞涓傦級濡傛灉鍦ㄥ綋鍓嶆煡璇腑鎵浣跨敤鐨勬墍鏈夎〃涓紝璇ュ瓧娈靛悕瀛楁槸鍞竴鐨勶紝 閭d箞杩欎釜鐩稿叧鍚嶅瓧鍜屽垎闅旂敤鐨勭偣灏卞彲浠ョ渷鐣ャ 锛堝張瑙 Chapter 7銆傦級
4.2.2. 浣嶇疆鍙傛暟
浣嶇疆鍙傛暟寮曠敤鐢ㄤ簬鏍囪瘑浠庡閮ㄧ粰涓涓 SQL 璇彞鐨勪竴涓弬鏁般 鍙傛暟鐢ㄤ簬 SQL 鍑芥暟瀹氫箟璇彞鍜屽噯澶囧ソ鐨勬煡璇€ 鏈変簺瀹㈡埛绔簱杩樻敮鎸佸湪 SQL 鍛戒护瀛椾覆澶栬竟澹版槑鏁版嵁鍊硷紝杩欑鎯呭喌涓嬪弬鏁扮敤浜庡紩鐢 SQL 瀛椾覆琛屽鐨勬暟鎹 涓涓弬鏁扮殑褰㈠紡濡備笅锛
$number
姣斿锛岀湅鐪嬩竴涓嚱鏁 dept 鐨勫畾涔夛紝 濡備笅
CREATE FUNCTION dept(text) RETURNS dept
AS $$ SELECT * FROM dept WHERE name = $1 $$
LANGUAGE SQL;
鍦ㄥ嚱鏁拌璋冪敤鐨勬椂鍊欒繖閲岀殑 $1 灏嗗紩鐢ㄧ涓涓嚱鏁扮殑鍙傛暟銆
4.2.3. 涓嬫爣
濡傛灉涓涓〃杈惧紡鐢熸垚涓涓暟缁勭被鍨嬬殑鏁板硷紝閭d箞鎴戜滑鍙互閫氳繃鍐欎笅闈㈣繖鏍风殑琛ㄨ揪寮忔潵澹版槑鏁扮粍鍊肩殑鍏冪礌
expression[subscript]
濡傛灉鏄涓浉閭荤殑鍏冪礌锛堜竴涓"鏁扮粍鐗囨柇"锛夊彲浠ョ敤涓嬮潰鐨勬柟娉曟娊鍙
expression[lower_subscript:upper_subscript]
锛堝湪杩欓噷锛屾柟鎷姬 [ ] 鐨勬剰鎬濇槸鎸夌収瀛楅潰鏂囨湰鐨勬柟寮忓嚭鐜般傦級 姣忎釜subscript鑷繁閮芥槸涓涓〃杈惧紡锛屽畠蹇呴』鐢熸垚涓涓暣鏁板笺
閫氬父锛屾暟缁 expression 蹇呴』鐢ㄥ渾鎷姬鍖呭洿锛 浣嗗鏋滆杩涜鑴氭爣璁$畻鐨勮〃杈惧紡鍙槸涓涓瓧娈靛紩鐢ㄦ垨鑰呬竴涓綅缃弬鏁帮紝閭d箞鍦嗘嫭寮у彲浠ョ渷鐣ャ 鍚屾牱锛屽鏋滄簮鏁扮粍鏄缁寸殑锛岄偅涔堝涓剼鏍囧彲浠ヨ繛鎺ュ湪涓璧枫傛瘮濡傦紝
mytable.arraycolumn
mytable.two_d_column[17][34]
$1[10:42]
(arrayfunction(a,b))[42]
鏈鍚庝竴涓緥瀛愰噷鐨勫渾鎷姬鏄繀椤荤殑銆傚弬闃 Section 8.10 鑾峰彇鏈夊叧鏁扮粍鐨勬洿澶氫俊鎭
4.2.4. 瀛楁閫夋嫨
濡傛灉涓涓〃杈惧紡鐢熸垚涓涓鍚堢被鍨嬶紙琛岀被鍨嬶級锛岄偅涔堢敤涓嬮潰鐨勬柟娉曞彲浠ユ娊鍙栦竴涓寚瀹氱殑瀛楁
expression.fieldname
閫氬父锛岃 expression 蹇呴』鐢ㄥ渾鎷姬鍖呭洿锛 浣嗘槸濡傛灉瑕侀夊彇鐨勮〃杈惧紡鍙槸涓涓〃寮曠敤鎴栬呬綅缃弬鏁帮紝鍙互鐪佺暐鍦嗘嫭寮с 姣斿
mytable.mycolumn
$1.somecolumn
(rowfunction(a,b)).col3
锛堝洜姝わ紝涓涓叏绉扮殑瀛楁寮曠敤瀹為檯涓婂彧鏄竴涓瓧娈甸夋嫨璇硶鐨勭壒渚嬨傦級
4.2.5. 鎿嶄綔绗﹁皟鐢
鎿嶄綔绗﹁皟鐢ㄦ湁涓夌璇硶鈭
expression operator expression (鍙岀洰涓紑鎿嶄綔绗)
operator expression (鍗曠洰鍓嶇紑鎿嶄綔绗)
expression operator (鍗曠洰鍚庣紑鎿嶄綔绗)
杩欓噷鐨 operator 璁板彿閬靛惊璇硶瑙勫垯锛 Section 4.1.3锛 鎴栬呮槸璁板彿锛欰ND锛 OR锛屽拰 NOT 涔嬩竴銆 鎴栬呮槸涓涓淇グ鐨勬搷浣滅鍚
OPERATOR(schema.operatorname)
鍏蜂綋瀛樺湪鍝釜鎿嶄綔绗︿互鍙婂畠浠槸鍗曠洰杩樻槸鍙岀洰鍙栧喅浜庣郴缁熸垨鐢ㄦ埛瀹氫箟浜嗕粈涔堟搷浣滅銆侰hapter 9 鎻忚堪浜嗗唴缃殑鎿嶄綔绗︺
4.2.6. 鍑芥暟璋冪敤
鍑芥暟璋冪敤鐨勮娉曟槸鍚堟硶鍑芥暟鍚嶅瓧锛堝彲鑳芥湁妯″紡鍚嶄慨楗帮級锛 鍚庨潰璺熺潃鍦ㄥ渾鎷姬閲岀殑瀹冪殑鍙傛暟鍒楄〃锛
function ([expression [, expression ... ]] )
姣斿锛屼笅闈㈢殑浠g爜璁$畻 2 鐨勫钩鏂规牴锛
sqrt(2)
鍐呯疆鍑芥暟鐨勫垪琛ㄥ湪 Chapter 9 閲屻 鍏跺畠鍑芥暟鍙互鐢辩敤鎴锋坊鍔犮
4.2.7. 鑱氶泦琛ㄨ揪寮
涓涓仛闆嗚〃杈惧紡浠h〃涓涓仛闆嗗嚱鏁板涓涓煡璇㈤夊嚭鐨勮鐨勫鐞嗐 涓涓仛闆嗗嚱鏁版妸澶氫釜杈撳叆缂╁噺涓轰竴涓緭鍑哄硷紝 姣斿缁欒緭鍏ユ眰鍜屾垨骞冲潎銆備竴涓仛闆嗚〃杈惧紡鐨勮娉曟槸涓嬪垪涔嬩竴锛
aggregate_name (expression)
aggregate_name (ALL expression)
aggregate_name (DISTINCT expression)
aggregate_name ( * )
杩欓噷 aggregate_name 鏄墠闈㈠畾涔夌殑鑱氶泦锛岋紙鍙兘鏄叏绉帮級锛 鑰 expression 鏄竴涓湰韬笉鍖呭惈鑱氶泦琛ㄨ揪寮忕殑浠绘剰鍊艰〃杈惧紡銆
绗竴绉嶅舰寮忕殑鑱氶泦琛ㄨ揪寮忎负鎵鏈夎〃杈惧紡鐢熸垚闈炵┖鍊肩殑杈撳叆琛岃皟鐢ㄨ仛闆嗐 锛堝疄闄呬笂锛屾槸鍚﹀拷鐣ョ┖鍊肩敱鑱氶泦鍑芥暟鍐冲畾 鈥 浣嗘槸鎵鏈夋爣鍑嗙殑鑱氶泦鍑芥暟閮藉拷鐣ュ畠浠傦級 绗簩绉嶅舰寮忓拰绗竴绉嶄竴鏍凤紝鍥犱负 ALL 鏄己鐪佸笺傜涓夌褰㈠紡涓烘墍鏈夎緭鍏ヨ閲屾壘鍒拌〃杈惧紡鐨勬墍鏈夊敮涓鐨勯潪绌哄艰皟鐢ㄨ仛闆嗐 鏈鍚庝竴绉嶅舰寮忎负姣忎釜杈撳叆琛岋紙涓嶇鏄┖杩樻槸闈炵┖锛夎皟鐢ㄤ竴娆¤仛闆嗭紱鍥犱负娌℃湁澹版槑鐗瑰畾鐨勮緭鍏ュ笺傞氬父瀹冨彧鏄 count() 鑱氶泦鍑芥暟鏈夌敤銆
姣斿锛宑ount(*) 鐢熸垚杈撳叆琛岀殑鎬绘暟锛 count(f1) 鐢熸垚 f1 涓洪潪绌虹殑杈撳叆琛屾暟锛 count(distinct f1) 鐢熸垚 f1 鍞竴闈炵┖鐨勮鏁般
棰勫畾涔夌殑鑱氶泦鍑芥暟鍦 Section 9.15 閲屾弿杩般 鍏跺畠鑱氶泦鍑芥暟鍙互鐢辩敤鎴峰鍔犮
涓涓仛闆嗚〃杈惧紡鍙兘鍦 SELECT 鍛戒护鐨勭粨鏋滃垪琛ㄦ垨鑰 HAVING 瀛愬彞閲屽嚭鐜般 绂佹鍦ㄥ叾瀹冨瓙鍙ラ噷鍑虹幇锛屾瘮濡 WHERE 閲岄潰锛屽洜涓鸿繖浜涘瓙鍙ラ昏緫涓婂湪鐢熸垚鑱氶泦缁撴灉涔嬪墠璁$畻銆
濡傛灉涓涓仛闆嗚〃杈惧紡鍑虹幇鍦ㄤ竴涓瓙鏌ヨ閲岋紙鍙傞槄 Section 4.2.9 鍜 Section 9.16锛夛紝鑱氶泦閫氬父鏄湪瀛愭煡璇㈢殑琛屼笂杩涜璁$畻銆備絾鏄鏋滆仛闆嗙殑鍙傛暟鍙寘鍚灞傛煡璇㈢殑鍙橀噺鍒欐湁涓涓緥澶栵細杩欎釜鑱氶泦浼氬睘浜庣浠栨渶杩戠殑澶栧眰鏌ヨ锛屽苟涓斿湪璇ユ煡璇笂杩涜璁$畻銆傝鑱氶泦琛ㄨ揪寮忔暣浣撲笂灞炰簬瀹冨嚭鐜扮殑瀛愭煡璇㈠澶栧眰鏌ヨ鐨勫紩鐢紝鍏朵綔鐢ㄧ浉褰撲簬瀛愭煡璇换浣曚竴娆¤绠椾腑鐨勪竴涓父閲忋 杩欎釜鑱氶泦琛ㄨ揪寮忕殑鏈夊叧鍙兘鍑虹幇鍦ㄧ粨鏋滃垪鎴栬 HAVING 瀛愬彞鐨勯檺鍒堕傜敤浜庤仛闆嗘墍灞炵殑鏌ヨ灞傘
4.2.8. 绫诲瀷杞崲
涓涓被鍨嬭浆鎹㈠0鏄庝竴涓粠涓绉嶆暟鎹被鍨嬪埌鍙﹀涓绉嶆暟鎹被鍨嬬殑杞崲銆 PostgreSQL 鎺ュ彈涓ょ绛夋晥鐨勭被鍨嬭浆鎹㈣娉曪細
CAST ( expression AS type )
expression::type
CAST 璇硶閬靛惊 SQL锛:: 鐨勮娉曟槸 PostgreSQL 浼犵粺鐢ㄦ硶銆
濡傛灉瀵逛竴涓凡鐭ョ被鍨嬬殑鍊艰〃杈惧紡搴旂敤杞崲锛屽畠浠h〃涓涓繍琛屾椂绫诲瀷杞崲銆 鍙湁鍦ㄥ畾涔変簡鍚堥傜殑绫诲瀷杞崲鎿嶄綔鐨勬儏鍐典笅锛岃杞崲鎵嶈兘鎴愬姛銆傝娉ㄦ剰杩欎竴鐐瑰拰鐢ㄤ簬甯搁噺鐨勮浆鎹㈢暐鏈夊尯鍒紝濡 Section 4.1.2.5 鎵绀恒備竴涓簲鐢ㄤ簬鏌愪釜鏈慨楗扮殑瀛椾覆鏂囨湰鐨勮浆鎹㈣〃绀虹粰涓涓瓧涓叉枃鏈暟鍊艰祴浜堜竴涓垵濮嬪寲绫诲瀷锛屽洜姝ゅ畠瀵逛簬浠讳綍绫诲瀷閮戒細鎴愬姛锛堝鏋滃瓧涓叉枃鏈殑鍐呭绗﹀悎璇ユ暟鎹被鍨嬬殑杈撳叆璇硶鎺ュ彈銆傦級
濡傛灉瀵逛簬涓涓艰〃杈惧紡鐢熸垚鐨勬暟鍊煎鏌愮被鍨嬭岃█涓嶅瓨鍦ㄦ贩娣嗙殑鎯呭喌锛 閭d箞鎴戜滑鍙互鐪佺暐鏄庣‘鐨勭被鍨嬭浆鎹紙姣斿锛屽湪缁欎竴涓〃瀛楁璧嬪肩殑鏃跺欙級锛涘湪杩欐牱鐨勬儏鍐典笅锛岀郴缁熷皢鑷姩闄勫姞涓涓被鍨嬭浆鎹€ 涓嶈繃锛岃嚜鍔ㄨ浆鎹㈠彧閫傜敤浜庨偅浜涚郴缁熻〃涓爣璁扮潃 "OK to apply implicitly" 鐨勮浆鎹㈠嚱鏁般 鍏跺畠杞崲鍑芥暟蹇呴』鐢ㄦ槑纭殑杞崲璇硶璋冪敤銆 杩欎簺闄愬埗鏄负浜嗛伩鍏嶄竴浜涙紓鐨勮浆鎹㈣搴旂敤銆
鎴戜滑涔熷彲浠ョ敤鍑芥暟鏍风殑璇硶澹版槑涓涓被鍨嬭浆鎹細
typename ( expression )
涓嶈繃锛岃繖涓柟娉曞彧鑳界敤浜庨偅浜涘悕瀛楀悓鏃朵篃鏄湁鏁堝嚱鏁板悕瀛楃殑绫诲瀷銆 姣斿锛宒ouble precision 灏变笉鑳借繖涔堢敤锛 浣嗘槸绛夋晥鐨 float8 鍙互銆傚悓鏍凤紝interval锛 time锛屽拰 timestamp 濡傛灉鍔犱簡鍙屽紩鍙蜂篃鍙兘杩欎箞鐢紝鍥犱负瀛樺湪璇硶鍐茬獊銆傚洜姝わ紝鍑芥暟鏍风殑绫诲瀷杞崲浼氬鑷翠笉涓鑷达紝 鎵浠ュ彲鑳藉簲璇ラ伩鍏嶅湪鏂板簲鐢ㄤ腑杩欎箞鐢ㄣ傦紙鍑芥暟鏍疯娉曞疄闄呬笂灏变技涔庝竴涓嚱鏁拌皟鐢ㄣ傚鏋滀娇鐢ㄤ袱绉嶆爣鍑嗚浆鎹㈣娉曞仛杩愯鏃惰浆鎹紝 閭d箞瀹冨皢鍦ㄥ唴閮ㄨ皟鐢ㄤ竴涓凡娉ㄥ唽寰楀嚱鏁版墽琛岃浆鎹€傞氬父锛岃繖绉嶈浆鎹㈠嚱鏁板拰瀹冧滑寰楄緭鍑虹被鍨嬪悓鍚嶏紝浣嗘槸杩欎釜瑕佺偣鍙笉鏄偅浜涘彲浠ョЩ妞嶇殑绋嬪簭鍙互渚濊禆鐨勪笢瑗裤傦級
4.2.9. 鏍囬噺瀛愭煡璇
涓涓爣閲忓瓙鏌ヨ鏄竴涓斁鍦ㄥ渾鎷姬閲岀殑鏅 SELECT鏌ヨ锛 瀹冨彧杩斿洖鍙湁涓涓瓧娈电殑涓琛屻傦紙鍙傞槄 Chapter 7 鑾峰彇鏈夊叧鍐欐煡璇㈢殑淇℃伅銆傦級 璇 SELECT 灏嗚鎵ц锛 鑰屽叾鍗曚釜杩斿洖鍊煎皢鍦ㄥ懆鍥寸殑鍊艰〃杈惧紡涓娇鐢ㄣ傛妸涓涓繑鍥炶秴杩囦竴琛屾垨鑰呰秴杩囦竴鍒楃殑鏌ヨ鐢ㄥ仛鏍囬噺鏌ヨ鏄敊璇殑銆 锛堜笉杩囷紝鍦ㄧ壒瀹氱殑鎵ц涓紝瀛愭煡璇笉杩斿洖琛屽垯涓嶇畻閿欒锛涙爣閲忕粨鏋滆涓烘槸NULL銆傦級璇ュ瓙鏌ヨ鍙互寮曠敤鍛ㄥ洿鏌ヨ鐨勫彉閲忥紝閭d簺鍙橀噺涔熸槸鍦ㄨ绠椾换鎰忓瓙鏌ヨ鐨勬椂鍊欏綋鍋氬父閲忎娇鐢ㄧ殑銆 鍙堣 Section 9.16銆
姣斿锛屼笅闈㈢殑鏌ヨ鎵惧嚭姣忎釜宸炰腑鐨勬渶澶т汉鍙f暟閲忕殑鍩庡競锛
SELECT name, (SELECT max(pop) FROM cities WHERE cities.state = states.name)
FROM states;
4.2.10. 鏁扮粍鏋勯犲櫒
涓涓暟缁勬瀯閫犲櫒鏄竴涓〃杈惧紡锛屽畠浠庡畠鐨勬垚鍛樺厓绱犱笂鏋勯犱竴涓暟缁勫笺 涓涓畝鍗曠殑鏁扮粍鏋勯犲櫒鐢卞叧閿瓧 ARRAY锛屼竴涓乏鏂规嫭寮 [锛 涓涓垨澶氫釜琛ㄨ揪寮忥紙鐢ㄩ楀彿鍒嗛殧锛夎〃绀烘暟缁勫厓绱犲硷紝浠ュ強鏈鍚庝竴涓彸鏂规嫭寮 ]銆 姣斿
SELECT ARRAY[1,2,3+4];
array
---------
{1,2,7}
(1 row)
鏁扮粍鍏冪礌绫诲瀷鏄垚鍛樿〃杈惧紡鐨勫叕鍏辩被鍨嬶紝浣跨敤鍜 UNION 鎴 CASE 鏋勯犱竴鏍风殑瑙勫垯鍐冲畾銆 锛堝弬闃 Section 10.5锛夈
澶氱淮鏁扮粍鍊煎彲浠ラ氳繃宓屽鏁扮粍鏋勯犲櫒鐨勬柟娉曟潵鍒朵綔銆 鍦ㄥ唴灞傛瀯閫犲櫒閲岋紝鍏抽敭瀛 ARRAY 鍙互鐪佺暐銆傛瘮濡傦紝涓嬮潰鐨勪袱鍙ョ敓鎴愬悓鏍风殑缁撴灉锛
SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]];
array
---------------
{{1,2},{3,4}}
(1 row)
SELECT ARRAY[[1,2],[3,4]];
array
---------------
{{1,2},{3,4}}
(1 row)
鍥犱负澶氱淮鏁扮粍蹇呴』鏄柟褰紝鍚屽眰鐨勫唴灞傛瀯閫犲櫒蹇呴』鐢熸垚鍚岀淮鐨勫瓙鏁扮粍銆
澶氱淮鏁扮粍鏋勯犲櫒鍏冪礌鍙互鏄换浣曠敓鎴愬悎閫傛暟缁勭殑涓滆タ锛岃屼笉浠呬粎鏄竴涓瓙 ARRAY 鏋勯犮 姣斿锛
CREATE TABLE arr(f1 int[], f2 int[]);
INSERT INTO arr VALUES (ARRAY[[1,2],[3,4]], ARRAY[[5,6],[7,8]]);
SELECT ARRAY[f1, f2, '{{9,10},{11,12}}'::int[]] FROM arr;
array
------------------------------------------------
{{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}}
(1 row)
鎴戜滑涔熷彲浠ヤ粠涓涓瓙鏌ヨ鐨勭粨鏋滀腑鏋勯犱竴涓暟缁勩傚湪杩欑褰㈠紡涓嬶紝 鏁扮粍鏋勯犲櫒鏄敤鍏抽敭瀛 ARRAY 鍚庨潰璺熺潃涓涓敤鍦嗘嫭寮э紙涓嶆槸鏂规嫭寮э級鍖呭洿鐨勫瓙鏌ヨ銆 姣斿锛
SELECT ARRAY(SELECT oid FROM pg_proc WHERE proname LIKE 'bytea%');
?column?
-------------------------------------------------------------
{2011,1954,1948,1952,1951,1244,1950,2005,1949,1953,2006,31}
(1 row)
瀛愭煡璇㈠繀椤昏繑鍥炰竴涓瓧娈点傜敓鎴愮殑涓缁存暟缁勫皢涓哄瓙鏌ヨ閲屾瘡琛岀粨鏋滅敓鎴愪竴涓厓绱狅紝 鍏冪礌绫诲瀷鍖归厤瀛愭煡璇㈢殑杈撳嚭瀛楁銆
鐢 ARRAY 寤虹珛鐨勬暟缁勫肩殑鑴氭爣鎬绘槸浠庝竴寮濮嬨 鏈夊叧鏁扮粍鐨勬洿澶氫俊鎭紝鍙傞槄 Section 8.10銆
4.2.11. 琛屾瀯閫
涓涓鏋勯犲櫒鏄竴涓粠鎻愪緵缁欏畠鐨勬垚鍛樺瓧娈垫暟鍊间腑鍒朵綔琛屾暟鍊硷紙涔熷彨澶嶅悎绫诲瀷鍊硷級鐨勮〃杈惧紡銆 涓涓鏋勯犲櫒鐢卞叧閿瓧 ROW锛屼竴涓乏鍦嗘嫭寮э紝 闆朵釜鎴栬呭涓敤鍋氳瀛楁鍊肩殑琛ㄨ揪寮忥紙鐢ㄩ楀彿鍒嗛殧锛夛紝浠ュ強鏈鍚庝竴涓彸鍦嗘嫭寮с傛瘮濡傦紝
SELECT ROW(1,2.5,'this is a test');
濡傛灉鍦ㄥ垪琛ㄩ噷鏈夊涓〃杈惧紡锛岄偅涔堝叧閿瓧 ROW 鏄彲閫夌殑銆
缂虹渷鏃讹紝ROW 琛ㄨ揪寮忓垱寤虹殑鍊兼槸涓涓尶鍚嶇殑璁板綍绫诲瀷銆傚鏋滃繀瑕侊紝浣犲彲浠ユ妸瀹冭浆鎹㈡垚涓涓懡鍚嶇殑澶嶅悎绫诲瀷 鈥 鏃㈠彲浠ユ槸涓涓〃鐨勮绫诲瀷锛屼篃鍙互鏄竴涓敤 CREATE TYPE AS 鍒涘缓鐨勫鍚堢被鍨嬨 鍙兘浼氶渶瑕佷竴涓槑纭殑杞崲浠ラ伩鍏嶆涔夈傛瘮濡傦細
CREATE TABLE mytable(f1 int, f2 float, f3 text);
CREATE FUNCTION getf1(mytable) RETURNS int AS 'SELECT $1.f1' LANGUAGE SQL;
-- 鍥犱负鍙湁涓涓 getf1() 瀛樺湪锛屾墍浠ヤ笉闇瑕佺被鍨嬭浆鎹
SELECT getf1(ROW(1,2.5,'this is a test'));
getf1
------
1
(1 row)
CREATE TYPE myrowtype AS (f1 int, f2 text, f3 numeric);
CREATE FUNCTION getf1(myrowtype) RETURNS int AS 'SELECT $1.f1' LANGUAGE SQL;
-- 鐜板湪鎴戜滑闇瑕佺被鍨嬭浆鎹互琛ㄦ槑璋冪敤鍝釜鍑芥暟锛
SELECT getf1(ROW(1,2.5,'this is a test'));
ERROR: function getf1(record) is not unique
SELECT getf1(ROW(1,2.5,'this is a test')::mytable);
getf1
-------
1
(1 row)
SELECT getf1(CAST(ROW(11,'this is a test',2.5) AS myrowtype));
getf1
-------
11
(1 row)
琛屾瀯閫犲櫒鍙互鐢ㄤ簬鍒朵綔瀛樺偍鍦ㄥ鍚堢被鍨嬭〃瀛楁閲岄潰鐨勫鍚堢被鍨嬪硷紝 鎴栬呮槸浼犻掔粰涓涓帴鍙楀鍚堢被鍨嬪弬鏁扮殑鍑芥暟銆傝繕鏈夛紝鎴戜滑涔熷彲浠ユ瘮杈冧袱涓鏁板兼垨鑰呯敤 IS NULL 鎴 IS NOT NULL 娴嬭瘯涓涓鏁板硷紝姣斿
SELECT ROW(1,2.5,'this is a test') = ROW(1, 3, 'not the same');
SELECT ROW(a, b, c) IS NOT NULL FROM table;
鏇村鐨勭粏鑺傦紝璇峰弬闃 Section 9.17銆 琛屾瀯閫犺繕鍙互鐢ㄤ簬杩炴帴瀛愭煡璇紝杩欎簺鍦 Section 9.16 閲岄潰鏈夎缁嗚璁恒
4.2.12. 琛ㄨ揪寮忚绠楄鍒
瀛愯〃杈惧紡鐨勮绠楅『搴忔槸娌℃湁瀹氫箟鐨勩傜壒鍒鎸囧嚭鐨勬槸锛 涓涓搷浣滅鎴栬呭嚱鏁扮殑杈撳叆骞朵笉涓瀹氭槸鎸夌収浠庡乏鍚戝彸鐨勯『搴忔垨鑰呬互鏌愮鐗瑰畾鐨勯『搴忚繘琛岃绠楃殑銆
鍙﹀锛屽鏋滀竴涓〃杈惧紡鐨勭粨鏋滃彲浠ラ氳繃鍙垽鏂畠鐨勪竴閮ㄥ垎灏卞彲浠ュ緱鍒帮紝 閭d箞鍏跺畠瀛愯〃杈惧紡灏卞彲浠ュ畬鍏ㄤ笉璁$畻浜嗐傛瘮濡傦紝濡傛灉鎴戜滑杩欎箞鍐
SELECT true OR somefunc();
閭d箞 somefunc() 灏憋紙鍙兘锛夋牴鏈笉浼氳璋冪敤銆 濡傛灉鎴戜滑鍐欎笅闈㈢殑锛屼篃鍙兘浼氭槸杩欐牱
SELECT somefunc() OR true;
璇锋敞鎰忚繖閲屽拰鏌愪簺缂栫▼璇█閲岀殑浠庡乏鍚戝彸"鐭矾"鏄笉涓鏍风殑銆
鍥犳锛屾嬁閭d簺鏈夊壇浣滅敤鐨勫嚱鏁颁綔涓哄鏉傝〃杈惧紡鐨勪竴閮ㄥ垎鏄笉鏄庢櫤鐨勯夋嫨銆 鍦 WHERE 鍜 HAVING 瀛愬彞閲岄潰渚濊禆鍓綔鐢ㄦ垨鑰呮槸璁$畻椤哄簭鏄壒鍒嵄闄╃殑锛 鍥犱负杩欎簺瀛愬彞閮芥槸浣滀负鐢熸垚涓涓墽琛岃鍒掔殑涓閮ㄥ垎杩涜浜嗗ぇ閲忕殑鍐嶅鐞嗐傚湪杩欎簺瀛愬彞閲岀殑甯冨皵琛ㄨ揪寮忥紙AND/OR/NOT 鐨勭粍鍚堬級鍙互浠ュ竷灏斾唬鏁拌繍绠楀緥鍏佽鐨勪换鎰忔柟寮忚繘琛岃瘑鍒
濡傛灉寮哄埗璁$畻椤哄簭闈炲父閲嶈锛岄偅涔堝彲浠ヤ娇鐢 CASE 鏋勯狅紙鍙傞槄 Section 9.13锛夈 姣斿锛屼笅闈㈡槸涓绉嶈鍥鹃伩鍏嶅湪 WHERE 瀛愬彞閲岃闆堕櫎鐨勪笉鍙俊鐨勬柟娉曪細
SELECT ... WHERE x <> 0 AND y/x > 1.5;
浣嗘槸涓嬮潰杩欐牱鐨勬槸瀹夊叏鐨勶細
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
鐢ㄨ繖绉嶉鏍肩殑 CASE 鏋勯犱細闃绘浼樺寲锛屽洜姝ゅ簲璇ュ彧鍦ㄥ繀瑕佺殑鏃跺欎娇鐢ㄣ 锛堝湪杩欎釜鐗规畩鐨勪緥瀛愰噷锛屾鏃犵枒闂啓鎴 y > 1.5*x 鏇村ソ銆傦級




发表于 2009-1-5 19:48
| 











