程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> SQL語句的並集UNION 交集JOIN(內連接,外連接)等介紹,unionjoin

SQL語句的並集UNION 交集JOIN(內連接,外連接)等介紹,unionjoin

編輯:更多數據庫知識

SQL語句的並集UNION 交集JOIN(內連接,外連接)等介紹,unionjoin


1. a. 並集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2 b. 交集JOIN SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name c. 差集NOT IN SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2) d. 笛卡爾積 SELECT * FROM table1 CROSS JOIN table2 與 SELECT * FROM table1,table2相同 2. SQL中的UNION 與UNION ALL的區別是,前者會去除重復的條目,後者會仍舊保留。 a. UNION SQL Statement1 UNION SQL Statement2 b. UNION ALL SQL Statement1 UNION ALL SQL Statement2 3. SQL中的各種JOIN SQL中的連接可以分為內連接,外連接,以及交叉連接(即是笛卡爾積) a. 交叉連接CROSS JOIN 如果不帶WHERE條件子句,它將會返回被連接的兩個表的笛卡爾積,返回結果的行數等於兩個表行數的乘積; 舉例 SELECT * FROM table1 CROSS JOIN table2 等同於 SELECT * FROM table1,table2 一般不建議使用該方法,因為如果有WHERE子句的話,往往會先生成兩個表行數乘積的行的數據表然後才根據WHERE條件從中選擇。 因此,如果兩個需要求交際的表太大,將會非常非常慢,不建議使用。 b. 內連接INNER JOIN 如果僅僅使用 SELECT * FROM table1 INNER JOIN table2 沒有指定連接條件的話,和交叉連接的結果一樣。 但是通常情況下,使用INNER JOIN需要指定連接條件。 -- 等值連接(=號應用於連接條件, 不會去除重復的列) SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column -- 不等連接(>,>=,<,<=,!>,!<,<>) 例如 SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column<>b.column -- 自然連接(會去除重復的列) c. 外連接OUTER JOIN 首先內連接和外連接的不同之處: 內連接如果沒有指定連接條件的話,和笛卡爾積的交叉連接結果一樣,但是不同於笛卡爾積的地方是,沒有笛卡爾積那麼復雜要先生成行數乘積的數據表,內連接的效率要高於笛卡爾積的交叉連接。 指定條件的內連接,僅僅返回符合連接條件的條目。外連接則不同,返回的結果不僅包含符合連接條件的行,而且包括左表(左外連接時), 右表(右連接時)或者兩邊連接(全外連接時)的所有數據行。 1)左外連接LEFT [OUTER] JOIN 顯示符合條件的數據行,同時顯示左邊數據表不符合條件的數據行,右邊沒有對應的條目顯示NULL 例如 SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column 2)右外連接RIGHT [OUTER] JOIN 顯示符合條件的數據行,同時顯示右邊數據表不符合條件的數據行,左邊沒有對應的條目顯示NULL 例如 SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column 3)全外連接顯示符合條件的數據行,同時顯示左右不符合條件的數據行,相應的左右兩邊顯示NULL



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved