使用 JOIN 查詢
DECLARE @TableA table( id int, name nvarchar(20) )
DECLARE @TableB table( id int, name nvarchar(20) )
insert @TableA values (1,'A'),(2,'B'),(3,'C'),(4,'D')
insert @TableB values (1,'E'),(2,'B'),(3,'F'),(4,'C')
select * from @TableA
select * from @TableB
--產生是A和B的交集的資料列
SELECT * FROM @TableA t1 INNER JOIN @TableB t2 ON t1.name = t2.name
--FULL JOIN 即為
LEFT JOIN(A) 與 RIGHT JOIN(B) 的聯集。 有時候也可以利用它來找尋不相匹配的資料,則會以null做為值。
SELECT * FROM @TableA t1 FULL OUTER JOIN @TableB t2 ON t1.name = t2.name
--Left outer join 產生表A的完全集,而B表中匹配的則有值,沒有匹配的則以null值取代
SELECT * FROM @TableA t1 LEFT OUTER JOIN @TableB t2 ON t1.name = t2.name
--回傳的是右邊資料表中所有資料列,以及另一邊資料表中符合 join 條件中匹配的資料列傳回NULL值
SELECT * FROM @TableA t1 RIGHT OUTER JOIN @TableB t2 ON t1.name = t2.name
--WHERE t1.id IS
null
--UNION 操作符用於合併兩個或多個 SELECT 語句的結果集
--交叉連接為兩個資料表間的笛卡兒乘積
(Cartesian product),兩個資料表在 Join 時,不能指定任何條件,
--它會回傳兩個資料表中所有欄位可能的排列組合出來,資料很可觀,要小心使用。
--請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料類型。同時,每條
SELECT 語句中的列的順序必須相同。
--UNION 只選取記錄,而UNION ALL會列出所有記錄。
SELECT name FROM @TableA UNION SELECT name FROM @TableB
--把表A和表B的資料進行一個N*M的組合,即笛卡爾積
--一般來說,我們很少用到這個語法。但是我們得小心,如果不是使用嵌套的select語句,一般系統都會產生笛卡爾乘積然再做過濾。
--這是對於性能來說是非常危險的,尤其是表很大的時候。
--如果有where的時候,可以使用:
SELECT * FROM @TableA CROSS JOIN @TableB
留言