1.a. 並集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2b. 交集JOIN SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.namec. 差集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 Statement2b. UNION ALL SQL Statement1 UNION ALL SQL Statement23.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