假设有两张表,分别为表a和表b,
a:
id name nick_name
1 张三 张三
2 李四 李
3 王五 王五
b:
id age a_id
1 23 1
2 56 3
3 18 4
内连接:至少一个表中匹配即可,相当于取a和b的交集
SELECT a.name,b.age FROM a INNER JOIN b ON a.id = b.a_id;
结果:
name age
张三 23
王五 56
左外连接:返回左表里所有的行,即使右表里没有匹配
SELECT a.name,b.age FROM a LEFT JOIN b ON a.id = b.a_id;
name age
张三 23
李四 null
王五 56
右外连接:返回右表里所有的行,即使左表里没有匹配
SELECT a.name,b.age FROM a RIGHT JOIN b ON a.id = b.a_id;
name age
张三 23
null 56
王五 56
全外连接:只要一个表里有即可,相当于取a,b的并集
SELECT * FROM a FULL JOIN b;
id name id age a_id
1 张三 1 23 1
2 李四 1 23 1
3 王五 1 23 1
1 张三 2 56 3
2 李四 2 56 3
3 王五 2 56 3
1 张三 3 18 5
2 李四 3 18 5
3 王五 3 18 5
自连接:对a表进行自连接,即把一个表当做两个表来用
SELECT a1.name,a1.nick_name FROM a a1 INNER JOIN a a2 ON a1.name = a2.nick_name;
name nick_name
张三 张三
王五 王五