




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、文檔可能無法思考全面,請瀏覽后下載! sql中select語句詳解及用途1234567891011SELECT ALL | DISTINCT ON ( expression , . ) * | expression AS output_name , . FROM from_item , . WHERE condition GROUP BY expression , . HAVING condition , . UNION | INTERSECT | EXCEPT ALL select ORDER BY expression ASC | DESC | USING operator , . FOR
2、 UPDATE OF tablename , . LIMIT count | ALL OFFSET start 這里 from_item 可以是:?12345678 ONLY table_name * AS alias ( column_alias_list ) |( select ) AS alias ( column_alias_list ) |from_item NATURAL join_type from_item ON join_condition | USING ( join_column_list ) 輸入 expression表的列/字段名或一個表達式output_n
3、ame使用 AS 子句為一個列/字段或一個表達式聲明另一個名稱 這個名稱主要用于標記輸出列用于顯示。 它可以在 ORDER BY 和 GROUP BY 子句里代表列/字段的值 但是 output_name 不能用于 WHERE 或 HAVING 子句;用表達式代替from_item一個表引用,子查詢,或者 JOIN 子句詳見下文condition一個布爾表達式,給出真或假的結(jié)果 參見下面描述的 WHERE 和 HAVING 子句select一個選擇語句,可以有除 ORDER BY,F(xiàn)OR UPDATE,和 LIMIT 子句以外的所有 特性(甚至在加了括弧的情況下那些語句也可以用)16 / 19
4、FROM 項可以包括: table_name一個現(xiàn)存的表或視圖的名字如果聲明了 ONLY,則只掃描該表 如果沒有聲明ONLY,該表和所有其派生表(如果有的話)都被掃描 可以在表名后面跟一個 * 來表示掃所有其后代表, 但在目前的版本里,這是缺省特性 (在 PostgreSQL 7.1 以前的版本里, ONLY 是缺省特性)alias用于于前面的 table_name. 的替換名字,用于縮寫或消除一個表自連接時的含混 (此時同一個表要掃描好幾次) 如果寫了別名,那么你也可以寫一個字段別名列表,為表的一個或者幾個 字段提供替換名字select一個在 FORM 子句里出現(xiàn)的子查詢它的輸出作
5、用好象是為這條 SELECT 命令在其生存期里創(chuàng)建一個臨時表 請注意這個子查詢必須用園括弧包圍 并且必須給它加別名join_type INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN,或 CROSS JOIN. 之一 就 INNER 和 OUTER 連接類型,必須出現(xiàn) NATURAL ON join_condition,或 USING ( join_column_list ) 之一對于 CROSS JOIN,上面的項都不能出現(xiàn)join_condition一個條件限制類似 WHERE 條件,只不過它只應(yīng)用于在這條 JOI
6、N 子句里 連接的兩個 from_itemjoin_column_list一個 USING 字段列表 (a, b, . ) 是 ON 條件 left_table.a = right_table.a AND left_table.b = right_table.b . 的縮寫輸出 Rows你聲明的查詢返回的所有結(jié)果集的行count查詢返回的行的計數(shù)描述SELECT 將從一個或更多表中返回記錄行。 選擇的侯選行是滿足 WHERE 條件的所有行。 或者如果省略了 WHERE 語句則選擇表中的所有行(參閱 WHERE 子句)實際上,返回的行并不是由 FROM/WHERE/GROUP BY/H
7、AVING 子句直接生成的行; 其實,輸出行是通過給每個選出的行計算 SELECT 輸出表達式形成的 你可以在輸出列表上寫一個 * 表示選出的行的所有列 同樣我們可以拿 table_name.* 表示來自該表的所以行DISTINCT 將從選擇出來的結(jié)果集中刪除所有的重復(fù)的行。 ALL (缺省)將返回所有侯選行,包括重復(fù)的行。DISTINCT ON 刪除匹配所有你聲明的表達式的行, 只保留每個重復(fù)集的第一行。 DISTINCT ON 表達式是用和 ORDER BY 項一樣的規(guī)則來解釋的,見下文 注意這里每個重復(fù)集的"第一行"是不可預(yù)料的,除非我們用 ORDER BY 來保證我
8、們希望的行最先出現(xiàn)。例如,SELECT DISTINCT ON (location) location, time, reportFROM weatherReportsORDER BY location, time DESC;檢索出每個地區(qū)的最近的天氣預(yù)報。 但是如果我們沒有使用 ORDER BY 來強制每個地區(qū)按時間值降續(xù)排列, 我們得到的將是每個地區(qū)的不可預(yù)料的時間的報告。GROUP BY 子句允許用戶把表分成匹配一個或多個數(shù)值的不同行的組 (參考 GROUP BY 子句)HAVING 允許只選擇那些滿足聲明條件的行組(參閱 HAVING 子句)ORDER BY 導(dǎo)致返回的行按照聲明的順序
9、排列 如果沒有給出 ORDER BY,輸出的行的順序?qū)⒁韵到y(tǒng)認為開銷最小的順序產(chǎn)生 (參閱 ORDER BY 子句)多個 SELECT 查詢可以用 UNION,INTERSECT,和 EXCEPT 操作符 組合起來必要時請使用圓括弧確定這些操作符的順序UNION 操作符計算是那些參與的查詢所返回的行的集合。 如果沒有聲明 ALL,那么重復(fù)行被刪除 (參閱 UNION 子句)INTERSECT 給出兩個查詢公共的行。 如果沒有聲明 ALL,那么重復(fù)行被刪除 (參閱 INTERSECT 子句)EXCEPT 給出存在于第一個查詢而不存在于第二個查詢的行。 如果沒有聲明 ALL,那么重復(fù)行被刪除 (參
10、閱 EXCEPT 子句)FOR UPDATE 子句允許 SELECT 語句對選出的行執(zhí)行排他鎖。LIMIT 子句允許給用戶返回一個查詢生成的結(jié)果的子集。(參閱 LIMIT 子句)你必須有 SELECT 權(quán)限用來從表中讀取數(shù)值 (參閱 GRANT/REVOKE語句)FROM 子句FROM 子句為 SELECT 聲明一個或多個源表 如果聲明了多個源表,則概念上結(jié)果是所有源表所有行的迪卡爾積 - 不過通常會增加限制條件以把返回的行限制為迪卡爾積的一個小子集如果 FROM 項是一個簡單表名字,它隱含包括來自該表子表(繼承子表)的行 ONLY 將消除從該表的子表來的行 在 PostgreSQL 7.1
11、以前,這是缺省結(jié)果, 而獲取子表的行是通過在表名后面附加 * 實現(xiàn)的 這種老式性質(zhì)可以通過命令 SET SQL_Inheritance TO OFF; 獲取FROM 項也可以是一個加了圓括弧的子查詢 (請注意子查詢需要一個別名子句!) 這個特性非常實用,因為這是在一條查詢中獲得多層分組, 聚集,或者排序的唯一方法最后,F(xiàn)ROM 項可以是一條 JOIN 子句,它把兩個簡單的 FROM 項組合 在一起(必要時使用圓括弧來描述嵌套順序)CROSS JOIN 或 INNER JOIN 是簡單的迪卡爾積, 和你在頂層 FROM 里列出這兩個項得到的一樣 CROSS JOIN 等效于 INNER JOIN
12、 ON (TRUE),也就是說, 不會有任何行被條件刪除這些連接類型只是符號上的便利, 因為它們做得一點不比你只利用 FROM 和 WHERE 來的多LEFT OUTER JOIN 返回所有符合條件的迪卡爾積 (也就是說,所有符合它的 ON 條件的組合了的行),另外加上 所有沒有右手邊行符合 ON 條件的左手邊表中的行 這樣的左手邊行通過向右手邊行插入 NULL 擴展為全長 請注意,當判斷哪些行合格的時候,只考慮 JOIN 自己的 ON 或 USING 然后才考慮外層的 ON 或 WHERE 條件相反, RIGHT OUTER JOIN 返回所有連接的行, 另外加上所有未匹配右手邊行(左手邊插
13、入 NULL 擴展為全長) 這個字句只是符號方便,因為你可以調(diào)換左右輸入而改用 LEFT OUTER JOINFULL OUTER JOIN 返回所有連接行,加上所有未匹配的左手邊行 (右邊插入 NULL 擴展為全長), 再加上所有未匹配的右手邊行(左手邊插入 NULL 擴展為全長)除了CROSS JOIN 以外的所有 JOIN 類型,你必須寫 ON join_condition, USING ( join_column_list ), 和 NATURAL 中的一個 大多數(shù)情況下會是 ON:你可以寫涉及兩個連接表的任何條件表達式 USING 字段列表 (a, b, .) 是 ON 條件 lef
14、t_table.a = right_table.a AND left_table.b = right_table.b . 的縮寫 另外,USING 假設(shè)兩對等式中只有一個包含在 JOIN 輸出中,而不是兩個 NATURAL 是提及表中所有相似名字字段的 USING 列表的縮寫WHERE 子句可選的 WHERE 條件有如下常見的形式:WHERE boolean_exprboolean_expr 可以包含任意個得出布爾值的表達式。通常表達式會是expr cond_op expr或log_op expr這里 cond_op 可以是: =,<,<=, >,>= 或 <&g
15、t;, 或條件操作符象 ALL,ANY,IN,LIKE 等,或者用戶定義的操作符,而 log_op 可以為 : AND,OR,NOT SELECT 將忽略所有 WHERE 條件不為 TRUE 的行GROUP BY 子句GROUP BY 聲明一個分了組的表,該表源于應(yīng)用使用下面的子句:GROUP BY expression , .GROUP BY 將把所有在組合了的列上共享同樣的值的行壓縮成一行。 如果存在聚集函數(shù),這些聚集函數(shù)將計算每個組的所有行,并且為 每個組計算一個獨立的值(如果沒有 GROUP BY, 聚集函數(shù)對選出的所有行計算出一個數(shù)值)。存在 GROUP BY 時,除了在聚集函數(shù) 里
16、面,SELECT 輸出表達式對任何非組合列的引用都是非法的, 因為對一個非組合列會有多于一個可能的返回值。一個在 GROUP BY 里面的條目還可以是輸出列的名稱或者序號 (SELECT 表達式), 或者是一個從輸入列的數(shù)值形成的任意表達式當存在語義模糊時, 一個 GROUP BY 名稱將被解釋成一個輸入列/字段名稱而不是一個輸出列/字段名稱HAVING 子句可選的 HAVING 條件有如下形式:HAVING boolean_expr這里 boolean_expr 和為 WHERE 子句里聲明的相同HAVING 子句聲明一個從前面的子句的結(jié)果集中去除了一些不符合 boolean_expr. 組
17、后分組的表HAVING 與 WHERE 不同:WHERE 在應(yīng)用 GROUP BY 之前過濾出單獨的行,而 HAVING 過濾由 GROUP BY 創(chuàng)建的行在 boolean_expr 里引用的每個列/字段應(yīng)該清晰地指明一個組的列/字段, 除非引用在一個聚集函數(shù)里。ORDER BY 子句ORDER BY expression ASC | DESC | USING operator , .一個 ORDER BY 項可以是一個輸出列(SELECT 表達式)的名字或者序數(shù), 或者它也可以是任何來自輸入列值形成的表達式 在出現(xiàn)混淆的場合下,ORDER BY 名字將被解釋成一個輸出名字序數(shù)指的是列/字段
18、按順序(從左到右)的位置 這個特性可以使得對沒有一個合適名稱的列/字段的排序成為可能 這一點可能永遠沒有用, 因為總是可以通過AS 子句給一個要計算的列/字段賦予一個名稱,例如:SELECT title, date_prod + 1 AS newlen FROM films ORDER BY newlen;還可以 ORDER BY 任意表達式(一個對 SQL92 的擴展), 包括那些沒有出現(xiàn)在 SELECT 結(jié)果列表里面的域。 因此下面的語句現(xiàn)在是合法的:SELECT name FROM distributors ORDER BY code;這個特性的一個局限就是應(yīng)用于 UNION,INTER
19、SECT,或者 EXCEPT 查詢 的 ORDER BY 子句只能在一個輸出字段名或者數(shù)字上聲明, 而不能在一個表達式上聲明請注意如果一個 ORDER BY 條目是一個匹配結(jié)果列和輸入列的簡單名稱, ORDER BY 將把它解釋成結(jié)果列名稱 這和 GROUP BY 在同樣情況下做的選擇正相反 這樣的不一致是由 SQL92 標準強制的我們可以給ORDER BY 子句里每個列/字段加一個關(guān)鍵字 DESC (降序)或 ASC(升序)如果不聲明,ASC 是缺省 我們還可以聲明一個排序操作符來實現(xiàn)排序。 ASC 等效于使用 '<' 而 DESC 等效于使用 '>
20、9;。在一個域里,空值排序時排在其它數(shù)值前面換句話說,升序排序時, 空值排在末尾,而降序排序時空值排在開頭UNION 子句?123table_query UNION ALL table_query ORDER BY expression ASC | DESC | USING operator , . LIMIT count | ALL OFFSET | , start 這里 table_query 表明任何沒有 ORDER BY,F(xiàn)OR UPDATE,或者 LIMIT 子句的選擇表達式 (如果用圓括弧包圍,ORDER BY 和 LIMIT 可以放在子表達式里 如果沒有圓括弧,這些子句將交給 U
21、NION 的結(jié)果使用, 而不是給它們右手邊的輸入表達式)UNION 操作符的結(jié)果集是那些涉及到的所有查詢所返回結(jié)果的集合。 兩個做為 UNION 直接操作數(shù)的 SELECT 必須生成相同數(shù)目的字段, 并且對應(yīng)的字段必須有兼容的數(shù)據(jù)類型。缺省地,UNION 的結(jié)果不包含任何重復(fù)的行,除非聲明了 ALL 子句 ALL 制止了消除重復(fù)的動作同一 SELECT 語句中的多個 UNION 操作符是從左向右計算的, 除非用圓括弧進行了標識)目前,F(xiàn)OR UPDATE 不能在 UNION 的結(jié)果或輸入中聲明INTERSECT 子句?1234table_query INTERSECT ALL table_qu
22、ery ORDER BY expression ASC | DESC | USING operator , . LIMIT count | ALL OFFSET start 這里 table_query 聲明任何沒有 ORDER BY,F(xiàn)OR UPDATE,或者 LIMIT 子句的選擇表達式。INTERSECT 類似 UNION,只不過它給出在兩個查詢中都出現(xiàn)的行, 而不是兩個查詢的所有行INTERSECT 的結(jié)果不包含任何重復(fù)行,除非你聲明了 ALL 選項 用了 ALL 以后,一個在 L 里有 m 個重復(fù)而在 R 里有 n 個重復(fù) 的行將出現(xiàn) min(m,n) 次除非用圓括號指明順序, 同一
23、 SELECT 語句中的多個 INTERSECT 操作符是從左向右計算的。 INTERSECT 比 UNION 綁定得更緊 - 也就是說 A UNION B INTERSECT C 將讀做 A UNION (B INTERSECT C),除非你用圓括弧聲明EXCEPT 子句?1234table_query EXCEPT ALL table_query ORDER BY expression ASC | DESC | USING operator , . LIMIT count | ALL OFFSET start 這里 table_query 聲明任何沒有 ORDER BY,F(xiàn)OR UPDAT
24、E,或者 LIMIT 子句的選擇表達式。EXCEPT 類似于 UNION,只不過 EXCEPT 給出存在于左邊查詢輸出而不存在于右邊查詢輸出的行。EXCEPT 的結(jié)果不包含任何重復(fù)的行,除非聲明了 ALL 選項 使用ALL時,一個在 L 中有 m 個重復(fù)而在 R 中有 n 個重復(fù)的行 將出現(xiàn) max(m-n,0) 次除非用圓括弧指明順序, 同一 SELECT 語句中的多個 EXCEPT 操作符是從左向右計算的。 EXCEPT 和 UNION 綁定級別相同LIMIT 子句LIMIT count | ALL OFFSET start這里 count 聲明返回的最大行數(shù),而 start 聲明開始返回
25、行之前忽略的行數(shù)。LIMIT 允許你檢索由查詢其他部分生成的行的某一部分。 如果給出了限制計數(shù),那么返回的行數(shù)不會超過哪個限制。 如果給出了一個偏移量,那么開始返回行之前會忽略那個數(shù)量的行。在使用 LIMIT 時, 一個好習慣是使用一個 ORDER BY 子句把結(jié)果行限制成一個唯一的順序。 否則你會得到無法預(yù)料的查詢返回的子集 - 你可能想要第十行到第二十行, 但以什么順序?除非你聲明 ORDER BY,否則你不知道什么順序。從 PostgreSQL 7.0 開始, 查詢優(yōu)化器在生成查詢規(guī)劃時把 LIMIT 考慮進去了, 所以你很有可能因給出的 LIMIT 和 OFFSET 值不同而得到不同的
26、 規(guī)劃(生成不同的行序)。 因此用不同的 LIMIT/OFFSET 值選擇不同的查詢結(jié)果的子集 將不會產(chǎn)生一致的結(jié)果, 除非你用 ORDER BY 強制生成一個可預(yù)計的結(jié)果順序。 這可不是毛病;這是 SQL 生來的特點,因為除非用了 ORDER BYE 約束順序, SQL 不保證查詢生成的結(jié)果有任何特定的順序。用法將表 films 和表 distributors 連接在一起:?1234567891011121314SELECT f.title, f.did, , f.date_prod, f.kindFROM distributors d, films fWHERE f.did =
27、 d.did title | did | name | date_prod | kind-+-+-+-+-The Third Man | 101 | British Lion | 1949-12-23 | DramaThe African Queen | 101 | British Lion | 1951-08-11 | RomanticUne Femme est une Femme | 102 | Jean Luc Godard | 1961-03-12 | RomanticVertigo | 103 | Paramount | 1958-11-14 | ActionBecket
28、| 103 | Paramount | 1964-02-03 | Drama48 Hrs | 103 | Paramount | 1982-10-22 | ActionWar and Peace | 104 | Mosfilm | 1967-02-12 | DramaWest Side Story | 105 | United Artists | 1961-01-03 | Musical15161718192021222324Bananas | 105 | United Artists | 1971-07-13 | ComedyYojimbo | 106 | Toho | 1961-06-16
29、 | DramaThere's a Girl in my Soup | 107 | Columbia | 1970-06-11 | ComedyTaxi Driver | 107 | Columbia | 1975-05-15 | ActionAbsence of Malice | 107 | Columbia | 1981-11-15 | ActionStoria di una donna | 108 | Westward | 1970-08-15 | RomanticThe King and I | 109 | 20th Century Fox | 1956-08-11 | Mus
30、icalDas Boot | 110 | Bavaria Atelier | 1981-11-11 | DramaBed Knobs and Broomsticks | 111 | Walt Disney | | Musical(17 rows)統(tǒng)計用kind 分組的所有電影和組的列/字段的 len(長度)的和:?12345678910SELECT kind, SUM(len) AS total FROM films GROUP BY kind; kind | total-+-Action | 07:34Comedy | 02:58Drama | 14:28Musical | 06:
31、42Romantic | 04:38(5 rows)統(tǒng)計所有電影(films),組的列/字段 len(長度)的和,用 kind 分組并且顯示小于5小時的組總和:?12345678910SELECT kind, SUM(len) AS totalFROM filmsGROUP BY kindHAVING SUM(len) < INTERVAL '5 hour' kind | total-+-Comedy | 02:58Romantic | 04:38(2 rows)下面兩個例子是根據(jù)第二列 (name)的內(nèi)容對單獨的結(jié)果排序的經(jīng)典的方法:?12345678910S
32、ELECT * FROM distributors ORDER BY name;SELECT * FROM distributors ORDER BY 2; did | name-+-109 | 20th Century Fox110 | Bavaria Atelier101 | British Lion107 | Columbia102 | Jean Luc Godard111213141516171819113 | Luso films104 | Mosfilm103 | Paramount106 | Toho105 | United Artists111 | Walt Disn
33、ey112 | Warner Bros.108 | Westward(13 rows)這個例子演示如何獲得表 distributors 和 actors的連接, 只將每個表中以字母 W 開頭的取出來 因為只取了不相關(guān)的行,所以關(guān)鍵字 ALL 被省略了:?123456789101112131415161718192021222324distributors: actors:did | name id | name-+- -+-108 | Westward 1 | Woody Allen111 | Walt Disney 2 | Warren Beatty112 | Warner Bros. 3
34、| Walter Matthau. . SELECT FROM distributorsWHERE LIKE 'W%'UNIONSELECT FROM actorsWHERE LIKE 'W%' name-Walt DisneyWalter MatthauWarner Bros.Warren BeattyWestwardWoody Allen兼容性擴展PostgreSQL 允許我們在一個查詢里省略 FROM 子句。 這個特性是從
35、最初的 PostQuel 查詢語言里保留下來的 它的最直接用途就是計算簡單的常量表達式的結(jié)果:SELECT 2+2;?column?-4其它有些 DBMS 不能這么做,除非引入一個單行的偽表做 select 的 from這個特性的另外一個不太明顯的用途是把一個普通的從一個或多個表的 select 縮寫:SELECT distributors.* WHERE = 'Westward'did | name-+-108 | Westward這樣也可以運行是因為我們給查詢中引用了但沒有在 FROM 中提到的每個表都加了一個隱含的 FROM 項盡管這是
36、個很方便的寫法,但它卻容易誤用比如,下面的查詢SELECT distributors.* FROM distributors d;可能就是個錯誤;用戶最有可能的意思是SELECT d.* FROM distributors d;而不是下面的他實際上得到的無約束的連接SELECT distributors.* FROM distributors d, distributors distributors;為了幫助檢測這種錯誤, PostgreSQL 7.1 以及以后的版本將在你使用一條即有隱含 FROM 特性又有明確的 FORM 子句的查詢的時候給出警告SQL92SELECT 子句在 SQL92
37、規(guī)范里, 可選的關(guān)鍵字 "AS" 是多余的,可以忽略掉而不對語句產(chǎn)生任何影響 PostgreSQL 分析器在重命名列/字段時需要這個關(guān)鍵字, 因為類型擴展的特性會導(dǎo)致上下文語意不清 不過,"AS" 在 FROM 項里是可選的DISTINCT ON 語法不是SQL92 的標準。 LIMIT 和 OFFSET 也不是。在 SQL92里, 一個 ORDER BY 子句只可以使用在結(jié)果列名稱或者序號上, 而 GROUP BY 子句只能用于輸入列/字段上 PostgreSQL 把這 兩個子句都擴展為允許另一種選擇(但是如果出現(xiàn)沖突則使用標準的解釋) Postgre
38、SQL 還允許兩個子句聲明任意的表達式 請注意,在表達式里出現(xiàn)的名稱將總是被當做輸入列/字段的名稱, 而不是結(jié)果列/字段名稱?1234567UNION/INTERSECT/EXCEPT 子句SQL92 的 UNION/INTERSECT/EXCEPT 語法允許一個附加的 CORRESPONDING BY 選項: table_query UNION ALLCORRESPONDING BY (column ,.)table_queryCORRESPONDING BY 目前還不被 PostgreSQL支持 SQL語句(inner join,left out join,
39、right out join三者的不同用法)jion 語句有三種,inner join, left outer join 和 right outer join 都可以簡寫,分別為jion,left join,right jion。jion語句可以用來組合兩個表中的記錄,只要在公共字段之中有相符的值即可,該語句聯(lián)合兩個表查詢得到的結(jié)果是可以添加新的數(shù)據(jù),可以把它看成將兩個具有相關(guān)內(nèi)容的表聯(lián)接在一起新生成的表,而一般的select 語句沒有這個功能。1) 內(nèi)連接,inner join . on語句格式:FROM (表1 INNER JOIN 表2 ON 表1.字段號=表2.字段號) INNER J
40、OIN 表3 ON 表1.字段號=表3.字段號) INNER JOIN 表4 ON Member.字段號=表4.字段號) INNER JOIN 表XON Member.字段號=表X.字段號例子:?1234567SELECT * FROM (Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity O
41、N Member.MemberIdentity=MemberIdentity.MemberIdentity) INNER JOIN Wedlock ON Member.Wedlock=Wedlock.Wedlock ORDER BY MemberDate DESC內(nèi)連接的功能是,把兩個表相關(guān)聯(lián)的記錄列出來,必須是相關(guān)聯(lián)的記錄。2) 左外連接,left outer join . on語句格式:FROM 表名1 LEFT JOIN 表名2ON 表名1.字段A 關(guān)系運算符表名2.字段B其實LEFT JOIN 的功能就是將LEFT左邊的表名1中的所有記錄全部保留,而將右邊的表名2中的字段B與
42、表名1.字段A相對應(yīng)的記錄顯示出來(當使用SELECT * 時)。而RIGHT JOIN和LEFT JOIN 相反。外連接的功能是,把LEFT左邊的表中的所有記錄保留,而右邊表只保留相關(guān)聯(lián)的記錄,也就是先執(zhí)行一次INNER JOIN,然后把LEFT左邊的表中的與右邊表沒有任何關(guān)聯(lián)的記錄也保留,而右邊表的字段為null.使用左向外聯(lián)接假設(shè)在 city 列上聯(lián)接 authors 表和 publishers 表。結(jié)果只顯示在出版商所在城市居住的作者(本例中為 Abraham Bennet 和 Cheryl Carson)。若要在結(jié)果中包括所有的作者,而不管出版商是否住在同一個城市,請使用 SQL-9
43、2 左向外聯(lián)接。下面是 Transact-SQL 左向外聯(lián)接的查詢和結(jié)果:?12345USE pubsSELECT a.au_fname, a.au_lname, p.pub_nameFROM authors a LEFT OUTER JOIN publishers pON a.city = p.cityORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC【也就是先把authors表中的所有數(shù)據(jù)列出,由于authors表中沒有pub_name字段,所以為null 】下面是結(jié)果集:?1234567891011121314151617181
44、92021222324252627au_fname au_lname pub_name- - -Reginald Blotchet-Halls NULLMichel DeFrance NULLInnes del Castillo NULLAnn Dull NULLMarjorie Green NULLMorningstar Greene NULLBurt Gringlesby NULLSheryl Hunter NULLLivia Karsen NULLCharlene Locksley NULLStearns MacFeather NULLHeather McBadden NULLMicha
45、el O'Leary NULLSylvia Panteley NULLAlbert Ringer NULLAnne Ringer NULLMeander Smith NULLDean Straight NULLDirk Stringer NULLJohnson White NULLAkiko Yokomoto NULLAbraham Bennet Algodata InfosystemsCheryl Carson Algodata Infosystems (23 row(s) affected)不管是否與 publishers 表中的 city 列匹配,LEFT OUTER
46、JOIN 均會在結(jié)果中包含 authors 表的所有行。注意:結(jié)果中所列的大多數(shù)作者都沒有相匹配的數(shù)據(jù),因此,這些行的pub_name 列包含空值。 3) 右外連接,right outer join . on與 left join左右相反。假設(shè)在 city 列上聯(lián)接 authors 表和 publishers 表。結(jié)果只顯示在出版商所在城市居住的作者(本例中為 Abraham Bennet 和 Cheryl Carson)。SQL-92 右向外聯(lián)接運算符RIGHT OUTER JOIN 指明:不管第一個表中是否有匹配的數(shù)據(jù),結(jié)果將包含第二個表中的所有行。若要在結(jié)果中包括所有的出版商,
47、而不管城市中是否還有出版商居住,請使用 SQL-92 右向外聯(lián)接。下面是 Transact-SQL 右向外聯(lián)接的查詢和結(jié)果:?12345USE pubsSELECT a.au_fname, a.au_lname, p.pub_nameFROM authors AS a RIGHT OUTER JOIN publishers AS pON a.city = p.cityORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC下面是結(jié)果集:?12345678910111213au_fname au_lname pub_name- - -Abra
48、ham Bennet Algodata InfosystemsCheryl Carson Algodata InfosystemsNULL NULL Binnet & HardleyNULL NULL Five Lakes PublishingNULL NULL GGG&GNULL NULL Lucerne PublishingNULL NULL New Moon BooksNULL NULL Ramona PublishersNULL NULL Scootney Books (9 row(s) affected)使用謂詞(如將聯(lián)接與常量比較)可以進一步限制外聯(lián)接。下
49、例包含相同的右向外聯(lián)接,但消除銷售量低于 50 本的書籍的書名:?1234USE pubsSELECT s.stor_id, s.qty, t.titleFROM sales s RIGHT OUTER JOIN titles tON s.title_id = t.title_id56AND s.qty > 50ORDER BY s.stor_id ASC4) 全連接,full join . on(不常使用,只能用于outer)功能結(jié)合了以上三種聯(lián)軍,先執(zhí)行一次inner join,然后把兩個表的多余字段都保留,但連接的對應(yīng)字段為null.如果想將幾個表聯(lián)接起來,在JOIN操作中我們可以
50、進行嵌套操作,有三個表:表1、表2、表3,現(xiàn)在將三個表聯(lián)接起來:FROM (表1 INNER JOIN 表2 ON 表1.序號=表2.序號)INNER JOIN 表3 ON 表1.序號=表3.序號使用完整外部聯(lián)接若要通過在聯(lián)接結(jié)果中包括不匹配的行保留不匹配信息,請使用完整外部聯(lián)接。Microsoft? SQL Server? 2000 提供完整外部聯(lián)接運算符 FULL OUTER JOIN,不管另一個表是否有匹配的值,此運算符都包括兩個表中的所有行。假設(shè)在 city 列上聯(lián)接 authors 表和 publishers 表。結(jié)果只顯示在出版商所在城市居住的作者(本例中為 Abraham Bennet 和 Cheryl Carson)。SQL-92 FULL OUTER JOIN 運算符指明:
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 今天陜西省高考語文作文題
- 生態(tài)保護與生態(tài)農(nóng)業(yè)推廣考核試卷
- 十八項護理核心制度
- 湖北省武漢市2023~2024學(xué)年高一數(shù)學(xué)下學(xué)期5月聯(lián)考試題含答案
- 陜西省咸陽市高新一中2024?2025學(xué)年高一下學(xué)期第五次質(zhì)量檢測(3月) 數(shù)學(xué)試卷(含解析)
- 2025年濟南歷下區(qū)八年級第二學(xué)期數(shù)學(xué)期中考試試題(含答案)
- 江蘇省無錫市港下中學(xué)2025年初三下期中數(shù)學(xué)試題含解析
- 西安交通大學(xué)城市學(xué)院《語言學(xué)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西省上饒市民校考試聯(lián)盟婺源紫陽中學(xué)2025年高三第四次聯(lián)考生物試題含解析
- 上海市格致初級中學(xué)2025年高三考前模擬英語試題含解析
- FANUC發(fā)那科機器人常規(guī)點檢保養(yǎng)
- 醫(yī)藥有限公司公司獎懲制度
- 微電子學(xué)概論全套課件
- 實驗室氣瓶使用記錄
- DB37T 2974-2017 工貿(mào)企業(yè)安全生產(chǎn)風險分級管控體系細則
- DB13(J)∕T 8054-2019 市政基礎(chǔ)設(shè)施工程施工質(zhì)量驗收通用標準
- 混雜纖維增強的復(fù)合材料介紹、特點和應(yīng)用
- 星巴克哈佛商學(xué)院案例
- 工程項目內(nèi)部控制流程圖表
- 強夯試夯報告(共12頁)
- 骨優(yōu)導(dǎo)介紹PPT
評論
0/150
提交評論