一般我们连接两张表时,都是select xxx,xx from x1,x2 where x1.a=x2.a。其实数据库还有4中join操作。
例如:表1:
s_id | name | sex |
1 | 张三 | 男 |
2 | 李四 | 女 |
4 | 王五 | 男 |
表2:
c_id | id | name |
1 | 1 | 11111 |
2 | 2 | 22222 |
3 | 3 | 33333 |
4 | 2 | 44444 |
1.连接查询
select s.name s_name,s.sex s_sex,c.name c_name from student s,class c where s.s_id=c.s_id
结果:
s_name |
s_sex |
c_name |
张三 | 男 | 11111 |
李四 | 女 | 22222 |
李四 | 男 | 44444 |
2.inner join
select s.name s_name,s.sex s_sex,c.name c_name from student s inner join class c on s.s_id=c.s_id
结果:
s_name | s_sex | c_name |
张三 | 男 | 11111 |
李四 | 女 | 22222 |
李四 | 女 | 44444 |
可以看出inner join 和我们直接连接查询没什么差别!
3.left join
select s.name s_name,s.sex s_sex,c.name c_name from student s left join class c on s.s_id=c.s_id
结果:
s_name | s_sex | c_name |
张三 | 男 | 11111 |
李四 | 女 | 22222 |
李四 | 女 | 44444 |
王五 | 男 |
4.right join
select s.name s_name,s.sex s_sex,c.name c_name from student s right join class c on s.s_id=c.s_id
结果:
s_name |
s_sex |
c_name |
张三 | 男 | 11111 |
李四 | 女 | 22222 |
33333 | ||
李四 | 女 | 44444 |
5.full join
select s.name s_name,s.sex s_sex,c.name c_name from student s full join class c on s.s_id=c.s_id
结果:
s_name | s_sex | c_name |
张三 | 男 | 11111 |
李四 | 女 | 22222 |
33333 | ||
王五 | 男 | |
李四 | 女 | 44444 |
综上可以看出:
普通连接和 inner join连接没什么差别!
left join:左表所有行都输出,如果找不到右表对应字段,即该字段为null
left join:右表所有行都输出,如果找不到左表对应字段,即该字段为null
left join:左右表行全部对应输出,如果找不到对应字段,即为null
原文地址:https://www.cnblogs.com/Somuns/p/9160355.html
时间: 2024-11-08 23:04:23