msyql-join

一. join

有A和B,两张表,字段如下:

id name       id  name
-- ----       --  ----
1  Pirate     1   Rutabaga
2  Monkey     2   Pirate
3  Ninja      3   Darth Vader
4  Spaghetti  4   Ninja

下面讨论两张表的各种连接:

1.1 Inner join

产生的结果集中,是A和B的交集

SELECT * FROM TableA INNER JOIN TableB
ON TableA.name = TableB.name
id  name       id   name
--  ----       --   ----
1   Pirate     2    Pirate
3   Ninja      4    Ninja

1.2 Full outer join

Full outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

SELECT * FROM TableA FULL OUTER JOIN TableB
ON TableA.name = TableB.name
id    name       id    name
--    ----       --    ----
1     Pirate     2     Pirate
2     Monkey     null  null
3     Ninja      4     Ninja
4     Spaghetti  null  null
null	null	1     Rutabaga
null	null	3     Darth Vader

1.3 Left outer join

Left outer join 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
id  name       id    name
--  ----       --    ----
1   Pirate     2     Pirate
2   Monkey		null	null
3   Ninja      4     Ninja
4   Spaghetti	null	null

1.4 LEFT OUTER JOIN ... 结合where

产生在A表中有而在B表中没有的集合。

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name 
							= TableB.name WHERE TableB.id IS null
id  name       id     name
--  ----       --     ----
2   Monkey	null	null
4   Spaghetti	null	null

1.5 FULL OUTER JOIN ... 结合where

产生A表和B表都没有出现的数据集。

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name 
			= TableB.name WHERE TableA.id IS null OR TableB.id IS null
id    name       id    name
--    ----       --    ----
2     Monkey	null	null
4     Spaghetti	null	null
null	null	1     Rutabaga
null	null	3     Darth Vader

1.6 cross join笛卡尔积

SELECT * FROM TableA CROSS JOIN TableB
posted @ 2016-08-08 20:51  zhangshihai1232  阅读(165)  评论(1)    收藏  举报