主题: SQL的inner join、left join、right join、full outer join、union、union all的学习。
Table A和Table B表如下所示:
id | name |
1000 | 猫 |
1001 | 狗 |
1002 | 苹果 |
1003 | 香蕉 |
id | name |
1004 | 猫 |
1005 | 狗 |
1006 | 栗子 |
1007 | 西瓜 |
1. inner join(产生TableA和TableB的交集)
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name
id | name | id | name |
1000 | 猫 | 1004 | 猫 |
1001 | 狗 | 1005 | 狗 |
2. full [outter] join(产生TableA和TableB的并集)
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
id | name | id | name |
1000 | 猫 | 1004 | 猫 |
1001 | 狗 | 1005 | 狗 |
1002 | 苹果 | null | null |
1003 | 香蕉 | null | null |
null | null | 1006 | 栗子 |
null | null | 1007 | 西瓜 |
对于没有匹配的记录,则会以null做为值。
3. left [outter] join(产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代)
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
id | name | id | name |
1000 | 猫 | 1004 | 猫 |
1001 | 狗 | 1005 | 狗 |
1002 | 苹果 | null | null |
1003 | 香蕉 | null | null |
right [outer] join, 是以后面的表为基础,与left [outter] join 类似。
4. union 、 union all(UNION 操作符用于合并两个或多个 SELECT 语句的结果集)
SELECT name FROM TableA UNION SELECT name FROM TableB
name |
猫 |
狗 |
苹果 |
香蕉 |
栗子 |
西瓜 |
SELECT name FROM TableA UNION ALL SELECT name FROM TableB
name |
猫 |
狗 |
苹果 |
香蕉 |
猫 |
狗 |
栗子 |
西瓜 |
SELECT * FROM TableA UNION SELECT * FROM TableB
id | name |
1000 | 猫 |
1001 | 狗 |
1002 | 苹果 |
1003 | 香蕉 |
1004 | 猫 |
1005 | 狗 |
1006 | 栗子 |
1007 | 西瓜 |